From 9e309c81b98b03ace70ec9eb7310abea6d895d19 Mon Sep 17 00:00:00 2001 From: "Walter F.J. Mueller" Date: Sun, 7 May 2017 18:57:45 +0200 Subject: [PATCH] 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 --- Makefile | 21 +-- doc/CHANGELOG.md | 6 + rtl/vlib/rlink/rlink_core.vhd | 39 ++++-- rtl/vlib/rlink/tb/tb_rlink_stim.dat | 193 +++++++++++++++++++++++++--- tools/bin/ticonv_rri | 7 +- tools/tcl/rbmoni/test_regs.tcl | 49 +++++-- 6 files changed, 265 insertions(+), 50 deletions(-) diff --git a/Makefile b/Makefile index 97f927be..df104209 100644 --- a/Makefile +++ b/Makefile @@ -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 # diff --git a/doc/CHANGELOG.md b/doc/CHANGELOG.md index ca7c76d5..85bf6543 100644 --- a/doc/CHANGELOG.md +++ b/doc/CHANGELOG.md @@ -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 diff --git a/rtl/vlib/rlink/rlink_core.vhd b/rtl/vlib/rlink/rlink_core.vhd index f876266e..32b86643 100644 --- a/rtl/vlib/rlink/rlink_core.vhd +++ b/rtl/vlib/rlink/rlink_core.vhd @@ -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 +-- Copyright 2007-2017 by Walter F.J. Mueller -- -- 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 diff --git a/rtl/vlib/rlink/tb/tb_rlink_stim.dat b/rtl/vlib/rlink/tb/tb_rlink_stim.dat index f815812e..07f15e1c 100644 --- a/rtl/vlib/rlink/tb/tb_rlink_stim.dat +++ b/rtl/vlib/rlink/tb/tb_rlink_stim.dat @@ -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" -- -- +# 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 diff --git a/tools/bin/ticonv_rri b/tools/bin/ticonv_rri index 0021276f..19bfd133 100755 --- a/tools/bin/ticonv_rri +++ b/tools/bin/ticonv_rri @@ -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 +# Copyright 2014-2017 by Walter F.J. Mueller # # 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; } diff --git a/tools/tcl/rbmoni/test_regs.tcl b/tools/tcl/rbmoni/test_regs.tcl index 434de8c6..acf18126 100644 --- a/tools/tcl/rbmoni/test_regs.tcl +++ b/tools/tcl/rbmoni/test_regs.tcl @@ -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 # @@ -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"