mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Yes. The hack to not repeat the d memory operation fixed this issue.
This commit is contained in:
parent
7c8d2e9b78
commit
04eb302925
@ -101,6 +101,9 @@ add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/neg
|
|||||||
add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/lt
|
add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/lt
|
||||||
add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/ltu
|
add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/ltu
|
||||||
add wave -noupdate /testbench/InstrFName
|
add wave -noupdate /testbench/InstrFName
|
||||||
|
add wave -noupdate -expand -group {dcache memory} /testbench/dut/hart/dmem/MemReadM
|
||||||
|
add wave -noupdate -expand -group {dcache memory} /testbench/dut/hart/dmem/MemWriteM
|
||||||
|
add wave -noupdate -expand -group {dcache memory} /testbench/dut/hart/dmem/MemAckW
|
||||||
add wave -noupdate -group dcache /testbench/dut/hart/MemAdrM
|
add wave -noupdate -group dcache /testbench/dut/hart/MemAdrM
|
||||||
add wave -noupdate -group dcache /testbench/dut/hart/MemPAdrM
|
add wave -noupdate -group dcache /testbench/dut/hart/MemPAdrM
|
||||||
add wave -noupdate -group dcache /testbench/dut/hart/WriteDataM
|
add wave -noupdate -group dcache /testbench/dut/hart/WriteDataM
|
||||||
@ -174,6 +177,8 @@ add wave -noupdate -expand -group icache -expand -group {fsm out and control} /t
|
|||||||
add wave -noupdate -expand -group icache -expand -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/PCMux
|
||||||
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/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/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 -group parameters /testbench/dut/hart/ifu/icache/controller/AHBByteLength
|
add wave -noupdate -expand -group icache -group parameters /testbench/dut/hart/ifu/icache/controller/AHBByteLength
|
||||||
add wave -noupdate -expand -group icache -group parameters /testbench/dut/hart/ifu/icache/controller/AHBOFFETWIDTH
|
add wave -noupdate -expand -group icache -group parameters /testbench/dut/hart/ifu/icache/controller/AHBOFFETWIDTH
|
||||||
add wave -noupdate -expand -group icache -group parameters /testbench/dut/hart/ifu/icache/controller/BlockByteLength
|
add wave -noupdate -expand -group icache -group parameters /testbench/dut/hart/ifu/icache/controller/BlockByteLength
|
||||||
@ -219,8 +224,24 @@ add wave -noupdate /testbench/dut/hart/ifu/icache/cachemem/OldReadPAdr
|
|||||||
add wave -noupdate /testbench/dut/hart/ifu/CompressedF
|
add wave -noupdate /testbench/dut/hart/ifu/CompressedF
|
||||||
add wave -noupdate /testbench/dut/hart/ifu/icache/controller/SpillDataBlock0
|
add wave -noupdate /testbench/dut/hart/ifu/icache/controller/SpillDataBlock0
|
||||||
add wave -noupdate /testbench/dut/hart/ifu/icache/controller/PCPreFinalF_q
|
add wave -noupdate /testbench/dut/hart/ifu/icache/controller/PCPreFinalF_q
|
||||||
|
add wave -noupdate -expand -group AHB /testbench/dut/hart/ebu/BusState
|
||||||
|
add wave -noupdate -expand -group AHB /testbench/dut/hart/ebu/HCLK
|
||||||
|
add wave -noupdate -expand -group AHB /testbench/dut/hart/ebu/HRDATA
|
||||||
|
add wave -noupdate -expand -group AHB /testbench/dut/hart/ebu/HREADY
|
||||||
|
add wave -noupdate -expand -group AHB /testbench/dut/hart/ebu/HRESP
|
||||||
|
add wave -noupdate -expand -group AHB /testbench/dut/hart/ebu/HADDR
|
||||||
|
add wave -noupdate -expand -group AHB /testbench/dut/hart/ebu/HWDATA
|
||||||
|
add wave -noupdate -expand -group AHB /testbench/dut/hart/ebu/HWRITE
|
||||||
|
add wave -noupdate -expand -group AHB /testbench/dut/hart/ebu/HSIZE
|
||||||
|
add wave -noupdate -expand -group AHB /testbench/dut/hart/ebu/HBURST
|
||||||
|
add wave -noupdate -expand -group AHB /testbench/dut/hart/ebu/HPROT
|
||||||
|
add wave -noupdate -expand -group AHB /testbench/dut/hart/ebu/HTRANS
|
||||||
|
add wave -noupdate -expand -group AHB /testbench/dut/hart/ebu/HMASTLOCK
|
||||||
|
add wave -noupdate -expand -group AHB /testbench/dut/hart/ebu/HADDRD
|
||||||
|
add wave -noupdate -expand -group AHB /testbench/dut/hart/ebu/HSIZED
|
||||||
|
add wave -noupdate -expand -group AHB /testbench/dut/hart/ebu/HWRITED
|
||||||
TreeUpdate [SetDefaultTree]
|
TreeUpdate [SetDefaultTree]
|
||||||
WaveRestoreCursors {{Cursor 2} {9808584 ns} 0} {{Cursor 3} {9808065 ns} 0} {{Cursor 4} {535 ns} 0}
|
WaveRestoreCursors {{Cursor 2} {9808206 ns} 0} {{Cursor 3} {9807791 ns} 0} {{Cursor 4} {85 ns} 0}
|
||||||
quietly wave cursor active 1
|
quietly wave cursor active 1
|
||||||
configure wave -namecolwidth 250
|
configure wave -namecolwidth 250
|
||||||
configure wave -valuecolwidth 513
|
configure wave -valuecolwidth 513
|
||||||
@ -236,4 +257,4 @@ configure wave -griddelta 40
|
|||||||
configure wave -timeline 0
|
configure wave -timeline 0
|
||||||
configure wave -timelineunits ns
|
configure wave -timelineunits ns
|
||||||
update
|
update
|
||||||
WaveRestoreZoom {9808255 ns} {9808913 ns}
|
WaveRestoreZoom {9807926 ns} {9808486 ns}
|
||||||
|
@ -63,6 +63,14 @@ module dmem (
|
|||||||
// *** needs to be sent to trap unit
|
// *** needs to be sent to trap unit
|
||||||
logic DTLBPageFaultM;
|
logic DTLBPageFaultM;
|
||||||
|
|
||||||
|
logic [1:0] CurrState, NextState;
|
||||||
|
|
||||||
|
localparam STATE_READY = 0;
|
||||||
|
localparam STATE_FETCH = 1;
|
||||||
|
localparam STATE_STALLED = 2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
tlb #(3) dtlb(.TLBAccess(MemAccessM), .VirtualAddress(MemAdrM),
|
tlb #(3) dtlb(.TLBAccess(MemAccessM), .VirtualAddress(MemAdrM),
|
||||||
.PageTableEntryWrite(PageTableEntryM), .PageTypeWrite(PageTypeM),
|
.PageTableEntryWrite(PageTableEntryM), .PageTypeWrite(PageTypeM),
|
||||||
.TLBWrite(DTLBWriteM), .TLBFlush(DTLBFlushM),
|
.TLBWrite(DTLBWriteM), .TLBFlush(DTLBFlushM),
|
||||||
@ -81,8 +89,8 @@ module dmem (
|
|||||||
|
|
||||||
// Squash unaligned data accesses and failed store conditionals
|
// Squash unaligned data accesses and failed store conditionals
|
||||||
// *** this is also the place to squash if the cache is hit
|
// *** this is also the place to squash if the cache is hit
|
||||||
assign MemReadM = MemRWM[1] & ~DataMisalignedM;
|
assign MemReadM = MemRWM[1] & ~DataMisalignedM & CurrState != STATE_STALLED;
|
||||||
assign MemWriteM = MemRWM[0] & ~DataMisalignedM && ~SquashSCM;
|
assign MemWriteM = MemRWM[0] & ~DataMisalignedM && ~SquashSCM & CurrState != STATE_STALLED;
|
||||||
assign MemAccessM = |MemRWM;
|
assign MemAccessM = |MemRWM;
|
||||||
|
|
||||||
// Determine if address is valid
|
// Determine if address is valid
|
||||||
@ -119,5 +127,30 @@ module dmem (
|
|||||||
// Data stall
|
// Data stall
|
||||||
//assign DataStall = 0;
|
//assign DataStall = 0;
|
||||||
|
|
||||||
|
// Ross Thompson April 22, 2021
|
||||||
|
// for now we need to handle the issue where the data memory interface repeately
|
||||||
|
// requests data from memory rather than issuing a single request.
|
||||||
|
|
||||||
|
|
||||||
|
flopr #(2) stateReg(.clk(clk),
|
||||||
|
.reset(reset),
|
||||||
|
.d(NextState),
|
||||||
|
.q(CurrState));
|
||||||
|
|
||||||
|
always_comb begin
|
||||||
|
case (CurrState)
|
||||||
|
STATE_READY: if (MemAccessM & ~DataMisalignedM) NextState = STATE_FETCH;
|
||||||
|
else NextState = STATE_READY;
|
||||||
|
STATE_FETCH: if (MemAckW & ~StallW) NextState = STATE_READY;
|
||||||
|
else if (MemAckW & StallW) NextState = STATE_STALLED;
|
||||||
|
else NextState = STATE_FETCH;
|
||||||
|
STATE_STALLED: if (~StallW) NextState = STATE_READY;
|
||||||
|
else NextState = STATE_STALLED;
|
||||||
|
default: NextState = STATE_READY;
|
||||||
|
endcase // case (CurrState)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
@ -75,7 +75,8 @@ module ahblite (
|
|||||||
output logic [3:0] HSIZED,
|
output logic [3:0] HSIZED,
|
||||||
output logic HWRITED,
|
output logic HWRITED,
|
||||||
// Stalls
|
// Stalls
|
||||||
output logic /*InstrUpdate, */DataStall
|
output logic /*InstrUpdate, */DataStall,
|
||||||
|
output logic MemAckW
|
||||||
// *** add a chip-level ready signal as part of handshake
|
// *** add a chip-level ready signal as part of handshake
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -175,6 +176,7 @@ module ahblite (
|
|||||||
|
|
||||||
assign InstrRData = HRDATA;
|
assign InstrRData = HRDATA;
|
||||||
assign InstrAckF = (BusState == INSTRREAD) && (NextBusState != INSTRREAD) || (BusState == INSTRREADC) && (NextBusState != INSTRREADC);
|
assign InstrAckF = (BusState == INSTRREAD) && (NextBusState != INSTRREAD) || (BusState == INSTRREADC) && (NextBusState != INSTRREADC);
|
||||||
|
assign MemAckW = (BusState == MEMREAD) && (NextBusState != MEMREAD) || (BusState == MEMWRITE) && (NextBusState != MEMWRITE);
|
||||||
assign MMUReadPTE = HRDATA;
|
assign MMUReadPTE = HRDATA;
|
||||||
assign ReadDataM = HRDATAMasked; // changed from W to M dh 2/7/2021
|
assign ReadDataM = HRDATAMasked; // changed from W to M dh 2/7/2021
|
||||||
assign CaptureDataM = ((BusState == MEMREAD) && (NextBusState != MEMREAD)) ||
|
assign CaptureDataM = ((BusState == MEMREAD) && (NextBusState != MEMREAD)) ||
|
||||||
|
Loading…
Reference in New Issue
Block a user