forked from Github_Repos/cvw
Merge branch 'main' of https://github.com/davidharrishmc/riscv-wally into main
This commit is contained in:
commit
9480f8efdb
@ -58,10 +58,10 @@
|
|||||||
// Cache configuration. Sizes should be a power of two
|
// Cache configuration. Sizes should be a power of two
|
||||||
// typical configuration 4 ways, 4096 bytes per way, 256 bit or more blocks
|
// typical configuration 4 ways, 4096 bytes per way, 256 bit or more blocks
|
||||||
`define DCACHE_NUMWAYS 4
|
`define DCACHE_NUMWAYS 4
|
||||||
`define DCACHE_WAYSIZEINBYTES 2048
|
`define DCACHE_WAYSIZEINBYTES 4096
|
||||||
`define DCACHE_BLOCKLENINBITS 256
|
`define DCACHE_BLOCKLENINBITS 256
|
||||||
`define DCACHE_REPLBITS 3
|
`define DCACHE_REPLBITS 3
|
||||||
`define ICACHE_NUMWAYS 1
|
`define ICACHE_NUMWAYS 4
|
||||||
`define ICACHE_WAYSIZEINBYTES 4096
|
`define ICACHE_WAYSIZEINBYTES 4096
|
||||||
`define ICACHE_BLOCKLENINBITS 256
|
`define ICACHE_BLOCKLENINBITS 256
|
||||||
|
|
||||||
|
@ -56,10 +56,10 @@
|
|||||||
// Cache configuration. Sizes should be a power of two
|
// Cache configuration. Sizes should be a power of two
|
||||||
// typical configuration 4 ways, 4096 bytes per way, 256 bit or more blocks
|
// typical configuration 4 ways, 4096 bytes per way, 256 bit or more blocks
|
||||||
`define DCACHE_NUMWAYS 4
|
`define DCACHE_NUMWAYS 4
|
||||||
`define DCACHE_WAYSIZEINBYTES 2048
|
`define DCACHE_WAYSIZEINBYTES 4096
|
||||||
`define DCACHE_BLOCKLENINBITS 256
|
`define DCACHE_BLOCKLENINBITS 256
|
||||||
`define DCACHE_REPLBITS 3
|
`define DCACHE_REPLBITS 3
|
||||||
`define ICACHE_NUMWAYS 1
|
`define ICACHE_NUMWAYS 4
|
||||||
`define ICACHE_WAYSIZEINBYTES 4096
|
`define ICACHE_WAYSIZEINBYTES 4096
|
||||||
`define ICACHE_BLOCKLENINBITS 256
|
`define ICACHE_BLOCKLENINBITS 256
|
||||||
|
|
||||||
|
@ -57,10 +57,10 @@
|
|||||||
// Cache configuration. Sizes should be a power of two
|
// Cache configuration. Sizes should be a power of two
|
||||||
// typical configuration 4 ways, 4096 bytes per way, 256 bit or more blocks
|
// typical configuration 4 ways, 4096 bytes per way, 256 bit or more blocks
|
||||||
`define DCACHE_NUMWAYS 4
|
`define DCACHE_NUMWAYS 4
|
||||||
`define DCACHE_WAYSIZEINBYTES 2048
|
`define DCACHE_WAYSIZEINBYTES 4096
|
||||||
`define DCACHE_BLOCKLENINBITS 256
|
`define DCACHE_BLOCKLENINBITS 256
|
||||||
`define DCACHE_REPLBITS 3
|
`define DCACHE_REPLBITS 3
|
||||||
`define ICACHE_NUMWAYS 1
|
`define ICACHE_NUMWAYS 4
|
||||||
`define ICACHE_WAYSIZEINBYTES 4096
|
`define ICACHE_WAYSIZEINBYTES 4096
|
||||||
`define ICACHE_BLOCKLENINBITS 256
|
`define ICACHE_BLOCKLENINBITS 256
|
||||||
|
|
||||||
|
@ -96,11 +96,11 @@ add wave -noupdate -group Bpred -expand -group {bp wrong} /testbench/dut/hart/if
|
|||||||
add wave -noupdate -group Bpred -expand -group {bp wrong} /testbench/dut/hart/ifu/bpred/bpred/BPPredClassNonCFIWrongE
|
add wave -noupdate -group Bpred -expand -group {bp wrong} /testbench/dut/hart/ifu/bpred/bpred/BPPredClassNonCFIWrongE
|
||||||
add wave -noupdate -group Bpred -expand -group {bp wrong} /testbench/dut/hart/ifu/bpred/bpred/BPPredWrongE
|
add wave -noupdate -group Bpred -expand -group {bp wrong} /testbench/dut/hart/ifu/bpred/bpred/BPPredWrongE
|
||||||
add wave -noupdate -group Bpred /testbench/dut/hart/ifu/bpred/bpred/BPPredWrongE
|
add wave -noupdate -group Bpred /testbench/dut/hart/ifu/bpred/bpred/BPPredWrongE
|
||||||
add wave -noupdate -group {instruction pipeline} /testbench/InstrFName
|
add wave -noupdate -expand -group {instruction pipeline} /testbench/InstrFName
|
||||||
add wave -noupdate -group {instruction pipeline} /testbench/dut/hart/ifu/InstrD
|
add wave -noupdate -expand -group {instruction pipeline} /testbench/dut/hart/ifu/icache/FinalInstrRawF
|
||||||
add wave -noupdate -group {instruction pipeline} /testbench/dut/hart/ifu/InstrE
|
add wave -noupdate -expand -group {instruction pipeline} /testbench/dut/hart/ifu/InstrD
|
||||||
add wave -noupdate -group {instruction pipeline} /testbench/dut/hart/ifu/InstrM
|
add wave -noupdate -expand -group {instruction pipeline} /testbench/dut/hart/ifu/InstrE
|
||||||
add wave -noupdate -group {instruction pipeline} /testbench/InstrW
|
add wave -noupdate -expand -group {instruction pipeline} /testbench/dut/hart/ifu/InstrM
|
||||||
add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/PCNextF
|
add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/PCNextF
|
||||||
add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/PCF
|
add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/PCF
|
||||||
add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/PCPlus2or4F
|
add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/PCPlus2or4F
|
||||||
@ -129,18 +129,18 @@ add wave -noupdate -group RegFile -group {write regfile mux} /testbench/dut/hart
|
|||||||
add wave -noupdate -group RegFile -group {write regfile mux} /testbench/dut/hart/ieu/dp/CSRReadValW
|
add wave -noupdate -group RegFile -group {write regfile mux} /testbench/dut/hart/ieu/dp/CSRReadValW
|
||||||
add wave -noupdate -group RegFile -group {write regfile mux} /testbench/dut/hart/ieu/dp/ResultSrcW
|
add wave -noupdate -group RegFile -group {write regfile mux} /testbench/dut/hart/ieu/dp/ResultSrcW
|
||||||
add wave -noupdate -group RegFile -group {write regfile mux} /testbench/dut/hart/ieu/dp/ResultW
|
add wave -noupdate -group RegFile -group {write regfile mux} /testbench/dut/hart/ieu/dp/ResultW
|
||||||
add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/a
|
add wave -noupdate -expand -group alu /testbench/dut/hart/ieu/dp/alu/a
|
||||||
add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/b
|
add wave -noupdate -expand -group alu /testbench/dut/hart/ieu/dp/alu/b
|
||||||
add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/alucontrol
|
add wave -noupdate -expand -group alu /testbench/dut/hart/ieu/dp/alu/alucontrol
|
||||||
add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/result
|
add wave -noupdate -expand -group alu /testbench/dut/hart/ieu/dp/alu/result
|
||||||
add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/flags
|
add wave -noupdate -expand -group alu /testbench/dut/hart/ieu/dp/alu/flags
|
||||||
add wave -noupdate -group alu -divider internals
|
add wave -noupdate -expand -group alu -divider internals
|
||||||
add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/overflow
|
add wave -noupdate -expand -group alu /testbench/dut/hart/ieu/dp/alu/overflow
|
||||||
add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/carry
|
add wave -noupdate -expand -group alu /testbench/dut/hart/ieu/dp/alu/carry
|
||||||
add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/zero
|
add wave -noupdate -expand -group alu /testbench/dut/hart/ieu/dp/alu/zero
|
||||||
add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/neg
|
add wave -noupdate -expand -group alu /testbench/dut/hart/ieu/dp/alu/neg
|
||||||
add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/lt
|
add wave -noupdate -expand -group alu /testbench/dut/hart/ieu/dp/alu/lt
|
||||||
add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/ltu
|
add wave -noupdate -expand -group alu /testbench/dut/hart/ieu/dp/alu/ltu
|
||||||
add wave -noupdate -group Forward /testbench/dut/hart/ieu/fw/Rs1D
|
add wave -noupdate -group Forward /testbench/dut/hart/ieu/fw/Rs1D
|
||||||
add wave -noupdate -group Forward /testbench/dut/hart/ieu/fw/Rs2D
|
add wave -noupdate -group Forward /testbench/dut/hart/ieu/fw/Rs2D
|
||||||
add wave -noupdate -group Forward /testbench/dut/hart/ieu/fw/Rs1E
|
add wave -noupdate -group Forward /testbench/dut/hart/ieu/fw/Rs1E
|
||||||
@ -158,12 +158,12 @@ add wave -noupdate -group {alu execution stage} /testbench/dut/hart/ieu/dp/Write
|
|||||||
add wave -noupdate -group {alu execution stage} /testbench/dut/hart/ieu/dp/ALUResultE
|
add wave -noupdate -group {alu execution stage} /testbench/dut/hart/ieu/dp/ALUResultE
|
||||||
add wave -noupdate -group {alu execution stage} /testbench/dut/hart/ieu/dp/SrcAE
|
add wave -noupdate -group {alu execution stage} /testbench/dut/hart/ieu/dp/SrcAE
|
||||||
add wave -noupdate -group {alu execution stage} /testbench/dut/hart/ieu/dp/SrcBE
|
add wave -noupdate -group {alu execution stage} /testbench/dut/hart/ieu/dp/SrcBE
|
||||||
add wave -noupdate -group PCS /testbench/dut/hart/ifu/PCNextF
|
add wave -noupdate -expand -group PCS /testbench/dut/hart/ifu/PCNextF
|
||||||
add wave -noupdate -group PCS /testbench/dut/hart/PCF
|
add wave -noupdate -expand -group PCS /testbench/dut/hart/PCF
|
||||||
add wave -noupdate -group PCS /testbench/dut/hart/ifu/PCD
|
add wave -noupdate -expand -group PCS /testbench/dut/hart/ifu/PCD
|
||||||
add wave -noupdate -group PCS /testbench/dut/hart/PCE
|
add wave -noupdate -expand -group PCS /testbench/dut/hart/PCE
|
||||||
add wave -noupdate -group PCS /testbench/dut/hart/PCM
|
add wave -noupdate -expand -group PCS /testbench/dut/hart/PCM
|
||||||
add wave -noupdate -group PCS /testbench/PCW
|
add wave -noupdate -expand -group PCS /testbench/PCW
|
||||||
add wave -noupdate -group muldiv /testbench/dut/hart/mdu/InstrD
|
add wave -noupdate -group muldiv /testbench/dut/hart/mdu/InstrD
|
||||||
add wave -noupdate -group muldiv /testbench/dut/hart/mdu/SrcAE
|
add wave -noupdate -group muldiv /testbench/dut/hart/mdu/SrcAE
|
||||||
add wave -noupdate -group muldiv /testbench/dut/hart/mdu/SrcBE
|
add wave -noupdate -group muldiv /testbench/dut/hart/mdu/SrcBE
|
||||||
@ -183,43 +183,32 @@ add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/N
|
|||||||
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/D
|
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/D
|
||||||
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/Q
|
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/Q
|
||||||
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/rem0
|
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/rem0
|
||||||
add wave -noupdate -group icache -color Orange /testbench/dut/hart/ifu/icache/controller/CurrState
|
add wave -noupdate -expand -group icache -color Gold /testbench/dut/hart/ifu/icache/controller/CurrState
|
||||||
add wave -noupdate -group icache /testbench/dut/hart/ifu/icache/controller/NextState
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/controller/NextState
|
||||||
add wave -noupdate -group icache /testbench/dut/hart/ifu/ITLBMissF
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/ITLBMissF
|
||||||
add wave -noupdate -group icache /testbench/dut/hart/ifu/icache/ITLBWriteF
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/ITLBWriteF
|
||||||
add wave -noupdate -group icache -group {tag read} /testbench/dut/hart/ifu/icache/cachemem/DataValidBit
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/ReadLineF
|
||||||
add wave -noupdate -group icache -group {tag read} /testbench/dut/hart/ifu/icache/cachemem/cachetags/ReadData
|
add wave -noupdate -expand -group icache {/testbench/dut/hart/ifu/icache/icachemem/word[0]/CacheDataMem/Addr}
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/hit
|
add wave -noupdate -expand -group icache {/testbench/dut/hart/ifu/icache/icachemem/word[0]/CacheDataMem/WriteData}
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spill
|
add wave -noupdate -expand -group icache {/testbench/dut/hart/ifu/icache/icachemem/word[0]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/ICacheStallF
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/PCNextIndexF
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/SavePC
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/ReadLineF
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spillSave
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/hit
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/UnalignedSelect
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spill
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/PCMux
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/ICacheStallF
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spillSave
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/SavePC
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/CntReset
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spillSave
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/PreCntEn
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/UnalignedSelect
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/CntEn
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spillSave
|
||||||
add wave -noupdate -group icache -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/NUMLINES
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/CntReset
|
||||||
add wave -noupdate -group icache -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/BLOCKLEN
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/PreCntEn
|
||||||
add wave -noupdate -group icache -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/BLOCKBYTELEN
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/CntEn
|
||||||
add wave -noupdate -group icache -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/OFFSETLEN
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/FetchCountFlag
|
||||||
add wave -noupdate -group icache -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/INDEXLEN
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/FetchCount
|
||||||
add wave -noupdate -group icache -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/TAGLEN
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrReadF
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/FetchCountFlag
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrAckF
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/FetchCount
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/ICacheMemWriteEnable
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrPAdrF
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/ICacheMemWriteData
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrReadF
|
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrAckF
|
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrInF
|
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/ICacheMemWriteEnable
|
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/ICacheMemWriteData
|
|
||||||
add wave -noupdate -group icache -expand -group memory -group {tag write} /testbench/dut/hart/ifu/icache/cachemem/WriteEnable
|
|
||||||
add wave -noupdate -group icache -expand -group memory -group {tag write} /testbench/dut/hart/ifu/icache/cachemem/WriteLine
|
|
||||||
add wave -noupdate -group icache -expand -group memory -group {tag write} /testbench/dut/hart/ifu/icache/cachemem/cachetags/StoredData
|
|
||||||
add wave -noupdate -group icache -expand -group {instr to cpu} /testbench/dut/hart/ifu/icache/controller/FinalInstrRawF
|
|
||||||
add wave -noupdate -group icache -expand -group pc /testbench/dut/hart/ifu/icache/controller/PCPF
|
|
||||||
add wave -noupdate -group icache -expand -group pc /testbench/dut/hart/ifu/icache/controller/PCPreFinalF
|
|
||||||
add wave -noupdate -group AHB -color Gold /testbench/dut/hart/ebu/BusState
|
add wave -noupdate -group AHB -color Gold /testbench/dut/hart/ebu/BusState
|
||||||
add wave -noupdate -group AHB /testbench/dut/hart/ebu/NextBusState
|
add wave -noupdate -group AHB /testbench/dut/hart/ebu/NextBusState
|
||||||
add wave -noupdate -group AHB -expand -group {input requests} /testbench/dut/hart/ebu/AtomicMaskedM
|
add wave -noupdate -group AHB -expand -group {input requests} /testbench/dut/hart/ebu/AtomicMaskedM
|
||||||
@ -243,7 +232,7 @@ add wave -noupdate -group AHB /testbench/dut/hart/ebu/HSIZED
|
|||||||
add wave -noupdate -group AHB /testbench/dut/hart/ebu/HWRITED
|
add wave -noupdate -group AHB /testbench/dut/hart/ebu/HWRITED
|
||||||
add wave -noupdate -group AHB /testbench/dut/hart/ebu/StallW
|
add wave -noupdate -group AHB /testbench/dut/hart/ebu/StallW
|
||||||
add wave -noupdate -group lsu -expand -group {LSU ARB} /testbench/dut/hart/lsu/arbiter/SelPTW
|
add wave -noupdate -group lsu -expand -group {LSU ARB} /testbench/dut/hart/lsu/arbiter/SelPTW
|
||||||
add wave -noupdate -group lsu -expand -group dcache -color Gold /testbench/dut/hart/lsu/dcache/CurrState
|
add wave -noupdate -group lsu -expand -group dcache -color Gold /testbench/dut/hart/lsu/dcache/dcachefsm/CurrState
|
||||||
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/WalkerPageFaultM
|
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/WalkerPageFaultM
|
||||||
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/WriteDataM
|
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/WriteDataM
|
||||||
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SRAMBlockWriteEnableM
|
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SRAMBlockWriteEnableM
|
||||||
@ -253,72 +242,102 @@ add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcac
|
|||||||
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SRAMBlockWayWriteEnableM
|
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SRAMBlockWayWriteEnableM
|
||||||
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SelAdrM
|
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SelAdrM
|
||||||
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/DCacheMemWriteData
|
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/DCacheMemWriteData
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group replacement /testbench/dut/hart/lsu/dcache/genblk2/cacheLRU/LRUIn
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/WriteEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group replacement /testbench/dut/hart/lsu/dcache/genblk2/cacheLRU/WayIn
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/SetValid}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group replacement /testbench/dut/hart/lsu/dcache/genblk2/cacheLRU/LRUEn
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/SetDirty}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group replacement /testbench/dut/hart/lsu/dcache/genblk2/cacheLRU/LRUMask
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -label TAG {/testbench/dut/hart/lsu/dcache/MemWay[0]/CacheTagMem/StoredData}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group replacement /testbench/dut/hart/lsu/dcache/genblk2/cacheLRU/LRUOut
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/DirtyBits}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group replacement /testbench/dut/hart/lsu/dcache/genblk2/cacheLRU/VictimWay
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/ValidBits}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} /testbench/dut/hart/lsu/dcache/ReplacementBits
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[0]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} /testbench/dut/hart/lsu/dcache/NewReplacement
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[0]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} /testbench/dut/hart/lsu/dcache/LRUWriteEn
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word1 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[1]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/hart/lsu/dcache/CacheWays[0]/MemWay/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word1 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[1]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/hart/lsu/dcache/CacheWays[0]/MemWay/SetValid}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word2 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[2]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/hart/lsu/dcache/CacheWays[0]/MemWay/SetDirty}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word2 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[2]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/hart/lsu/dcache/CacheWays[0]/MemWay/Adr}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word3 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[3]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -label TAG {/testbench/dut/hart/lsu/dcache/CacheWays[0]/MemWay/CacheTagMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word3 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[3]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/hart/lsu/dcache/CacheWays[0]/MemWay/DirtyBits}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/DirtyBits}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/hart/lsu/dcache/CacheWays[0]/MemWay/ValidBits}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/SetDirty}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -expand -group Way0Word0 {/testbench/dut/hart/lsu/dcache/CacheWays[0]/MemWay/word[0]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/WriteEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -expand -group Way0Word0 {/testbench/dut/hart/lsu/dcache/CacheWays[0]/MemWay/word[0]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/WriteWordEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -expand -group Way0Word1 {/testbench/dut/hart/lsu/dcache/CacheWays[0]/MemWay/word[1]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -label TAG {/testbench/dut/hart/lsu/dcache/MemWay[1]/CacheTagMem/StoredData}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -expand -group Way0Word1 {/testbench/dut/hart/lsu/dcache/CacheWays[0]/MemWay/word[1]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word0 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[0]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -expand -group Way0Word2 {/testbench/dut/hart/lsu/dcache/CacheWays[0]/MemWay/word[2]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word0 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[0]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -expand -group Way0Word2 {/testbench/dut/hart/lsu/dcache/CacheWays[0]/MemWay/word[2]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[1]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -expand -group Way0Word3 {/testbench/dut/hart/lsu/dcache/CacheWays[0]/MemWay/word[3]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[1]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -expand -group Way0Word3 {/testbench/dut/hart/lsu/dcache/CacheWays[0]/MemWay/word[3]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word2 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[2]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/hart/lsu/dcache/CacheWays[1]/MemWay/DirtyBits}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word2 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[2]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/hart/lsu/dcache/CacheWays[1]/MemWay/SetDirty}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word3 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[3]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/hart/lsu/dcache/CacheWays[1]/MemWay/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word3 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[3]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/hart/lsu/dcache/CacheWays[1]/MemWay/WriteWordEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/WriteEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -label TAG {/testbench/dut/hart/lsu/dcache/CacheWays[1]/MemWay/CacheTagMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/SetValid}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -expand -group Way1Word0 {/testbench/dut/hart/lsu/dcache/CacheWays[1]/MemWay/word[0]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/SetDirty}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -expand -group Way1Word0 {/testbench/dut/hart/lsu/dcache/CacheWays[1]/MemWay/word[0]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -label TAG {/testbench/dut/hart/lsu/dcache/MemWay[2]/CacheTagMem/StoredData}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -expand -group Way1Word1 {/testbench/dut/hart/lsu/dcache/CacheWays[1]/MemWay/word[1]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/DirtyBits}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -expand -group Way1Word1 {/testbench/dut/hart/lsu/dcache/CacheWays[1]/MemWay/word[1]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/ValidBits}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -expand -group Way1Word2 {/testbench/dut/hart/lsu/dcache/CacheWays[1]/MemWay/word[2]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word0 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[0]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -expand -group Way1Word2 {/testbench/dut/hart/lsu/dcache/CacheWays[1]/MemWay/word[2]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word0 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[0]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -expand -group Way1Word3 {/testbench/dut/hart/lsu/dcache/CacheWays[1]/MemWay/word[3]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word1 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[1]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -expand -group Way1Word3 {/testbench/dut/hart/lsu/dcache/CacheWays[1]/MemWay/word[3]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word1 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[1]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/SRAMAdr
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[2]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/ReadDataBlockWayM
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[2]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/ReadDataBlockWayMaskedM
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word3 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[3]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/ReadDataBlockM
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word3 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[3]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/ReadDataBlockSetsM
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/WriteEnable}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/ReadDataWordM
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/SetValid}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/ReadTag
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/SetDirty}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/BlockReplacementBits
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -label TAG {/testbench/dut/hart/lsu/dcache/MemWay[3]/CacheTagMem/StoredData}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/DirtyBits}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/ValidBits}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word0 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[0]/CacheDataMem/StoredData}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word0 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[0]/CacheDataMem/WriteEnable}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word1 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[1]/CacheDataMem/StoredData}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word1 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[1]/CacheDataMem/WriteEnable}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word2 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[2]/CacheDataMem/WriteEnable}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word2 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[2]/CacheDataMem/StoredData}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[3]/CacheDataMem/WriteEnable}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[3]/CacheDataMem/StoredData}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group valid/dirty /testbench/dut/hart/lsu/dcache/SetValid
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group valid/dirty /testbench/dut/hart/lsu/dcache/ClearValid
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group valid/dirty /testbench/dut/hart/lsu/dcache/SetDirty
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group valid/dirty /testbench/dut/hart/lsu/dcache/ClearDirty
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/WayHit}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/Valid}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/Dirty}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/ReadTag}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/WayHit}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/Valid}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/Dirty}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/ReadTag}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/WayHit}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/Valid}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/Dirty}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/ReadTag}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/WayHit}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/Valid}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/Dirty}
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/ReadTag}
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/WayHit
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/WayHit
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/Dirty
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/ReadDataBlockWayMaskedM
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/Valid
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/ReadDataWordM
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/hart/lsu/dcache/VictimReadDataBlockM
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/ReadDataWordMuxM
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/hart/lsu/dcache/VictimTag
|
add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/hart/lsu/dcache/VictimTag
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/hart/lsu/dcache/VictimWay
|
add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/hart/lsu/dcache/VictimWay
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/hart/lsu/dcache/VictimDirtyWay
|
add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/hart/lsu/dcache/VictimDirtyWay
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/hart/lsu/dcache/VictimDirty
|
add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/hart/lsu/dcache/VictimDirty
|
||||||
add wave -noupdate -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/MemRWM
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/MemRWM
|
||||||
add wave -noupdate -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/MemAdrE
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/MemAdrE
|
||||||
add wave -noupdate -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/MemAdrM
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/MemPAdrM
|
||||||
add wave -noupdate -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/MemPAdrM
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/Funct3M
|
||||||
add wave -noupdate -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/Funct3M
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/Funct7M
|
||||||
add wave -noupdate -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/Funct7M
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/AtomicM
|
||||||
add wave -noupdate -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/AtomicM
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/CacheableM
|
||||||
add wave -noupdate -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/CacheableM
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/WriteDataM
|
||||||
add wave -noupdate -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/WriteDataM
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/ReadDataM
|
||||||
add wave -noupdate -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/ReadDataM
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/DCacheStall
|
||||||
add wave -noupdate -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/DCacheStall
|
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group status /testbench/dut/hart/lsu/dcache/WayHit
|
add wave -noupdate -group lsu -expand -group dcache -group status /testbench/dut/hart/lsu/dcache/WayHit
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group status -color {Medium Orchid} /testbench/dut/hart/lsu/dcache/CacheHit
|
add wave -noupdate -group lsu -expand -group dcache -group status -color {Medium Orchid} /testbench/dut/hart/lsu/dcache/CacheHit
|
||||||
|
add wave -noupdate -group lsu -expand -group dcache -group status /testbench/dut/hart/lsu/dcache/FetchCount
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Memory Side} /testbench/dut/hart/lsu/dcache/AHBPAdr
|
add wave -noupdate -group lsu -expand -group dcache -group {Memory Side} /testbench/dut/hart/lsu/dcache/AHBPAdr
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Memory Side} /testbench/dut/hart/lsu/dcache/AHBRead
|
add wave -noupdate -group lsu -expand -group dcache -group {Memory Side} /testbench/dut/hart/lsu/dcache/AHBRead
|
||||||
add wave -noupdate -group lsu -expand -group dcache -group {Memory Side} /testbench/dut/hart/lsu/dcache/AHBWrite
|
add wave -noupdate -group lsu -expand -group dcache -group {Memory Side} /testbench/dut/hart/lsu/dcache/AHBWrite
|
||||||
@ -450,29 +469,35 @@ add wave -noupdate -group UART /testbench/dut/uncore/uart/uart/HSELUART
|
|||||||
add wave -noupdate -group UART /testbench/dut/uncore/uart/uart/HADDR
|
add wave -noupdate -group UART /testbench/dut/uncore/uart/uart/HADDR
|
||||||
add wave -noupdate -group UART /testbench/dut/uncore/uart/uart/HWRITE
|
add wave -noupdate -group UART /testbench/dut/uncore/uart/uart/HWRITE
|
||||||
add wave -noupdate -group UART /testbench/dut/uncore/uart/uart/HWDATA
|
add wave -noupdate -group UART /testbench/dut/uncore/uart/uart/HWDATA
|
||||||
add wave -noupdate -group {debug trace} -expand -group mem -color Yellow /testbench/dut/hart/FlushW
|
add wave -noupdate -expand -group {debug trace} -expand -group mem -color Yellow /testbench/dut/hart/FlushW
|
||||||
add wave -noupdate -group {debug trace} -expand -group mem /testbench/dut/hart/priv/trap/InstrValidM
|
add wave -noupdate -expand -group {debug trace} -expand -group mem /testbench/dut/hart/priv/trap/InstrValidM
|
||||||
add wave -noupdate -group {debug trace} -expand -group mem /testbench/checkInstrM
|
add wave -noupdate -expand -group {debug trace} -expand -group mem /testbench/checkInstrM
|
||||||
add wave -noupdate -group {debug trace} -expand -group mem /testbench/dut/hart/PCM
|
add wave -noupdate -expand -group {debug trace} -expand -group mem /testbench/dut/hart/PCM
|
||||||
add wave -noupdate -group {debug trace} -expand -group mem /testbench/ExpectedPCM
|
add wave -noupdate -expand -group {debug trace} -expand -group mem /testbench/ExpectedPCM
|
||||||
add wave -noupdate -group {debug trace} -expand -group mem /testbench/line
|
add wave -noupdate -expand -group {debug trace} -expand -group mem /testbench/line
|
||||||
add wave -noupdate -group {debug trace} -expand -group mem /testbench/textM
|
add wave -noupdate -expand -group {debug trace} -expand -group mem /testbench/textM
|
||||||
add wave -noupdate -group {debug trace} -expand -group mem -color Brown /testbench/dut/hart/hzu/TrapM
|
add wave -noupdate -expand -group {debug trace} -expand -group mem -color Brown /testbench/dut/hart/hzu/TrapM
|
||||||
add wave -noupdate -group {debug trace} -expand -group wb /testbench/dut/hart/ieu/c/InstrValidW
|
add wave -noupdate -expand -group {debug trace} -expand -group wb /testbench/dut/hart/ieu/c/InstrValidW
|
||||||
add wave -noupdate -group {debug trace} -expand -group wb /testbench/checkInstrW
|
add wave -noupdate -expand -group {debug trace} -expand -group wb /testbench/checkInstrW
|
||||||
add wave -noupdate -group {debug trace} -expand -group wb /testbench/PCW
|
add wave -noupdate -expand -group {debug trace} -expand -group wb /testbench/PCW
|
||||||
add wave -noupdate -group {debug trace} -expand -group wb /testbench/ExpectedPCW
|
add wave -noupdate -expand -group {debug trace} -expand -group wb /testbench/ExpectedPCW
|
||||||
add wave -noupdate -group {debug trace} -expand -group wb /testbench/TrapW
|
add wave -noupdate -expand -group {debug trace} -expand -group wb /testbench/TrapW
|
||||||
add wave -noupdate -group {debug trace} -expand -group wb /testbench/textW
|
add wave -noupdate -expand -group {debug trace} -expand -group wb /testbench/textW
|
||||||
add wave -noupdate -group {pc selection} /testbench/dut/hart/ifu/PCNext2F
|
add wave -noupdate -group {pc selection} /testbench/dut/hart/ifu/PCNext2F
|
||||||
add wave -noupdate -group {pc selection} /testbench/dut/hart/ifu/PrivilegedNextPCM
|
add wave -noupdate -group {pc selection} /testbench/dut/hart/ifu/PrivilegedNextPCM
|
||||||
add wave -noupdate -group {pc selection} /testbench/dut/hart/ifu/PrivilegedChangePCM
|
add wave -noupdate -group {pc selection} /testbench/dut/hart/ifu/PrivilegedChangePCM
|
||||||
add wave -noupdate -group {pc selection} /testbench/dut/hart/priv/PrivilegedNextPCM
|
add wave -noupdate -group {pc selection} /testbench/dut/hart/priv/PrivilegedNextPCM
|
||||||
add wave -noupdate -group {pc selection} /testbench/dut/hart/priv/trap/PrivilegedVectoredTrapVector
|
add wave -noupdate -group {pc selection} /testbench/dut/hart/priv/trap/PrivilegedVectoredTrapVector
|
||||||
add wave -noupdate -group {pc selection} /testbench/dut/hart/priv/trap/PrivilegedTrapVector
|
add wave -noupdate -group {pc selection} /testbench/dut/hart/priv/trap/PrivilegedTrapVector
|
||||||
|
add wave -noupdate /testbench/dut/hart/ifu/PCCorrectE
|
||||||
|
add wave -noupdate /testbench/dut/hart/ifu/PCSrcE
|
||||||
|
add wave -noupdate /testbench/dut/hart/ieu/c/BranchTakenE
|
||||||
|
add wave -noupdate /testbench/dut/hart/ieu/c/BranchE
|
||||||
|
add wave -noupdate /testbench/dut/hart/ifu/PCTargetE
|
||||||
|
add wave -noupdate /testbench/dut/hart/ifu/PCLinkE
|
||||||
TreeUpdate [SetDefaultTree]
|
TreeUpdate [SetDefaultTree]
|
||||||
WaveRestoreCursors {{Cursor 6} {161370956 ns} 0} {{Cursor 21} {161371350 ns} 0} {{Cursor 22} {72228581 ns} 0} {{Cursor 23} {11297671 ns} 0}
|
WaveRestoreCursors {{Cursor 6} {160470606 ns} 0} {{Cursor 21} {161371350 ns} 0} {{Cursor 22} {72228581 ns} 0} {{Cursor 23} {11297671 ns} 0}
|
||||||
quietly wave cursor active 3
|
quietly wave cursor active 1
|
||||||
configure wave -namecolwidth 250
|
configure wave -namecolwidth 250
|
||||||
configure wave -valuecolwidth 354
|
configure wave -valuecolwidth 354
|
||||||
configure wave -justifyvalue left
|
configure wave -justifyvalue left
|
||||||
@ -487,4 +512,4 @@ configure wave -griddelta 40
|
|||||||
configure wave -timeline 0
|
configure wave -timeline 0
|
||||||
configure wave -timelineunits ns
|
configure wave -timelineunits ns
|
||||||
update
|
update
|
||||||
WaveRestoreZoom {72227242 ns} {72229920 ns}
|
WaveRestoreZoom {160470352 ns} {160470676 ns}
|
||||||
|
@ -16,41 +16,41 @@ add wave -noupdate -expand -group {Memory Stage} /testbench/dut/hart/InstrM
|
|||||||
add wave -noupdate -expand -group {Memory Stage} /testbench/dut/hart/lsu/MemAdrM
|
add wave -noupdate -expand -group {Memory Stage} /testbench/dut/hart/lsu/MemAdrM
|
||||||
add wave -noupdate /testbench/dut/hart/ieu/dp/ResultM
|
add wave -noupdate /testbench/dut/hart/ieu/dp/ResultM
|
||||||
add wave -noupdate /testbench/dut/hart/ieu/dp/ResultW
|
add wave -noupdate /testbench/dut/hart/ieu/dp/ResultW
|
||||||
add wave -noupdate -group HDU -group traps /testbench/dut/hart/priv/trap/InstrMisalignedFaultM
|
add wave -noupdate -expand -group HDU -group traps /testbench/dut/hart/priv/trap/InstrMisalignedFaultM
|
||||||
add wave -noupdate -group HDU -group traps /testbench/dut/hart/priv/trap/InstrAccessFaultM
|
add wave -noupdate -expand -group HDU -group traps /testbench/dut/hart/priv/trap/InstrAccessFaultM
|
||||||
add wave -noupdate -group HDU -group traps /testbench/dut/hart/priv/trap/IllegalInstrFaultM
|
add wave -noupdate -expand -group HDU -group traps /testbench/dut/hart/priv/trap/IllegalInstrFaultM
|
||||||
add wave -noupdate -group HDU -group traps /testbench/dut/hart/priv/trap/BreakpointFaultM
|
add wave -noupdate -expand -group HDU -group traps /testbench/dut/hart/priv/trap/BreakpointFaultM
|
||||||
add wave -noupdate -group HDU -group traps /testbench/dut/hart/priv/trap/LoadMisalignedFaultM
|
add wave -noupdate -expand -group HDU -group traps /testbench/dut/hart/priv/trap/LoadMisalignedFaultM
|
||||||
add wave -noupdate -group HDU -group traps /testbench/dut/hart/priv/trap/StoreMisalignedFaultM
|
add wave -noupdate -expand -group HDU -group traps /testbench/dut/hart/priv/trap/StoreMisalignedFaultM
|
||||||
add wave -noupdate -group HDU -group traps /testbench/dut/hart/priv/trap/LoadAccessFaultM
|
add wave -noupdate -expand -group HDU -group traps /testbench/dut/hart/priv/trap/LoadAccessFaultM
|
||||||
add wave -noupdate -group HDU -group traps /testbench/dut/hart/priv/trap/StoreAccessFaultM
|
add wave -noupdate -expand -group HDU -group traps /testbench/dut/hart/priv/trap/StoreAccessFaultM
|
||||||
add wave -noupdate -group HDU -group traps /testbench/dut/hart/priv/trap/EcallFaultM
|
add wave -noupdate -expand -group HDU -group traps /testbench/dut/hart/priv/trap/EcallFaultM
|
||||||
add wave -noupdate -group HDU -group traps /testbench/dut/hart/priv/trap/InstrPageFaultM
|
add wave -noupdate -expand -group HDU -group traps /testbench/dut/hart/priv/trap/InstrPageFaultM
|
||||||
add wave -noupdate -group HDU -group traps /testbench/dut/hart/priv/trap/LoadPageFaultM
|
add wave -noupdate -expand -group HDU -group traps /testbench/dut/hart/priv/trap/LoadPageFaultM
|
||||||
add wave -noupdate -group HDU -group traps /testbench/dut/hart/priv/trap/StorePageFaultM
|
add wave -noupdate -expand -group HDU -group traps /testbench/dut/hart/priv/trap/StorePageFaultM
|
||||||
add wave -noupdate -group HDU -group traps /testbench/dut/hart/priv/trap/InterruptM
|
add wave -noupdate -expand -group HDU -group traps /testbench/dut/hart/priv/trap/InterruptM
|
||||||
add wave -noupdate -group HDU -group interrupts /testbench/dut/hart/priv/trap/PendingIntsM
|
add wave -noupdate -expand -group HDU -group interrupts /testbench/dut/hart/priv/trap/PendingIntsM
|
||||||
add wave -noupdate -group HDU -group interrupts /testbench/dut/hart/priv/trap/CommittedM
|
add wave -noupdate -expand -group HDU -group interrupts /testbench/dut/hart/priv/trap/CommittedM
|
||||||
add wave -noupdate -group HDU -group interrupts /testbench/dut/hart/priv/trap/InstrValidM
|
add wave -noupdate -expand -group HDU -group interrupts /testbench/dut/hart/priv/trap/InstrValidM
|
||||||
add wave -noupdate -group HDU -group hazards /testbench/dut/hart/hzu/BPPredWrongE
|
add wave -noupdate -expand -group HDU -group hazards /testbench/dut/hart/hzu/BPPredWrongE
|
||||||
add wave -noupdate -group HDU -group hazards /testbench/dut/hart/hzu/CSRWritePendingDEM
|
add wave -noupdate -expand -group HDU -group hazards /testbench/dut/hart/hzu/CSRWritePendingDEM
|
||||||
add wave -noupdate -group HDU -group hazards /testbench/dut/hart/hzu/RetM
|
add wave -noupdate -expand -group HDU -group hazards /testbench/dut/hart/hzu/RetM
|
||||||
add wave -noupdate -group HDU -group hazards /testbench/dut/hart/hzu/TrapM
|
add wave -noupdate -expand -group HDU -group hazards /testbench/dut/hart/hzu/TrapM
|
||||||
add wave -noupdate -group HDU -group hazards /testbench/dut/hart/hzu/LoadStallD
|
add wave -noupdate -expand -group HDU -group hazards /testbench/dut/hart/hzu/LoadStallD
|
||||||
add wave -noupdate -group HDU -group hazards /testbench/dut/hart/hzu/StoreStallD
|
add wave -noupdate -expand -group HDU -group hazards /testbench/dut/hart/hzu/StoreStallD
|
||||||
add wave -noupdate -group HDU -group hazards /testbench/dut/hart/hzu/ICacheStallF
|
add wave -noupdate -expand -group HDU -group hazards /testbench/dut/hart/hzu/ICacheStallF
|
||||||
add wave -noupdate -group HDU -group hazards /testbench/dut/hart/hzu/LSUStall
|
add wave -noupdate -expand -group HDU -group hazards /testbench/dut/hart/hzu/LSUStall
|
||||||
add wave -noupdate -group HDU -group hazards /testbench/dut/hart/MulDivStallD
|
add wave -noupdate -expand -group HDU -group hazards /testbench/dut/hart/MulDivStallD
|
||||||
add wave -noupdate -group HDU -expand -group Flush -color Yellow /testbench/dut/hart/hzu/FlushF
|
add wave -noupdate -expand -group HDU -expand -group Flush -color Yellow /testbench/dut/hart/hzu/FlushF
|
||||||
add wave -noupdate -group HDU -expand -group Flush -color Yellow /testbench/dut/hart/FlushD
|
add wave -noupdate -expand -group HDU -expand -group Flush -color Yellow /testbench/dut/hart/FlushD
|
||||||
add wave -noupdate -group HDU -expand -group Flush -color Yellow /testbench/dut/hart/FlushE
|
add wave -noupdate -expand -group HDU -expand -group Flush -color Yellow /testbench/dut/hart/FlushE
|
||||||
add wave -noupdate -group HDU -expand -group Flush -color Yellow /testbench/dut/hart/FlushM
|
add wave -noupdate -expand -group HDU -expand -group Flush -color Yellow /testbench/dut/hart/FlushM
|
||||||
add wave -noupdate -group HDU -expand -group Flush -color Yellow /testbench/dut/hart/FlushW
|
add wave -noupdate -expand -group HDU -expand -group Flush -color Yellow /testbench/dut/hart/FlushW
|
||||||
add wave -noupdate -group HDU -expand -group Stall -color Orange /testbench/dut/hart/StallF
|
add wave -noupdate -expand -group HDU -expand -group Stall -color Orange /testbench/dut/hart/StallF
|
||||||
add wave -noupdate -group HDU -expand -group Stall -color Orange /testbench/dut/hart/StallD
|
add wave -noupdate -expand -group HDU -expand -group Stall -color Orange /testbench/dut/hart/StallD
|
||||||
add wave -noupdate -group HDU -expand -group Stall -color Orange /testbench/dut/hart/StallE
|
add wave -noupdate -expand -group HDU -expand -group Stall -color Orange /testbench/dut/hart/StallE
|
||||||
add wave -noupdate -group HDU -expand -group Stall -color Orange /testbench/dut/hart/StallM
|
add wave -noupdate -expand -group HDU -expand -group Stall -color Orange /testbench/dut/hart/StallM
|
||||||
add wave -noupdate -group HDU -expand -group Stall -color Orange /testbench/dut/hart/StallW
|
add wave -noupdate -expand -group HDU -expand -group Stall -color Orange /testbench/dut/hart/StallW
|
||||||
add wave -noupdate -group Bpred -color Orange /testbench/dut/hart/ifu/bpred/bpred/Predictor/DirPredictor/GHR
|
add wave -noupdate -group Bpred -color Orange /testbench/dut/hart/ifu/bpred/bpred/Predictor/DirPredictor/GHR
|
||||||
add wave -noupdate -group Bpred -expand -group {branch update selection inputs} /testbench/dut/hart/ifu/bpred/bpred/Predictor/DirPredictor/BPPredF
|
add wave -noupdate -group Bpred -expand -group {branch update selection inputs} /testbench/dut/hart/ifu/bpred/bpred/Predictor/DirPredictor/BPPredF
|
||||||
add wave -noupdate -group Bpred -expand -group {branch update selection inputs} {/testbench/dut/hart/ifu/bpred/bpred/Predictor/DirPredictor/InstrClassE[0]}
|
add wave -noupdate -group Bpred -expand -group {branch update selection inputs} {/testbench/dut/hart/ifu/bpred/bpred/Predictor/DirPredictor/InstrClassE[0]}
|
||||||
@ -98,11 +98,12 @@ add wave -noupdate -group Bpred -expand -group {bp wrong} /testbench/dut/hart/if
|
|||||||
add wave -noupdate -group Bpred -expand -group {bp wrong} /testbench/dut/hart/ifu/bpred/bpred/BPPredClassNonCFIWrongE
|
add wave -noupdate -group Bpred -expand -group {bp wrong} /testbench/dut/hart/ifu/bpred/bpred/BPPredClassNonCFIWrongE
|
||||||
add wave -noupdate -group Bpred -expand -group {bp wrong} /testbench/dut/hart/ifu/bpred/bpred/BPPredWrongE
|
add wave -noupdate -group Bpred -expand -group {bp wrong} /testbench/dut/hart/ifu/bpred/bpred/BPPredWrongE
|
||||||
add wave -noupdate -group Bpred /testbench/dut/hart/ifu/bpred/bpred/BPPredWrongE
|
add wave -noupdate -group Bpred /testbench/dut/hart/ifu/bpred/bpred/BPPredWrongE
|
||||||
add wave -noupdate -group {instruction pipeline} /testbench/InstrFName
|
add wave -noupdate -expand -group {instruction pipeline} /testbench/InstrFName
|
||||||
add wave -noupdate -group {instruction pipeline} /testbench/dut/hart/ifu/InstrD
|
add wave -noupdate -expand -group {instruction pipeline} /testbench/dut/hart/ifu/icache/FinalInstrRawF
|
||||||
add wave -noupdate -group {instruction pipeline} /testbench/dut/hart/ifu/InstrE
|
add wave -noupdate -expand -group {instruction pipeline} /testbench/dut/hart/ifu/InstrD
|
||||||
add wave -noupdate -group {instruction pipeline} /testbench/dut/hart/ifu/InstrM
|
add wave -noupdate -expand -group {instruction pipeline} /testbench/dut/hart/ifu/InstrE
|
||||||
add wave -noupdate -group {instruction pipeline} /testbench/InstrW
|
add wave -noupdate -expand -group {instruction pipeline} /testbench/dut/hart/ifu/InstrM
|
||||||
|
add wave -noupdate -expand -group {instruction pipeline} /testbench/InstrW
|
||||||
add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/PCNextF
|
add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/PCNextF
|
||||||
add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/PCF
|
add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/PCF
|
||||||
add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/PCPlus2or4F
|
add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/PCPlus2or4F
|
||||||
@ -160,12 +161,12 @@ add wave -noupdate -group {alu execution stage} /testbench/dut/hart/ieu/dp/Write
|
|||||||
add wave -noupdate -group {alu execution stage} /testbench/dut/hart/ieu/dp/ALUResultE
|
add wave -noupdate -group {alu execution stage} /testbench/dut/hart/ieu/dp/ALUResultE
|
||||||
add wave -noupdate -group {alu execution stage} /testbench/dut/hart/ieu/dp/SrcAE
|
add wave -noupdate -group {alu execution stage} /testbench/dut/hart/ieu/dp/SrcAE
|
||||||
add wave -noupdate -group {alu execution stage} /testbench/dut/hart/ieu/dp/SrcBE
|
add wave -noupdate -group {alu execution stage} /testbench/dut/hart/ieu/dp/SrcBE
|
||||||
add wave -noupdate -group PCS /testbench/dut/hart/ifu/PCNextF
|
add wave -noupdate -expand -group PCS /testbench/dut/hart/ifu/PCNextF
|
||||||
add wave -noupdate -group PCS /testbench/dut/hart/PCF
|
add wave -noupdate -expand -group PCS /testbench/dut/hart/PCF
|
||||||
add wave -noupdate -group PCS /testbench/dut/hart/ifu/PCD
|
add wave -noupdate -expand -group PCS /testbench/dut/hart/ifu/PCD
|
||||||
add wave -noupdate -group PCS /testbench/dut/hart/PCE
|
add wave -noupdate -expand -group PCS /testbench/dut/hart/PCE
|
||||||
add wave -noupdate -group PCS /testbench/dut/hart/PCM
|
add wave -noupdate -expand -group PCS /testbench/dut/hart/PCM
|
||||||
add wave -noupdate -group PCS /testbench/PCW
|
add wave -noupdate -expand -group PCS /testbench/PCW
|
||||||
add wave -noupdate -group muldiv /testbench/dut/hart/mdu/InstrD
|
add wave -noupdate -group muldiv /testbench/dut/hart/mdu/InstrD
|
||||||
add wave -noupdate -group muldiv /testbench/dut/hart/mdu/SrcAE
|
add wave -noupdate -group muldiv /testbench/dut/hart/mdu/SrcAE
|
||||||
add wave -noupdate -group muldiv /testbench/dut/hart/mdu/SrcBE
|
add wave -noupdate -group muldiv /testbench/dut/hart/mdu/SrcBE
|
||||||
@ -185,43 +186,85 @@ add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/N
|
|||||||
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/D
|
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/D
|
||||||
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/Q
|
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/Q
|
||||||
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/rem0
|
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/rem0
|
||||||
add wave -noupdate -group icache -color Orange /testbench/dut/hart/ifu/icache/controller/CurrState
|
add wave -noupdate -expand -group icache -color Gold /testbench/dut/hart/ifu/icache/controller/CurrState
|
||||||
add wave -noupdate -group icache /testbench/dut/hart/ifu/icache/controller/NextState
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/BasePAdrF
|
||||||
add wave -noupdate -group icache /testbench/dut/hart/ifu/ITLBMissF
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/WayHit
|
||||||
add wave -noupdate -group icache /testbench/dut/hart/ifu/icache/ITLBWriteF
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/genblk1/cachereplacementpolicy/BlockReplacementBits
|
||||||
add wave -noupdate -group icache -group {tag read} /testbench/dut/hart/ifu/icache/cachemem/DataValidBit
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/genblk1/cachereplacementpolicy/EncVicWay
|
||||||
add wave -noupdate -group icache -group {tag read} /testbench/dut/hart/ifu/icache/cachemem/cachetags/ReadData
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/VictimWay
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/hit
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/hart/ifu/icache/MemWay[0]/WriteEnable}
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spill
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/hart/ifu/icache/MemWay[0]/SetValid}
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/ICacheStallF
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way0 -label TAG {/testbench/dut/hart/ifu/icache/MemWay[0]/CacheTagMem/StoredData}
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/SavePC
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/hart/ifu/icache/MemWay[0]/ValidBits}
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spillSave
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way0 -expand -group Way0Word0 {/testbench/dut/hart/ifu/icache/MemWay[0]/word[0]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/UnalignedSelect
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way0 -expand -group Way0Word0 {/testbench/dut/hart/ifu/icache/MemWay[0]/word[0]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/PCMux
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way0 -group Way0Word1 {/testbench/dut/hart/ifu/icache/MemWay[0]/word[1]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spillSave
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way0 -group Way0Word1 {/testbench/dut/hart/ifu/icache/MemWay[0]/word[1]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/CntReset
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way0 -group Way0Word2 {/testbench/dut/hart/ifu/icache/MemWay[0]/word[2]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/PreCntEn
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way0 -group Way0Word2 {/testbench/dut/hart/ifu/icache/MemWay[0]/word[2]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group icache -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/CntEn
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way0 -group Way0Word3 {/testbench/dut/hart/ifu/icache/MemWay[0]/word[3]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group icache -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/NUMLINES
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way0 -group Way0Word3 {/testbench/dut/hart/ifu/icache/MemWay[0]/word[3]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group icache -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/BLOCKLEN
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/hart/ifu/icache/MemWay[1]/WriteEnable}
|
||||||
add wave -noupdate -group icache -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/BLOCKBYTELEN
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/hart/ifu/icache/MemWay[1]/WriteWordEnable}
|
||||||
add wave -noupdate -group icache -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/OFFSETLEN
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way1 -label TAG {/testbench/dut/hart/ifu/icache/MemWay[1]/CacheTagMem/StoredData}
|
||||||
add wave -noupdate -group icache -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/INDEXLEN
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way1 -expand -group Way1Word0 {/testbench/dut/hart/ifu/icache/MemWay[1]/word[0]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group icache -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/TAGLEN
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way1 -expand -group Way1Word0 {/testbench/dut/hart/ifu/icache/MemWay[1]/word[0]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/FetchCountFlag
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way1 -group Way1Word1 {/testbench/dut/hart/ifu/icache/MemWay[1]/word[1]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/FetchCount
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way1 -group Way1Word1 {/testbench/dut/hart/ifu/icache/MemWay[1]/word[1]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrPAdrF
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way1 -group Way1Word2 {/testbench/dut/hart/ifu/icache/MemWay[1]/word[2]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrReadF
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way1 -group Way1Word2 {/testbench/dut/hart/ifu/icache/MemWay[1]/word[2]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrAckF
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way1 -group Way1Word3 {/testbench/dut/hart/ifu/icache/MemWay[1]/word[3]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrInF
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way1 -group Way1Word3 {/testbench/dut/hart/ifu/icache/MemWay[1]/word[3]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/ICacheMemWriteEnable
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way2 {/testbench/dut/hart/ifu/icache/MemWay[2]/WriteEnable}
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/ICacheMemWriteData
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way2 {/testbench/dut/hart/ifu/icache/MemWay[2]/SetValid}
|
||||||
add wave -noupdate -group icache -expand -group memory -group {tag write} /testbench/dut/hart/ifu/icache/cachemem/WriteEnable
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way2 -label TAG {/testbench/dut/hart/ifu/icache/MemWay[2]/CacheTagMem/StoredData}
|
||||||
add wave -noupdate -group icache -expand -group memory -group {tag write} /testbench/dut/hart/ifu/icache/cachemem/WriteLine
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way2 {/testbench/dut/hart/ifu/icache/MemWay[2]/ValidBits}
|
||||||
add wave -noupdate -group icache -expand -group memory -group {tag write} /testbench/dut/hart/ifu/icache/cachemem/cachetags/StoredData
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way2 -expand -group Way2Word0 {/testbench/dut/hart/ifu/icache/MemWay[2]/word[0]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group icache -expand -group {instr to cpu} /testbench/dut/hart/ifu/icache/controller/FinalInstrRawF
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way2 -expand -group Way2Word0 {/testbench/dut/hart/ifu/icache/MemWay[2]/word[0]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -group icache -expand -group pc /testbench/dut/hart/ifu/icache/controller/PCPF
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way2 -group Way2Word1 {/testbench/dut/hart/ifu/icache/MemWay[2]/word[1]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -group icache -expand -group pc /testbench/dut/hart/ifu/icache/controller/PCPreFinalF
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way2 -group Way2Word1 {/testbench/dut/hart/ifu/icache/MemWay[2]/word[1]/CacheDataMem/WriteEnable}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way2 -group Way2Word2 {/testbench/dut/hart/ifu/icache/MemWay[2]/word[2]/CacheDataMem/WriteEnable}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way2 -group Way2Word2 {/testbench/dut/hart/ifu/icache/MemWay[2]/word[2]/CacheDataMem/StoredData}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way2 -group Way2Word3 {/testbench/dut/hart/ifu/icache/MemWay[2]/word[3]/CacheDataMem/WriteEnable}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way2 -group Way2Word3 {/testbench/dut/hart/ifu/icache/MemWay[2]/word[3]/CacheDataMem/StoredData}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/ifu/icache/MemWay[3]/WriteEnable}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/ifu/icache/MemWay[3]/SetValid}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way3 -label TAG {/testbench/dut/hart/ifu/icache/MemWay[3]/CacheTagMem/StoredData}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/ifu/icache/MemWay[3]/DirtyBits}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/ifu/icache/MemWay[3]/ValidBits}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word0 {/testbench/dut/hart/ifu/icache/MemWay[3]/word[0]/CacheDataMem/StoredData}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word0 {/testbench/dut/hart/ifu/icache/MemWay[3]/word[0]/CacheDataMem/WriteEnable}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way3 -group Way3Word1 {/testbench/dut/hart/ifu/icache/MemWay[3]/word[1]/CacheDataMem/StoredData}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way3 -group Way3Word1 {/testbench/dut/hart/ifu/icache/MemWay[3]/word[1]/CacheDataMem/WriteEnable}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way3 -group Way3Word2 {/testbench/dut/hart/ifu/icache/MemWay[3]/word[2]/CacheDataMem/WriteEnable}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way3 -group Way3Word2 {/testbench/dut/hart/ifu/icache/MemWay[3]/word[2]/CacheDataMem/StoredData}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way3 -group Way3Word3 {/testbench/dut/hart/ifu/icache/MemWay[3]/word[3]/CacheDataMem/WriteEnable}
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {Cache SRAM writes} -expand -group way3 -group Way3Word3 {/testbench/dut/hart/ifu/icache/MemWay[3]/word[3]/CacheDataMem/StoredData}
|
||||||
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/controller/NextState
|
||||||
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/ITLBMissF
|
||||||
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/ITLBWriteF
|
||||||
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/ReadLineF
|
||||||
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/PCNextIndexF
|
||||||
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/ReadLineF
|
||||||
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/BasePAdrF
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/hit
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spill
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/ICacheStallF
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/SavePC
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spillSave
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/UnalignedSelect
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spillSave
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/CntReset
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/PreCntEn
|
||||||
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/CntEn
|
||||||
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/InstrPAdrF
|
||||||
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/InstrInF
|
||||||
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/FetchCountFlag
|
||||||
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/FetchCount
|
||||||
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrReadF
|
||||||
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrAckF
|
||||||
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/ICacheMemWriteEnable
|
||||||
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/ICacheMemWriteData
|
||||||
add wave -noupdate -group AHB -color Gold /testbench/dut/hart/ebu/BusState
|
add wave -noupdate -group AHB -color Gold /testbench/dut/hart/ebu/BusState
|
||||||
add wave -noupdate -group AHB /testbench/dut/hart/ebu/NextBusState
|
add wave -noupdate -group AHB /testbench/dut/hart/ebu/NextBusState
|
||||||
add wave -noupdate -group AHB -expand -group {input requests} /testbench/dut/hart/ebu/AtomicMaskedM
|
add wave -noupdate -group AHB -expand -group {input requests} /testbench/dut/hart/ebu/AtomicMaskedM
|
||||||
@ -244,164 +287,156 @@ add wave -noupdate -group AHB /testbench/dut/hart/ebu/HADDRD
|
|||||||
add wave -noupdate -group AHB /testbench/dut/hart/ebu/HSIZED
|
add wave -noupdate -group AHB /testbench/dut/hart/ebu/HSIZED
|
||||||
add wave -noupdate -group AHB /testbench/dut/hart/ebu/HWRITED
|
add wave -noupdate -group AHB /testbench/dut/hart/ebu/HWRITED
|
||||||
add wave -noupdate -group AHB /testbench/dut/hart/ebu/StallW
|
add wave -noupdate -group AHB /testbench/dut/hart/ebu/StallW
|
||||||
add wave -noupdate -expand -group lsu -expand -group {LSU ARB} /testbench/dut/hart/lsu/arbiter/SelPTW
|
add wave -noupdate -group lsu -expand -group {LSU ARB} /testbench/dut/hart/lsu/arbiter/SelPTW
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -color Gold /testbench/dut/hart/lsu/dcache/dcachefsm/CurrState
|
add wave -noupdate -group lsu -expand -group dcache -color Gold /testbench/dut/hart/lsu/dcache/dcachefsm/CurrState
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/WalkerPageFaultM
|
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/WalkerPageFaultM
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/WriteDataM
|
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/WriteDataM
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SRAMBlockWriteEnableM
|
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SRAMBlockWriteEnableM
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SRAMWordWriteEnableM
|
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SRAMWordWriteEnableM
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SRAMWayWriteEnable
|
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SRAMWayWriteEnable
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SRAMWordEnable
|
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SRAMWordEnable
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SRAMBlockWayWriteEnableM
|
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SRAMBlockWayWriteEnableM
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SelAdrM
|
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/SelAdrM
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/DCacheMemWriteData
|
add wave -noupdate -group lsu -expand -group dcache /testbench/dut/hart/lsu/dcache/DCacheMemWriteData
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/SetValid}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/SetValid}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/SetDirty}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/SetDirty}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -label TAG {/testbench/dut/hart/lsu/dcache/MemWay[0]/CacheTagMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -label TAG {/testbench/dut/hart/lsu/dcache/MemWay[0]/CacheTagMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/DirtyBits}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/DirtyBits}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/ValidBits}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/ValidBits}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[0]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[0]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[0]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[0]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word1 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[1]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word1 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[1]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word1 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[1]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word1 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[1]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word2 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[2]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word2 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[2]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word2 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[2]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word2 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[2]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word3 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[3]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word3 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[3]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word3 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[3]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way0 -expand -group Way0Word3 {/testbench/dut/hart/lsu/dcache/MemWay[0]/word[3]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/DirtyBits}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/DirtyBits}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/SetDirty}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/SetDirty}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/WriteWordEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/WriteWordEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -label TAG {/testbench/dut/hart/lsu/dcache/MemWay[1]/CacheTagMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -label TAG {/testbench/dut/hart/lsu/dcache/MemWay[1]/CacheTagMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word0 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[0]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word0 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[0]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word0 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[0]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word0 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[0]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[1]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[1]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[1]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[1]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word2 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[2]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word2 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[2]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word2 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[2]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word2 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[2]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word3 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[3]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word3 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[3]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word3 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[3]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way1 -expand -group Way1Word3 {/testbench/dut/hart/lsu/dcache/MemWay[1]/word[3]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/SetValid}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/SetValid}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/SetDirty}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/SetDirty}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -label TAG {/testbench/dut/hart/lsu/dcache/MemWay[2]/CacheTagMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -label TAG {/testbench/dut/hart/lsu/dcache/MemWay[2]/CacheTagMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/DirtyBits}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/DirtyBits}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/ValidBits}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/ValidBits}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word0 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[0]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word0 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[0]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word0 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[0]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word0 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[0]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word1 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[1]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word1 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[1]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word1 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[1]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word1 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[1]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[2]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[2]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[2]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[2]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word3 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[3]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word3 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[3]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word3 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[3]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -group way2 -expand -group Way2Word3 {/testbench/dut/hart/lsu/dcache/MemWay[2]/word[3]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/SetValid}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/SetValid}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/SetDirty}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/SetDirty}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -label TAG {/testbench/dut/hart/lsu/dcache/MemWay[3]/CacheTagMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -label TAG {/testbench/dut/hart/lsu/dcache/MemWay[3]/CacheTagMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/DirtyBits}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/DirtyBits}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/ValidBits}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/ValidBits}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word0 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[0]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word0 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[0]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word0 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[0]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word0 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[0]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word1 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[1]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word1 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[1]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word1 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[1]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word1 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[1]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word2 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[2]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word2 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[2]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word2 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[2]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word2 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[2]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[3]/CacheDataMem/WriteEnable}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[3]/CacheDataMem/WriteEnable}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[3]/CacheDataMem/StoredData}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -expand -group Way3Word3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/word[3]/CacheDataMem/StoredData}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group valid/dirty /testbench/dut/hart/lsu/dcache/SetValid
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group valid/dirty /testbench/dut/hart/lsu/dcache/SetValid
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group valid/dirty /testbench/dut/hart/lsu/dcache/ClearValid
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group valid/dirty /testbench/dut/hart/lsu/dcache/ClearValid
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group valid/dirty /testbench/dut/hart/lsu/dcache/SetDirty
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group valid/dirty /testbench/dut/hart/lsu/dcache/SetDirty
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group valid/dirty /testbench/dut/hart/lsu/dcache/ClearDirty
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group valid/dirty /testbench/dut/hart/lsu/dcache/ClearDirty
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/SRAMAdr
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/WayHit}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/genblk1/cacheLRU/MemPAdrM
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/Valid}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/ReadDataBlockWayMaskedM}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/Dirty}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/WayHit}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/ReadTag}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/Valid}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/WayHit}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/Dirty}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/Valid}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -group way0 {/testbench/dut/hart/lsu/dcache/MemWay[0]/ReadTag}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/Dirty}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/ReadDataBlockWayMaskedM}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/ReadTag}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/WayHit}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/WayHit}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/Valid}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/Valid}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/Dirty}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/Dirty}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/hart/lsu/dcache/MemWay[1]/ReadTag}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/ReadTag}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/ReadDataBlockWayMaskedM}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/WayHit}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/WayHit}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/Valid}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/Valid}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/Dirty}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/Dirty}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/ReadTag}
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/hart/lsu/dcache/MemWay[2]/ReadTag}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/WayHit
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/ReadDataBlockWayMaskedM}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/ReadDataBlockWayMaskedM
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/WayHit}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/ReadDataWordM
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/Valid}
|
add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/ReadDataWordMuxM
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/Dirty}
|
add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/hart/lsu/dcache/VictimTag
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/hart/lsu/dcache/MemWay[3]/ReadTag}
|
add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/hart/lsu/dcache/VictimWay
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/WayHit
|
add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/hart/lsu/dcache/VictimDirtyWay
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/ReadDataBlockWayMaskedM
|
add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/hart/lsu/dcache/VictimDirty
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/ReadDataWordM
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/MemRWM
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/ReadDataWordMuxM
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/MemAdrE
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/genblk1/cacheLRU/BlockReplacementBits
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/MemPAdrM
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/hart/lsu/dcache/genblk1/cacheLRU/ReplacementBits
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/Funct3M
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group Victim /testbench/dut/hart/lsu/dcache/VictimTag
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/Funct7M
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group Victim /testbench/dut/hart/lsu/dcache/VictimWay
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/AtomicM
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group Victim /testbench/dut/hart/lsu/dcache/VictimDirtyWay
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/CacheableM
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group Victim /testbench/dut/hart/lsu/dcache/VictimDirty
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/WriteDataM
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/MemRWM
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/ReadDataM
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/MemAdrE
|
add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/hart/lsu/dcache/DCacheStall
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/MemPAdrM
|
add wave -noupdate -group lsu -expand -group dcache -group status /testbench/dut/hart/lsu/dcache/WayHit
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/Funct3M
|
add wave -noupdate -group lsu -expand -group dcache -group status -color {Medium Orchid} /testbench/dut/hart/lsu/dcache/CacheHit
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/Funct7M
|
add wave -noupdate -group lsu -expand -group dcache -group status /testbench/dut/hart/lsu/dcache/FetchCount
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/AtomicM
|
add wave -noupdate -group lsu -expand -group dcache -group {Memory Side} /testbench/dut/hart/lsu/dcache/AHBPAdr
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/CacheableM
|
add wave -noupdate -group lsu -expand -group dcache -group {Memory Side} /testbench/dut/hart/lsu/dcache/AHBRead
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/WriteDataM
|
add wave -noupdate -group lsu -expand -group dcache -group {Memory Side} /testbench/dut/hart/lsu/dcache/AHBWrite
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/ReadDataM
|
add wave -noupdate -group lsu -expand -group dcache -group {Memory Side} /testbench/dut/hart/lsu/dcache/AHBAck
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/DCacheStall
|
add wave -noupdate -group lsu -expand -group dcache -group {Memory Side} /testbench/dut/hart/lsu/dcache/HRDATA
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group status /testbench/dut/hart/lsu/dcache/WayHit
|
add wave -noupdate -group lsu -expand -group dcache -group {Memory Side} /testbench/dut/hart/lsu/dcache/HWDATA
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group status -color {Medium Orchid} /testbench/dut/hart/lsu/dcache/CacheHit
|
add wave -noupdate -group lsu -group dtlb /testbench/dut/hart/lsu/dmmu/genblk1/tlb/tlbcontrol/EffectivePrivilegeMode
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group status /testbench/dut/hart/lsu/dcache/FetchCount
|
add wave -noupdate -group lsu -group dtlb /testbench/dut/hart/lsu/dmmu/genblk1/tlb/tlbcontrol/Translate
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {Memory Side} /testbench/dut/hart/lsu/dcache/AHBPAdr
|
add wave -noupdate -group lsu -group dtlb /testbench/dut/hart/lsu/dmmu/genblk1/tlb/tlbcontrol/DisableTranslation
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {Memory Side} /testbench/dut/hart/lsu/dcache/AHBRead
|
add wave -noupdate -group lsu -group dtlb /testbench/dut/hart/lsu/dmmu/TLBMiss
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {Memory Side} /testbench/dut/hart/lsu/dcache/AHBWrite
|
add wave -noupdate -group lsu -group dtlb /testbench/dut/hart/lsu/dmmu/TLBHit
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {Memory Side} /testbench/dut/hart/lsu/dcache/AHBAck
|
add wave -noupdate -group lsu -group dtlb /testbench/dut/hart/lsu/dmmu/PhysicalAddress
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {Memory Side} /testbench/dut/hart/lsu/dcache/HRDATA
|
add wave -noupdate -group lsu -group dtlb -expand -group faults /testbench/dut/hart/lsu/dmmu/TLBPageFault
|
||||||
add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {Memory Side} /testbench/dut/hart/lsu/dcache/HWDATA
|
add wave -noupdate -group lsu -group dtlb -expand -group faults /testbench/dut/hart/lsu/dmmu/LoadAccessFaultM
|
||||||
add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/hart/lsu/dmmu/genblk1/tlb/tlbcontrol/EffectivePrivilegeMode
|
add wave -noupdate -group lsu -group dtlb -expand -group faults /testbench/dut/hart/lsu/dmmu/StoreAccessFaultM
|
||||||
add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/hart/lsu/dmmu/genblk1/tlb/tlbcontrol/Translate
|
add wave -noupdate -group lsu -group dtlb /testbench/dut/hart/lsu/dmmu/genblk1/tlb/TLBPAdr
|
||||||
add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/hart/lsu/dmmu/genblk1/tlb/tlbcontrol/DisableTranslation
|
add wave -noupdate -group lsu -group dtlb -expand -group write /testbench/dut/hart/lsu/dmmu/genblk1/tlb/PTE
|
||||||
add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/hart/lsu/dmmu/TLBMiss
|
add wave -noupdate -group lsu -group dtlb -expand -group write /testbench/dut/hart/lsu/dmmu/genblk1/tlb/TLBWrite
|
||||||
add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/hart/lsu/dmmu/TLBHit
|
add wave -noupdate -group lsu -group pma /testbench/dut/hart/lsu/dmmu/pmachecker/PhysicalAddress
|
||||||
add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/hart/lsu/dmmu/PhysicalAddress
|
add wave -noupdate -group lsu -group pma /testbench/dut/hart/lsu/dmmu/pmachecker/SelRegions
|
||||||
add wave -noupdate -expand -group lsu -group dtlb -expand -group faults /testbench/dut/hart/lsu/dmmu/TLBPageFault
|
add wave -noupdate -group lsu -group pma /testbench/dut/hart/lsu/dmmu/Cacheable
|
||||||
add wave -noupdate -expand -group lsu -group dtlb -expand -group faults /testbench/dut/hart/lsu/dmmu/LoadAccessFaultM
|
add wave -noupdate -group lsu -group pma /testbench/dut/hart/lsu/dmmu/Idempotent
|
||||||
add wave -noupdate -expand -group lsu -group dtlb -expand -group faults /testbench/dut/hart/lsu/dmmu/StoreAccessFaultM
|
add wave -noupdate -group lsu -group pma /testbench/dut/hart/lsu/dmmu/AtomicAllowed
|
||||||
add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/hart/lsu/dmmu/genblk1/tlb/TLBPAdr
|
add wave -noupdate -group lsu -group pma /testbench/dut/hart/lsu/dmmu/pmachecker/PMAAccessFault
|
||||||
add wave -noupdate -expand -group lsu -group dtlb -expand -group write /testbench/dut/hart/lsu/dmmu/genblk1/tlb/PTE
|
add wave -noupdate -group lsu -group pma /testbench/dut/hart/lsu/dmmu/PMAInstrAccessFaultF
|
||||||
add wave -noupdate -expand -group lsu -group dtlb -expand -group write /testbench/dut/hart/lsu/dmmu/genblk1/tlb/TLBWrite
|
add wave -noupdate -group lsu -group pma /testbench/dut/hart/lsu/dmmu/PMALoadAccessFaultM
|
||||||
add wave -noupdate -expand -group lsu -group pma /testbench/dut/hart/lsu/dmmu/pmachecker/PhysicalAddress
|
add wave -noupdate -group lsu -group pma /testbench/dut/hart/lsu/dmmu/PMAStoreAccessFaultM
|
||||||
add wave -noupdate -expand -group lsu -group pma /testbench/dut/hart/lsu/dmmu/pmachecker/SelRegions
|
add wave -noupdate -group lsu -group pmp /testbench/dut/hart/lsu/dmmu/PMPInstrAccessFaultF
|
||||||
add wave -noupdate -expand -group lsu -group pma /testbench/dut/hart/lsu/dmmu/Cacheable
|
add wave -noupdate -group lsu -group pmp /testbench/dut/hart/lsu/dmmu/PMPLoadAccessFaultM
|
||||||
add wave -noupdate -expand -group lsu -group pma /testbench/dut/hart/lsu/dmmu/Idempotent
|
add wave -noupdate -group lsu -group pmp /testbench/dut/hart/lsu/dmmu/PMPStoreAccessFaultM
|
||||||
add wave -noupdate -expand -group lsu -group pma /testbench/dut/hart/lsu/dmmu/AtomicAllowed
|
add wave -noupdate -group lsu -group ptwalker -color Gold /testbench/dut/hart/lsu/hptw/genblk1/WalkerState
|
||||||
add wave -noupdate -expand -group lsu -group pma /testbench/dut/hart/lsu/dmmu/pmachecker/PMAAccessFault
|
add wave -noupdate -group lsu -group ptwalker /testbench/dut/hart/lsu/hptw/PCF
|
||||||
add wave -noupdate -expand -group lsu -group pma /testbench/dut/hart/lsu/dmmu/PMAInstrAccessFaultF
|
add wave -noupdate -group lsu -group ptwalker /testbench/dut/hart/lsu/hptw/genblk1/TranslationVAdr
|
||||||
add wave -noupdate -expand -group lsu -group pma /testbench/dut/hart/lsu/dmmu/PMALoadAccessFaultM
|
add wave -noupdate -group lsu -group ptwalker /testbench/dut/hart/lsu/hptw/TranslationPAdr
|
||||||
add wave -noupdate -expand -group lsu -group pma /testbench/dut/hart/lsu/dmmu/PMAStoreAccessFaultM
|
add wave -noupdate -group lsu -group ptwalker /testbench/dut/hart/lsu/hptw/HPTWReadPTE
|
||||||
add wave -noupdate -expand -group lsu -group pmp /testbench/dut/hart/lsu/dmmu/PMPInstrAccessFaultF
|
add wave -noupdate -group lsu -group ptwalker /testbench/dut/hart/lsu/hptw/PTE
|
||||||
add wave -noupdate -expand -group lsu -group pmp /testbench/dut/hart/lsu/dmmu/PMPLoadAccessFaultM
|
add wave -noupdate -group lsu -group ptwalker -expand -group types /testbench/dut/hart/lsu/hptw/ITLBMissF
|
||||||
add wave -noupdate -expand -group lsu -group pmp /testbench/dut/hart/lsu/dmmu/PMPStoreAccessFaultM
|
add wave -noupdate -group lsu -group ptwalker -expand -group types /testbench/dut/hart/lsu/hptw/DTLBMissM
|
||||||
add wave -noupdate -expand -group lsu -group ptwalker -color Gold /testbench/dut/hart/lsu/hptw/genblk1/WalkerState
|
add wave -noupdate -group lsu -group ptwalker -expand -group types /testbench/dut/hart/lsu/hptw/ITLBWriteF
|
||||||
add wave -noupdate -expand -group lsu -group ptwalker /testbench/dut/hart/lsu/hptw/PCF
|
add wave -noupdate -group lsu -group ptwalker -expand -group types /testbench/dut/hart/lsu/hptw/DTLBWriteM
|
||||||
add wave -noupdate -expand -group lsu -group ptwalker /testbench/dut/hart/lsu/hptw/genblk1/TranslationVAdr
|
add wave -noupdate -group lsu -group ptwalker -expand -group types /testbench/dut/hart/lsu/hptw/WalkerInstrPageFaultF
|
||||||
add wave -noupdate -expand -group lsu -group ptwalker /testbench/dut/hart/lsu/hptw/TranslationPAdr
|
add wave -noupdate -group lsu -group ptwalker -expand -group types /testbench/dut/hart/lsu/hptw/WalkerLoadPageFaultM
|
||||||
add wave -noupdate -expand -group lsu -group ptwalker /testbench/dut/hart/lsu/hptw/HPTWReadPTE
|
add wave -noupdate -group lsu -group ptwalker -expand -group types /testbench/dut/hart/lsu/hptw/WalkerStorePageFaultM
|
||||||
add wave -noupdate -expand -group lsu -group ptwalker /testbench/dut/hart/lsu/hptw/PTE
|
|
||||||
add wave -noupdate -expand -group lsu -group ptwalker -expand -group types /testbench/dut/hart/lsu/hptw/ITLBMissF
|
|
||||||
add wave -noupdate -expand -group lsu -group ptwalker -expand -group types /testbench/dut/hart/lsu/hptw/DTLBMissM
|
|
||||||
add wave -noupdate -expand -group lsu -group ptwalker -expand -group types /testbench/dut/hart/lsu/hptw/ITLBWriteF
|
|
||||||
add wave -noupdate -expand -group lsu -group ptwalker -expand -group types /testbench/dut/hart/lsu/hptw/DTLBWriteM
|
|
||||||
add wave -noupdate -expand -group lsu -group ptwalker -expand -group types /testbench/dut/hart/lsu/hptw/WalkerInstrPageFaultF
|
|
||||||
add wave -noupdate -expand -group lsu -group ptwalker -expand -group types /testbench/dut/hart/lsu/hptw/WalkerLoadPageFaultM
|
|
||||||
add wave -noupdate -expand -group lsu -group ptwalker -expand -group types /testbench/dut/hart/lsu/hptw/WalkerStorePageFaultM
|
|
||||||
add wave -noupdate -group csr /testbench/dut/hart/priv/csr/MIP_REGW
|
add wave -noupdate -group csr /testbench/dut/hart/priv/csr/MIP_REGW
|
||||||
add wave -noupdate -group itlb /testbench/dut/hart/ifu/immu/TLBWrite
|
add wave -noupdate -group itlb /testbench/dut/hart/ifu/immu/TLBWrite
|
||||||
add wave -noupdate -group itlb /testbench/dut/hart/ifu/ITLBMissF
|
add wave -noupdate -group itlb /testbench/dut/hart/ifu/ITLBMissF
|
||||||
@ -476,22 +511,28 @@ add wave -noupdate -group UART /testbench/dut/uncore/uart/uart/HSELUART
|
|||||||
add wave -noupdate -group UART /testbench/dut/uncore/uart/uart/HADDR
|
add wave -noupdate -group UART /testbench/dut/uncore/uart/uart/HADDR
|
||||||
add wave -noupdate -group UART /testbench/dut/uncore/uart/uart/HWRITE
|
add wave -noupdate -group UART /testbench/dut/uncore/uart/uart/HWRITE
|
||||||
add wave -noupdate -group UART /testbench/dut/uncore/uart/uart/HWDATA
|
add wave -noupdate -group UART /testbench/dut/uncore/uart/uart/HWDATA
|
||||||
add wave -noupdate /testbench/dut/hart/lsu/dcache/subwordread/HRDATA
|
add wave -noupdate -color Gold /testbench/dut/hart/lsu/dcache/subwordread/offset0
|
||||||
add wave -noupdate /testbench/dut/hart/lsu/dcache/subwordread/HSIZED
|
|
||||||
add wave -noupdate /testbench/dut/hart/lsu/dcache/subwordread/offset0
|
|
||||||
add wave -noupdate /testbench/dut/hart/lsu/dcache/subwordread/offset1
|
add wave -noupdate /testbench/dut/hart/lsu/dcache/subwordread/offset1
|
||||||
add wave -noupdate /testbench/dut/hart/lsu/dcache/subwordread/offset2
|
add wave -noupdate /testbench/dut/hart/lsu/dcache/subwordread/offset2
|
||||||
add wave -noupdate /testbench/dut/hart/lsu/dcache/subwordread/offset3
|
add wave -noupdate /testbench/dut/hart/lsu/dcache/subwordread/offset3
|
||||||
add wave -noupdate /testbench/dut/hart/lsu/dcache/subwordread/genblk1/offset4
|
|
||||||
add wave -noupdate /testbench/dut/hart/lsu/dcache/subwordread/genblk1/offset5
|
|
||||||
add wave -noupdate /testbench/dut/hart/lsu/dcache/subwordread/genblk1/offset6
|
|
||||||
add wave -noupdate /testbench/dut/hart/lsu/dcache/subwordread/genblk1/offset7
|
|
||||||
add wave -noupdate /testbench/dut/hart/ExceptionM
|
add wave -noupdate /testbench/dut/hart/ExceptionM
|
||||||
add wave -noupdate /testbench/dut/hart/PendingInterruptM
|
add wave -noupdate /testbench/dut/hart/PendingInterruptM
|
||||||
add wave -noupdate /testbench/dut/hart/TrapM
|
add wave -noupdate /testbench/dut/hart/TrapM
|
||||||
|
add wave -noupdate /testbench/dut/hart/ifu/icache/CompressedF
|
||||||
|
add wave -noupdate /testbench/dut/hart/ifu/icache/PCPF
|
||||||
|
add wave -noupdate /testbench/dut/hart/ifu/PCPFmmu
|
||||||
|
add wave -noupdate /testbench/dut/hart/ifu/PCPF
|
||||||
|
add wave -noupdate /testbench/dut/hart/ifu/PCF
|
||||||
|
add wave -noupdate /testbench/dut/hart/ifu/immu/Translate
|
||||||
|
add wave -noupdate /testbench/dut/hart/ifu/icache/FinalInstrRawF
|
||||||
|
add wave -noupdate /testbench/dut/hart/ifu/icache/StallF
|
||||||
|
add wave -noupdate /testbench/dut/hart/ifu/icache/ICacheMemReadData
|
||||||
|
add wave -noupdate /testbench/dut/hart/ifu/icache/PCTagF
|
||||||
|
add wave -noupdate /testbench/dut/hart/ifu/icache/PCPSpillF
|
||||||
|
add wave -noupdate /testbench/dut/hart/ifu/icache/ICacheReadEn
|
||||||
TreeUpdate [SetDefaultTree]
|
TreeUpdate [SetDefaultTree]
|
||||||
WaveRestoreCursors {{Cursor 6} {32245 ns} 0} {{Cursor 2} {32581 ns} 0} {{Cursor 3} {25666 ns} 0} {{Cursor 4} {2221 ns} 0}
|
WaveRestoreCursors {{Cursor 6} {183 ns} 0}
|
||||||
quietly wave cursor active 4
|
quietly wave cursor active 1
|
||||||
configure wave -namecolwidth 250
|
configure wave -namecolwidth 250
|
||||||
configure wave -valuecolwidth 297
|
configure wave -valuecolwidth 297
|
||||||
configure wave -justifyvalue left
|
configure wave -justifyvalue left
|
||||||
@ -506,4 +547,4 @@ configure wave -griddelta 40
|
|||||||
configure wave -timeline 0
|
configure wave -timeline 0
|
||||||
configure wave -timelineunits ns
|
configure wave -timelineunits ns
|
||||||
update
|
update
|
||||||
WaveRestoreZoom {1280 ns} {3534 ns}
|
WaveRestoreZoom {0 ns} {456 ns}
|
||||||
|
474
wally-pipelined/src/cache/ICacheCntrl.sv
vendored
474
wally-pipelined/src/cache/ICacheCntrl.sv
vendored
@ -1,474 +0,0 @@
|
|||||||
///////////////////////////////////////////
|
|
||||||
// icache.sv
|
|
||||||
//
|
|
||||||
// Written: ross1728@gmail.com June 04, 2021
|
|
||||||
// Modified:
|
|
||||||
//
|
|
||||||
// Purpose: I Cache controller
|
|
||||||
//
|
|
||||||
// A component of the Wally configurable RISC-V project.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2021 Harvey Mudd College & Oklahoma State University
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
|
|
||||||
// files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
|
|
||||||
// modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
|
|
||||||
// is furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
||||||
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
||||||
// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
|
|
||||||
// OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
///////////////////////////////////////////
|
|
||||||
|
|
||||||
`include "wally-config.vh"
|
|
||||||
|
|
||||||
module ICacheCntrl #(parameter BLOCKLEN = 256)
|
|
||||||
(
|
|
||||||
// Inputs from pipeline
|
|
||||||
input logic clk, reset,
|
|
||||||
input logic StallF, StallD,
|
|
||||||
input logic FlushD,
|
|
||||||
|
|
||||||
// Input the address to read
|
|
||||||
// The upper bits of the physical pc
|
|
||||||
input logic [`PA_BITS-1:0] PCNextF,
|
|
||||||
input logic [`PA_BITS-1:0] PCPF,
|
|
||||||
// Signals to/from cache memory
|
|
||||||
// The read coming out of it
|
|
||||||
input logic [31:0] ICacheMemReadData,
|
|
||||||
input logic ICacheMemReadValid,
|
|
||||||
// The address at which we want to search the cache memory
|
|
||||||
output logic [`PA_BITS-1:0] PCTagF,
|
|
||||||
output logic [`PA_BITS-1:0] PCNextIndexF,
|
|
||||||
output logic ICacheReadEn,
|
|
||||||
// Load data into the cache
|
|
||||||
output logic ICacheMemWriteEnable,
|
|
||||||
output logic [BLOCKLEN-1:0] ICacheMemWriteData,
|
|
||||||
|
|
||||||
// Outputs to rest of ifu
|
|
||||||
// High if the instruction in the fetch stage is compressed
|
|
||||||
output logic CompressedF,
|
|
||||||
// The instruction that was requested
|
|
||||||
// If this instruction is compressed, upper 16 bits may be the next 16 bits or may be zeros
|
|
||||||
output logic [31:0] FinalInstrRawF,
|
|
||||||
|
|
||||||
// Outputs to pipeline control stuff
|
|
||||||
output logic ICacheStallF, EndFetchState,
|
|
||||||
input logic ITLBMissF,
|
|
||||||
input logic ITLBWriteF,
|
|
||||||
input logic WalkerInstrPageFaultF,
|
|
||||||
|
|
||||||
// Signals to/from ahblite interface
|
|
||||||
// A read containing the requested data
|
|
||||||
input logic [`XLEN-1:0] InstrInF,
|
|
||||||
input logic InstrAckF,
|
|
||||||
// The read we request from main memory
|
|
||||||
output logic [`PA_BITS-1:0] InstrPAdrF,
|
|
||||||
output logic InstrReadF
|
|
||||||
);
|
|
||||||
|
|
||||||
// FSM states
|
|
||||||
localparam STATE_READY = 'h0;
|
|
||||||
localparam STATE_HIT_SPILL = 'h1; // spill, block 0 hit
|
|
||||||
localparam STATE_HIT_SPILL_MISS_FETCH_WDV = 'h2; // block 1 miss, issue read to AHB and wait data.
|
|
||||||
localparam STATE_HIT_SPILL_MISS_FETCH_DONE = 'h3; // write data into SRAM/LUT
|
|
||||||
localparam STATE_HIT_SPILL_MERGE = 'h4; // Read block 0 of CPU access, should be able to optimize into STATE_HIT_SPILL.
|
|
||||||
|
|
||||||
// a challenge is the spill signal gets us out of the ready state and moves us to
|
|
||||||
// 1 of the 2 spill branches. However the original fsm design had us return to
|
|
||||||
// the ready state when the spill + hits/misses were fully resolved. The problem
|
|
||||||
// is the spill signal is based on PCPF so when we return to READY to check if the
|
|
||||||
// cache has a hit it still expresses spill. We can fix in 1 of two ways.
|
|
||||||
// 1. we can add 1 extra state at the end of each spill branch to returns the instruction
|
|
||||||
// to the CPU advancing the CPU and icache to the next instruction.
|
|
||||||
// 2. We can assert a signal which is delayed 1 cycle to suppress the spill when we get
|
|
||||||
// to the READY state.
|
|
||||||
// The first first option is more robust and increases the number of states by 2. The
|
|
||||||
// second option is seams like it should work, but I worry there is a hidden interaction
|
|
||||||
// between CPU stalling and that register.
|
|
||||||
// Picking option 1.
|
|
||||||
|
|
||||||
localparam STATE_HIT_SPILL_FINAL = 'h5; // this state replicates STATE_READY's replay of the
|
|
||||||
// spill access but does nto consider spill. It also does not do another operation.
|
|
||||||
|
|
||||||
|
|
||||||
localparam STATE_MISS_FETCH_WDV = 'h6; // aligned miss, issue read to AHB and wait for data.
|
|
||||||
localparam STATE_MISS_FETCH_DONE = 'h7; // write data into SRAM/LUT
|
|
||||||
localparam STATE_MISS_READ = 'h8; // read block 1 from SRAM/LUT
|
|
||||||
|
|
||||||
localparam STATE_MISS_SPILL_FETCH_WDV = 'h9; // spill, miss on block 0, issue read to AHB and wait
|
|
||||||
localparam STATE_MISS_SPILL_FETCH_DONE = 'ha; // write data into SRAM/LUT
|
|
||||||
localparam STATE_MISS_SPILL_READ1 = 'hb; // read block 0 from SRAM/LUT
|
|
||||||
localparam STATE_MISS_SPILL_2 = 'hc; // return to ready if hit or do second block update.
|
|
||||||
localparam STATE_MISS_SPILL_2_START = 'hd; // return to ready if hit or do second block update.
|
|
||||||
localparam STATE_MISS_SPILL_MISS_FETCH_WDV = 'he; // miss on block 1, issue read to AHB and wait
|
|
||||||
localparam STATE_MISS_SPILL_MISS_FETCH_DONE = 'hf; // write data to SRAM/LUT
|
|
||||||
localparam STATE_MISS_SPILL_MERGE = 'h10; // read block 0 of CPU access,
|
|
||||||
|
|
||||||
localparam STATE_MISS_SPILL_FINAL = 'h11; // this state replicates STATE_READY's replay of the
|
|
||||||
// spill access but does nto consider spill. It also does not do another operation.
|
|
||||||
|
|
||||||
|
|
||||||
localparam STATE_INVALIDATE = 'h12; // *** not sure if invalidate or evict? invalidate by cache block or address?
|
|
||||||
localparam STATE_TLB_MISS = 'h13;
|
|
||||||
localparam STATE_TLB_MISS_DONE = 'h14;
|
|
||||||
|
|
||||||
|
|
||||||
localparam AHBByteLength = `XLEN / 8;
|
|
||||||
localparam AHBOFFETWIDTH = $clog2(AHBByteLength);
|
|
||||||
|
|
||||||
|
|
||||||
localparam BlockByteLength = BLOCKLEN / 8;
|
|
||||||
localparam OFFSETWIDTH = $clog2(BlockByteLength);
|
|
||||||
|
|
||||||
localparam WORDSPERLINE = BLOCKLEN/`XLEN;
|
|
||||||
localparam LOGWPL = $clog2(WORDSPERLINE);
|
|
||||||
localparam integer PA_WIDTH = `PA_BITS - 2;
|
|
||||||
|
|
||||||
|
|
||||||
logic [4:0] CurrState, NextState;
|
|
||||||
logic hit, spill;
|
|
||||||
logic SavePC;
|
|
||||||
logic [1:0] PCMux;
|
|
||||||
logic CntReset;
|
|
||||||
logic PreCntEn, CntEn;
|
|
||||||
logic spillSave;
|
|
||||||
logic UnalignedSelect;
|
|
||||||
logic FetchCountFlag;
|
|
||||||
localparam FetchCountThreshold = WORDSPERLINE - 1;
|
|
||||||
|
|
||||||
logic [LOGWPL-1:0] FetchCount, NextFetchCount;
|
|
||||||
|
|
||||||
logic [`PA_BITS-1:0] PCPreFinalF, PCPSpillF;
|
|
||||||
logic [`PA_BITS-1:OFFSETWIDTH] PCPTrunkF;
|
|
||||||
|
|
||||||
|
|
||||||
logic [15:0] SpillDataBlock0;
|
|
||||||
|
|
||||||
localparam [31:0] NOP = 32'h13;
|
|
||||||
|
|
||||||
logic reset_q;
|
|
||||||
logic [1:0] PCMux_q;
|
|
||||||
|
|
||||||
|
|
||||||
// Misaligned signals
|
|
||||||
//logic [`XLEN:0] MisalignedInstrRawF;
|
|
||||||
//logic MisalignedStall;
|
|
||||||
// Cache fault signals
|
|
||||||
//logic FaultStall;
|
|
||||||
|
|
||||||
// on spill we want to get the first 2 bytes of the next cache block.
|
|
||||||
// the spill only occurs if the PCPF mod BlockByteLength == -2. Therefore we can
|
|
||||||
// simply add 2 to land on the next cache block.
|
|
||||||
assign PCPSpillF = PCPF + {{{PA_WIDTH}{1'b0}}, 2'b10}; // *** modelsim does not allow the use of PA_BITS for literal width.
|
|
||||||
|
|
||||||
// now we have to select between these three PCs
|
|
||||||
assign PCPreFinalF = PCMux[0] | StallF ? PCPF : PCNextF; // *** don't like the stallf, but it is necessary
|
|
||||||
assign PCNextIndexF = PCMux[1] ? PCPSpillF : PCPreFinalF;
|
|
||||||
|
|
||||||
// this mux needs to be delayed 1 cycle as it occurs 1 pipeline stage later.
|
|
||||||
// *** read enable may not be necessary.
|
|
||||||
flopenr #(2) PCMuxReg(.clk(clk),
|
|
||||||
.reset(reset),
|
|
||||||
.en(ICacheReadEn),
|
|
||||||
.d(PCMux),
|
|
||||||
.q(PCMux_q));
|
|
||||||
|
|
||||||
assign PCTagF = PCMux_q[1] ? PCPSpillF : PCPF;
|
|
||||||
|
|
||||||
// truncate the offset from PCPF for memory address generation
|
|
||||||
assign PCPTrunkF = PCTagF[`PA_BITS-1:OFFSETWIDTH];
|
|
||||||
|
|
||||||
// Detect if the instruction is compressed
|
|
||||||
assign CompressedF = FinalInstrRawF[1:0] != 2'b11;
|
|
||||||
|
|
||||||
|
|
||||||
// the FSM is always runing, do not stall.
|
|
||||||
flopr #(5) stateReg(.clk(clk),
|
|
||||||
.reset(reset),
|
|
||||||
.d(NextState),
|
|
||||||
.q(CurrState));
|
|
||||||
|
|
||||||
assign spill = PCPF[4:1] == 4'b1111 ? 1'b1 : 1'b0;
|
|
||||||
assign hit = ICacheMemReadValid; // note ICacheMemReadValid is hit.
|
|
||||||
assign FetchCountFlag = (FetchCount == FetchCountThreshold[LOGWPL-1:0]);
|
|
||||||
|
|
||||||
// Next state logic
|
|
||||||
always_comb begin
|
|
||||||
UnalignedSelect = 1'b0;
|
|
||||||
CntReset = 1'b0;
|
|
||||||
PreCntEn = 1'b0;
|
|
||||||
//InstrReadF = 1'b0;
|
|
||||||
ICacheMemWriteEnable = 1'b0;
|
|
||||||
spillSave = 1'b0;
|
|
||||||
PCMux = 2'b00;
|
|
||||||
ICacheReadEn = 1'b0;
|
|
||||||
SavePC = 1'b0;
|
|
||||||
ICacheStallF = 1'b1;
|
|
||||||
|
|
||||||
case (CurrState)
|
|
||||||
STATE_READY: begin
|
|
||||||
PCMux = 2'b00;
|
|
||||||
ICacheReadEn = 1'b1;
|
|
||||||
if (ITLBMissF) begin
|
|
||||||
NextState = STATE_TLB_MISS;
|
|
||||||
end else if (hit & ~spill) begin
|
|
||||||
SavePC = 1'b1;
|
|
||||||
ICacheStallF = 1'b0;
|
|
||||||
NextState = STATE_READY;
|
|
||||||
end else if (hit & spill) begin
|
|
||||||
spillSave = 1'b1;
|
|
||||||
PCMux = 2'b10;
|
|
||||||
NextState = STATE_HIT_SPILL;
|
|
||||||
end else if (~hit & ~spill) begin
|
|
||||||
CntReset = 1'b1;
|
|
||||||
NextState = STATE_MISS_FETCH_WDV;
|
|
||||||
end else if (~hit & spill) begin
|
|
||||||
CntReset = 1'b1;
|
|
||||||
PCMux = 2'b01;
|
|
||||||
NextState = STATE_MISS_SPILL_FETCH_WDV;
|
|
||||||
end else begin
|
|
||||||
NextState = STATE_READY;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
// branch 1, hit spill and 2, miss spill hit
|
|
||||||
STATE_HIT_SPILL: begin
|
|
||||||
PCMux = 2'b10;
|
|
||||||
UnalignedSelect = 1'b1;
|
|
||||||
ICacheReadEn = 1'b1;
|
|
||||||
if (hit) begin
|
|
||||||
NextState = STATE_HIT_SPILL_FINAL;
|
|
||||||
end else begin
|
|
||||||
CntReset = 1'b1;
|
|
||||||
NextState = STATE_HIT_SPILL_MISS_FETCH_WDV;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
STATE_HIT_SPILL_MISS_FETCH_WDV: begin
|
|
||||||
PCMux = 2'b10;
|
|
||||||
//InstrReadF = 1'b1;
|
|
||||||
PreCntEn = 1'b1;
|
|
||||||
if (FetchCountFlag & InstrAckF) begin
|
|
||||||
NextState = STATE_HIT_SPILL_MISS_FETCH_DONE;
|
|
||||||
end else begin
|
|
||||||
NextState = STATE_HIT_SPILL_MISS_FETCH_WDV;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
STATE_HIT_SPILL_MISS_FETCH_DONE: begin
|
|
||||||
PCMux = 2'b10;
|
|
||||||
ICacheMemWriteEnable = 1'b1;
|
|
||||||
NextState = STATE_HIT_SPILL_MERGE;
|
|
||||||
end
|
|
||||||
STATE_HIT_SPILL_MERGE: begin
|
|
||||||
PCMux = 2'b10;
|
|
||||||
UnalignedSelect = 1'b1;
|
|
||||||
ICacheReadEn = 1'b1;
|
|
||||||
NextState = STATE_HIT_SPILL_FINAL;
|
|
||||||
end
|
|
||||||
STATE_HIT_SPILL_FINAL: begin
|
|
||||||
ICacheReadEn = 1'b1;
|
|
||||||
PCMux = 2'b00;
|
|
||||||
UnalignedSelect = 1'b1;
|
|
||||||
SavePC = 1'b1;
|
|
||||||
NextState = STATE_READY;
|
|
||||||
ICacheStallF = 1'b0;
|
|
||||||
end
|
|
||||||
// branch 3 miss no spill
|
|
||||||
STATE_MISS_FETCH_WDV: begin
|
|
||||||
PCMux = 2'b01;
|
|
||||||
//InstrReadF = 1'b1;
|
|
||||||
PreCntEn = 1'b1;
|
|
||||||
if (FetchCountFlag & InstrAckF) begin
|
|
||||||
NextState = STATE_MISS_FETCH_DONE;
|
|
||||||
end else begin
|
|
||||||
NextState = STATE_MISS_FETCH_WDV;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
STATE_MISS_FETCH_DONE: begin
|
|
||||||
PCMux = 2'b01;
|
|
||||||
ICacheMemWriteEnable = 1'b1;
|
|
||||||
NextState = STATE_MISS_READ;
|
|
||||||
end
|
|
||||||
STATE_MISS_READ: begin
|
|
||||||
PCMux = 2'b01;
|
|
||||||
ICacheReadEn = 1'b1;
|
|
||||||
NextState = STATE_READY;
|
|
||||||
end
|
|
||||||
// branch 4 miss spill hit, and 5 miss spill miss
|
|
||||||
STATE_MISS_SPILL_FETCH_WDV: begin
|
|
||||||
PCMux = 2'b01;
|
|
||||||
PreCntEn = 1'b1;
|
|
||||||
//InstrReadF = 1'b1;
|
|
||||||
if (FetchCountFlag & InstrAckF) begin
|
|
||||||
NextState = STATE_MISS_SPILL_FETCH_DONE;
|
|
||||||
end else begin
|
|
||||||
NextState = STATE_MISS_SPILL_FETCH_WDV;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
STATE_MISS_SPILL_FETCH_DONE: begin
|
|
||||||
PCMux = 2'b01;
|
|
||||||
ICacheMemWriteEnable = 1'b1;
|
|
||||||
NextState = STATE_MISS_SPILL_READ1;
|
|
||||||
end
|
|
||||||
STATE_MISS_SPILL_READ1: begin // always be a hit as we just wrote that cache block.
|
|
||||||
PCMux = 2'b01; // there is a 1 cycle delay after setting the address before the date arrives.
|
|
||||||
ICacheReadEn = 1'b1;
|
|
||||||
NextState = STATE_MISS_SPILL_2;
|
|
||||||
end
|
|
||||||
STATE_MISS_SPILL_2: begin
|
|
||||||
PCMux = 2'b10;
|
|
||||||
UnalignedSelect = 1'b1;
|
|
||||||
spillSave = 1'b1; /// *** Could pipeline these to make it clearer in the fsm.
|
|
||||||
ICacheReadEn = 1'b1;
|
|
||||||
NextState = STATE_MISS_SPILL_2_START;
|
|
||||||
end
|
|
||||||
STATE_MISS_SPILL_2_START: begin
|
|
||||||
if (~hit) begin
|
|
||||||
CntReset = 1'b1;
|
|
||||||
NextState = STATE_MISS_SPILL_MISS_FETCH_WDV;
|
|
||||||
end else begin
|
|
||||||
NextState = STATE_READY;
|
|
||||||
ICacheReadEn = 1'b1;
|
|
||||||
PCMux = 2'b00;
|
|
||||||
UnalignedSelect = 1'b1;
|
|
||||||
SavePC = 1'b1;
|
|
||||||
ICacheStallF = 1'b0;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
STATE_MISS_SPILL_MISS_FETCH_WDV: begin
|
|
||||||
PCMux = 2'b10;
|
|
||||||
PreCntEn = 1'b1;
|
|
||||||
//InstrReadF = 1'b1;
|
|
||||||
if (FetchCountFlag & InstrAckF) begin
|
|
||||||
NextState = STATE_MISS_SPILL_MISS_FETCH_DONE;
|
|
||||||
end else begin
|
|
||||||
NextState = STATE_MISS_SPILL_MISS_FETCH_WDV;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
STATE_MISS_SPILL_MISS_FETCH_DONE: begin
|
|
||||||
PCMux = 2'b10;
|
|
||||||
ICacheMemWriteEnable = 1'b1;
|
|
||||||
NextState = STATE_MISS_SPILL_MERGE;
|
|
||||||
end
|
|
||||||
STATE_MISS_SPILL_MERGE: begin
|
|
||||||
PCMux = 2'b10;
|
|
||||||
UnalignedSelect = 1'b1;
|
|
||||||
ICacheReadEn = 1'b1;
|
|
||||||
NextState = STATE_MISS_SPILL_FINAL;
|
|
||||||
end
|
|
||||||
STATE_MISS_SPILL_FINAL: begin
|
|
||||||
ICacheReadEn = 1'b1;
|
|
||||||
PCMux = 2'b00;
|
|
||||||
UnalignedSelect = 1'b1;
|
|
||||||
SavePC = 1'b1;
|
|
||||||
ICacheStallF = 1'b0;
|
|
||||||
NextState = STATE_READY;
|
|
||||||
end
|
|
||||||
STATE_TLB_MISS: begin
|
|
||||||
if (WalkerInstrPageFaultF) begin
|
|
||||||
NextState = STATE_READY;
|
|
||||||
ICacheStallF = 1'b0;
|
|
||||||
end else if (ITLBWriteF) begin
|
|
||||||
NextState = STATE_TLB_MISS_DONE;
|
|
||||||
end else begin
|
|
||||||
NextState = STATE_TLB_MISS;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
STATE_TLB_MISS_DONE: begin
|
|
||||||
NextState = STATE_READY;
|
|
||||||
end
|
|
||||||
default: begin
|
|
||||||
PCMux = 2'b01;
|
|
||||||
NextState = STATE_READY;
|
|
||||||
end
|
|
||||||
// *** add in error handling and invalidate/evict
|
|
||||||
endcase
|
|
||||||
end
|
|
||||||
|
|
||||||
assign CntEn = PreCntEn & InstrAckF;
|
|
||||||
assign InstrReadF = (CurrState == STATE_HIT_SPILL_MISS_FETCH_WDV) ||
|
|
||||||
(CurrState == STATE_MISS_FETCH_WDV) ||
|
|
||||||
(CurrState == STATE_MISS_SPILL_FETCH_WDV) ||
|
|
||||||
(CurrState == STATE_MISS_SPILL_MISS_FETCH_WDV);
|
|
||||||
|
|
||||||
// to compute the fetch address we need to add the bit shifted
|
|
||||||
// counter output to the address.
|
|
||||||
|
|
||||||
flopenr #(LOGWPL)
|
|
||||||
FetchCountReg(.clk(clk),
|
|
||||||
.reset(reset | CntReset),
|
|
||||||
.en(CntEn),
|
|
||||||
.d(NextFetchCount),
|
|
||||||
.q(FetchCount));
|
|
||||||
|
|
||||||
assign NextFetchCount = FetchCount + 1'b1;
|
|
||||||
|
|
||||||
// This part is confusing.
|
|
||||||
// *** Ross Thompson reduce the complexity. This is just dumb.
|
|
||||||
// we need to remove the offset bits (PCPTrunkF). Because the AHB interface is XLEN wide
|
|
||||||
// we need to address on that number of bits so the PC is extended to the right by AHBByteLength with zeros.
|
|
||||||
// fetch count is already aligned to AHBByteLength, but we need to extend back to the full address width with
|
|
||||||
// more zeros after the addition. This will be the number of offset bits less the AHBByteLength.
|
|
||||||
logic [`PA_BITS-1:OFFSETWIDTH-LOGWPL] PCPTrunkExtF, InstrPAdrTrunkF ;
|
|
||||||
|
|
||||||
assign PCPTrunkExtF = {PCPTrunkF, {{LOGWPL}{1'b0}}};
|
|
||||||
// verilator lint_off WIDTH
|
|
||||||
assign InstrPAdrTrunkF = PCPTrunkExtF + FetchCount;
|
|
||||||
// verilator lint_on WIDTH
|
|
||||||
|
|
||||||
//assign InstrPAdrF = {{PCPTrunkF, {{LOGWPL}{1'b0}}} + FetchCount, {{OFFSETWIDTH-LOGWPL}{1'b0}}};
|
|
||||||
assign InstrPAdrF = {InstrPAdrTrunkF, {{OFFSETWIDTH-LOGWPL}{1'b0}}};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// store read data from memory interface before writing into SRAM.
|
|
||||||
genvar i;
|
|
||||||
generate
|
|
||||||
for (i = 0; i < WORDSPERLINE; i++) begin:storebuffer
|
|
||||||
flopenr #(`XLEN) sb(.clk(clk),
|
|
||||||
.reset(reset),
|
|
||||||
.en(InstrAckF & (i == FetchCount)),
|
|
||||||
.d(InstrInF),
|
|
||||||
.q(ICacheMemWriteData[(i+1)*`XLEN-1:i*`XLEN]));
|
|
||||||
end
|
|
||||||
endgenerate
|
|
||||||
|
|
||||||
// what address is used to write the SRAM?
|
|
||||||
|
|
||||||
|
|
||||||
// spills require storing the first cache block so it can merged
|
|
||||||
// with the second
|
|
||||||
// can optimize size, for now just make it the size of the data
|
|
||||||
// leaving the cache memory.
|
|
||||||
flopenr #(16) SpillInstrReg(.clk(clk),
|
|
||||||
.en(spillSave),
|
|
||||||
.reset(reset),
|
|
||||||
.d(ICacheMemReadData[15:0]),
|
|
||||||
.q(SpillDataBlock0));
|
|
||||||
|
|
||||||
// use the not quite final PC to do the final selection.
|
|
||||||
logic [1:1] PCPreFinalF_q;
|
|
||||||
flopenr #(1) PCFReg(.clk(clk),
|
|
||||||
.reset(reset),
|
|
||||||
.en(~StallF),
|
|
||||||
.d(PCPreFinalF[1]),
|
|
||||||
.q(PCPreFinalF_q[1]));
|
|
||||||
assign FinalInstrRawF = spill ? {ICacheMemReadData[15:0], SpillDataBlock0} : ICacheMemReadData;
|
|
||||||
|
|
||||||
// There is a frustrating issue on the first access.
|
|
||||||
// The cache will not contain any valid data but will contain x's on
|
|
||||||
// reset. This makes FinalInstrRawF invalid. On the first cycle out of
|
|
||||||
// reset this register will pickup this x and it will propagate throughout
|
|
||||||
// the cpu causing simulation failure, most likely a trap for invalid instruction.
|
|
||||||
// Reset must be held 1 cycle longer to prevent this issue. additionally the
|
|
||||||
// reset should be to a NOP rather than 0.
|
|
||||||
|
|
||||||
// register reset
|
|
||||||
flop #(1) resetReg (.clk(clk),
|
|
||||||
.d(reset),
|
|
||||||
.q(reset_q));
|
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
|
59
wally-pipelined/src/cache/ICacheMem.sv
vendored
59
wally-pipelined/src/cache/ICacheMem.sv
vendored
@ -1,59 +0,0 @@
|
|||||||
`include "wally-config.vh"
|
|
||||||
|
|
||||||
module ICacheMem #(parameter NUMLINES=512, parameter BLOCKLEN = 256)
|
|
||||||
(
|
|
||||||
// Pipeline stuff
|
|
||||||
input logic clk,
|
|
||||||
input logic reset,
|
|
||||||
// If flush is high, invalidate the entire cache
|
|
||||||
input logic flush,
|
|
||||||
|
|
||||||
input logic [`PA_BITS-1:0] PCTagF, // physical address
|
|
||||||
input logic [`PA_BITS-1:0] PCNextIndexF, // virtual address
|
|
||||||
input logic WriteEnable,
|
|
||||||
input logic [BLOCKLEN-1:0] WriteLine,
|
|
||||||
output logic [BLOCKLEN-1:0] ReadLineF,
|
|
||||||
output logic HitF
|
|
||||||
);
|
|
||||||
|
|
||||||
// divide the address bus into sections; tag, index, and offset
|
|
||||||
localparam BLOCKBYTELEN = BLOCKLEN/8;
|
|
||||||
localparam OFFSETLEN = $clog2(BLOCKBYTELEN);
|
|
||||||
localparam INDEXLEN = $clog2(NUMLINES);
|
|
||||||
// *** BUG. `XLEN needs to be replaced with the virtual address width, S32, S39, or S48
|
|
||||||
localparam TAGLEN = `PA_BITS - OFFSETLEN - INDEXLEN;
|
|
||||||
|
|
||||||
logic [TAGLEN-1:0] LookupTag;
|
|
||||||
logic [NUMLINES-1:0] ValidOut;
|
|
||||||
logic DataValidBit;
|
|
||||||
|
|
||||||
// Depth is number of bits in one "word" of the memory, width is number of such words
|
|
||||||
sram1rw #(.DEPTH(BLOCKLEN), .WIDTH(NUMLINES))
|
|
||||||
cachemem (.*,
|
|
||||||
.Addr(PCNextIndexF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
|
||||||
.ReadData(ReadLineF),
|
|
||||||
.WriteData(WriteLine)
|
|
||||||
);
|
|
||||||
|
|
||||||
sram1rw #(.DEPTH(TAGLEN), .WIDTH(NUMLINES))
|
|
||||||
cachetags (.*,
|
|
||||||
.Addr(PCNextIndexF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
|
||||||
.ReadData(LookupTag),
|
|
||||||
.WriteData(PCTagF[`PA_BITS-1:INDEXLEN+OFFSETLEN])
|
|
||||||
);
|
|
||||||
|
|
||||||
// Correctly handle the valid bits
|
|
||||||
always_ff @(posedge clk, posedge reset) begin
|
|
||||||
if (reset) begin
|
|
||||||
ValidOut <= {NUMLINES{1'b0}};
|
|
||||||
end else if (flush) begin
|
|
||||||
ValidOut <= {NUMLINES{1'b0}};
|
|
||||||
end else begin
|
|
||||||
if (WriteEnable) begin
|
|
||||||
ValidOut[PCNextIndexF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]] <= 1;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
DataValidBit <= ValidOut[PCNextIndexF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]];
|
|
||||||
end
|
|
||||||
assign HitF = DataValidBit && (LookupTag == PCTagF[`PA_BITS-1:INDEXLEN+OFFSETLEN]);
|
|
||||||
endmodule
|
|
22
wally-pipelined/src/cache/cache-sram.sv
vendored
22
wally-pipelined/src/cache/cache-sram.sv
vendored
@ -1,22 +0,0 @@
|
|||||||
// Depth is number of bits in one "word" of the memory, width is number of such words
|
|
||||||
module Sram1Read1Write #(parameter DEPTH=128, WIDTH=256) (
|
|
||||||
input logic clk,
|
|
||||||
// port 1 is read only
|
|
||||||
input logic [$clog2(WIDTH)-1:0] ReadAddr,
|
|
||||||
output logic [DEPTH-1:0] ReadData,
|
|
||||||
|
|
||||||
// port 2 is write only
|
|
||||||
input logic [$clog2(WIDTH)-1:0] WriteAddr,
|
|
||||||
input logic [DEPTH-1:0] WriteData,
|
|
||||||
input logic WriteEnable
|
|
||||||
);
|
|
||||||
|
|
||||||
logic [WIDTH-1:0][DEPTH-1:0] StoredData;
|
|
||||||
|
|
||||||
always_ff @(posedge clk) begin
|
|
||||||
ReadData <= StoredData[ReadAddr];
|
|
||||||
if (WriteEnable) begin
|
|
||||||
StoredData[WriteAddr] <= WriteData;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
endmodule
|
|
41
wally-pipelined/src/cache/cacheway.sv
vendored
41
wally-pipelined/src/cache/cacheway.sv
vendored
@ -26,12 +26,12 @@
|
|||||||
`include "wally-config.vh"
|
`include "wally-config.vh"
|
||||||
|
|
||||||
module cacheway #(parameter NUMLINES=512, parameter BLOCKLEN = 256, TAGLEN = 26,
|
module cacheway #(parameter NUMLINES=512, parameter BLOCKLEN = 256, TAGLEN = 26,
|
||||||
parameter OFFSETLEN, parameter INDEXLEN)
|
parameter OFFSETLEN, parameter INDEXLEN, parameter DIRTY_BITS = 1)
|
||||||
(input logic clk,
|
(input logic clk,
|
||||||
input logic reset,
|
input logic reset,
|
||||||
|
|
||||||
input logic [$clog2(NUMLINES)-1:0] RAdr,
|
input logic [$clog2(NUMLINES)-1:0] RAdr,
|
||||||
input logic [`PA_BITS-1:0] MemPAdrM,
|
input logic [`PA_BITS-1:0] PAdr,
|
||||||
input logic WriteEnable,
|
input logic WriteEnable,
|
||||||
input logic [BLOCKLEN/`XLEN-1:0] WriteWordEnable,
|
input logic [BLOCKLEN/`XLEN-1:0] WriteWordEnable,
|
||||||
input logic TagWriteEnable,
|
input logic TagWriteEnable,
|
||||||
@ -43,14 +43,14 @@ module cacheway #(parameter NUMLINES=512, parameter BLOCKLEN = 256, TAGLEN = 26,
|
|||||||
input logic SelEvict,
|
input logic SelEvict,
|
||||||
input logic VictimWay,
|
input logic VictimWay,
|
||||||
|
|
||||||
output logic [BLOCKLEN-1:0] ReadDataBlockWayMaskedM,
|
output logic [BLOCKLEN-1:0] ReadDataBlockWayMasked,
|
||||||
output logic WayHit,
|
output logic WayHit,
|
||||||
output logic VictimDirtyWay,
|
output logic VictimDirtyWay,
|
||||||
output logic [TAGLEN-1:0] VictimTagWay
|
output logic [TAGLEN-1:0] VictimTagWay
|
||||||
);
|
);
|
||||||
|
|
||||||
logic [NUMLINES-1:0] ValidBits, DirtyBits;
|
logic [NUMLINES-1:0] ValidBits, DirtyBits;
|
||||||
logic [BLOCKLEN-1:0] ReadDataBlockWayM;
|
logic [BLOCKLEN-1:0] ReadDataBlockWay;
|
||||||
logic [TAGLEN-1:0] ReadTag;
|
logic [TAGLEN-1:0] ReadTag;
|
||||||
logic Valid;
|
logic Valid;
|
||||||
logic Dirty;
|
logic Dirty;
|
||||||
@ -63,7 +63,7 @@ module cacheway #(parameter NUMLINES=512, parameter BLOCKLEN = 256, TAGLEN = 26,
|
|||||||
.WIDTH(NUMLINES))
|
.WIDTH(NUMLINES))
|
||||||
CacheDataMem(.clk(clk),
|
CacheDataMem(.clk(clk),
|
||||||
.Addr(RAdr),
|
.Addr(RAdr),
|
||||||
.ReadData(ReadDataBlockWayM[(words+1)*`XLEN-1:words*`XLEN]),
|
.ReadData(ReadDataBlockWay[(words+1)*`XLEN-1:words*`XLEN]),
|
||||||
.WriteData(WriteData[(words+1)*`XLEN-1:words*`XLEN]),
|
.WriteData(WriteData[(words+1)*`XLEN-1:words*`XLEN]),
|
||||||
.WriteEnable(WriteEnable & WriteWordEnable[words]));
|
.WriteEnable(WriteEnable & WriteWordEnable[words]));
|
||||||
end
|
end
|
||||||
@ -74,12 +74,12 @@ module cacheway #(parameter NUMLINES=512, parameter BLOCKLEN = 256, TAGLEN = 26,
|
|||||||
CacheTagMem(.clk(clk),
|
CacheTagMem(.clk(clk),
|
||||||
.Addr(RAdr),
|
.Addr(RAdr),
|
||||||
.ReadData(ReadTag),
|
.ReadData(ReadTag),
|
||||||
.WriteData(MemPAdrM[`PA_BITS-1:OFFSETLEN+INDEXLEN]),
|
.WriteData(PAdr[`PA_BITS-1:OFFSETLEN+INDEXLEN]),
|
||||||
.WriteEnable(TagWriteEnable));
|
.WriteEnable(TagWriteEnable));
|
||||||
|
|
||||||
assign WayHit = Valid & (ReadTag == MemPAdrM[`PA_BITS-1:OFFSETLEN+INDEXLEN]);
|
assign WayHit = Valid & (ReadTag == PAdr[`PA_BITS-1:OFFSETLEN+INDEXLEN]);
|
||||||
assign SelectedWay = SelEvict ? VictimWay : WayHit;
|
assign SelectedWay = SelEvict ? VictimWay : WayHit;
|
||||||
assign ReadDataBlockWayMaskedM = SelectedWay ? ReadDataBlockWayM : '0; // first part of AO mux.
|
assign ReadDataBlockWayMasked = SelectedWay ? ReadDataBlockWay : '0; // first part of AO mux.
|
||||||
|
|
||||||
assign VictimDirtyWay = VictimWay & Dirty & Valid;
|
assign VictimDirtyWay = VictimWay & Dirty & Valid;
|
||||||
assign VictimTagWay = VictimWay ? ReadTag : '0;
|
assign VictimTagWay = VictimWay ? ReadTag : '0;
|
||||||
@ -87,20 +87,25 @@ module cacheway #(parameter NUMLINES=512, parameter BLOCKLEN = 256, TAGLEN = 26,
|
|||||||
always_ff @(posedge clk, posedge reset) begin
|
always_ff @(posedge clk, posedge reset) begin
|
||||||
if (reset)
|
if (reset)
|
||||||
ValidBits <= {NUMLINES{1'b0}};
|
ValidBits <= {NUMLINES{1'b0}};
|
||||||
else if (SetValid & WriteEnable) ValidBits[MemPAdrM[INDEXLEN+OFFSETLEN-1:OFFSETLEN]] <= 1'b1;
|
else if (SetValid & WriteEnable) ValidBits[PAdr[INDEXLEN+OFFSETLEN-1:OFFSETLEN]] <= 1'b1;
|
||||||
else if (ClearValid & WriteEnable) ValidBits[MemPAdrM[INDEXLEN+OFFSETLEN-1:OFFSETLEN]] <= 1'b0;
|
else if (ClearValid & WriteEnable) ValidBits[PAdr[INDEXLEN+OFFSETLEN-1:OFFSETLEN]] <= 1'b0;
|
||||||
Valid <= ValidBits[RAdr];
|
Valid <= ValidBits[RAdr];
|
||||||
end
|
end
|
||||||
|
|
||||||
always_ff @(posedge clk, posedge reset) begin
|
generate
|
||||||
if (reset)
|
if(DIRTY_BITS) begin
|
||||||
DirtyBits <= {NUMLINES{1'b0}};
|
always_ff @(posedge clk, posedge reset) begin
|
||||||
else if (SetDirty & WriteEnable) DirtyBits[MemPAdrM[INDEXLEN+OFFSETLEN-1:OFFSETLEN]] <= 1'b1;
|
if (reset)
|
||||||
else if (ClearDirty & WriteEnable) DirtyBits[MemPAdrM[INDEXLEN+OFFSETLEN-1:OFFSETLEN]] <= 1'b0;
|
DirtyBits <= {NUMLINES{1'b0}};
|
||||||
Dirty <= DirtyBits[RAdr];
|
else if (SetDirty & WriteEnable) DirtyBits[PAdr[INDEXLEN+OFFSETLEN-1:OFFSETLEN]] <= 1'b1;
|
||||||
end
|
else if (ClearDirty & WriteEnable) DirtyBits[PAdr[INDEXLEN+OFFSETLEN-1:OFFSETLEN]] <= 1'b0;
|
||||||
|
Dirty <= DirtyBits[RAdr];
|
||||||
|
end
|
||||||
|
end else begin
|
||||||
|
assign Dirty = 1'b0;
|
||||||
|
end
|
||||||
|
endgenerate
|
||||||
|
|
||||||
|
|
||||||
endmodule // DCacheMemWay
|
endmodule // DCacheMemWay
|
||||||
|
|
||||||
|
|
||||||
|
4
wally-pipelined/src/cache/dcache.sv
vendored
4
wally-pipelined/src/cache/dcache.sv
vendored
@ -149,7 +149,7 @@ module dcache
|
|||||||
MemWay[NUMWAYS-1:0](.clk,
|
MemWay[NUMWAYS-1:0](.clk,
|
||||||
.reset,
|
.reset,
|
||||||
.RAdr,
|
.RAdr,
|
||||||
.MemPAdrM(MemPAdrM[`PA_BITS-1:0]),
|
.PAdr(MemPAdrM[`PA_BITS-1:0]),
|
||||||
.WriteEnable(SRAMWayWriteEnable),
|
.WriteEnable(SRAMWayWriteEnable),
|
||||||
.WriteWordEnable(SRAMWordEnable),
|
.WriteWordEnable(SRAMWordEnable),
|
||||||
.TagWriteEnable(SRAMBlockWayWriteEnableM),
|
.TagWriteEnable(SRAMBlockWayWriteEnableM),
|
||||||
@ -160,7 +160,7 @@ module dcache
|
|||||||
.ClearDirty,
|
.ClearDirty,
|
||||||
.SelEvict,
|
.SelEvict,
|
||||||
.VictimWay,
|
.VictimWay,
|
||||||
.ReadDataBlockWayMaskedM,
|
.ReadDataBlockWayMasked(ReadDataBlockWayMaskedM),
|
||||||
.WayHit,
|
.WayHit,
|
||||||
.VictimDirtyWay,
|
.VictimDirtyWay,
|
||||||
.VictimTagWay);
|
.VictimTagWay);
|
||||||
|
@ -9,7 +9,7 @@ should continue.
|
|||||||
It is important to note ITLB misses and faults DO NOT flush a memory operation
|
It is important to note ITLB misses and faults DO NOT flush a memory operation
|
||||||
in the memory stage. This is the core reason for the complexity.
|
in the memory stage. This is the core reason for the complexity.
|
||||||
|
|
||||||
| Type | ITLB miss | DTLB miss | mem op | |
|
| Type | ITLB miss | DTLB miss | mem op | |
|
||||||
|-------+-----------+-----------+--------+--------------|
|
|-------+-----------+-----------+--------+--------------|
|
||||||
| 0 | 0 | 0 | 0 | |
|
| 0 | 0 | 0 | 0 | |
|
||||||
| 1 | 0 | 0 | 1 | |
|
| 1 | 0 | 0 | 1 | |
|
||||||
|
234
wally-pipelined/src/cache/dmapped.sv
vendored
234
wally-pipelined/src/cache/dmapped.sv
vendored
@ -1,234 +0,0 @@
|
|||||||
///////////////////////////////////////////
|
|
||||||
// dmapped.sv
|
|
||||||
//
|
|
||||||
// Written: jaallen@g.hmc.edu 2021-03-23
|
|
||||||
// Modified:
|
|
||||||
//
|
|
||||||
// Purpose: An implementation of a direct-mapped cache memory, with read-only and write-through versions
|
|
||||||
//
|
|
||||||
// A component of the Wally configurable RISC-V project.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2021 Harvey Mudd College & Oklahoma State University
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
|
|
||||||
// files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
|
|
||||||
// modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
|
|
||||||
// is furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
||||||
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
||||||
// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
|
|
||||||
// OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
///////////////////////////////////////////
|
|
||||||
|
|
||||||
`include "wally-config.vh"
|
|
||||||
|
|
||||||
// Read-only direct-mapped memory
|
|
||||||
module rodirectmappedmem #(parameter NUMLINES=512, parameter LINESIZE = 256, parameter WORDSIZE = `XLEN) (
|
|
||||||
// Pipeline stuff
|
|
||||||
input logic clk,
|
|
||||||
input logic reset,
|
|
||||||
input logic stall,
|
|
||||||
// If flush is high, invalidate the entire cache
|
|
||||||
input logic flush,
|
|
||||||
// Select which address to read (broken for efficiency's sake)
|
|
||||||
input logic [`XLEN-1:12] ReadUpperPAdr,
|
|
||||||
input logic [11:0] ReadLowerAdr,
|
|
||||||
// Write new data to the cache
|
|
||||||
input logic WriteEnable,
|
|
||||||
input logic [LINESIZE-1:0] WriteLine,
|
|
||||||
input logic [`XLEN-1:0] WritePAdr,
|
|
||||||
// Output the word, as well as if it is valid
|
|
||||||
output logic [WORDSIZE-1:0] DataWord,
|
|
||||||
output logic DataValid
|
|
||||||
);
|
|
||||||
|
|
||||||
// Various compile-time constants
|
|
||||||
localparam integer WORDWIDTH = $clog2(WORDSIZE/8);
|
|
||||||
localparam integer OFFSETWIDTH = $clog2(LINESIZE/WORDSIZE);
|
|
||||||
localparam integer SETWIDTH = $clog2(NUMLINES);
|
|
||||||
localparam integer TAGWIDTH = `XLEN - OFFSETWIDTH - SETWIDTH - WORDWIDTH;
|
|
||||||
|
|
||||||
localparam integer OFFSETBEGIN = WORDWIDTH;
|
|
||||||
localparam integer OFFSETEND = OFFSETBEGIN+OFFSETWIDTH-1;
|
|
||||||
localparam integer SETBEGIN = OFFSETEND+1;
|
|
||||||
localparam integer SETEND = SETBEGIN + SETWIDTH - 1;
|
|
||||||
localparam integer TAGBEGIN = SETEND + 1;
|
|
||||||
localparam integer TAGEND = TAGBEGIN + TAGWIDTH - 1;
|
|
||||||
|
|
||||||
// Machinery to read from and write to the correct addresses in memory
|
|
||||||
logic [`XLEN-1:0] ReadPAdr;
|
|
||||||
logic [`XLEN-1:0] OldReadPAdr;
|
|
||||||
logic [OFFSETWIDTH-1:0] ReadOffset, WriteOffset;
|
|
||||||
logic [SETWIDTH-1:0] ReadSet, WriteSet;
|
|
||||||
logic [TAGWIDTH-1:0] ReadTag, WriteTag;
|
|
||||||
logic [LINESIZE-1:0] ReadLine;
|
|
||||||
logic [LINESIZE/WORDSIZE-1:0][WORDSIZE-1:0] ReadLineTransformed;
|
|
||||||
|
|
||||||
// Machinery to check if a given read is valid and is the desired value
|
|
||||||
logic [TAGWIDTH-1:0] DataTag;
|
|
||||||
logic [NUMLINES-1:0] ValidOut;
|
|
||||||
logic DataValidBit;
|
|
||||||
|
|
||||||
flopenr #(`XLEN) ReadPAdrFlop(clk, reset, ~stall, ReadPAdr, OldReadPAdr);
|
|
||||||
|
|
||||||
// Assign the read and write addresses in cache memory
|
|
||||||
always_comb begin
|
|
||||||
ReadOffset = OldReadPAdr[OFFSETEND:OFFSETBEGIN];
|
|
||||||
ReadPAdr = {ReadUpperPAdr, ReadLowerAdr};
|
|
||||||
ReadSet = ReadPAdr[SETEND:SETBEGIN];
|
|
||||||
ReadTag = OldReadPAdr[TAGEND:TAGBEGIN];
|
|
||||||
|
|
||||||
WriteOffset = WritePAdr[OFFSETEND:OFFSETBEGIN];
|
|
||||||
WriteSet = WritePAdr[SETEND:SETBEGIN];
|
|
||||||
WriteTag = WritePAdr[TAGEND:TAGBEGIN];
|
|
||||||
end
|
|
||||||
|
|
||||||
// Depth is number of bits in one "word" of the memory, width is number of such words
|
|
||||||
Sram1Read1Write #(.DEPTH(LINESIZE), .WIDTH(NUMLINES)) cachemem (
|
|
||||||
.*,
|
|
||||||
.ReadAddr(ReadSet),
|
|
||||||
.ReadData(ReadLine),
|
|
||||||
.WriteAddr(WriteSet),
|
|
||||||
.WriteData(WriteLine)
|
|
||||||
);
|
|
||||||
Sram1Read1Write #(.DEPTH(TAGWIDTH), .WIDTH(NUMLINES)) cachetags (
|
|
||||||
.*,
|
|
||||||
.ReadAddr(ReadSet),
|
|
||||||
.ReadData(DataTag),
|
|
||||||
.WriteAddr(WriteSet),
|
|
||||||
.WriteData(WriteTag)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Pick the right bits coming out the read line
|
|
||||||
assign DataWord = ReadLineTransformed[ReadOffset];
|
|
||||||
genvar i;
|
|
||||||
generate
|
|
||||||
for (i=0; i < LINESIZE/WORDSIZE; i++) begin:readline
|
|
||||||
assign ReadLineTransformed[i] = ReadLine[(i+1)*WORDSIZE-1:i*WORDSIZE];
|
|
||||||
end
|
|
||||||
endgenerate
|
|
||||||
|
|
||||||
// Correctly handle the valid bits
|
|
||||||
always_ff @(posedge clk, posedge reset) begin
|
|
||||||
if (reset || flush) begin
|
|
||||||
ValidOut <= {NUMLINES{1'b0}};
|
|
||||||
end else begin
|
|
||||||
if (WriteEnable) begin
|
|
||||||
ValidOut[WriteSet] <= 1;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
DataValidBit <= ValidOut[ReadSet];
|
|
||||||
end
|
|
||||||
assign DataValid = DataValidBit && (DataTag == ReadTag);
|
|
||||||
endmodule
|
|
||||||
|
|
||||||
|
|
||||||
// Write-through direct-mapped memory
|
|
||||||
module wtdirectmappedmem #(parameter NUMLINES=512, parameter LINESIZE = 256, parameter WORDSIZE = `XLEN) (
|
|
||||||
// Pipeline stuff
|
|
||||||
input logic clk,
|
|
||||||
input logic reset,
|
|
||||||
input logic stall,
|
|
||||||
// If flush is high, invalidate the entire cache
|
|
||||||
input logic flush,
|
|
||||||
// Select which address to read (broken for efficiency's sake)
|
|
||||||
input logic [`XLEN-1:12] ReadUpperPAdr,
|
|
||||||
input logic [11:0] ReadLowerAdr,
|
|
||||||
// Load new data into the cache (from main memory)
|
|
||||||
input logic LoadEnable,
|
|
||||||
input logic [LINESIZE-1:0] LoadLine,
|
|
||||||
input logic [`XLEN-1:0] LoadPAdr,
|
|
||||||
// Write data to the cache (like from a store instruction)
|
|
||||||
input logic WriteEnable,
|
|
||||||
input logic [WORDSIZE-1:0] WriteWord,
|
|
||||||
input logic [`XLEN-1:0] WritePAdr,
|
|
||||||
input logic [1:0] WriteSize, // Specify size of the write (non-written bits should be preserved)
|
|
||||||
// Output the word, as well as if it is valid
|
|
||||||
output logic [WORDSIZE-1:0] DataWord,
|
|
||||||
output logic DataValid
|
|
||||||
);
|
|
||||||
|
|
||||||
// Various compile-time constants
|
|
||||||
localparam integer WORDWIDTH = $clog2(WORDSIZE/8);
|
|
||||||
localparam integer OFFSETWIDTH = $clog2(LINESIZE/WORDSIZE);
|
|
||||||
localparam integer SETWIDTH = $clog2(NUMLINES);
|
|
||||||
localparam integer TAGWIDTH = `XLEN - OFFSETWIDTH - SETWIDTH - WORDWIDTH;
|
|
||||||
|
|
||||||
localparam integer OFFSETBEGIN = WORDWIDTH;
|
|
||||||
localparam integer OFFSETEND = OFFSETBEGIN+OFFSETWIDTH-1;
|
|
||||||
localparam integer SETBEGIN = OFFSETEND+1;
|
|
||||||
localparam integer SETEND = SETBEGIN + SETWIDTH - 1;
|
|
||||||
localparam integer TAGBEGIN = SETEND + 1;
|
|
||||||
localparam integer TAGEND = TAGBEGIN + TAGWIDTH - 1;
|
|
||||||
|
|
||||||
// Machinery to read from and write to the correct addresses in memory
|
|
||||||
logic [`XLEN-1:0] ReadPAdr;
|
|
||||||
logic [`XLEN-1:0] OldReadPAdr;
|
|
||||||
logic [OFFSETWIDTH-1:0] ReadOffset, LoadOffset;
|
|
||||||
logic [SETWIDTH-1:0] ReadSet, LoadSet;
|
|
||||||
logic [TAGWIDTH-1:0] ReadTag, LoadTag;
|
|
||||||
logic [LINESIZE-1:0] ReadLine;
|
|
||||||
logic [LINESIZE/WORDSIZE-1:0][WORDSIZE-1:0] ReadLineTransformed;
|
|
||||||
|
|
||||||
// Machinery to check if a given read is valid and is the desired value
|
|
||||||
logic [TAGWIDTH-1:0] DataTag;
|
|
||||||
logic [NUMLINES-1:0] ValidOut;
|
|
||||||
logic DataValidBit;
|
|
||||||
|
|
||||||
flopenr #(`XLEN) ReadPAdrFlop(clk, reset, ~stall, ReadPAdr, OldReadPAdr);
|
|
||||||
|
|
||||||
// Assign the read and write addresses in cache memory
|
|
||||||
always_comb begin
|
|
||||||
ReadOffset = OldReadPAdr[OFFSETEND:OFFSETBEGIN];
|
|
||||||
ReadPAdr = {ReadUpperPAdr, ReadLowerAdr};
|
|
||||||
ReadSet = ReadPAdr[SETEND:SETBEGIN];
|
|
||||||
ReadTag = OldReadPAdr[TAGEND:TAGBEGIN];
|
|
||||||
|
|
||||||
LoadOffset = LoadPAdr[OFFSETEND:OFFSETBEGIN];
|
|
||||||
LoadSet = LoadPAdr[SETEND:SETBEGIN];
|
|
||||||
LoadTag = LoadPAdr[TAGEND:TAGBEGIN];
|
|
||||||
end
|
|
||||||
|
|
||||||
// Depth is number of bits in one "word" of the memory, width is number of such words
|
|
||||||
Sram1Read1Write #(.DEPTH(LINESIZE), .WIDTH(NUMLINES)) cachemem (
|
|
||||||
.*,
|
|
||||||
.ReadAddr(ReadSet),
|
|
||||||
.ReadData(ReadLine),
|
|
||||||
.WriteAddr(LoadSet),
|
|
||||||
.WriteData(LoadLine),
|
|
||||||
.WriteEnable(LoadEnable)
|
|
||||||
);
|
|
||||||
Sram1Read1Write #(.DEPTH(TAGWIDTH), .WIDTH(NUMLINES)) cachetags (
|
|
||||||
.*,
|
|
||||||
.ReadAddr(ReadSet),
|
|
||||||
.ReadData(DataTag),
|
|
||||||
.WriteAddr(LoadSet),
|
|
||||||
.WriteData(LoadTag),
|
|
||||||
.WriteEnable(LoadEnable)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Pick the right bits coming out the read line
|
|
||||||
assign DataWord = ReadLineTransformed[ReadOffset];
|
|
||||||
genvar i;
|
|
||||||
generate
|
|
||||||
for (i=0; i < LINESIZE/WORDSIZE; i++) begin:readline
|
|
||||||
assign ReadLineTransformed[i] = ReadLine[(i+1)*WORDSIZE-1:i*WORDSIZE];
|
|
||||||
end
|
|
||||||
endgenerate
|
|
||||||
|
|
||||||
// Correctly handle the valid bits
|
|
||||||
always_ff @(posedge clk, posedge reset) begin
|
|
||||||
if (reset || flush) begin
|
|
||||||
ValidOut <= {NUMLINES{1'b0}};
|
|
||||||
end else begin
|
|
||||||
if (LoadEnable) begin
|
|
||||||
ValidOut[LoadSet] <= 1;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
DataValidBit <= ValidOut[ReadSet];
|
|
||||||
end
|
|
||||||
assign DataValid = DataValidBit && (DataTag == ReadTag);
|
|
||||||
endmodule
|
|
220
wally-pipelined/src/cache/icache.sv
vendored
220
wally-pipelined/src/cache/icache.sv
vendored
@ -55,12 +55,28 @@ module icache
|
|||||||
// Configuration parameters
|
// Configuration parameters
|
||||||
localparam integer BLOCKLEN = `ICACHE_BLOCKLENINBITS;
|
localparam integer BLOCKLEN = `ICACHE_BLOCKLENINBITS;
|
||||||
localparam integer NUMLINES = `ICACHE_WAYSIZEINBYTES*8/`ICACHE_BLOCKLENINBITS;
|
localparam integer NUMLINES = `ICACHE_WAYSIZEINBYTES*8/`ICACHE_BLOCKLENINBITS;
|
||||||
|
localparam integer BLOCKBYTELEN = BLOCKLEN/8;
|
||||||
|
|
||||||
|
localparam integer OFFSETLEN = $clog2(BLOCKBYTELEN);
|
||||||
|
localparam integer INDEXLEN = $clog2(NUMLINES);
|
||||||
|
localparam integer TAGLEN = `PA_BITS - OFFSETLEN - INDEXLEN;
|
||||||
|
|
||||||
|
localparam WORDSPERLINE = BLOCKLEN/`XLEN;
|
||||||
|
localparam LOGWPL = $clog2(WORDSPERLINE);
|
||||||
|
|
||||||
|
localparam FetchCountThreshold = WORDSPERLINE - 1;
|
||||||
|
localparam BlockByteLength = BLOCKLEN / 8;
|
||||||
|
|
||||||
|
localparam OFFSETWIDTH = $clog2(BlockByteLength);
|
||||||
|
|
||||||
|
localparam integer PA_WIDTH = `PA_BITS - 2;
|
||||||
|
localparam integer NUMWAYS = `ICACHE_NUMWAYS;
|
||||||
|
|
||||||
|
|
||||||
// Input signals to cache memory
|
// Input signals to cache memory
|
||||||
logic FlushMem;
|
logic FlushMem;
|
||||||
logic ICacheMemWriteEnable;
|
logic ICacheMemWriteEnable;
|
||||||
logic [BLOCKLEN-1:0] ICacheMemWriteData;
|
logic [BLOCKLEN-1:0] ICacheMemWriteData;
|
||||||
logic EndFetchState;
|
|
||||||
logic [`PA_BITS-1:0] PCTagF, PCNextIndexF;
|
logic [`PA_BITS-1:0] PCTagF, PCNextIndexF;
|
||||||
// Output signals from cache memory
|
// Output signals from cache memory
|
||||||
logic [31:0] ICacheMemReadData;
|
logic [31:0] ICacheMemReadData;
|
||||||
@ -68,18 +84,101 @@ module icache
|
|||||||
logic ICacheReadEn;
|
logic ICacheReadEn;
|
||||||
logic [BLOCKLEN-1:0] ReadLineF;
|
logic [BLOCKLEN-1:0] ReadLineF;
|
||||||
|
|
||||||
|
|
||||||
ICacheMem #(.BLOCKLEN(BLOCKLEN), .NUMLINES(NUMLINES))
|
|
||||||
cachemem(
|
|
||||||
.*,
|
|
||||||
// Stall it if the pipeline is stalled, unless we're stalling it and we're ending our stall
|
|
||||||
.flush(FlushMem),
|
|
||||||
.WriteEnable(ICacheMemWriteEnable),
|
|
||||||
.WriteLine(ICacheMemWriteData),
|
|
||||||
.ReadLineF(ReadLineF),
|
|
||||||
.HitF(ICacheMemReadValid)
|
|
||||||
);
|
|
||||||
|
|
||||||
|
logic [15:0] SpillDataBlock0;
|
||||||
|
logic spill;
|
||||||
|
logic spillSave;
|
||||||
|
|
||||||
|
logic FetchCountFlag;
|
||||||
|
logic CntEn;
|
||||||
|
|
||||||
|
logic [1:0] SelAdr_q;
|
||||||
|
|
||||||
|
|
||||||
|
logic [LOGWPL-1:0] FetchCount, NextFetchCount;
|
||||||
|
|
||||||
|
logic [`PA_BITS-1:0] PCPSpillF;
|
||||||
|
|
||||||
|
logic CntReset;
|
||||||
|
logic [1:0] SelAdr;
|
||||||
|
logic SavePC;
|
||||||
|
logic [INDEXLEN-1:0] RAdr;
|
||||||
|
logic [NUMWAYS-1:0] VictimWay;
|
||||||
|
logic LRUWriteEn;
|
||||||
|
logic [NUMWAYS-1:0] WayHit;
|
||||||
|
logic hit;
|
||||||
|
|
||||||
|
|
||||||
|
logic [BLOCKLEN-1:0] ReadDataBlockWayMasked [NUMWAYS-1:0];
|
||||||
|
|
||||||
|
|
||||||
|
logic CacheableF;
|
||||||
|
|
||||||
|
logic [`PA_BITS-1:0] BasePAdrF, BasePAdrMaskedF;
|
||||||
|
logic [OFFSETLEN-1:0] BasePAdrOffsetF;
|
||||||
|
|
||||||
|
|
||||||
|
logic [NUMWAYS-1:0] SRAMWayWriteEnable;
|
||||||
|
|
||||||
|
|
||||||
|
// on spill we want to get the first 2 bytes of the next cache block.
|
||||||
|
// the spill only occurs if the PCPF mod BlockByteLength == -2. Therefore we can
|
||||||
|
// simply add 2 to land on the next cache block.
|
||||||
|
assign PCPSpillF = PCPF + {{{PA_WIDTH}{1'b0}}, 2'b10}; // *** modelsim does not allow the use of PA_BITS for literal width.
|
||||||
|
|
||||||
|
mux3 #(INDEXLEN)
|
||||||
|
AdrSelMux(.d0(PCNextF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
||||||
|
.d1(PCPF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
||||||
|
.d2(PCPSpillF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
||||||
|
.s(SelAdr),
|
||||||
|
.y(RAdr));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cacheway #(.NUMLINES(NUMLINES), .BLOCKLEN(BLOCKLEN), .TAGLEN(TAGLEN), .OFFSETLEN(OFFSETLEN), .INDEXLEN(INDEXLEN),
|
||||||
|
.DIRTY_BITS(0))
|
||||||
|
MemWay[NUMWAYS-1:0](.clk,
|
||||||
|
.reset,
|
||||||
|
.RAdr(RAdr),
|
||||||
|
.PAdr(PCTagF),
|
||||||
|
.WriteEnable(SRAMWayWriteEnable),
|
||||||
|
.WriteWordEnable('1),
|
||||||
|
.TagWriteEnable(SRAMWayWriteEnable),
|
||||||
|
.WriteData(ICacheMemWriteData),
|
||||||
|
.SetValid(ICacheMemWriteEnable),
|
||||||
|
.ClearValid(1'b0),
|
||||||
|
.SetDirty(1'b0),
|
||||||
|
.ClearDirty(1'b0),
|
||||||
|
.SelEvict(1'b0),
|
||||||
|
.VictimWay,
|
||||||
|
.ReadDataBlockWayMasked,
|
||||||
|
.WayHit,
|
||||||
|
.VictimDirtyWay(),
|
||||||
|
.VictimTagWay()
|
||||||
|
);
|
||||||
|
|
||||||
|
generate
|
||||||
|
if(NUMWAYS > 1) begin
|
||||||
|
cachereplacementpolicy #(NUMWAYS, INDEXLEN, OFFSETLEN, NUMLINES)
|
||||||
|
cachereplacementpolicy(.clk, .reset,
|
||||||
|
.WayHit,
|
||||||
|
.VictimWay,
|
||||||
|
.MemPAdrM(PCTagF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
||||||
|
.RAdr,
|
||||||
|
.LRUWriteEn); // *** connect
|
||||||
|
end else begin
|
||||||
|
assign VictimWay = 1'b1; // one hot.
|
||||||
|
end
|
||||||
|
endgenerate
|
||||||
|
|
||||||
|
assign hit = | WayHit;
|
||||||
|
|
||||||
|
// ReadDataBlockWayMasked is a 2d array of cache block len by number of ways.
|
||||||
|
// Need to OR together each way in a bitwise manner.
|
||||||
|
// Final part of the AO Mux. First is the AND in the cacheway.
|
||||||
|
or_rows #(NUMWAYS, BLOCKLEN) ReadDataAOMux(.a(ReadDataBlockWayMasked), .y(ReadLineF));
|
||||||
|
|
||||||
|
|
||||||
always_comb begin
|
always_comb begin
|
||||||
case (PCTagF[4:1])
|
case (PCTagF[4:1])
|
||||||
0: ICacheMemReadData = ReadLineF[31:0];
|
0: ICacheMemReadData = ReadLineF[31:0];
|
||||||
@ -104,8 +203,103 @@ module icache
|
|||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
|
|
||||||
|
// spills require storing the first cache block so it can merged
|
||||||
|
// with the second
|
||||||
|
// can optimize size, for now just make it the size of the data
|
||||||
|
// leaving the cache memory.
|
||||||
|
flopenr #(16) SpillInstrReg(.clk(clk),
|
||||||
|
.en(spillSave),
|
||||||
|
.reset(reset),
|
||||||
|
.d(ICacheMemReadData[15:0]),
|
||||||
|
.q(SpillDataBlock0));
|
||||||
|
|
||||||
ICacheCntrl #(.BLOCKLEN(BLOCKLEN)) controller(.*);
|
assign FinalInstrRawF = spill ? {ICacheMemReadData[15:0], SpillDataBlock0} : ICacheMemReadData;
|
||||||
|
|
||||||
|
// Detect if the instruction is compressed
|
||||||
|
assign CompressedF = FinalInstrRawF[1:0] != 2'b11;
|
||||||
|
assign spill = PCPF[4:1] == 4'b1111 ? 1'b1 : 1'b0;
|
||||||
|
|
||||||
|
|
||||||
|
// to compute the fetch address we need to add the bit shifted
|
||||||
|
// counter output to the address.
|
||||||
|
assign FetchCountFlag = (FetchCount == FetchCountThreshold[LOGWPL-1:0]);
|
||||||
|
|
||||||
|
flopenr #(LOGWPL)
|
||||||
|
FetchCountReg(.clk(clk),
|
||||||
|
.reset(reset | CntReset),
|
||||||
|
.en(CntEn),
|
||||||
|
.d(NextFetchCount),
|
||||||
|
.q(FetchCount));
|
||||||
|
|
||||||
|
assign NextFetchCount = FetchCount + 1'b1;
|
||||||
|
|
||||||
|
|
||||||
|
// store read data from memory interface before writing into SRAM.
|
||||||
|
genvar i;
|
||||||
|
generate
|
||||||
|
for (i = 0; i < WORDSPERLINE; i++) begin:storebuffer
|
||||||
|
flopenr #(`XLEN) sb(.clk(clk),
|
||||||
|
.reset(reset),
|
||||||
|
.en(InstrAckF & (i == FetchCount)),
|
||||||
|
.d(InstrInF),
|
||||||
|
.q(ICacheMemWriteData[(i+1)*`XLEN-1:i*`XLEN]));
|
||||||
|
end
|
||||||
|
endgenerate
|
||||||
|
|
||||||
|
|
||||||
|
// this mux needs to be delayed 1 cycle as it occurs 1 pipeline stage later.
|
||||||
|
// *** read enable may not be necessary.
|
||||||
|
flopenr #(2) SelAdrReg(.clk(clk),
|
||||||
|
.reset(reset),
|
||||||
|
.en(ICacheReadEn),
|
||||||
|
.d(SelAdr),
|
||||||
|
.q(SelAdr_q));
|
||||||
|
|
||||||
|
assign PCTagF = SelAdr_q[1] ? PCPSpillF : PCPF;
|
||||||
|
|
||||||
|
// unlike the dcache the victim is never dirty so no eviction is necessary.
|
||||||
|
/* -----\/----- EXCLUDED -----\/-----
|
||||||
|
mux2 #(`PA_BITS) BaseAdrMux(.d0(PCTagF),
|
||||||
|
.d1({VictimTag, PCTagF[INDEXLEN+OFFSETLEN-1:OFFSETLEN], {{OFFSETLEN}{1'b0}}}),
|
||||||
|
.s(SelEvict),
|
||||||
|
.y(BasePAdrF));
|
||||||
|
-----/\----- EXCLUDED -----/\----- */
|
||||||
|
assign BasePAdrF = PCTagF;
|
||||||
|
|
||||||
|
// if not cacheable the offset bits needs to be sent to the EBU.
|
||||||
|
// if cacheable the offset bits are discarded. $ FSM will fetch the whole block.
|
||||||
|
assign CacheableF = 1'b1; // *** BUG needs to be an input from MMU.
|
||||||
|
assign BasePAdrOffsetF = CacheableF ? {{OFFSETLEN}{1'b0}} : BasePAdrF[OFFSETLEN-1:0];
|
||||||
|
assign BasePAdrMaskedF = {BasePAdrF[`PA_BITS-1:OFFSETLEN], BasePAdrOffsetF};
|
||||||
|
|
||||||
|
assign InstrPAdrF = ({{`PA_BITS-LOGWPL{1'b0}}, FetchCount} << $clog2(`XLEN/8)) + BasePAdrMaskedF;
|
||||||
|
|
||||||
|
// truncate the offset from PCPF for memory address generation
|
||||||
|
|
||||||
|
assign SRAMWayWriteEnable = ICacheMemWriteEnable ? VictimWay : '0;
|
||||||
|
|
||||||
|
icachefsm #(.BLOCKLEN(BLOCKLEN))
|
||||||
|
controller(.clk,
|
||||||
|
.reset,
|
||||||
|
.StallF,
|
||||||
|
.ICacheReadEn,
|
||||||
|
.ICacheMemWriteEnable,
|
||||||
|
.ICacheStallF,
|
||||||
|
.ITLBMissF,
|
||||||
|
.ITLBWriteF,
|
||||||
|
.WalkerInstrPageFaultF,
|
||||||
|
.InstrAckF,
|
||||||
|
.InstrReadF,
|
||||||
|
.hit,
|
||||||
|
.FetchCountFlag,
|
||||||
|
.spill,
|
||||||
|
.spillSave,
|
||||||
|
.CntEn,
|
||||||
|
.CntReset,
|
||||||
|
.SelAdr,
|
||||||
|
.SavePC,
|
||||||
|
.LRUWriteEn
|
||||||
|
);
|
||||||
|
|
||||||
// For now, assume no writes to executable memory
|
// For now, assume no writes to executable memory
|
||||||
assign FlushMem = 1'b0;
|
assign FlushMem = 1'b0;
|
||||||
|
395
wally-pipelined/src/cache/icachefsm.sv
vendored
Normal file
395
wally-pipelined/src/cache/icachefsm.sv
vendored
Normal file
@ -0,0 +1,395 @@
|
|||||||
|
///////////////////////////////////////////
|
||||||
|
// icache.sv
|
||||||
|
//
|
||||||
|
// Written: ross1728@gmail.com June 04, 2021
|
||||||
|
// Modified:
|
||||||
|
//
|
||||||
|
// Purpose: I Cache controller
|
||||||
|
//
|
||||||
|
// A component of the Wally configurable RISC-V project.
|
||||||
|
//
|
||||||
|
// Copyright (C) 2021 Harvey Mudd College & Oklahoma State University
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
|
||||||
|
// files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
|
||||||
|
// modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
|
||||||
|
// is furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||||
|
// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
|
||||||
|
// OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
///////////////////////////////////////////
|
||||||
|
|
||||||
|
`include "wally-config.vh"
|
||||||
|
|
||||||
|
module icachefsm #(parameter BLOCKLEN = 256)
|
||||||
|
(
|
||||||
|
// Inputs from pipeline
|
||||||
|
input logic clk, reset,
|
||||||
|
|
||||||
|
input logic StallF,
|
||||||
|
|
||||||
|
// inputs from mmu
|
||||||
|
input logic ITLBMissF,
|
||||||
|
input logic ITLBWriteF,
|
||||||
|
input logic WalkerInstrPageFaultF,
|
||||||
|
|
||||||
|
// BUS interface
|
||||||
|
input logic InstrAckF,
|
||||||
|
|
||||||
|
// icache internal inputs
|
||||||
|
input logic hit,
|
||||||
|
input logic FetchCountFlag,
|
||||||
|
input logic spill,
|
||||||
|
|
||||||
|
// icache internal outputs
|
||||||
|
output logic ICacheReadEn,
|
||||||
|
// Load data into the cache
|
||||||
|
output logic ICacheMemWriteEnable,
|
||||||
|
|
||||||
|
// Outputs to pipeline control stuff
|
||||||
|
output logic ICacheStallF,
|
||||||
|
|
||||||
|
// Bus interface outputs
|
||||||
|
output logic InstrReadF,
|
||||||
|
|
||||||
|
// icache internal outputs
|
||||||
|
output logic spillSave,
|
||||||
|
output logic CntEn,
|
||||||
|
output logic CntReset,
|
||||||
|
output logic [1:0] SelAdr,
|
||||||
|
output logic SavePC,
|
||||||
|
output logic LRUWriteEn
|
||||||
|
);
|
||||||
|
|
||||||
|
// FSM states
|
||||||
|
typedef enum {STATE_READY,
|
||||||
|
STATE_HIT_SPILL, // spill, block 0 hit
|
||||||
|
STATE_HIT_SPILL_MISS_FETCH_WDV, // block 1 miss, issue read to AHB and wait data.
|
||||||
|
STATE_HIT_SPILL_MISS_FETCH_DONE, // write data into SRAM/LUT
|
||||||
|
STATE_HIT_SPILL_MERGE, // Read block 0 of CPU access, should be able to optimize into STATE_HIT_SPILL.
|
||||||
|
|
||||||
|
// a challenge is the spill signal gets us out of the ready state and moves us to
|
||||||
|
// 1 of the 2 spill branches. However the original fsm design had us return to
|
||||||
|
// the ready state when the spill + hits/misses were fully resolved. The problem
|
||||||
|
// is the spill signal is based on PCPF so when we return to READY to check if the
|
||||||
|
// cache has a hit it still expresses spill. We can fix in 1 of two ways.
|
||||||
|
// 1. we can add 1 extra state at the end of each spill branch to returns the instruction
|
||||||
|
// to the CPU advancing the CPU and icache to the next instruction.
|
||||||
|
// 2. We can assert a signal which is delayed 1 cycle to suppress the spill when we get
|
||||||
|
// to the READY state.
|
||||||
|
// The first first option is more robust and increases the number of states by 2. The
|
||||||
|
// second option is seams like it should work, but I worry there is a hidden interaction
|
||||||
|
// between CPU stalling and that register.
|
||||||
|
// Picking option 1.
|
||||||
|
|
||||||
|
STATE_HIT_SPILL_FINAL, // this state replicates STATE_READY's replay of the
|
||||||
|
// spill access but does nto consider spill. It also does not do another operation.
|
||||||
|
|
||||||
|
STATE_MISS_FETCH_WDV, // aligned miss, issue read to AHB and wait for data.
|
||||||
|
STATE_MISS_FETCH_DONE, // write data into SRAM/LUT
|
||||||
|
STATE_MISS_READ, // read block 1 from SRAM/LUT
|
||||||
|
STATE_MISS_READ_DELAY, // read block 1 from SRAM/LUT
|
||||||
|
|
||||||
|
STATE_MISS_SPILL_FETCH_WDV, // spill, miss on block 0, issue read to AHB and wait
|
||||||
|
STATE_MISS_SPILL_FETCH_DONE, // write data into SRAM/LUT
|
||||||
|
STATE_MISS_SPILL_READ1, // read block 0 from SRAM/LUT
|
||||||
|
STATE_MISS_SPILL_2, // return to ready if hit or do second block update.
|
||||||
|
STATE_MISS_SPILL_2_START, // return to ready if hit or do second block update.
|
||||||
|
STATE_MISS_SPILL_MISS_FETCH_WDV, // miss on block 1, issue read to AHB and wait
|
||||||
|
STATE_MISS_SPILL_MISS_FETCH_DONE, // write data to SRAM/LUT
|
||||||
|
STATE_MISS_SPILL_MERGE, // read block 0 of CPU access,
|
||||||
|
|
||||||
|
STATE_MISS_SPILL_FINAL, // this state replicates STATE_READY's replay of the
|
||||||
|
// spill access but does nto consider spill. It also does not do another operation.
|
||||||
|
|
||||||
|
STATE_INVALIDATE, // *** not sure if invalidate or evict? invalidate by cache block or address?
|
||||||
|
STATE_TLB_MISS,
|
||||||
|
STATE_TLB_MISS_DONE,
|
||||||
|
|
||||||
|
STATE_CPU_BUSY,
|
||||||
|
STATE_CPU_BUSY_SPILL
|
||||||
|
} statetype;
|
||||||
|
|
||||||
|
statetype CurrState, NextState;
|
||||||
|
logic PreCntEn;
|
||||||
|
logic UnalignedSelect;
|
||||||
|
|
||||||
|
// the FSM is always runing, do not stall.
|
||||||
|
always_ff @(posedge clk, posedge reset)
|
||||||
|
if (reset) CurrState <= #1 STATE_READY;
|
||||||
|
else CurrState <= #1 NextState;
|
||||||
|
|
||||||
|
// Next state logic
|
||||||
|
always_comb begin
|
||||||
|
UnalignedSelect = 1'b0;
|
||||||
|
CntReset = 1'b0;
|
||||||
|
PreCntEn = 1'b0;
|
||||||
|
//InstrReadF = 1'b0;
|
||||||
|
ICacheMemWriteEnable = 1'b0;
|
||||||
|
spillSave = 1'b0;
|
||||||
|
SelAdr = 2'b00;
|
||||||
|
ICacheReadEn = 1'b0;
|
||||||
|
SavePC = 1'b0;
|
||||||
|
ICacheStallF = 1'b1;
|
||||||
|
LRUWriteEn = 1'b0;
|
||||||
|
case (CurrState)
|
||||||
|
STATE_READY: begin
|
||||||
|
SelAdr = 2'b00;
|
||||||
|
ICacheReadEn = 1'b1;
|
||||||
|
if (ITLBMissF) begin
|
||||||
|
NextState = STATE_TLB_MISS;
|
||||||
|
end else if (hit & ~spill) begin
|
||||||
|
SavePC = 1'b1;
|
||||||
|
ICacheStallF = 1'b0;
|
||||||
|
LRUWriteEn = 1'b1;
|
||||||
|
if(StallF) begin
|
||||||
|
NextState = STATE_CPU_BUSY;
|
||||||
|
SelAdr = 2'b01;
|
||||||
|
end else begin
|
||||||
|
NextState = STATE_READY;
|
||||||
|
end
|
||||||
|
end else if (hit & spill) begin
|
||||||
|
spillSave = 1'b1;
|
||||||
|
SelAdr = 2'b10;
|
||||||
|
LRUWriteEn = 1'b1;
|
||||||
|
NextState = STATE_HIT_SPILL;
|
||||||
|
end else if (~hit & ~spill) begin
|
||||||
|
CntReset = 1'b1;
|
||||||
|
NextState = STATE_MISS_FETCH_WDV;
|
||||||
|
end else if (~hit & spill) begin
|
||||||
|
CntReset = 1'b1;
|
||||||
|
SelAdr = 2'b01;
|
||||||
|
NextState = STATE_MISS_SPILL_FETCH_WDV;
|
||||||
|
end else begin
|
||||||
|
if(StallF) begin
|
||||||
|
NextState = STATE_CPU_BUSY;
|
||||||
|
SelAdr = 2'b01;
|
||||||
|
end else begin
|
||||||
|
NextState = STATE_READY;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
// branch 1, hit spill and 2, miss spill hit
|
||||||
|
STATE_HIT_SPILL: begin
|
||||||
|
SelAdr = 2'b10;
|
||||||
|
UnalignedSelect = 1'b1;
|
||||||
|
ICacheReadEn = 1'b1;
|
||||||
|
if (hit) begin
|
||||||
|
NextState = STATE_HIT_SPILL_FINAL;
|
||||||
|
end else begin
|
||||||
|
CntReset = 1'b1;
|
||||||
|
NextState = STATE_HIT_SPILL_MISS_FETCH_WDV;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
STATE_HIT_SPILL_MISS_FETCH_WDV: begin
|
||||||
|
SelAdr = 2'b10;
|
||||||
|
//InstrReadF = 1'b1;
|
||||||
|
PreCntEn = 1'b1;
|
||||||
|
if (FetchCountFlag & InstrAckF) begin
|
||||||
|
NextState = STATE_HIT_SPILL_MISS_FETCH_DONE;
|
||||||
|
end else begin
|
||||||
|
NextState = STATE_HIT_SPILL_MISS_FETCH_WDV;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
STATE_HIT_SPILL_MISS_FETCH_DONE: begin
|
||||||
|
SelAdr = 2'b10;
|
||||||
|
ICacheMemWriteEnable = 1'b1;
|
||||||
|
NextState = STATE_HIT_SPILL_MERGE;
|
||||||
|
end
|
||||||
|
STATE_HIT_SPILL_MERGE: begin
|
||||||
|
SelAdr = 2'b10;
|
||||||
|
UnalignedSelect = 1'b1;
|
||||||
|
ICacheReadEn = 1'b1;
|
||||||
|
NextState = STATE_HIT_SPILL_FINAL;
|
||||||
|
end
|
||||||
|
STATE_HIT_SPILL_FINAL: begin
|
||||||
|
ICacheReadEn = 1'b1;
|
||||||
|
SelAdr = 2'b00;
|
||||||
|
UnalignedSelect = 1'b1;
|
||||||
|
SavePC = 1'b1;
|
||||||
|
ICacheStallF = 1'b0;
|
||||||
|
LRUWriteEn = 1'b1;
|
||||||
|
|
||||||
|
if(StallF) begin
|
||||||
|
NextState = STATE_CPU_BUSY_SPILL;
|
||||||
|
SelAdr = 2'b10;
|
||||||
|
end else begin
|
||||||
|
NextState = STATE_READY;
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
// branch 3 miss no spill
|
||||||
|
STATE_MISS_FETCH_WDV: begin
|
||||||
|
SelAdr = 2'b01;
|
||||||
|
//InstrReadF = 1'b1;
|
||||||
|
PreCntEn = 1'b1;
|
||||||
|
if (FetchCountFlag & InstrAckF) begin
|
||||||
|
NextState = STATE_MISS_FETCH_DONE;
|
||||||
|
end else begin
|
||||||
|
NextState = STATE_MISS_FETCH_WDV;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
STATE_MISS_FETCH_DONE: begin
|
||||||
|
SelAdr = 2'b01;
|
||||||
|
ICacheMemWriteEnable = 1'b1;
|
||||||
|
NextState = STATE_MISS_READ;
|
||||||
|
end
|
||||||
|
STATE_MISS_READ: begin
|
||||||
|
SelAdr = 2'b01;
|
||||||
|
ICacheReadEn = 1'b1;
|
||||||
|
NextState = STATE_MISS_READ_DELAY;
|
||||||
|
end
|
||||||
|
STATE_MISS_READ_DELAY: begin
|
||||||
|
//SelAdr = 2'b01;
|
||||||
|
ICacheReadEn = 1'b1;
|
||||||
|
ICacheStallF = 1'b0;
|
||||||
|
LRUWriteEn = 1'b1;
|
||||||
|
if(StallF) begin
|
||||||
|
SelAdr = 2'b01;
|
||||||
|
NextState = STATE_CPU_BUSY;
|
||||||
|
SelAdr = 2'b01;
|
||||||
|
end else begin
|
||||||
|
NextState = STATE_READY;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
// branch 4 miss spill hit, and 5 miss spill miss
|
||||||
|
STATE_MISS_SPILL_FETCH_WDV: begin
|
||||||
|
SelAdr = 2'b01;
|
||||||
|
PreCntEn = 1'b1;
|
||||||
|
//InstrReadF = 1'b1;
|
||||||
|
if (FetchCountFlag & InstrAckF) begin
|
||||||
|
NextState = STATE_MISS_SPILL_FETCH_DONE;
|
||||||
|
end else begin
|
||||||
|
NextState = STATE_MISS_SPILL_FETCH_WDV;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
STATE_MISS_SPILL_FETCH_DONE: begin
|
||||||
|
SelAdr = 2'b01;
|
||||||
|
ICacheMemWriteEnable = 1'b1;
|
||||||
|
NextState = STATE_MISS_SPILL_READ1;
|
||||||
|
end
|
||||||
|
STATE_MISS_SPILL_READ1: begin // always be a hit as we just wrote that cache block.
|
||||||
|
SelAdr = 2'b01; // there is a 1 cycle delay after setting the address before the date arrives.
|
||||||
|
ICacheReadEn = 1'b1;
|
||||||
|
LRUWriteEn = 1'b1;
|
||||||
|
NextState = STATE_MISS_SPILL_2;
|
||||||
|
end
|
||||||
|
STATE_MISS_SPILL_2: begin
|
||||||
|
SelAdr = 2'b10;
|
||||||
|
UnalignedSelect = 1'b1;
|
||||||
|
spillSave = 1'b1; /// *** Could pipeline these to make it clearer in the fsm.
|
||||||
|
ICacheReadEn = 1'b1;
|
||||||
|
NextState = STATE_MISS_SPILL_2_START;
|
||||||
|
end
|
||||||
|
STATE_MISS_SPILL_2_START: begin
|
||||||
|
if (~hit) begin
|
||||||
|
CntReset = 1'b1;
|
||||||
|
NextState = STATE_MISS_SPILL_MISS_FETCH_WDV;
|
||||||
|
end else begin
|
||||||
|
ICacheReadEn = 1'b1;
|
||||||
|
SelAdr = 2'b00;
|
||||||
|
UnalignedSelect = 1'b1;
|
||||||
|
SavePC = 1'b1;
|
||||||
|
ICacheStallF = 1'b0;
|
||||||
|
LRUWriteEn = 1'b1;
|
||||||
|
if(StallF) begin
|
||||||
|
NextState = STATE_CPU_BUSY;
|
||||||
|
SelAdr = 2'b01;
|
||||||
|
end else begin
|
||||||
|
NextState = STATE_READY;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
STATE_MISS_SPILL_MISS_FETCH_WDV: begin
|
||||||
|
SelAdr = 2'b10;
|
||||||
|
PreCntEn = 1'b1;
|
||||||
|
//InstrReadF = 1'b1;
|
||||||
|
if (FetchCountFlag & InstrAckF) begin
|
||||||
|
NextState = STATE_MISS_SPILL_MISS_FETCH_DONE;
|
||||||
|
end else begin
|
||||||
|
NextState = STATE_MISS_SPILL_MISS_FETCH_WDV;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
STATE_MISS_SPILL_MISS_FETCH_DONE: begin
|
||||||
|
SelAdr = 2'b10;
|
||||||
|
ICacheMemWriteEnable = 1'b1;
|
||||||
|
NextState = STATE_MISS_SPILL_MERGE;
|
||||||
|
end
|
||||||
|
STATE_MISS_SPILL_MERGE: begin
|
||||||
|
SelAdr = 2'b10;
|
||||||
|
UnalignedSelect = 1'b1;
|
||||||
|
ICacheReadEn = 1'b1;
|
||||||
|
NextState = STATE_MISS_SPILL_FINAL;
|
||||||
|
end
|
||||||
|
STATE_MISS_SPILL_FINAL: begin
|
||||||
|
ICacheReadEn = 1'b1;
|
||||||
|
SelAdr = 2'b00;
|
||||||
|
UnalignedSelect = 1'b1;
|
||||||
|
SavePC = 1'b1;
|
||||||
|
ICacheStallF = 1'b0;
|
||||||
|
LRUWriteEn = 1'b1;
|
||||||
|
if(StallF) begin
|
||||||
|
NextState = STATE_CPU_BUSY_SPILL;
|
||||||
|
SelAdr = 2'b10;
|
||||||
|
end else begin
|
||||||
|
NextState = STATE_READY;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
STATE_TLB_MISS: begin
|
||||||
|
if (WalkerInstrPageFaultF) begin
|
||||||
|
NextState = STATE_READY;
|
||||||
|
ICacheStallF = 1'b0;
|
||||||
|
end else if (ITLBWriteF) begin
|
||||||
|
NextState = STATE_TLB_MISS_DONE;
|
||||||
|
end else begin
|
||||||
|
NextState = STATE_TLB_MISS;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
STATE_TLB_MISS_DONE: begin
|
||||||
|
SelAdr = 2'b01;
|
||||||
|
NextState = STATE_READY;
|
||||||
|
end
|
||||||
|
STATE_CPU_BUSY: begin
|
||||||
|
ICacheStallF = 1'b0;
|
||||||
|
if (ITLBMissF) begin
|
||||||
|
NextState = STATE_TLB_MISS;
|
||||||
|
end else if(StallF) begin
|
||||||
|
NextState = STATE_CPU_BUSY;
|
||||||
|
SelAdr = 2'b01;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
NextState = STATE_READY;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
STATE_CPU_BUSY_SPILL: begin
|
||||||
|
ICacheStallF = 1'b0;
|
||||||
|
ICacheReadEn = 1'b1;
|
||||||
|
if (ITLBMissF) begin
|
||||||
|
NextState = STATE_TLB_MISS;
|
||||||
|
end else if(StallF) begin
|
||||||
|
NextState = STATE_CPU_BUSY_SPILL;
|
||||||
|
SelAdr = 2'b10;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
NextState = STATE_READY;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
default: begin
|
||||||
|
SelAdr = 2'b01;
|
||||||
|
NextState = STATE_READY;
|
||||||
|
end
|
||||||
|
// *** add in error handling and invalidate/evict
|
||||||
|
endcase
|
||||||
|
end
|
||||||
|
|
||||||
|
assign CntEn = PreCntEn & InstrAckF;
|
||||||
|
assign InstrReadF = (CurrState == STATE_HIT_SPILL_MISS_FETCH_WDV) ||
|
||||||
|
(CurrState == STATE_MISS_FETCH_WDV) ||
|
||||||
|
(CurrState == STATE_MISS_SPILL_FETCH_WDV) ||
|
||||||
|
(CurrState == STATE_MISS_SPILL_MISS_FETCH_WDV);
|
||||||
|
|
||||||
|
endmodule
|
@ -230,7 +230,7 @@ module bpred
|
|||||||
assign FallThroughWrongE = PCLinkE != PCD;
|
assign FallThroughWrongE = PCLinkE != PCD;
|
||||||
// If the target is taken check the target rather than fallthrough. The instruction needs to be a branch if PCSrcE is selected
|
// If the target is taken check the target rather than fallthrough. The instruction needs to be a branch if PCSrcE is selected
|
||||||
// Remember the bpred can incorrectly predict a non cfi instruction as a branch taken. If the real instruction is non cfi
|
// Remember the bpred can incorrectly predict a non cfi instruction as a branch taken. If the real instruction is non cfi
|
||||||
// it must have selected teh fall through.
|
// it must have selected the fall through.
|
||||||
assign PredictionPCWrongE = (PCSrcE & (|InstrClassE) ? TargetWrongE : FallThroughWrongE);
|
assign PredictionPCWrongE = (PCSrcE & (|InstrClassE) ? TargetWrongE : FallThroughWrongE);
|
||||||
|
|
||||||
// The branch direction also need to checked.
|
// The branch direction also need to checked.
|
||||||
|
@ -577,7 +577,7 @@ string tests32f[] = '{
|
|||||||
|
|
||||||
// Track names of instructions
|
// Track names of instructions
|
||||||
instrTrackerTB it(clk, reset, dut.hart.ieu.dp.FlushE,
|
instrTrackerTB it(clk, reset, dut.hart.ieu.dp.FlushE,
|
||||||
dut.hart.ifu.icache.controller.FinalInstrRawF,
|
dut.hart.ifu.icache.FinalInstrRawF,
|
||||||
dut.hart.ifu.InstrD, dut.hart.ifu.InstrE,
|
dut.hart.ifu.InstrD, dut.hart.ifu.InstrE,
|
||||||
dut.hart.ifu.InstrM, dut.hart.ifu.InstrW,
|
dut.hart.ifu.InstrM, dut.hart.ifu.InstrW,
|
||||||
InstrFName, InstrDName, InstrEName, InstrMName, InstrWName);
|
InstrFName, InstrDName, InstrEName, InstrMName, InstrWName);
|
||||||
|
@ -609,7 +609,7 @@ module testbench();
|
|||||||
string InstrFName, InstrDName, InstrEName, InstrMName, InstrWName;
|
string InstrFName, InstrDName, InstrEName, InstrMName, InstrWName;
|
||||||
logic [31:0] InstrW;
|
logic [31:0] InstrW;
|
||||||
instrTrackerTB it(clk, reset, dut.hart.ieu.dp.FlushE,
|
instrTrackerTB it(clk, reset, dut.hart.ieu.dp.FlushE,
|
||||||
dut.hart.ifu.icache.controller.FinalInstrRawF,
|
dut.hart.ifu.icache.FinalInstrRawF,
|
||||||
dut.hart.ifu.InstrD, dut.hart.ifu.InstrE,
|
dut.hart.ifu.InstrD, dut.hart.ifu.InstrE,
|
||||||
dut.hart.ifu.InstrM, dut.hart.ifu.InstrW,
|
dut.hart.ifu.InstrM, dut.hart.ifu.InstrW,
|
||||||
InstrFName, InstrDName, InstrEName, InstrMName, InstrWName);
|
InstrFName, InstrDName, InstrEName, InstrMName, InstrWName);
|
||||||
|
Loading…
Reference in New Issue
Block a user