mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Broken don't use this state.
This commit is contained in:
		
							parent
							
								
									de1e569ee9
								
							
						
					
					
						commit
						5ad3ee6b54
					
				@ -48,26 +48,20 @@ module interlockfsm(
 | 
				
			|||||||
  output logic      SelHPTW,
 | 
					  output logic      SelHPTW,
 | 
				
			||||||
  output logic      IgnoreRequestTLB);
 | 
					  output logic      IgnoreRequestTLB);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic             ToITLBMiss;
 | 
					 | 
				
			||||||
  logic             ToITLBMissNoReplay;
 | 
					 | 
				
			||||||
  logic             ToDTLBMiss;
 | 
					 | 
				
			||||||
  logic             ToBoth;
 | 
					 | 
				
			||||||
  logic             AnyCPUReqM;
 | 
					  logic             AnyCPUReqM;
 | 
				
			||||||
 | 
					  logic             PendingTLBMiss;
 | 
				
			||||||
 | 
					  logic             EitherTLBMiss;
 | 
				
			||||||
 | 
					  logic             EitherTLBWrite;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef enum      logic[2:0]  {STATE_T0_READY,
 | 
					  typedef enum      logic[2:0]  {STATE_T0_READY,
 | 
				
			||||||
				                 STATE_T1_REPLAY,
 | 
									                 STATE_T3_TLB_MISS} statetype;
 | 
				
			||||||
				                 STATE_T3_DTLB_MISS,
 | 
					 | 
				
			||||||
				                 STATE_T4_ITLB_MISS,
 | 
					 | 
				
			||||||
				                 STATE_T5_ITLB_MISS,
 | 
					 | 
				
			||||||
				                 STATE_T7_DITLB_MISS} statetype;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  (* mark_debug = "true" *)	  statetype InterlockCurrState, InterlockNextState;
 | 
					  (* mark_debug = "true" *)	  statetype InterlockCurrState, InterlockNextState;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  assign AnyCPUReqM = (|MemRWM) | (|AtomicM);
 | 
					  assign AnyCPUReqM = (|MemRWM) | (|AtomicM);
 | 
				
			||||||
  assign ToITLBMiss = ITLBMissOrDAFaultF & ~DTLBMissOrDAFaultM & AnyCPUReqM;
 | 
					  assign PendingTLBMiss = (ITLBMissOrDAFaultF & ~ITLBWriteF) | (DTLBMissOrDAFaultM & ~DTLBWriteM);
 | 
				
			||||||
  assign ToITLBMissNoReplay = ITLBMissOrDAFaultF & ~DTLBMissOrDAFaultM & ~AnyCPUReqM;
 | 
					  assign EitherTLBMiss = ITLBMissOrDAFaultF | DTLBMissOrDAFaultM;
 | 
				
			||||||
  assign ToDTLBMiss = ~ITLBMissOrDAFaultF & DTLBMissOrDAFaultM & AnyCPUReqM;
 | 
					  assign EitherTLBWrite = ITLBWriteF | DTLBWriteM;
 | 
				
			||||||
  assign ToBoth = ITLBMissOrDAFaultF & DTLBMissOrDAFaultM & AnyCPUReqM;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  always_ff @(posedge clk)
 | 
					  always_ff @(posedge clk)
 | 
				
			||||||
	if (reset)    InterlockCurrState <= #1 STATE_T0_READY;
 | 
						if (reset)    InterlockCurrState <= #1 STATE_T0_READY;
 | 
				
			||||||
@ -75,33 +69,19 @@ module interlockfsm(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  always_comb begin
 | 
					  always_comb begin
 | 
				
			||||||
	case(InterlockCurrState)
 | 
						case(InterlockCurrState)
 | 
				
			||||||
	  STATE_T0_READY: if (TrapM)                  InterlockNextState = STATE_T0_READY;
 | 
						  STATE_T0_READY:     if(EitherTLBMiss & ~TrapM)     InterlockNextState = STATE_T3_TLB_MISS;
 | 
				
			||||||
	                  else if(ToDTLBMiss)         InterlockNextState = STATE_T3_DTLB_MISS;
 | 
					 | 
				
			||||||
	                  else if(ToITLBMissNoReplay) InterlockNextState = STATE_T4_ITLB_MISS;
 | 
					 | 
				
			||||||
                      else if(ToITLBMiss)         InterlockNextState = STATE_T5_ITLB_MISS;
 | 
					 | 
				
			||||||
	                  else if(ToBoth)             InterlockNextState = STATE_T7_DITLB_MISS;
 | 
					 | 
				
			||||||
	                      else                           InterlockNextState = STATE_T0_READY;
 | 
						                      else                           InterlockNextState = STATE_T0_READY;
 | 
				
			||||||
	  STATE_T1_REPLAY:     if(0)                  InterlockNextState = STATE_T1_REPLAY;
 | 
						  STATE_T3_TLB_MISS:  if(~(EitherTLBWrite)) InterlockNextState = STATE_T3_TLB_MISS;
 | 
				
			||||||
 | 
					                    	  else if(PendingTLBMiss)        InterlockNextState = STATE_T3_TLB_MISS;
 | 
				
			||||||
 | 
					                          else if(AnyCPUReqM)            InterlockNextState = STATE_T0_READY;
 | 
				
			||||||
                          else                           InterlockNextState = STATE_T0_READY;
 | 
					                          else                           InterlockNextState = STATE_T0_READY;
 | 
				
			||||||
	  STATE_T3_DTLB_MISS:  if(DTLBWriteM)         InterlockNextState = STATE_T1_REPLAY;
 | 
					 | 
				
			||||||
	                       else                   InterlockNextState = STATE_T3_DTLB_MISS;
 | 
					 | 
				
			||||||
	  STATE_T4_ITLB_MISS:  if(ITLBWriteF)         InterlockNextState = STATE_T0_READY;
 | 
					 | 
				
			||||||
	                       else                   InterlockNextState = STATE_T4_ITLB_MISS;
 | 
					 | 
				
			||||||
	  STATE_T5_ITLB_MISS:  if(ITLBWriteF)         InterlockNextState = STATE_T1_REPLAY;
 | 
					 | 
				
			||||||
	                       else                   InterlockNextState = STATE_T5_ITLB_MISS;
 | 
					 | 
				
			||||||
	  STATE_T7_DITLB_MISS: if(DTLBWriteM)         InterlockNextState = STATE_T5_ITLB_MISS;
 | 
					 | 
				
			||||||
	                       else                   InterlockNextState = STATE_T7_DITLB_MISS;
 | 
					 | 
				
			||||||
	  default:                                           InterlockNextState = STATE_T0_READY;
 | 
						  default:                                           InterlockNextState = STATE_T0_READY;
 | 
				
			||||||
	endcase
 | 
						endcase
 | 
				
			||||||
  end // always_comb
 | 
					  end // always_comb
 | 
				
			||||||
	  
 | 
						  
 | 
				
			||||||
   assign InterlockStall = (InterlockCurrState == STATE_T0_READY & (DTLBMissOrDAFaultM | ITLBMissOrDAFaultF) & ~TrapM) | 
 | 
					   assign InterlockStall = (InterlockCurrState == STATE_T0_READY & EitherTLBMiss & ~TrapM) | 
 | 
				
			||||||
                           (InterlockCurrState == STATE_T3_DTLB_MISS) | (InterlockCurrState == STATE_T4_ITLB_MISS) |
 | 
					                           (InterlockCurrState == STATE_T3_TLB_MISS);
 | 
				
			||||||
                           (InterlockCurrState == STATE_T5_ITLB_MISS) | (InterlockCurrState == STATE_T7_DITLB_MISS);
 | 
					  assign SelReplayMemE = (InterlockCurrState == STATE_T3_TLB_MISS & EitherTLBWrite & ~PendingTLBMiss);
 | 
				
			||||||
  assign SelReplayMemE = (InterlockCurrState == STATE_T1_REPLAY) |
 | 
					  assign SelHPTW = (InterlockCurrState == STATE_T3_TLB_MISS);
 | 
				
			||||||
                         (InterlockCurrState == STATE_T3_DTLB_MISS & DTLBWriteM) | 
 | 
					  assign IgnoreRequestTLB = (InterlockCurrState == STATE_T0_READY & EitherTLBMiss);
 | 
				
			||||||
                         (InterlockCurrState == STATE_T5_ITLB_MISS & ITLBWriteF);
 | 
					 | 
				
			||||||
  assign SelHPTW = (InterlockCurrState == STATE_T3_DTLB_MISS) | (InterlockCurrState == STATE_T4_ITLB_MISS) |
 | 
					 | 
				
			||||||
				   (InterlockCurrState == STATE_T5_ITLB_MISS) | (InterlockCurrState == STATE_T7_DITLB_MISS);
 | 
					 | 
				
			||||||
  assign IgnoreRequestTLB = (InterlockCurrState == STATE_T0_READY & (ITLBMissOrDAFaultF | DTLBMissOrDAFaultM));
 | 
					 | 
				
			||||||
endmodule
 | 
					endmodule
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user