forked from Github_Repos/cvw
		
	Modified the icache memory to read using the virtual (non physical) address in the PCNextF stage.
This allows recovering from an ITLBMiss to be 1 cycle after and simplifies the hptw slightly.
This commit is contained in:
		
							parent
							
								
									225cd5a114
								
							
						
					
					
						commit
						a445bedcd2
					
				| @ -15,31 +15,31 @@ add wave -noupdate -expand -group {Memory Stage} /testbench/dut/hart/InstrM | ||||
| add wave -noupdate -expand -group {Memory Stage} /testbench/dut/hart/lsu/IEUAdrM | ||||
| add wave -noupdate /testbench/dut/hart/ieu/dp/ResultM | ||||
| add wave -noupdate /testbench/dut/hart/ieu/dp/ResultW | ||||
| add wave -noupdate -group HDU -expand -group traps /testbench/dut/hart/priv/trap/InstrMisalignedFaultM | ||||
| add wave -noupdate -group HDU -expand -group traps /testbench/dut/hart/priv/trap/InstrAccessFaultM | ||||
| add wave -noupdate -group HDU -expand -group traps /testbench/dut/hart/priv/trap/IllegalInstrFaultM | ||||
| add wave -noupdate -group HDU -expand -group traps /testbench/dut/hart/priv/trap/BreakpointFaultM | ||||
| add wave -noupdate -group HDU -expand -group traps /testbench/dut/hart/priv/trap/LoadMisalignedFaultM | ||||
| add wave -noupdate -group HDU -expand -group traps /testbench/dut/hart/priv/trap/StoreMisalignedFaultM | ||||
| add wave -noupdate -group HDU -expand -group traps /testbench/dut/hart/priv/trap/LoadAccessFaultM | ||||
| add wave -noupdate -group HDU -expand -group traps /testbench/dut/hart/priv/trap/StoreAccessFaultM | ||||
| add wave -noupdate -group HDU -expand -group traps /testbench/dut/hart/priv/trap/EcallFaultM | ||||
| add wave -noupdate -group HDU -expand -group traps /testbench/dut/hart/priv/trap/InstrPageFaultM | ||||
| add wave -noupdate -group HDU -expand -group traps /testbench/dut/hart/priv/trap/LoadPageFaultM | ||||
| add wave -noupdate -group HDU -expand -group traps /testbench/dut/hart/priv/trap/StorePageFaultM | ||||
| add wave -noupdate -group HDU -expand -group traps /testbench/dut/hart/priv/trap/InterruptM | ||||
| add wave -noupdate -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 -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 -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 -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 -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 -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 -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 -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 -group HDU -group hazards /testbench/dut/hart/hzu/BPPredWrongE | ||||
| add wave -noupdate -group HDU -group hazards /testbench/dut/hart/hzu/CSRWritePendingDEM | ||||
| add wave -noupdate -group HDU -group hazards /testbench/dut/hart/hzu/RetM | ||||
| add wave -noupdate -group HDU -group hazards /testbench/dut/hart/hzu/TrapM | ||||
| add wave -noupdate -group HDU -group hazards /testbench/dut/hart/hzu/LoadStallD | ||||
| add wave -noupdate -group HDU -group hazards /testbench/dut/hart/hzu/StoreStallD | ||||
| add wave -noupdate -group HDU -group hazards /testbench/dut/hart/hzu/ICacheStallF | ||||
| add wave -noupdate -group HDU -group hazards /testbench/dut/hart/hzu/LSUStall | ||||
| add wave -noupdate -group HDU -group hazards /testbench/dut/hart/MulDivStallD | ||||
| add wave -noupdate -group HDU -expand -group hazards /testbench/dut/hart/hzu/BPPredWrongE | ||||
| add wave -noupdate -group HDU -expand -group hazards /testbench/dut/hart/hzu/CSRWritePendingDEM | ||||
| add wave -noupdate -group HDU -expand -group hazards /testbench/dut/hart/hzu/RetM | ||||
| add wave -noupdate -group HDU -expand -group hazards /testbench/dut/hart/hzu/TrapM | ||||
| add wave -noupdate -group HDU -expand -group hazards /testbench/dut/hart/hzu/LoadStallD | ||||
| add wave -noupdate -group HDU -expand -group hazards /testbench/dut/hart/hzu/StoreStallD | ||||
| add wave -noupdate -group HDU -expand -group hazards /testbench/dut/hart/hzu/ICacheStallF | ||||
| add wave -noupdate -group HDU -expand -group hazards /testbench/dut/hart/hzu/LSUStall | ||||
| add wave -noupdate -group HDU -expand -group hazards /testbench/dut/hart/MulDivStallD | ||||
| add wave -noupdate -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 -group HDU -expand -group Flush -color Yellow /testbench/dut/hart/FlushE | ||||
| @ -97,21 +97,21 @@ 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/BPPredWrongE | ||||
| add wave -noupdate -group Bpred /testbench/dut/hart/ifu/bpred/bpred/BPPredWrongE | ||||
| add wave -noupdate -expand -group {instruction pipeline} /testbench/InstrFName | ||||
| add wave -noupdate -expand -group {instruction pipeline} /testbench/dut/hart/ifu/icache/FinalInstrRawF | ||||
| add wave -noupdate -expand -group {instruction pipeline} /testbench/dut/hart/ifu/InstrD | ||||
| add wave -noupdate -expand -group {instruction pipeline} /testbench/dut/hart/ifu/InstrE | ||||
| 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/PCF | ||||
| add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/PCPlus2or4F | ||||
| add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/BPPredPCF | ||||
| add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/PCNext0F | ||||
| add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/PCNext1F | ||||
| add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/SelBPPredF | ||||
| add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/BPPredWrongE | ||||
| add wave -noupdate -group {PCNext Generation} /testbench/dut/hart/ifu/PrivilegedChangePCM | ||||
| add wave -noupdate -group {instruction pipeline} /testbench/InstrFName | ||||
| add wave -noupdate -group {instruction pipeline} /testbench/dut/hart/ifu/icache/FinalInstrRawF | ||||
| add wave -noupdate -group {instruction pipeline} /testbench/dut/hart/ifu/InstrD | ||||
| add wave -noupdate -group {instruction pipeline} /testbench/dut/hart/ifu/InstrE | ||||
| add wave -noupdate -group {instruction pipeline} /testbench/dut/hart/ifu/InstrM | ||||
| add wave -noupdate -group {instruction pipeline} /testbench/InstrW | ||||
| add wave -noupdate -expand -group {PCNext Generation} /testbench/dut/hart/ifu/PCNextF | ||||
| add wave -noupdate -expand -group {PCNext Generation} /testbench/dut/hart/ifu/PCF | ||||
| add wave -noupdate -expand -group {PCNext Generation} /testbench/dut/hart/ifu/PCPlus2or4F | ||||
| add wave -noupdate -expand -group {PCNext Generation} /testbench/dut/hart/ifu/BPPredPCF | ||||
| add wave -noupdate -expand -group {PCNext Generation} /testbench/dut/hart/ifu/PCNext0F | ||||
| add wave -noupdate -expand -group {PCNext Generation} /testbench/dut/hart/ifu/PCNext1F | ||||
| add wave -noupdate -expand -group {PCNext Generation} /testbench/dut/hart/ifu/SelBPPredF | ||||
| add wave -noupdate -expand -group {PCNext Generation} /testbench/dut/hart/ifu/BPPredWrongE | ||||
| add wave -noupdate -expand -group {PCNext Generation} /testbench/dut/hart/ifu/PrivilegedChangePCM | ||||
| add wave -noupdate -group {Decode Stage} /testbench/dut/hart/ifu/InstrD | ||||
| add wave -noupdate -group {Decode Stage} /testbench/InstrDName | ||||
| add wave -noupdate -group {Decode Stage} /testbench/dut/hart/ieu/c/RegWriteD | ||||
| @ -126,7 +126,6 @@ add wave -noupdate -group RegFile /testbench/dut/hart/ieu/dp/regf/rd1 | ||||
| add wave -noupdate -group RegFile /testbench/dut/hart/ieu/dp/regf/rd2 | ||||
| add wave -noupdate -group RegFile /testbench/dut/hart/ieu/dp/regf/we3 | ||||
| add wave -noupdate -group RegFile /testbench/dut/hart/ieu/dp/regf/wd3 | ||||
| add wave -noupdate -group RegFile -group {write regfile mux} /testbench/dut/hart/ieu/dp/IntResultW | ||||
| add wave -noupdate -group RegFile -group {write regfile mux} /testbench/dut/hart/ieu/dp/ReadDataW | ||||
| 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 | ||||
| @ -134,8 +133,6 @@ add wave -noupdate -group RegFile -group {write regfile mux} /testbench/dut/hart | ||||
| add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/A | ||||
| add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/B | ||||
| add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/ALUControl | ||||
| add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/result | ||||
| add wave -noupdate -group alu /testbench/dut/hart/ieu/dp/alu/FlagsE | ||||
| add wave -noupdate -group alu -divider internals | ||||
| add wave -noupdate -group Forward /testbench/dut/hart/ieu/fw/Rs1D | ||||
| add wave -noupdate -group Forward /testbench/dut/hart/ieu/fw/Rs2D | ||||
| @ -154,13 +151,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/SrcAE | ||||
| add wave -noupdate -group {alu execution stage} /testbench/dut/hart/ieu/dp/SrcBE | ||||
| add wave -noupdate -expand -group PCS /testbench/dut/hart/ifu/PCNextF | ||||
| add wave -noupdate -expand -group PCS /testbench/dut/hart/PCF | ||||
| add wave -noupdate -expand -group PCS /testbench/dut/hart/ifu/PCD | ||||
| add wave -noupdate -expand -group PCS /testbench/dut/hart/PCE | ||||
| add wave -noupdate -expand -group PCS /testbench/dut/hart/PCM | ||||
| add wave -noupdate -expand -group PCS /testbench/PCW | ||||
| add wave -noupdate -group muldiv /testbench/dut/hart/mdu/InstrD | ||||
| add wave -noupdate -group PCS /testbench/dut/hart/ifu/PCNextF | ||||
| add wave -noupdate -group PCS /testbench/dut/hart/PCF | ||||
| add wave -noupdate -group PCS /testbench/dut/hart/ifu/PCD | ||||
| add wave -noupdate -group PCS /testbench/dut/hart/PCE | ||||
| add wave -noupdate -group PCS /testbench/dut/hart/PCM | ||||
| add wave -noupdate -group PCS /testbench/PCW | ||||
| add wave -noupdate -group muldiv /testbench/dut/hart/mdu/ForwardedSrcAE | ||||
| add wave -noupdate -group muldiv /testbench/dut/hart/mdu/ForwardedSrcBE | ||||
| add wave -noupdate -group muldiv /testbench/dut/hart/mdu/Funct3E | ||||
| @ -241,6 +237,9 @@ 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/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 /testbench/dut/hart/ifu/icache/SelAdr | ||||
| add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/RAdr | ||||
| add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/FinalInstrRawF | ||||
| 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 | ||||
| @ -367,7 +366,6 @@ add wave -noupdate -expand -group lsu -expand -group dcache -group Victim /testb | ||||
| add wave -noupdate -expand -group lsu -expand -group dcache -group Victim /testbench/dut/hart/lsu/dcache/VictimDirtyWay | ||||
| add wave -noupdate -expand -group lsu -expand -group dcache -group Victim /testbench/dut/hart/lsu/dcache/VictimDirty | ||||
| add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/MemRWM | ||||
| add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/MemAdrE | ||||
| add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/MemPAdrM | ||||
| add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/Funct3M | ||||
| add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {CPU side} /testbench/dut/hart/lsu/dcache/Funct7M | ||||
| @ -426,9 +424,9 @@ add wave -noupdate -expand -group lsu -expand -group ptwalker -expand -group typ | ||||
| add wave -noupdate -expand -group lsu -expand -group ptwalker -expand -group types /testbench/dut/hart/lsu/hptw/WalkerLoadPageFaultM | ||||
| add wave -noupdate -expand -group lsu -expand -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 -expand -group itlb /testbench/dut/hart/ifu/immu/TLBWrite | ||||
| add wave -noupdate -expand -group itlb /testbench/dut/hart/ifu/ITLBMissF | ||||
| add wave -noupdate -expand -group itlb /testbench/dut/hart/ifu/immu/PhysicalAddress | ||||
| 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/immu/PhysicalAddress | ||||
| add wave -noupdate /testbench/dut/hart/lsu/dcache/VAdr | ||||
| add wave -noupdate /testbench/dut/hart/lsu/dcache/MemPAdrM | ||||
| add wave -noupdate -group plic /testbench/dut/uncore/plic/plic/HCLK | ||||
| @ -499,26 +497,12 @@ 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/HWRITE | ||||
| add wave -noupdate -group UART /testbench/dut/uncore/uart/uart/HWDATA | ||||
| add wave -noupdate -color Gold /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/offset2 | ||||
| add wave -noupdate /testbench/dut/hart/lsu/dcache/subwordread/offset3 | ||||
| add wave -noupdate /testbench/dut/hart/ExceptionM | ||||
| add wave -noupdate /testbench/dut/hart/PendingInterruptM | ||||
| add wave -noupdate /testbench/dut/hart/TrapM | ||||
| add wave -noupdate /testbench/dut/hart/ifu/icache/CompressedF | ||||
| add wave -noupdate /testbench/dut/hart/lsu/CurrState | ||||
| add wave -noupdate /testbench/dut/hart/lsu/InterlockStall | ||||
| add wave -noupdate /testbench/dut/hart/ifu/icache/PCNextF | ||||
| add wave -noupdate /testbench/dut/hart/ifu/icache/PCPF | ||||
| add wave -noupdate /testbench/dut/hart/ifu/PCPFmmu | ||||
| 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] | ||||
| WaveRestoreCursors {{Cursor 6} {24475 ns} 1} {{Cursor 2} {22501 ns} 1} {{Cursor 3} {44117 ns} 0} | ||||
| WaveRestoreCursors {{Cursor 6} {24475 ns} 1} {{Cursor 2} {22501 ns} 1} {{Cursor 3} {23208 ns} 0} | ||||
| quietly wave cursor active 3 | ||||
| configure wave -namecolwidth 250 | ||||
| configure wave -valuecolwidth 297 | ||||
| @ -534,4 +518,4 @@ configure wave -griddelta 40 | ||||
| configure wave -timeline 0 | ||||
| configure wave -timelineunits ns | ||||
| update | ||||
| WaveRestoreZoom {43912 ns} {44304 ns} | ||||
| WaveRestoreZoom {23041 ns} {23377 ns} | ||||
|  | ||||
							
								
								
									
										5
									
								
								wally-pipelined/src/cache/icache.sv
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								wally-pipelined/src/cache/icache.sv
									
									
									
									
										vendored
									
									
								
							| @ -32,6 +32,7 @@ module icache | ||||
|    input logic 		       StallF,  | ||||
|    input logic [`PA_BITS-1:0]  PCNextF, | ||||
|    input logic [`PA_BITS-1:0]  PCPF, | ||||
|    input logic [`XLEN-1:0]  PCF, | ||||
| 
 | ||||
|    input logic ExceptionM, PendingInterruptM, | ||||
|     | ||||
| @ -125,7 +126,7 @@ module icache | ||||
| 
 | ||||
|   mux3 #(INDEXLEN) | ||||
|   AdrSelMux(.d0(PCNextF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]), | ||||
| 	    .d1(PCPF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]), | ||||
| 	    .d1(PCF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]), | ||||
| 	    .d2(PCPSpillF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]), | ||||
| 	    .s(SelAdr), | ||||
| 	    .y(RAdr)); | ||||
| @ -219,7 +220,7 @@ module icache | ||||
| 
 | ||||
|   // Detect if the instruction is compressed
 | ||||
|   assign CompressedF = FinalInstrRawF[1:0] != 2'b11; | ||||
|   assign spill = PCPF[4:1] == 4'b1111 ? 1'b1 : 1'b0; | ||||
|   assign spill = PCF[4:1] == 4'b1111 ? 1'b1 : 1'b0; | ||||
| 
 | ||||
| 
 | ||||
|   // to compute the fetch address we need to add the bit shifted
 | ||||
|  | ||||
| @ -168,6 +168,7 @@ module ifu ( | ||||
| 
 | ||||
|   .PCNextF(PCNextFPhys), | ||||
|   .PCPF(PCPFmmu), | ||||
|   .PCF, | ||||
|   .WalkerInstrPageFaultF, | ||||
|   .InvalidateICacheM); | ||||
|    | ||||
|  | ||||
| @ -141,7 +141,6 @@ module lsu | ||||
|   statetype CurrState, NextState; | ||||
|   logic 	   InterlockStall; | ||||
|   logic SelReplayCPURequest; | ||||
|   logic SelPTW2; | ||||
|   logic WalkerInstrPageFaultRaw; | ||||
|    | ||||
|    | ||||
| @ -222,10 +221,13 @@ module lsu | ||||
|   end // always_comb
 | ||||
| 
 | ||||
|   // signal to CPU it needs to wait on HPTW.
 | ||||
|   assign InterlockStall = (NextState != STATE_T0_READY) | (NextState != STATE_T0_FAULT_REPLAY) | (NextState != STATE_T0_READY); | ||||
|   assign InterlockStall = (CurrState == STATE_T0_READY & (DTLBMissM | ITLBMissF)) |  | ||||
| 						  (CurrState == STATE_T3_DTLB_MISS) | (CurrState == STATE_T4_ITLB_MISS) | | ||||
| 						  (CurrState == STATE_T5_ITLB_MISS) | (CurrState == STATE_T7_DITLB_MISS); | ||||
|    | ||||
|   // When replaying CPU memory request after PTW select the IEUAdrM for correct address.
 | ||||
|   assign SelReplayCPURequest = NextState == STATE_T0_READY; | ||||
|   assign SelPTW2 = (CurrState == STATE_T3_DTLB_MISS) | (CurrState == STATE_T4_ITLB_MISS) | | ||||
|   assign SelPTW = (CurrState == STATE_T3_DTLB_MISS) | (CurrState == STATE_T4_ITLB_MISS) | | ||||
| 				  (CurrState == STATE_T5_ITLB_MISS) | (CurrState == STATE_T7_DITLB_MISS); | ||||
|    | ||||
|    | ||||
| @ -250,7 +252,6 @@ module lsu | ||||
| 	    .DCacheStall(DCacheStall), | ||||
|         .TranslationPAdr,			   | ||||
| 	    .HPTWRead(HPTWRead), | ||||
| 	    .SelPTW(SelPTW), | ||||
| 		.HPTWStall, | ||||
| 	    .AnyCPUReqM, | ||||
| 	    .MemAfterIWalkDone, | ||||
| @ -258,14 +259,14 @@ module lsu | ||||
| 	    .WalkerLoadPageFaultM(WalkerLoadPageFaultM),   | ||||
| 	    .WalkerStorePageFaultM(WalkerStorePageFaultM)); | ||||
| 
 | ||||
|   assign LSUStall = DCacheStall | HPTWStall; | ||||
|   assign LSUStall = DCacheStall | InterlockStall; | ||||
|    | ||||
|   assign WalkerPageFaultM = WalkerStorePageFaultM | WalkerLoadPageFaultM; | ||||
| 
 | ||||
|   // arbiter between IEU and hptw
 | ||||
|   lsuArb arbiter(.clk(clk), | ||||
| 		 // HPTW connection
 | ||||
| 		 .SelPTW(SelPTW), | ||||
| 		 .SelPTW, | ||||
| 		 .HPTWRead(HPTWRead), | ||||
| 		 .TranslationPAdrE(TranslationPAdr), | ||||
| 		 // CPU connection
 | ||||
| @ -371,7 +372,7 @@ module lsu | ||||
| 		.ITLBWriteF(ITLBWriteF), | ||||
| 		.ITLBMissF, | ||||
| 		.MemAfterIWalkDone, | ||||
| 		.SelPTW(SelPTW), | ||||
| 		.SelPTW, | ||||
| 		.WalkerPageFaultM(WalkerPageFaultM), | ||||
| 		.WalkerInstrPageFaultF(WalkerInstrPageFaultF), | ||||
| 
 | ||||
|  | ||||
| @ -44,7 +44,6 @@ module hptw | ||||
|    output logic [`XLEN-1:0]    PTE, // page table entry to TLBs
 | ||||
|    output logic [1:0] 	       PageType, // page type to TLBs
 | ||||
|    output logic 	       ITLBWriteF, DTLBWriteM, // write TLB with new entry
 | ||||
|    output logic 	       SelPTW, // LSU Arbiter should select signals from the PTW rather than from the IEU
 | ||||
|    output logic            HPTWStall, | ||||
|    output logic [`PA_BITS-1:0] TranslationPAdr, | ||||
|    output logic 	       HPTWRead, // HPTW requesting to read memory
 | ||||
| @ -101,7 +100,6 @@ module hptw | ||||
| 	  // Enable and select signals based on states
 | ||||
|       assign StartWalk = (WalkerState == IDLE) & TLBMiss; | ||||
| 	  assign HPTWRead = (WalkerState == L3_RD) | (WalkerState == L2_RD) | (WalkerState == L1_RD) | (WalkerState == L0_RD); | ||||
| 	  assign SelPTW = (WalkerState != IDLE) & (WalkerState != FAULT) & (WalkerState != LEAF) & (WalkerState != LEAF_DELAY); | ||||
| 	  assign HPTWStall = (WalkerState != IDLE) & (WalkerState != FAULT); | ||||
| 	  assign DTLBWriteM = (WalkerState == LEAF) & DTLBWalk; | ||||
| 	  assign ITLBWriteF = (WalkerState == LEAF) & ~DTLBWalk; | ||||
| @ -213,7 +211,7 @@ module hptw | ||||
| 	    end | ||||
| 	  endcase | ||||
|     end else begin // No Virtual memory supported; tie HPTW outputs to 0
 | ||||
|       assign HPTWRead = 0; assign SelPTW = 0; | ||||
|       assign HPTWRead = 0; | ||||
|       assign WalkerInstrPageFaultF = 0; assign WalkerLoadPageFaultM = 0; assign WalkerStorePageFaultM = 0; | ||||
|       assign TranslationPAdr = 0;  | ||||
|     end | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user