1
0
mirror of https://github.com/wfjm/w11.git synced 2026-04-07 22:50:38 +00:00

Miscellaneous fixes and changes

- Makefile: add all_tcl to all; use njobihtm
- rlink_core: BUGFIX: correct re-transmit after nak aborts
- tb_rlink_stim.dat: start section B (error aborts) and C (retransmit)
- ticonv_rri: use 'rlc rawwblk' instead of 'rlc rawio -wblk'
- rbmoni/test_regs.tcl: add data/addr logic tests
This commit is contained in:
Walter F.J. Mueller
2017-05-07 18:57:45 +02:00
parent 7977206a8b
commit 9e309c81b9
6 changed files with 265 additions and 50 deletions

View File

@@ -1,4 +1,4 @@
# $Id: Makefile 810 2016-10-02 16:51:12Z mueller $
# $Id: Makefile 893 2017-05-05 17:43:53Z mueller $
#
# 'Meta Makefile' for whole retro project
# allows to make all synthesis targets
@@ -6,6 +6,7 @@
#
# Revision History:
# Date Rev Version Comment
# 2017-05-01 891 1.2.7 add all_tcl to all; use njobihtm
# 2016-10-01 810 1.2.6 move component tests to SIM_viv when vivado used
# 2016-07-10 785 1.2.5 re-enable rtl/sys_gen/tst_sram/nexys4 (ok in 2016.2)
# 2016-06-05 772 1.2.4 add vmfsum,imfsum targets
@@ -141,13 +142,13 @@ SIM_viv += rtl/sys_gen/w11a/arty_bram/tb
default :
@echo "No default action defined:"
@echo " for VHDL simulation/synthesis use:"
@echo " make -j `nproc` all"
@echo " make -j `nproc` all_ise"
@echo " make -j `nproc` all_viv"
@echo " make -j `nproc` all_sim_ise"
@echo " make -j `nproc` all_syn_ise"
@echo " make -j `nproc` all_sim_viv"
@echo " make -j 1 all_syn_viv"
@echo " make -j `njobihtm -m=2G` all"
@echo " make -j `njobihtm -m=1G` all_ise"
@echo " make -j `njobihtm -m=2G` all_viv"
@echo " make -j `njobihtm` all_sim_ise"
@echo " make -j `njobihtm -m=1G` all_syn_ise"
@echo " make -j `njobihtm` all_sim_viv"
@echo " make -j `njobihtm -m=2G` all_syn_viv"
@echo " make vmfsum"
@echo " make imfsum"
@echo " make clean"
@@ -160,12 +161,12 @@ default :
@echo " make clean_sim_viv_tmp"
@echo " make clean_syn_viv_tmp"
@echo " for tool/documentation generation use:"
@echo " make -j `nproc` all_lib"
@echo " make -j `njobihtm` all_lib"
@echo " make clean_lib"
@echo " make all_tcl"
@echo " make all_dox"
#
all : all_ise all_viv all_lib
all : all_ise all_viv all_lib all_tcl
all_ise : all_sim_ise all_syn_ise
all_viv : all_sim_viv all_syn_viv
#

View File

@@ -25,6 +25,12 @@ The full set of tests is only run for tagged releases.
- RSX11-M uses buffer chaining, will not work
### Summary
- Miscellaneous fixes and changes
- Makefile: add all_tcl to all; use njobihtm
- rlink_core: BUGFIX: correct re-transmit after nak aborts
- tb_rlink_stim.dat: start section B (error aborts) and C (retransmit)
- ticonv_rri: use 'rlc rawwblk' instead of 'rlc rawio -wblk'
- rbmoni/test_regs.tcl: add data/addr logic tests
- tools for setting up ethernet bridge and tap
- add ip_create_br: create bride and convert default ethernet interface
- add ip_create_tap: create use-mode tap device

View File

@@ -1,6 +1,6 @@
-- $Id: rlink_core.vhd 799 2016-08-21 09:20:19Z mueller $
-- $Id: rlink_core.vhd 892 2017-05-01 17:57:34Z mueller $
--
-- Copyright 2007-2016 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
-- Copyright 2007-2017 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
-- This program is free software; you may redistribute and/or modify it under
-- the terms of the GNU General Public License as published by the Free
@@ -28,10 +28,12 @@
-- tb/tb_rlink_tba_ttcombo
--
-- Target Devices: generic
-- Tool versions: ise 8.2-14.7; viv 2014.4-2016.2; ghdl 0.18-0.33
-- Tool versions: ise 8.2-14.7; viv 2014.4-2017.1; ghdl 0.18-0.34
--
-- Synthesized (xst):
-- Date Rev ise Target flop lutl lutm slic t peri
-- 2017-05-01 892 14.7 131013 xc6slx16-2 298 709 20 226 s 7.3
-- 2016-08-21 799 14.7 131013 xc6slx16-2 297 717 20 227 s 7.2 ?incr?
-- 2015-12-26 718 14.7 131013 xc6slx16-2 312 460 16 150 s 7.0 ver 4.1
-- 2014-12-20 614 14.7 131013 xc6slx16-2 310 453 16 146 s 6.8 ver 4.0
-- 2014-08-13 581 14.7 131013 xc6slx16-2 160 230 0 73 s 6.0 ver 3.0
@@ -39,6 +41,7 @@
--
-- Revision History:
-- Date Rev Version Comment
-- 2017-05-01 892 4.2 BUGFIX: correct re-transmit after nak aborts
-- 2016-08-18 799 4.1.3 remove 'assert false' from report statements
-- 2016-05-22 767 4.1.2 don't init N_REGS (vivado fix for fsm inference)
-- 2015-12-26 718 4.1.1 add proc_sres: strip 'x' from RB_SRES.dout
@@ -292,6 +295,7 @@ architecture syn of rlink_core is
rtaddra : slv(RTAWIDTH-1 downto 0); -- rtbuf port a addr (write pointer)
rtaddra_red : slbit; -- rtaddra red (at max)
rtaddra_bad : slbit; -- rtaddra bad (inc beyond max)
rtaddra_zero : slbit; -- rtaddra was 0 in last cycle
rtaddrb : slv(RTAWIDTH-1 downto 0); -- rtbuf port b addr (aux pointer)
rtaddrb_red : slbit; -- rtaddrb red (at max)
rtaddrb_bad : slbit; -- rtaddrb bad (inc beyond max)
@@ -320,9 +324,9 @@ architecture syn of rlink_core is
'0','0', -- cmdseen,doretra
(others=>'0'), -- dinl
rtaddr_zero, -- rtaddra
'0','0', -- rtaddra_red, rtaddra_bad
'0','0','0', -- rtaddra_(red|bad|zero)
rtaddr_zero, -- rtaddrb
'0','0', -- rtaddrb_red, rtaddrb_bad
'0','0', -- rtaddrb_(red,bad)
'0','0' -- moneop,monattn
);
@@ -711,8 +715,16 @@ begin
ival := '1';
if RL_HOLD = '0' then -- wait for accept
if r.doretra = '1' then -- if retra request
irtreb := '1'; -- request first byte
n.state := sl_txrtbuf; -- next: send rtbuf
if r.rtaddra_zero = '1' then -- nothing to send
if r.nakdone = '0' then -- if no nak active
n.state := sl_txeop; -- next: send eop
else
n.state := sl_txnak; -- next: send nak
end if;
else -- something to send
irtreb := '1'; -- request first byte
n.state := sl_txrtbuf; -- next: send rtbuf
end if;
else -- or normal command
n.state := sl_rxcmd; -- next: read first command
end if;
@@ -730,7 +742,11 @@ begin
ido := '0' & "10" & (not r.nakcode) & r.nakcode;
ival := '1';
if RL_HOLD = '0' then -- wait for accept
n.state := sl_rxeop; -- next: wait for eop
if r.doretra = '0' then -- if no nak active
n.state := sl_rxeop; -- next: wait for eop
else -- else of nak active
n.state := sl_txeop; -- next: send eop
end if;
end if;
when sl_rxeop => -- sl_rxeop: wait for eop ------------
@@ -756,7 +772,7 @@ begin
end if;
end if;
end if;
when sl_txeop => -- sl_txeop: send eop ----------------
n.state := sl_txeop; -- needed to prevent vivado iSTATE
ido := c_rlink_dat_eop; -- send eop character
@@ -1245,6 +1261,11 @@ begin
end if;
end if;
end if;
if r.rtaddra = rtaddr_zero then
n.rtaddra_zero := '1';
else
n.rtaddra_zero := '0';
end if;
-- addrb logic (write and read pointer)
if addrb_load = '1' then -- load

View File

@@ -1,7 +1,8 @@
# $Id: tb_rlink_stim.dat 617 2014-12-21 14:18:53Z mueller $
# $Id: tb_rlink_stim.dat 892 2017-05-01 17:57:34Z mueller $
#
# Revision History:
# Date Rev Version Comment
# 2017-05-01 892 4.1 start section B (error aborts) and C (retransmit)
# 2014-12-21 617 4.0.1 rlink signals now tout and nak on separate stat bits
# 2014-10-12 596 4.0 rewritten for rlink v4
# ... all history v1->v3 droped
@@ -23,6 +24,7 @@
.rbmon 1
#
C =============================================================================
C Section A: Verify basic functionality
C Section A1: Basic framing
C -----------------------------------------------------------------------------
C Test A1.1: empty frame
@@ -66,21 +68,6 @@ txeop
#
.iowt 10
#
C -----------------------------------------------------------------------------
C Test A1.4: frame error nak abort: sop in active frame
C tx: sop - sop - eop
C rx: sop - nak nakcode(010) - eop
rxsop
rxnak
rx8 10101010 -- 10 101 010
rxeop
#
txsop
txsop
txeop
#
.iowt 10
#
C =============================================================================
C Section A2: Basic commands: attn, wreg, rreg
C -----------------------------------------------------------------------------
@@ -105,7 +92,7 @@ txeop
C -----------------------------------------------------------------------------
C Test A2.2: wreg(data) -> shows that rlink can write a register
C data := x"1111"
C wreg: tx: sop - cmd(wreg,3) addr(00f1) dl dh ccrc - eop
C wreg: tx: sop - cmd(wreg,3) addr(ffe4) dl dh ccrc - eop
C rx: sop - cmd(wreg,3) stat crc - eop
#
rxsop
@@ -121,7 +108,7 @@ txeop
C -----------------------------------------------------------------------------
C Test A2.3: rreg(data) -> shows that rlink can read back a register
C data -> x"1111"
C rreg: tx: sop - cmd(rreg,4) addr(00f1) ccrc - eop
C rreg: tx: sop - cmd(rreg,4) addr(ffe4) ccrc - eop
C rx: sop - cmd(rreg,4) dl dh stat crc - eop
#
rxsop
@@ -158,7 +145,7 @@ eop
.iowt 10
#
C -----------------------------------------------------------------------------
C Test A3.3: check stat write/read (and that RB_STAT is retured)
C Test A3.3: check stat write/read (and that RB_STAT is returned)
#
sop
wreg 2 x"ffe1" x"ffff" 00000000 -- stat := ffff
@@ -639,7 +626,173 @@ attn 2 x"0004" 00000000 -- attn >? 0004
eop
.iowt 10
#
#==============================================================================
C =============================================================================
C Section B: verify command aborts (ending in nak - nakcode - eop)
#
# nakcode_ccrc : "000" -- cmd crc error --
# nakcode_dcrc : "001" -- data crc error --
# nakcode_frame : "010" -- framing error -- in B1.*
# nakcode_unused : "011" -- <unused code> --
# nakcode_cmd : "100" -- bad cmd -- in B2.*
# nakcode_cnt : "101" -- bad cnt --
# nakcode_rtovfl : "110" -- rtbuf ovfl --
# nakcode_rtwblk : "111" -- rtbuf ovfl in wblk --
#
C =============================================================================
C Test B1.1: frame error nak abort: sop-sop
C tx: sop - sop - eop
C rx: sop - nak nakcode(010) - eop
rxsop
rxnak
rx8 10101010 -- 10 101 010
rxeop
#
txsop
txsop
txeop
#
.iowt 10
#
C -----------------------------------------------------------------------------
C Test B1.2: frame error nak abort: sop-cmd-sop-cmd-eop
C tx: sop - cmd(wreg,3) addr(ffe4) dl dh ccrc -
C sop - cmd(wreg,3) addr(ffe4) dl dh ccrc - eop
C rx: sop - cmd(wreg,3) stat crc - nak nakcode(010) - eop
C Note: that second write isn't executed is verified in second next test
rxsop
rxcs wreg,3 00000000
rxnak
rx8 10101010 -- 10 101 010
rxeop
#
txsop
txcad wreg,3 x"ffe4" x"2222"
txsop
txcad wreg,4 x"ffe4" x"3333"
txeop
#
.iowt 20
#
C =============================================================================
C Test B2.1: bad command nak abort: 0xff as 1st command
C tx: sop - 0xff - eop
C rx: sop - nak nakcode(100) - eop
rxsop
rxnak
rx8 10011100 -- 10 011 100
rxeop
#
txsop
tx8 11111111
txeop
#
.iowt 10
#
C -----------------------------------------------------------------------------
C Test B2.2: bad command nak abort: 0xff as 2nd command
C tx: sop - cmd(rreg,5) addr(ffe4) ccrc - 0xff - eop
C rx: sop - cmd(rreg,5) dl dh stat crc - nak nakcode(100) - eop
C Note: check with read back value that abort 2 tests ago did work
rxsop
rxcds rreg,5 x"2222" 00000000
rxnak
rx8 10011100 -- 10 011 100
rxeop
#
txsop
txca rreg,5 x"ffe4"
tx8 11111111
txeop
#
.iowt 10
#
C =============================================================================
C Section C: verify re-transmit logic
C Section C1: re-transmit after successfull command list
C -----------------------------------------------------------------------------
C Test C1.1: re-transmit after wreg-rreg
C - execute command --------------------
sop
wreg 0 x"ffe4" x"beaf" 00000000 -- data := beaf
rreg 1 x"ffe4" x"beaf" 00000000 -- data >? beaf
eop
.iowt 10
#
C - do re-transmit ---------------------
rxsop
rxcs wreg,0 00000000
rxcds rreg,1 x"beaf" 00000000
rxeop
#
txnak
#
.iowt 20
#
C -----------------------------------------------------------------------------
C Test C1.2: check that re-transmit buffer is kept after empty sop-eop frame
C - send sop-eop -----------------------
sop
eop
.iowt 20
#
C - do re-transmit (expect last one) ---
rxsop
rxcs wreg,0 00000000
rxcds rreg,1 x"beaf" 00000000
rxeop
#
txnak
#
.iowt 20
#
C =============================================================================
C Section C2: re-transmit after aborted command list
C -----------------------------------------------------------------------------
C Test C2.1: re-transmit after bad cmd abort (100): 0xff as 1st command
C - execute command --------------------
rxsop
rxnak
rx8 10011100 -- 10 011 100
rxeop
#
txsop
tx8 11111111
txeop
.iowt 10
#
C - do re-transmit ---------------------
rxsop
rxnak
rx8 10011100 -- 10 011 100
rxeop
#
txnak
.iowt 20
#
C -----------------------------------------------------------------------------
C Test C2.2: re-transmit after bad cmd abort (100): 0xff as 2nd command
C - execute command --------------------
rxsop
rxcs wreg,3 00000000
rxnak
rx8 10011100 -- 10 011 100
rxeop
#
txsop
txcad wreg,3 x"ffe4" x"beaf"
tx8 11111111
txeop
.iowt 10
#
C - do re-transmit ---------------------
rxsop
rxcs wreg,3 00000000
rxnak
rx8 10011100 -- 10 011 100
rxeop
#
txnak
.iowt 20
#
C -----------------------------------------------------------------------------
C Run down and Finish

View File

@@ -1,7 +1,7 @@
#!/usr/bin/perl -w
# $Id: ticonv_rri 832 2016-12-28 09:49:47Z mueller $
# $Id: ticonv_rri 891 2017-05-01 13:46:31Z mueller $
#
# Copyright 2014-2016 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# Copyright 2014-2017 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
#
# This program is free software; you may redistribute and/or modify it under
# the terms of the GNU General Public License as published by the Free
@@ -14,6 +14,7 @@
#
# Revision History:
# Date Rev Version Comment
# 2017-05-01 891 1.2.2 use 'rlc rawwblk' instead of 'rlc rawio -wblk'
# 2016-08-07 795 1.2.1 avoid GetOptions =f (bug in perl v5.22.1)
# 2015-04-03 661 1.2 adopt to new stat checking and mask polarity
# 2015-01-31 640 1.1.2 use 'rlc get|set' instead of 'rlc config'
@@ -187,7 +188,7 @@ while (1) {
my $delay = cget_gdat(16,10,1,256);
cmdlist_do();
print "rlc log \".wait $delay\"\n";
print "rlc rawio -wblk {";
print "rlc rawwblk {";
for (my $i = 0; $i < $delay; $i++) {
printf " 0%3.3o", 0x00;
}

View File

@@ -1,4 +1,4 @@
# $Id: test_regs.tcl 873 2017-04-14 11:56:29Z mueller $
# $Id: test_regs.tcl 888 2017-04-30 13:06:51Z mueller $
#
# Copyright 2011-2017 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
#
@@ -13,6 +13,7 @@
#
# Revision History:
# Date Rev Version Comment
# 2017-04-29 888 3.1 add data/addr logic tests
# 2017-04-13 873 3.0 adopt to revised interface
# 2015-04-03 661 2.1 drop estatdef (stat err check default now)
# 2014-12-27 622 2.0 rbd_rbmon reorganized, supports now 16 bit addresses
@@ -28,7 +29,7 @@ package require rlink
namespace eval rbmoni {
#
# Basic tests with rbtester registers
# Basic access tests for rbmoni registers
#
proc test_regs {} {
#
@@ -38,7 +39,8 @@ namespace eval rbmoni {
rlc log "rbmoni::test_regs - start"
#
#-------------------------------------------------------------------------
rlc log " test 1: write/read cntl"
rlc log " A basic register access tests -----------------------------"
rlc log " A1: write/read cntl---------------------------------"
# test that starting caputes option flags, and that stoping keeps them
rlc exec \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STA"}] \
@@ -55,7 +57,7 @@ namespace eval rbmoni {
-rreg rm.cntl -edata [regbld rbmoni::CNTL rcolw rcolr]
#
#-------------------------------------------------------------------------
rlc log " test 2: write cntl, read stat"
rlc log " A2: write cntl, read stat --------------------------"
# test that susp/run follow functions set to cntl
rlc exec \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STA"}] \
@@ -98,7 +100,7 @@ namespace eval rbmoni {
set amax [expr {( 512 << $bsize ) - 1}]
#
#-------------------------------------------------------------------------
rlc log " test 3: write/read hilim/lolim"
rlc log " A3: write/read hilim/lolim -------------------------"
foreach {lolim hilim} {0xffff 0x0000 \
0x0000 0xfffb} {
rlc exec \
@@ -107,7 +109,8 @@ namespace eval rbmoni {
}
#
#-------------------------------------------------------------------------
rlc log " test 4: write/read addr"
rlc log " A4: test addr --------------------------------------"
rlc log " A4.1: write/read addr when stopped -----------------"
foreach {laddr waddr} [list 0x0000 0 0x0000 3 $amax 0 $amax 3] {
set addr [regbld rbmoni::ADDR [list laddr $laddr] [list waddr $waddr]]
rlc exec \
@@ -116,13 +119,43 @@ namespace eval rbmoni {
}
#
#-------------------------------------------------------------------------
rlc log " test 5: verify that starting clears addr"
rlc log " A4.2: verify that starting clears addr -------------"
rlc exec \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STO"}] \
-wreg rm.addr [regbld rbmoni::ADDR [list laddr $amax]] \
-rreg rm.addr -edata [regbld rbmoni::ADDR [list laddr $amax]] \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STA"}] \
-rreg rm.addr -edata 0x00
-rreg rm.addr -edata 0x00 \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STO"}]
#
#-------------------------------------------------------------------------
rlc log " A4.3: test err when started and addr written -------"
rlc exec \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STA"}] \
-wreg rm.addr 0x100 -estaterr \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STO"}]
#
#-------------------------------------------------------------------------
rlc log " A5: test data --------------------------------------"
rlc log " A5.1: when stopped ---------------------------------"
# stop, set addr, and four times data, check addr
# at 5th data read waddr goes 0 and laddr incs
rlc exec \
-wreg rm.cntl [regbld rbmoni::CNTL {func "STO"}] \
-wreg rm.addr [regbld rbmoni::ADDR {laddr 010} {waddr 0}] \
-rreg rm.data \
-rreg rm.addr -edata [regbld rbmoni::ADDR {laddr 010} {waddr 001}] \
-rreg rm.data \
-rreg rm.addr -edata [regbld rbmoni::ADDR {laddr 010} {waddr 002}] \
-rreg rm.data \
-rreg rm.addr -edata [regbld rbmoni::ADDR {laddr 010} {waddr 003}] \
-rreg rm.data \
-rreg rm.addr -edata [regbld rbmoni::ADDR {laddr 011} {waddr 000}]
#
#-------------------------------------------------------------------------
rlc log " A5.2: test err when written ------------------------"
rlc exec -wreg rm.data 0x100 -estaterr
#
#-------------------------------------------------------------------------
rlc log "rbmoni::test_regs - cleanup"