mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	More cache cleanup.
This commit is contained in:
		
							parent
							
								
									f5c4bca47e
								
							
						
					
					
						commit
						f87a6f2c63
					
				
							
								
								
									
										2
									
								
								pipelined/src/cache/cache.sv
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								pipelined/src/cache/cache.sv
									
									
									
									
										vendored
									
									
								
							@ -151,13 +151,11 @@ module cache #(parameter LINELEN,  NUMLINES,  NUMWAYS, DCACHE = 1) (
 | 
			
		||||
  /////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
  // Flush address and way generation during flush
 | 
			
		||||
  /////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
  // *** this could be improved. reduce to a single adder of size $clog2(numway+numlines)
 | 
			
		||||
  assign ResetOrFlushAdr = reset | FlushAdrCntRst;
 | 
			
		||||
  flopenr #(SETLEN) FlushAdrReg(.clk, .reset(ResetOrFlushAdr), .en(FlushAdrCntEn), 
 | 
			
		||||
    .d(FlushAdrP1), .q(FlushAdr));
 | 
			
		||||
  assign FlushAdrP1 = FlushAdr + 1'b1;
 | 
			
		||||
  assign FlushAdrFlag = (FlushAdr == FlushAdrThreshold[SETLEN-1:0]);
 | 
			
		||||
 | 
			
		||||
  assign ResetOrFlushWay = reset | FlushWayCntRst;
 | 
			
		||||
  flopenl #(NUMWAYS) FlushWayReg(.clk, .load(ResetOrFlushWay), .en(FlushWayCntEn), 
 | 
			
		||||
    .val({{NUMWAYS-1{1'b0}}, 1'b1}), .d(NextFlushWay), .q(FlushWay));
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										3
									
								
								pipelined/src/cache/cachefsm.sv
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								pipelined/src/cache/cachefsm.sv
									
									
									
									
										vendored
									
									
								
							@ -147,8 +147,7 @@ module cachefsm
 | 
			
		||||
      STATE_MISS_WRITE_CACHE_LINE:                   NextState = STATE_MISS_READ_WORD;
 | 
			
		||||
      STATE_MISS_READ_WORD: if(RW[0] & ~AMO)         NextState = STATE_MISS_WRITE_WORD;
 | 
			
		||||
                            else                     NextState = STATE_MISS_READ_WORD_DELAY;
 | 
			
		||||
      STATE_MISS_READ_WORD_DELAY: if(AMO & CPUBusy)  NextState = STATE_CPU_BUSY;
 | 
			
		||||
                                  else if(CPUBusy)   NextState = STATE_CPU_BUSY;
 | 
			
		||||
      STATE_MISS_READ_WORD_DELAY: if(CPUBusy)        NextState = STATE_CPU_BUSY;
 | 
			
		||||
                                  else               NextState = STATE_READY;
 | 
			
		||||
      STATE_MISS_WRITE_WORD: if(CPUBusy)             NextState = STATE_CPU_BUSY;
 | 
			
		||||
                             else                    NextState = STATE_READY;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								pipelined/src/cache/cacheway.sv
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								pipelined/src/cache/cacheway.sv
									
									
									
									
										vendored
									
									
								
							@ -88,9 +88,10 @@ module cacheway #(parameter NUMLINES=512, parameter LINELEN = 256, TAGLEN = 26,
 | 
			
		||||
    .CacheWriteData(PAdr[`PA_BITS-1:OFFSETLEN+INDEXLEN]), .WriteEnable(WriteLineWayEn));
 | 
			
		||||
 | 
			
		||||
  // AND portion of distributed tag multiplexer
 | 
			
		||||
  assign SelTag = SelFlush ? FlushWay : VictimWay;
 | 
			
		||||
  mux2 #(1) seltagmux(VictimWay, FlushWay, SelFlush, SelTag);
 | 
			
		||||
  assign VictimTagWay = SelTag ? ReadTag : '0; // AND part of AOMux
 | 
			
		||||
  assign VictimDirtyWay = SelTag & Dirty & Valid;
 | 
			
		||||
  assign WayHit = Valid & (ReadTag == PAdr[`PA_BITS-1:OFFSETLEN+INDEXLEN]);
 | 
			
		||||
 | 
			
		||||
  /////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
  // Data Array
 | 
			
		||||
@ -106,7 +107,6 @@ module cacheway #(parameter NUMLINES=512, parameter LINELEN = 256, TAGLEN = 26,
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  // AND portion of distributed read multiplexers
 | 
			
		||||
  assign WayHit = Valid & (ReadTag == PAdr[`PA_BITS-1:OFFSETLEN+INDEXLEN]);
 | 
			
		||||
  mux3 #(1) selecteddatamux(WayHit, VictimWay, FlushWay, {SelFlush, SelEvict}, SelData);
 | 
			
		||||
  assign ReadDataLineWay = SelData ? ReadDataLine : '0;  // AND part of AO mux.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user