int8_memory_access.v byte<->word conversion and byte-lane selection: exhaustive 2048-address test + 6 real read/write round-trips through the FSM handshake. 2054/2054 checks, 0 mismatches, after fixing two bugs in the test harness itself (a same-timestep race reading a non-blocking update one iteration late, and a behavioral memory stub that ignored byte-lane enables on write) -- both documented as test-side, not RTL, issues. memory_interface.v and psram_controller.v not re-verified from scratch: cited against coverage already established/re-confirmed earlier in this same session (page-mode/tCEM against the ISSI datasheet, a real pre-existing power-up request-loss bug found and fixed), re-run clean via the Phase 0 regression harness rather than trusted from WORKLOG text alone. Full regression: 39/39 real tests pass. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013xXuuRUWZScuo1DeYJxs3v
955 lines
6.8 KiB
Plaintext
955 lines
6.8 KiB
Plaintext
$date
|
|
Fri Sep 4 14:31:15 2026
|
|
$end
|
|
$version
|
|
Icarus Verilog
|
|
$end
|
|
$timescale
|
|
1ps
|
|
$end
|
|
$scope module tb $end
|
|
$var wire 16 ! mem_rdata [15:0] $end
|
|
$var wire 1 " mem_ready $end
|
|
$var wire 1 # ready $end
|
|
$var wire 8 $ rdata [7:0] $end
|
|
$var wire 1 % mem_wr $end
|
|
$var wire 16 & mem_wdata [15:0] $end
|
|
$var wire 1 ' mem_ub_n $end
|
|
$var wire 1 ( mem_req $end
|
|
$var wire 1 ) mem_lb_n $end
|
|
$var wire 23 * mem_addr [22:0] $end
|
|
$var parameter 32 + ADDR_WIDTH $end
|
|
$var real 1 , CLK_PERIOD $end
|
|
$var reg 23 - addr [22:0] $end
|
|
$var reg 1 . clk $end
|
|
$var reg 16 / model_rdata [15:0] $end
|
|
$var reg 1 0 model_ready $end
|
|
$var reg 1 1 req $end
|
|
$var reg 1 2 rst $end
|
|
$var reg 8 3 wdata [7:0] $end
|
|
$var reg 1 4 wr $end
|
|
$var integer 32 5 i [31:0] $end
|
|
$scope module dut $end
|
|
$var wire 23 6 addr [22:0] $end
|
|
$var wire 1 . clk $end
|
|
$var wire 16 7 mem_rdata [15:0] $end
|
|
$var wire 1 " mem_ready $end
|
|
$var wire 1 1 req $end
|
|
$var wire 1 2 rst $end
|
|
$var wire 8 8 wdata [7:0] $end
|
|
$var wire 1 4 wr $end
|
|
$var parameter 32 9 ADDR_WIDTH $end
|
|
$var parameter 2 : STATE_IDLE $end
|
|
$var parameter 2 ; STATE_WAIT $end
|
|
$var reg 23 < addr_reg [22:0] $end
|
|
$var reg 23 = mem_addr [22:0] $end
|
|
$var reg 1 ) mem_lb_n $end
|
|
$var reg 1 ( mem_req $end
|
|
$var reg 1 ' mem_ub_n $end
|
|
$var reg 16 > mem_wdata [15:0] $end
|
|
$var reg 1 % mem_wr $end
|
|
$var reg 8 ? rdata [7:0] $end
|
|
$var reg 1 # ready $end
|
|
$var reg 2 @ state [1:0] $end
|
|
$upscope $end
|
|
$scope task read_byte $end
|
|
$var reg 23 A byte_addr [22:0] $end
|
|
$var reg 8 B expected [7:0] $end
|
|
$upscope $end
|
|
$scope task write_byte $end
|
|
$var reg 23 C byte_addr [22:0] $end
|
|
$var reg 8 D data [7:0] $end
|
|
$upscope $end
|
|
$upscope $end
|
|
$enddefinitions $end
|
|
$comment Show the parameter values. $end
|
|
$dumpall
|
|
b1 ;
|
|
b0 :
|
|
b10111 9
|
|
r12.5 ,
|
|
b10111 +
|
|
$end
|
|
#0
|
|
$dumpvars
|
|
bx D
|
|
bx C
|
|
bx B
|
|
bx A
|
|
bx @
|
|
bx ?
|
|
bx >
|
|
bx =
|
|
bx <
|
|
b0 8
|
|
b0 7
|
|
b0 6
|
|
b10000000000 5
|
|
04
|
|
b0 3
|
|
12
|
|
01
|
|
00
|
|
b0 /
|
|
0.
|
|
b0 -
|
|
bx *
|
|
x)
|
|
x(
|
|
x'
|
|
bx &
|
|
x%
|
|
bx $
|
|
x#
|
|
0"
|
|
b0 !
|
|
$end
|
|
#6250
|
|
1'
|
|
1)
|
|
b0 &
|
|
b0 >
|
|
b0 *
|
|
b0 =
|
|
0%
|
|
0(
|
|
0#
|
|
b0 $
|
|
b0 ?
|
|
b0 <
|
|
b0 @
|
|
1.
|
|
#12500
|
|
0.
|
|
#18750
|
|
1.
|
|
#25000
|
|
0.
|
|
#31250
|
|
1.
|
|
#37500
|
|
0.
|
|
#43750
|
|
1.
|
|
#50000
|
|
0.
|
|
#56250
|
|
b10010 D
|
|
b0 C
|
|
02
|
|
1.
|
|
#62500
|
|
0.
|
|
#68750
|
|
11
|
|
14
|
|
b10010 3
|
|
b10010 8
|
|
1.
|
|
#75000
|
|
0.
|
|
#81250
|
|
01
|
|
b1 @
|
|
b10010 &
|
|
b10010 >
|
|
0)
|
|
1%
|
|
1(
|
|
1.
|
|
#87500
|
|
0.
|
|
#93750
|
|
1"
|
|
10
|
|
0(
|
|
1.
|
|
#100000
|
|
0.
|
|
#106250
|
|
b0 @
|
|
1#
|
|
0"
|
|
00
|
|
1.
|
|
#112500
|
|
0.
|
|
#118750
|
|
0#
|
|
b110100 D
|
|
b1 C
|
|
1.
|
|
#125000
|
|
0.
|
|
#131250
|
|
11
|
|
b110100 3
|
|
b110100 8
|
|
b1 -
|
|
b1 6
|
|
1.
|
|
#137500
|
|
0.
|
|
#143750
|
|
01
|
|
b1 @
|
|
b11010000000000 &
|
|
b11010000000000 >
|
|
0'
|
|
1)
|
|
1(
|
|
b1 <
|
|
1.
|
|
#150000
|
|
0.
|
|
#156250
|
|
0(
|
|
1"
|
|
10
|
|
1.
|
|
#162500
|
|
0.
|
|
#168750
|
|
0"
|
|
00
|
|
b0 @
|
|
1#
|
|
1.
|
|
#175000
|
|
0.
|
|
#181250
|
|
0#
|
|
b1010110 D
|
|
b10 C
|
|
1.
|
|
#187500
|
|
0.
|
|
#193750
|
|
11
|
|
b1010110 3
|
|
b1010110 8
|
|
b10 -
|
|
b10 6
|
|
1.
|
|
#200000
|
|
0.
|
|
#206250
|
|
01
|
|
b1 @
|
|
b1010110 &
|
|
b1010110 >
|
|
1'
|
|
0)
|
|
b1 *
|
|
b1 =
|
|
1(
|
|
b10 <
|
|
1.
|
|
#212500
|
|
0.
|
|
#218750
|
|
1"
|
|
10
|
|
0(
|
|
1.
|
|
#225000
|
|
0.
|
|
#231250
|
|
b0 @
|
|
1#
|
|
0"
|
|
00
|
|
1.
|
|
#237500
|
|
0.
|
|
#243750
|
|
0#
|
|
b1111000 D
|
|
b11 C
|
|
1.
|
|
#250000
|
|
0.
|
|
#256250
|
|
11
|
|
b1111000 3
|
|
b1111000 8
|
|
b11 -
|
|
b11 6
|
|
1.
|
|
#262500
|
|
0.
|
|
#268750
|
|
01
|
|
b1 @
|
|
b111100000000000 &
|
|
b111100000000000 >
|
|
0'
|
|
1)
|
|
1(
|
|
b11 <
|
|
1.
|
|
#275000
|
|
0.
|
|
#281250
|
|
0(
|
|
1"
|
|
10
|
|
1.
|
|
#287500
|
|
0.
|
|
#293750
|
|
0"
|
|
00
|
|
b0 @
|
|
1#
|
|
1.
|
|
#300000
|
|
0.
|
|
#306250
|
|
0#
|
|
b10010 B
|
|
b0 A
|
|
1.
|
|
#312500
|
|
0.
|
|
#318750
|
|
11
|
|
04
|
|
b0 -
|
|
b0 6
|
|
1.
|
|
#325000
|
|
0.
|
|
#331250
|
|
01
|
|
b1 @
|
|
b1111000 &
|
|
b1111000 >
|
|
1'
|
|
0)
|
|
b0 *
|
|
b0 =
|
|
0%
|
|
1(
|
|
b0 <
|
|
1.
|
|
#337500
|
|
0.
|
|
#343750
|
|
1"
|
|
10
|
|
b11010000010010 !
|
|
b11010000010010 7
|
|
b11010000010010 /
|
|
0(
|
|
1.
|
|
#350000
|
|
0.
|
|
#356250
|
|
b0 @
|
|
1#
|
|
b10010 $
|
|
b10010 ?
|
|
0"
|
|
00
|
|
1.
|
|
#362500
|
|
0.
|
|
#368750
|
|
0#
|
|
b110100 B
|
|
b1 A
|
|
1.
|
|
#375000
|
|
0.
|
|
#381250
|
|
11
|
|
b1 -
|
|
b1 6
|
|
1.
|
|
#387500
|
|
0.
|
|
#393750
|
|
01
|
|
b1 @
|
|
b111100000000000 &
|
|
b111100000000000 >
|
|
0'
|
|
1)
|
|
1(
|
|
b1 <
|
|
1.
|
|
#400000
|
|
0.
|
|
#406250
|
|
0(
|
|
1"
|
|
10
|
|
1.
|
|
#412500
|
|
0.
|
|
#418750
|
|
0"
|
|
00
|
|
b0 @
|
|
1#
|
|
b110100 $
|
|
b110100 ?
|
|
1.
|
|
#425000
|
|
0.
|
|
#431250
|
|
0#
|
|
b1010110 B
|
|
b10 A
|
|
1.
|
|
#437500
|
|
0.
|
|
#443750
|
|
11
|
|
b10 -
|
|
b10 6
|
|
1.
|
|
#450000
|
|
0.
|
|
#456250
|
|
01
|
|
b1 @
|
|
b1111000 &
|
|
b1111000 >
|
|
1'
|
|
0)
|
|
b1 *
|
|
b1 =
|
|
1(
|
|
b10 <
|
|
1.
|
|
#462500
|
|
0.
|
|
#468750
|
|
1"
|
|
10
|
|
b111100001010110 !
|
|
b111100001010110 7
|
|
b111100001010110 /
|
|
0(
|
|
1.
|
|
#475000
|
|
0.
|
|
#481250
|
|
b0 @
|
|
1#
|
|
b1010110 $
|
|
b1010110 ?
|
|
0"
|
|
00
|
|
1.
|
|
#487500
|
|
0.
|
|
#493750
|
|
0#
|
|
b1111000 B
|
|
b11 A
|
|
1.
|
|
#500000
|
|
0.
|
|
#506250
|
|
11
|
|
b11 -
|
|
b11 6
|
|
1.
|
|
#512500
|
|
0.
|
|
#518750
|
|
01
|
|
b1 @
|
|
b111100000000000 &
|
|
b111100000000000 >
|
|
0'
|
|
1)
|
|
1(
|
|
b11 <
|
|
1.
|
|
#525000
|
|
0.
|
|
#531250
|
|
0(
|
|
1"
|
|
10
|
|
1.
|
|
#537500
|
|
0.
|
|
#543750
|
|
0"
|
|
00
|
|
b0 @
|
|
1#
|
|
b1111000 $
|
|
b1111000 ?
|
|
1.
|
|
#550000
|
|
0.
|
|
#556250
|
|
0#
|
|
b110100 D
|
|
b10000 C
|
|
1.
|
|
#562500
|
|
0.
|
|
#568750
|
|
11
|
|
14
|
|
b110100 3
|
|
b110100 8
|
|
b10000 -
|
|
b10000 6
|
|
1.
|
|
#575000
|
|
0.
|
|
#581250
|
|
01
|
|
b1 @
|
|
b110100 &
|
|
b110100 >
|
|
1'
|
|
0)
|
|
b1000 *
|
|
b1000 =
|
|
1%
|
|
1(
|
|
b10000 <
|
|
1.
|
|
#587500
|
|
0.
|
|
#593750
|
|
1"
|
|
10
|
|
0(
|
|
1.
|
|
#600000
|
|
0.
|
|
#606250
|
|
b0 @
|
|
1#
|
|
b1010110 $
|
|
b1010110 ?
|
|
0"
|
|
00
|
|
1.
|
|
#612500
|
|
0.
|
|
#618750
|
|
0#
|
|
b10010 D
|
|
b10001 C
|
|
1.
|
|
#625000
|
|
0.
|
|
#631250
|
|
11
|
|
b10010 3
|
|
b10010 8
|
|
b10001 -
|
|
b10001 6
|
|
1.
|
|
#637500
|
|
0.
|
|
#643750
|
|
01
|
|
b1 @
|
|
b1001000000000 &
|
|
b1001000000000 >
|
|
0'
|
|
1)
|
|
1(
|
|
b10001 <
|
|
1.
|
|
#650000
|
|
0.
|
|
#656250
|
|
0(
|
|
1"
|
|
10
|
|
1.
|
|
#662500
|
|
0.
|
|
#668750
|
|
0"
|
|
00
|
|
b0 @
|
|
1#
|
|
b1111000 $
|
|
b1111000 ?
|
|
1.
|
|
#675000
|
|
0.
|
|
#681250
|
|
0#
|
|
b10101010 D
|
|
b10000 C
|
|
1.
|
|
#687500
|
|
0.
|
|
#693750
|
|
11
|
|
b10101010 3
|
|
b10101010 8
|
|
b10000 -
|
|
b10000 6
|
|
1.
|
|
#700000
|
|
0.
|
|
#706250
|
|
01
|
|
b1 @
|
|
b10101010 &
|
|
b10101010 >
|
|
1'
|
|
0)
|
|
1(
|
|
b10000 <
|
|
1.
|
|
#712500
|
|
0.
|
|
#718750
|
|
1"
|
|
10
|
|
0(
|
|
1.
|
|
#725000
|
|
0.
|
|
#731250
|
|
b0 @
|
|
1#
|
|
b1010110 $
|
|
b1010110 ?
|
|
0"
|
|
00
|
|
1.
|
|
#737500
|
|
0.
|
|
#743750
|
|
0#
|
|
b10111011 D
|
|
b10001 C
|
|
1.
|
|
#750000
|
|
0.
|
|
#756250
|
|
11
|
|
b10111011 3
|
|
b10111011 8
|
|
b10001 -
|
|
b10001 6
|
|
1.
|
|
#762500
|
|
0.
|
|
#768750
|
|
01
|
|
b1 @
|
|
b1011101100000000 &
|
|
b1011101100000000 >
|
|
0'
|
|
1)
|
|
1(
|
|
b10001 <
|
|
1.
|
|
#775000
|
|
0.
|
|
#781250
|
|
0(
|
|
1"
|
|
10
|
|
1.
|
|
#787500
|
|
0.
|
|
#793750
|
|
0"
|
|
00
|
|
b0 @
|
|
1#
|
|
b1111000 $
|
|
b1111000 ?
|
|
1.
|
|
#800000
|
|
0.
|
|
#806250
|
|
0#
|
|
b11111111 D
|
|
b100000 C
|
|
1.
|
|
#812500
|
|
0.
|
|
#818750
|
|
11
|
|
b11111111 3
|
|
b11111111 8
|
|
b100000 -
|
|
b100000 6
|
|
1.
|
|
#825000
|
|
0.
|
|
#831250
|
|
01
|
|
b1 @
|
|
b11111111 &
|
|
b11111111 >
|
|
1'
|
|
0)
|
|
b10000 *
|
|
b10000 =
|
|
1(
|
|
b100000 <
|
|
1.
|
|
#837500
|
|
0.
|
|
#843750
|
|
1"
|
|
10
|
|
0(
|
|
1.
|
|
#850000
|
|
0.
|
|
#856250
|
|
b0 @
|
|
1#
|
|
b1010110 $
|
|
b1010110 ?
|
|
0"
|
|
00
|
|
1.
|
|
#862500
|
|
0.
|
|
#868750
|
|
0#
|
|
b10000000 D
|
|
b100001 C
|
|
1.
|
|
#875000
|
|
0.
|
|
#881250
|
|
11
|
|
b10000000 3
|
|
b10000000 8
|
|
b100001 -
|
|
b100001 6
|
|
1.
|
|
#887500
|
|
0.
|
|
#893750
|
|
01
|
|
b1 @
|
|
b1000000000000000 &
|
|
b1000000000000000 >
|
|
0'
|
|
1)
|
|
1(
|
|
b100001 <
|
|
1.
|
|
#900000
|
|
0.
|
|
#906250
|
|
0(
|
|
1"
|
|
10
|
|
1.
|
|
#912500
|
|
0.
|
|
#918750
|
|
0"
|
|
00
|
|
b0 @
|
|
1#
|
|
b1111000 $
|
|
b1111000 ?
|
|
1.
|
|
#925000
|
|
0.
|
|
#931250
|
|
0#
|
|
b1111111 D
|
|
b100010 C
|
|
1.
|
|
#937500
|
|
0.
|
|
#943750
|
|
11
|
|
b1111111 3
|
|
b1111111 8
|
|
b100010 -
|
|
b100010 6
|
|
1.
|
|
#950000
|
|
0.
|
|
#956250
|
|
01
|
|
b1 @
|
|
b1111111 &
|
|
b1111111 >
|
|
1'
|
|
0)
|
|
b10001 *
|
|
b10001 =
|
|
1(
|
|
b100010 <
|
|
1.
|
|
#962500
|
|
0.
|
|
#968750
|
|
1"
|
|
10
|
|
0(
|
|
1.
|
|
#975000
|
|
0.
|
|
#981250
|
|
b0 @
|
|
1#
|
|
b1010110 $
|
|
b1010110 ?
|
|
0"
|
|
00
|
|
1.
|
|
#987500
|
|
0.
|
|
#993750
|
|
0#
|
|
b11111111 B
|
|
b100000 A
|
|
1.
|
|
#1000000
|
|
0.
|
|
#1006250
|
|
11
|
|
04
|
|
b100000 -
|
|
b100000 6
|
|
1.
|
|
#1012500
|
|
0.
|
|
#1018750
|
|
01
|
|
b1 @
|
|
b10000 *
|
|
b10000 =
|
|
0%
|
|
1(
|
|
b100000 <
|
|
1.
|
|
#1025000
|
|
0.
|
|
#1031250
|
|
0(
|
|
1"
|
|
10
|
|
b1000000011111111 !
|
|
b1000000011111111 7
|
|
b1000000011111111 /
|
|
1.
|
|
#1037500
|
|
0.
|
|
#1043750
|
|
0"
|
|
00
|
|
b0 @
|
|
1#
|
|
b11111111 $
|
|
b11111111 ?
|
|
1.
|
|
#1050000
|
|
0.
|
|
#1056250
|
|
0#
|
|
b10000000 B
|
|
b100001 A
|
|
1.
|
|
#1062500
|
|
0.
|
|
#1068750
|
|
11
|
|
b100001 -
|
|
b100001 6
|
|
1.
|
|
#1075000
|
|
0.
|
|
#1081250
|
|
01
|
|
b1 @
|
|
b111111100000000 &
|
|
b111111100000000 >
|
|
0'
|
|
1)
|
|
1(
|
|
b100001 <
|
|
1.
|
|
#1087500
|
|
0.
|
|
#1093750
|
|
1"
|
|
10
|
|
0(
|
|
1.
|
|
#1100000
|
|
0.
|
|
#1106250
|
|
b0 @
|
|
1#
|
|
b10000000 $
|
|
b10000000 ?
|
|
0"
|
|
00
|
|
1.
|
|
#1112500
|
|
0.
|
|
#1118750
|
|
0#
|
|
b1111111 B
|
|
b100010 A
|
|
1.
|
|
#1125000
|
|
0.
|
|
#1131250
|
|
11
|
|
b100010 -
|
|
b100010 6
|
|
1.
|
|
#1137500
|
|
0.
|
|
#1143750
|
|
01
|
|
b1 @
|
|
b1111111 &
|
|
b1111111 >
|
|
1'
|
|
0)
|
|
b10001 *
|
|
b10001 =
|
|
1(
|
|
b100010 <
|
|
1.
|
|
#1150000
|
|
0.
|
|
#1156250
|
|
0(
|
|
1"
|
|
10
|
|
b1111111 !
|
|
b1111111 7
|
|
b1111111 /
|
|
1.
|
|
#1162500
|
|
0.
|
|
#1168750
|
|
0"
|
|
00
|
|
b0 @
|
|
1#
|
|
b1111111 $
|
|
b1111111 ?
|
|
1.
|
|
#1175000
|
|
0.
|
|
#1181250
|
|
0#
|
|
1.
|