mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	started cachefsm cleanup.
This commit is contained in:
		
							parent
							
								
									d21be9d998
								
							
						
					
					
						commit
						dd6baa9ed4
					
				
							
								
								
									
										32
									
								
								pipelined/src/cache/cachefsm.sv
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								pipelined/src/cache/cachefsm.sv
									
									
									
									
										vendored
									
									
								
							| @ -124,7 +124,6 @@ module cachefsm | |||||||
|   // next state logic and some state ouputs.
 |   // next state logic and some state ouputs.
 | ||||||
|   // *** Ross simplify: factor out next state and output logic
 |   // *** Ross simplify: factor out next state and output logic
 | ||||||
|   always_comb begin |   always_comb begin | ||||||
|     CacheStall = 1'b0; |  | ||||||
|     PreSelAdr = 2'b00; |     PreSelAdr = 2'b00; | ||||||
|     SetValid = 1'b0; |     SetValid = 1'b0; | ||||||
|     ClearValid = 1'b0; |     ClearValid = 1'b0; | ||||||
| @ -148,7 +147,6 @@ module cachefsm | |||||||
|     case (CurrState) |     case (CurrState) | ||||||
|       STATE_READY: begin |       STATE_READY: begin | ||||||
| 
 | 
 | ||||||
| 		CacheStall = 1'b0; |  | ||||||
| 		PreSelAdr = 2'b00; | 		PreSelAdr = 2'b00; | ||||||
| 		SRAMWordWriteEnable = 1'b0; | 		SRAMWordWriteEnable = 1'b0; | ||||||
| 		SetDirty = 1'b0; | 		SetDirty = 1'b0; | ||||||
| @ -171,13 +169,11 @@ module cachefsm | |||||||
| 		  NextState = STATE_FLUSH; | 		  NextState = STATE_FLUSH; | ||||||
| 		  FlushAdrCntRst = 1'b1; | 		  FlushAdrCntRst = 1'b1; | ||||||
| 		  FlushWayCntRst = 1'b1;	 | 		  FlushWayCntRst = 1'b1;	 | ||||||
| 		  CacheStall = 1'b1; |  | ||||||
| 		end | 		end | ||||||
| 		 | 		 | ||||||
| 		// amo hit
 | 		// amo hit
 | ||||||
| 		else if(Atomic[1] & (&RW) & CacheHit) begin | 		else if(Atomic[1] & (&RW) & CacheHit) begin | ||||||
| 		  PreSelAdr = 2'b01; | 		  PreSelAdr = 2'b01; | ||||||
| 		  CacheStall = 1'b0; |  | ||||||
| 		   | 		   | ||||||
| 		  if(CPUBusy) begin  | 		  if(CPUBusy) begin  | ||||||
| 			NextState = STATE_CPU_BUSY_FINISH_AMO; | 			NextState = STATE_CPU_BUSY_FINISH_AMO; | ||||||
| @ -193,7 +189,6 @@ module cachefsm | |||||||
| 		end | 		end | ||||||
| 		// read hit valid cached
 | 		// read hit valid cached
 | ||||||
| 		else if(RW[1] & CacheHit) begin | 		else if(RW[1] & CacheHit) begin | ||||||
| 		  CacheStall = 1'b0; |  | ||||||
| 		  LRUWriteEn = 1'b1; | 		  LRUWriteEn = 1'b1; | ||||||
| 		   | 		   | ||||||
| 		  if(CPUBusy) begin | 		  if(CPUBusy) begin | ||||||
| @ -208,7 +203,6 @@ module cachefsm | |||||||
| 		// write hit valid cached
 | 		// write hit valid cached
 | ||||||
| 		else if (RW[0] & CacheHit) begin | 		else if (RW[0] & CacheHit) begin | ||||||
| 		  PreSelAdr = 2'b01; | 		  PreSelAdr = 2'b01; | ||||||
| 		  CacheStall = 1'b0; |  | ||||||
| 		  SRAMWordWriteEnable = 1'b1; | 		  SRAMWordWriteEnable = 1'b1; | ||||||
| 		  SetDirty = 1'b1; | 		  SetDirty = 1'b1; | ||||||
| 		  LRUWriteEn = 1'b1; | 		  LRUWriteEn = 1'b1; | ||||||
| @ -225,14 +219,12 @@ module cachefsm | |||||||
| 		// read or write miss valid cached
 | 		// read or write miss valid cached
 | ||||||
| 		else if((|RW) & ~CacheHit) begin | 		else if((|RW) & ~CacheHit) begin | ||||||
| 		  NextState = STATE_MISS_FETCH_WDV; | 		  NextState = STATE_MISS_FETCH_WDV; | ||||||
| 		  CacheStall = 1'b1; |  | ||||||
| 		  CacheFetchLine = 1'b1; | 		  CacheFetchLine = 1'b1; | ||||||
| 		end | 		end | ||||||
| 		else NextState = STATE_READY; | 		else NextState = STATE_READY; | ||||||
|       end |       end | ||||||
|        |        | ||||||
|       STATE_MISS_FETCH_WDV: begin |       STATE_MISS_FETCH_WDV: begin | ||||||
| 		CacheStall = 1'b1; |  | ||||||
| 		PreSelAdr = 2'b01; | 		PreSelAdr = 2'b01; | ||||||
| 		 | 		 | ||||||
| 		if (CacheBusAck) begin | 		if (CacheBusAck) begin | ||||||
| @ -243,7 +235,6 @@ module cachefsm | |||||||
|       end |       end | ||||||
| 
 | 
 | ||||||
|       STATE_MISS_FETCH_DONE: begin |       STATE_MISS_FETCH_DONE: begin | ||||||
| 		CacheStall = 1'b1; |  | ||||||
| 		PreSelAdr = 2'b01; | 		PreSelAdr = 2'b01; | ||||||
| 		if(VictimDirty) begin | 		if(VictimDirty) begin | ||||||
| 		  NextState = STATE_MISS_EVICT_DIRTY; | 		  NextState = STATE_MISS_EVICT_DIRTY; | ||||||
| @ -255,7 +246,6 @@ module cachefsm | |||||||
| 
 | 
 | ||||||
|       STATE_MISS_WRITE_CACHE_LINE: begin |       STATE_MISS_WRITE_CACHE_LINE: begin | ||||||
| 		SRAMLineWriteEnable = 1'b1; | 		SRAMLineWriteEnable = 1'b1; | ||||||
| 		CacheStall = 1'b1; |  | ||||||
| 		NextState = STATE_MISS_READ_WORD; | 		NextState = STATE_MISS_READ_WORD; | ||||||
| 		PreSelAdr = 2'b01; | 		PreSelAdr = 2'b01; | ||||||
| 		SetValid = 1'b1; | 		SetValid = 1'b1; | ||||||
| @ -265,7 +255,6 @@ module cachefsm | |||||||
| 
 | 
 | ||||||
|       STATE_MISS_READ_WORD: begin |       STATE_MISS_READ_WORD: begin | ||||||
| 		PreSelAdr = 2'b01; | 		PreSelAdr = 2'b01; | ||||||
| 		CacheStall = 1'b1; |  | ||||||
| 		if (RW[0] & ~Atomic[1]) begin // handles stores and amo write.
 | 		if (RW[0] & ~Atomic[1]) begin // handles stores and amo write.
 | ||||||
| 		  NextState = STATE_MISS_WRITE_WORD; | 		  NextState = STATE_MISS_WRITE_WORD; | ||||||
| 		end else begin | 		end else begin | ||||||
| @ -320,7 +309,6 @@ module cachefsm | |||||||
|       end |       end | ||||||
| 
 | 
 | ||||||
|       STATE_MISS_EVICT_DIRTY: begin |       STATE_MISS_EVICT_DIRTY: begin | ||||||
| 		CacheStall = 1'b1; |  | ||||||
| 		PreSelAdr = 2'b01; | 		PreSelAdr = 2'b01; | ||||||
| 		SelEvict = 1'b1; | 		SelEvict = 1'b1; | ||||||
| 		if(CacheBusAck) begin | 		if(CacheBusAck) begin | ||||||
| @ -363,13 +351,11 @@ module cachefsm | |||||||
| 	  STATE_FLUSH: begin | 	  STATE_FLUSH: begin | ||||||
| 		// intialize flush counters
 | 		// intialize flush counters
 | ||||||
| 		SelFlush = 1'b1; | 		SelFlush = 1'b1; | ||||||
| 		CacheStall = 1'b1; |  | ||||||
| 		PreSelAdr = 2'b10; | 		PreSelAdr = 2'b10; | ||||||
| 		NextState = STATE_FLUSH_CHECK; | 		NextState = STATE_FLUSH_CHECK; | ||||||
| 	  end		 | 	  end		 | ||||||
| 
 | 
 | ||||||
|       STATE_FLUSH_CHECK: begin |       STATE_FLUSH_CHECK: begin | ||||||
| 		CacheStall = 1'b1; |  | ||||||
| 		PreSelAdr = 2'b10; | 		PreSelAdr = 2'b10; | ||||||
| 		SelFlush = 1'b1; | 		SelFlush = 1'b1; | ||||||
| 		if(VictimDirty) begin | 		if(VictimDirty) begin | ||||||
| @ -378,7 +364,6 @@ module cachefsm | |||||||
| 		  CacheWriteLine = 1'b1; | 		  CacheWriteLine = 1'b1; | ||||||
| 		end else if (FlushAdrFlag & FlushWayFlag) begin | 		end else if (FlushAdrFlag & FlushWayFlag) begin | ||||||
| 		  NextState = STATE_READY; | 		  NextState = STATE_READY; | ||||||
| 		  CacheStall = 1'b0; |  | ||||||
| 		  PreSelAdr = 2'b00; | 		  PreSelAdr = 2'b00; | ||||||
| 		  FlushWayCntEn = 1'b0;	 | 		  FlushWayCntEn = 1'b0;	 | ||||||
| 		end else if(FlushWayFlag) begin | 		end else if(FlushWayFlag) begin | ||||||
| @ -393,7 +378,6 @@ module cachefsm | |||||||
|       end |       end | ||||||
| 	   | 	   | ||||||
| 	  STATE_FLUSH_INCR: begin | 	  STATE_FLUSH_INCR: begin | ||||||
| 		CacheStall = 1'b1; |  | ||||||
| 		PreSelAdr = 2'b10; | 		PreSelAdr = 2'b10; | ||||||
| 		SelFlush = 1'b1; | 		SelFlush = 1'b1; | ||||||
| 		FlushWayCntRst = 1'b1; | 		FlushWayCntRst = 1'b1; | ||||||
| @ -401,7 +385,6 @@ module cachefsm | |||||||
| 	  end | 	  end | ||||||
| 
 | 
 | ||||||
|       STATE_FLUSH_WRITE_BACK: begin |       STATE_FLUSH_WRITE_BACK: begin | ||||||
| 		CacheStall = 1'b1; |  | ||||||
| 		PreSelAdr = 2'b10; | 		PreSelAdr = 2'b10; | ||||||
| 		SelFlush = 1'b1; | 		SelFlush = 1'b1; | ||||||
| 		if(CacheBusAck) begin | 		if(CacheBusAck) begin | ||||||
| @ -412,7 +395,6 @@ module cachefsm | |||||||
|       end |       end | ||||||
| 
 | 
 | ||||||
|       STATE_FLUSH_CLEAR_DIRTY: begin |       STATE_FLUSH_CLEAR_DIRTY: begin | ||||||
| 		CacheStall = 1'b1; |  | ||||||
| 		ClearDirty = 1'b1; | 		ClearDirty = 1'b1; | ||||||
| 		VDWriteEnable = 1'b1; | 		VDWriteEnable = 1'b1; | ||||||
| 		SelFlush = 1'b1; | 		SelFlush = 1'b1; | ||||||
| @ -420,7 +402,6 @@ module cachefsm | |||||||
| 		FlushWayCntEn = 1'b0; | 		FlushWayCntEn = 1'b0; | ||||||
| 		if(FlushAdrFlag & FlushWayFlag) begin | 		if(FlushAdrFlag & FlushWayFlag) begin | ||||||
| 		  NextState = STATE_READY; | 		  NextState = STATE_READY; | ||||||
| 		  CacheStall = 1'b0; |  | ||||||
| 		  PreSelAdr = 2'b00; | 		  PreSelAdr = 2'b00; | ||||||
| 		end else if (FlushWayFlag) begin | 		end else if (FlushWayFlag) begin | ||||||
| 		  NextState = STATE_FLUSH_INCR; | 		  NextState = STATE_FLUSH_INCR; | ||||||
| @ -440,6 +421,19 @@ module cachefsm | |||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   assign CacheCommitted = CurrState != STATE_READY; |   assign CacheCommitted = CurrState != STATE_READY; | ||||||
|  |   assign CacheStall = (CurrState == STATE_READY & (FlushCache | (|RW & ~CacheHit)) & ~IgnoreRequest) | | ||||||
|  | 
 | ||||||
|  |                       (CurrState == STATE_MISS_FETCH_WDV) | | ||||||
|  |                       (CurrState == STATE_MISS_FETCH_DONE) | | ||||||
|  |                       (CurrState == STATE_MISS_WRITE_CACHE_LINE) | | ||||||
|  |                       (CurrState == STATE_MISS_READ_WORD) | | ||||||
|  |                       (CurrState == STATE_MISS_EVICT_DIRTY) | | ||||||
|  |                       (CurrState == STATE_FLUSH) | | ||||||
|  |                       (CurrState == STATE_FLUSH_CHECK & ~(FlushAdrFlag & FlushWayFlag)) | | ||||||
|  |                       (CurrState == STATE_FLUSH_INCR) | | ||||||
|  |                       (CurrState == STATE_FLUSH_WRITE_BACK) | | ||||||
|  |                       (CurrState == STATE_FLUSH_CLEAR_DIRTY & ~(FlushAdrFlag & FlushWayFlag)); | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| endmodule // cachefsm
 | endmodule // cachefsm
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user