From 5b96f7fbd732640a4c6ac97a553e2b50673c7a13 Mon Sep 17 00:00:00 2001 From: bbracker Date: Thu, 17 Jun 2021 08:37:37 -0400 Subject: [PATCH] making linux waveforms more useful --- wally-pipelined/regression/wally-buildroot.do | 2 +- wally-pipelined/regression/wally-busybear.do | 2 +- .../wave-dos/bens-busybear-waves.do | 64 --------- .../{busybear-waves.do => linux-waves.do} | 128 ++++++++---------- wally-pipelined/testbench/testbench-linux.sv | 24 +++- 5 files changed, 76 insertions(+), 144 deletions(-) delete mode 100644 wally-pipelined/regression/wave-dos/bens-busybear-waves.do rename wally-pipelined/regression/wave-dos/{busybear-waves.do => linux-waves.do} (53%) diff --git a/wally-pipelined/regression/wally-buildroot.do b/wally-pipelined/regression/wally-buildroot.do index c212831e..21767385 100644 --- a/wally-pipelined/regression/wally-buildroot.do +++ b/wally-pipelined/regression/wally-buildroot.do @@ -35,7 +35,7 @@ vopt +acc work.testbench -o workopt vsim workopt -suppress 8852,12070 -do ./wave-dos/busybear-waves.do +do ./wave-dos/linux-waves.do #-- Run the Simulation run -all diff --git a/wally-pipelined/regression/wally-busybear.do b/wally-pipelined/regression/wally-busybear.do index 3638a775..11876dde 100644 --- a/wally-pipelined/regression/wally-busybear.do +++ b/wally-pipelined/regression/wally-busybear.do @@ -35,7 +35,7 @@ vopt +acc work.testbench -o workopt vsim workopt -suppress 8852,12070 -do ./wave-dos/bens-busybear-waves.do +do ./wave-dos/linux-waves.do #-- Run the Simulation diff --git a/wally-pipelined/regression/wave-dos/bens-busybear-waves.do b/wally-pipelined/regression/wave-dos/bens-busybear-waves.do deleted file mode 100644 index 0d672167..00000000 --- a/wally-pipelined/regression/wave-dos/bens-busybear-waves.do +++ /dev/null @@ -1,64 +0,0 @@ -# busybear-waves.do -restart -f -delete wave /* -view wave - -add wave /testbench/dut/hart/DataStall -add wave /testbench/dut/hart/ICacheStallF -add wave /testbench/dut/hart/StallF -add wave /testbench/dut/hart/StallD -add wave /testbench/dut/hart/StallE -add wave /testbench/dut/hart/StallM -add wave /testbench/dut/hart/StallW -add wave /testbench/dut/hart/FlushD -add wave /testbench/dut/hart/FlushE -add wave /testbench/dut/hart/FlushM -add wave /testbench/dut/hart/FlushW -add wave -divider - -add wave /testbench/clk -add wave /testbench/reset -add wave -divider - -add wave -hex /testbench/dut/hart/ifu/PCF -add wave -hex /testbench/PCtext -add wave -hex /testbench/pcExpected -add wave -hex /testbench/dut/hart/ifu/PCD -add wave -hex /testbench/dut/hart/ifu/InstrD -add wave /testbench/InstrDName -add wave -divider -add wave -hex /testbench/dut/hart/ifu/PCE -add wave -hex /testbench/dut/hart/ifu/InstrE -add wave /testbench/InstrEName -add wave -hex /testbench/dut/hart/ieu/dp/SrcAE -add wave -hex /testbench/dut/hart/ieu/dp/SrcBE -add wave -hex /testbench/dut/hart/ieu/dp/ALUResultE -#add wave /testbench/dut/hart/ieu/dp/PCSrcE -add wave -divider -add wave -hex /testbench/dut/hart/ifu/PCM -add wave -hex /testbench/dut/hart/ifu/InstrM -add wave /testbench/InstrMName -add wave /testbench/dut/uncore/dtim/memwrite -add wave -hex /testbench/dut/uncore/HADDR -add wave -hex /testbench/dut/uncore/HWDATA -add wave -divider -add wave -hex /testbench/PCW -add wave -hex /testbench/InstrW -add wave /testbench/InstrWName -add wave /testbench/dut/hart/ieu/dp/RegWriteW -add wave -hex /testbench/dut/hart/ieu/dp/ResultW -add wave -hex /testbench/dut/hart/ieu/dp/RdW -add wave -divider - -# appearance -TreeUpdate [SetDefaultTree] -WaveRestoreZoom {0 ps} {100 ps} -configure wave -namecolwidth 250 -configure wave -valuecolwidth 150 -configure wave -justifyvalue left -configure wave -signalnamewidth 0 -configure wave -snapdistance 10 -configure wave -datasetprefix 0 -configure wave -rowmargin 4 -configure wave -childrowmargin 2 -set DefaultRadix hexadecimal \ No newline at end of file diff --git a/wally-pipelined/regression/wave-dos/busybear-waves.do b/wally-pipelined/regression/wave-dos/linux-waves.do similarity index 53% rename from wally-pipelined/regression/wave-dos/busybear-waves.do rename to wally-pipelined/regression/wave-dos/linux-waves.do index 00df1087..58da6330 100644 --- a/wally-pipelined/regression/wave-dos/busybear-waves.do +++ b/wally-pipelined/regression/wave-dos/linux-waves.do @@ -1,58 +1,66 @@ -# busybear-waves.do - +# linux-waves.do restart -f delete wave /* view wave --- display input and output signals as hexidecimal values -# Diplays All Signals recursively +add wave -divider add wave /testbench/clk add wave /testbench/reset -add wave -divider -add wave -hex /testbench/PCtext + +add wave -divider Stalls_and_Flushes +add wave /testbench/dut/hart/StallF +add wave /testbench/dut/hart/StallD +add wave /testbench/dut/hart/StallE +add wave /testbench/dut/hart/StallM +add wave /testbench/dut/hart/StallW +add wave -group stall_srcs /testbench/dut/hart/DataStall +add wave -group stall_srcs /testbench/dut/hart/ICacheStallF +add wave /testbench/dut/hart/FlushD +add wave /testbench/dut/hart/FlushE +add wave /testbench/dut/hart/FlushM +add wave /testbench/dut/hart/FlushW + +add wave -divider F +add wave -hex /testbench/dut/hart/ifu/PCF +add wave -divider D add wave -hex /testbench/pcExpected add wave -hex /testbench/dut/hart/ifu/PCD +add wave -hex /testbench/PCtextD +add wave /testbench/InstrDName add wave -hex /testbench/dut/hart/ifu/InstrD -add wave -hex /testbench/dut/hart/ifu/StallD -add wave -hex /testbench/dut/hart/ifu/FlushD -add wave -hex /testbench/dut/hart/ifu/StallE -add wave -hex /testbench/dut/hart/ifu/FlushE -add wave -hex /testbench/dut/hart/ifu/InstrRawD -add wave /testbench/CheckInstrD -add wave /testbench/lastCheckInstrD -add wave /testbench/speculative -add wave /testbench/lastPC2 -add wave -divider -add wave -divider -add wave /testbench/dut/uncore/HSELBootTim -add wave /testbench/dut/uncore/HSELTim -add wave /testbench/dut/uncore/HREADTim -add wave /testbench/dut/uncore/dtim/HREADTim0 -add wave /testbench/dut/uncore/HREADYTim -add wave -divider -add wave /testbench/dut/uncore/HREADBootTim -add wave /testbench/dut/uncore/bootdtim/HREADTim0 -add wave /testbench/dut/uncore/HREADYBootTim -add wave /testbench/dut/uncore/HADDR -add wave /testbench/dut/uncore/HRESP -add wave /testbench/dut/uncore/HREADY -add wave /testbench/dut/uncore/HRDATA -#add wave -hex /testbench/dut/hart/priv/csr/MTVEC_REG -#add wave -hex /testbench/dut/hart/priv/csr/MSTATUS_REG -#add wave -hex /testbench/dut/hart/priv/csr/SCOUNTEREN_REG -#add wave -hex /testbench/dut/hart/priv/csr/MIE_REG -#add wave -hex /testbench/dut/hart/priv/csr/MIDELEG_REG -#add wave -hex /testbench/dut/hart/priv/csr/MEDELEG_REG -add wave -divider -# registers! +add wave -hex /testbench/dut/hart/ieu/c/InstrValidD +add wave -divider E +add wave -hex /testbench/dut/hart/ifu/PCE +add wave -hex /testbench/PCtextE +add wave /testbench/InstrEName +add wave -hex /testbench/dut/hart/ifu/InstrE +add wave -hex /testbench/dut/hart/ieu/c/InstrValidE +add wave -hex /testbench/dut/hart/ieu/dp/SrcAE +add wave -hex /testbench/dut/hart/ieu/dp/SrcBE +add wave -hex /testbench/dut/hart/ieu/dp/ALUResultE +add wave -divider M +add wave -hex /testbench/dut/hart/ifu/PCM +add wave -hex /testbench/PCtextM +add wave /testbench/InstrMName +add wave -hex /testbench/dut/hart/ifu/InstrM +add wave -hex /testbench/dut/hart/ieu/c/InstrValidM +add wave /testbench/dut/uncore/dtim/memwrite +add wave -hex /testbench/dut/uncore/HADDR +add wave -hex /testbench/HWRITE +add wave -hex /testbench/dut/uncore/HWDATA +add wave -hex /testbench/HRDATA +add wave -hex /testbench/readAdrExpected +add wave -divider W +add wave -hex /testbench/PCW +add wave -hex /testbench/PCtextW +add wave -hex /testbench/dut/hart/ieu/c/InstrValidW +add wave /testbench/dut/hart/ieu/dp/RegWriteW +add wave -hex /testbench/dut/hart/ieu/dp/ResultW +add wave -hex /testbench/dut/hart/ieu/dp/RdW + +add wave -divider RegFile add wave -hex /testbench/regExpected add wave -hex /testbench/regNumExpected -add wave -hex /testbench/HWRITE -add wave -hex /testbench/dut/hart/MemRWM[1] -add wave -hex /testbench/HWDATA -add wave -hex /testbench/HRDATA -add wave -hex /testbench/HADDR -add wave -hex /testbench/readAdrExpected add wave -hex /testbench/dut/hart/ieu/dp/regf/rf[1] add wave -hex /testbench/dut/hart/ieu/dp/regf/rf[2] add wave -hex /testbench/dut/hart/ieu/dp/regf/rf[3] @@ -84,36 +92,10 @@ add wave -hex /testbench/dut/hart/ieu/dp/regf/rf[28] add wave -hex /testbench/dut/hart/ieu/dp/regf/rf[29] add wave -hex /testbench/dut/hart/ieu/dp/regf/rf[30] add wave -hex /testbench/dut/hart/ieu/dp/regf/rf[31] -add wave /testbench/InstrFName -add wave -hex /testbench/dut/hart/ifu/PCD -#add wave -hex /testbench/dut/hart/ifu/InstrD -add wave /testbench/InstrDName -#add wave -divider -add wave -hex /testbench/dut/hart/ifu/PCE -##add wave -hex /testbench/dut/hart/ifu/InstrE -add wave /testbench/InstrEName -#add wave -hex /testbench/dut/hart/ieu/dp/SrcAE -#add wave -hex /testbench/dut/hart/ieu/dp/SrcBE -add wave -hex /testbench/dut/hart/ieu/dp/ALUResultE -#add wave /testbench/dut/hart/ieu/dp/PCSrcE -#add wave -divider -add wave -hex /testbench/dut/hart/ifu/PCM -##add wave -hex /testbench/dut/hart/ifu/InstrM -add wave /testbench/InstrMName -#add wave /testbench/dut/hart/dmem/dtim/memwrite -#add wave -hex /testbench/dut/hart/dmem/AdrM -#add wave -hex /testbench/dut/hart/dmem/WriteDataM -#add wave -divider -add wave -hex /testbench/PCW -##add wave -hex /testbench/dut/hart/ifu/InstrW -add wave /testbench/InstrWName -#add wave /testbench/dut/hart/ieu/dp/RegWriteW -#add wave -hex /testbench/dut/hart/ieu/dp/ResultW -#add wave -hex /testbench/dut/hart/ieu/dp/RdW -#add wave -divider -##add ww + +add wave -divider add wave -hex -r /testbench/* -# + # appearance TreeUpdate [SetDefaultTree] WaveRestoreZoom {0 ps} {100 ps} diff --git a/wally-pipelined/testbench/testbench-linux.sv b/wally-pipelined/testbench/testbench-linux.sv index 55ba21b4..6cf20e67 100644 --- a/wally-pipelined/testbench/testbench-linux.sv +++ b/wally-pipelined/testbench/testbench-linux.sv @@ -473,7 +473,21 @@ module testbench(); end end - string PCtext, PCtext2; + string PCtextD,PCtextE,PCtextM,PCtext2; + always_ff @(posedge clk, posedge reset) + if (reset) begin + PCtextE <= #1 "(reset)"; + PCtextM <= #1 "(reset)"; + end else begin + if (~dut.hart.StallE) + if (dut.hart.FlushE) PCtextE <= #1 "(flushed)"; + else PCtextE <= #1 PCtextD; + if (~dut.hart.StallM) + if (dut.hart.FlushM) PCtextM <= #1 "(flushed)"; + else PCtextM <= #1 PCtextE; + end + + initial begin instrs = 0; end @@ -495,7 +509,7 @@ module testbench(); (dut.hart.ifu.PCD == 32'h80001dc6) || // as well as stores to PLIC (dut.hart.ifu.PCD == 32'h80001de0) || (dut.hart.ifu.PCD == 32'h80001de2)) begin - $display("warning: NOPing out %s at PC=%0x, instr %0d, time %0t", PCtext, dut.hart.ifu.PCD, instrs, $time); + $display("warning: NOPing out %s at PC=%0x, instr %0d, time %0t", PCtextD, dut.hart.ifu.PCD, instrs, $time); force CheckInstrD = 32'b0010011; force dut.hart.ifu.InstrRawD = 32'b0010011; while (clk != 0) #1; @@ -515,10 +529,10 @@ module testbench(); $display("no more PC data to read"); `ERROR end - scan_file_PC = $fscanf(data_file_PC, "%s\n", PCtext); + scan_file_PC = $fscanf(data_file_PC, "%s\n", PCtextD); PCtext2 = ""; while (PCtext2 != "***") begin - PCtext = {PCtext, " ", PCtext2}; + PCtextD = {PCtextD, " ", PCtext2}; scan_file_PC = $fscanf(data_file_PC, "%s\n", PCtext2); end scan_file_PC = $fscanf(data_file_PC, "%x\n", CheckInstrD); @@ -527,7 +541,7 @@ module testbench(); (dut.hart.ifu.PCD == 32'h80001dc6) || // as well as stores to PLIC (dut.hart.ifu.PCD == 32'h80001de0) || (dut.hart.ifu.PCD == 32'h80001de2)) begin - $display("warning: NOPing out %s at PC=%0x, instr %0d, time %0t", PCtext, dut.hart.ifu.PCD, instrs, $time); + $display("warning: NOPing out %s at PC=%0x, instr %0d, time %0t", PCtextD, dut.hart.ifu.PCD, instrs, $time); force CheckInstrD = 32'b0010011; force dut.hart.ifu.InstrRawD = 32'b0010011; while (clk != 0) #1;