forked from Github_Repos/cvw
		
	replace instances of code duplication for i$ exclusions w/commands
This commit is contained in:
		
							parent
							
								
									a52eb01407
								
							
						
					
					
						commit
						862d1e0116
					
				@ -62,6 +62,17 @@ coverage exclude -scope /dut/core/ifu/bus/icache/icache/cachefsm -linerange $sta
 | 
				
			|||||||
coverage exclude -scope /dut/core/ifu/bus/icache/icache/cachefsm -linerange [GetLineNum ../src/cache/cachefsm.sv "exclusion-tag: icache CacheBusW"]
 | 
					coverage exclude -scope /dut/core/ifu/bus/icache/icache/cachefsm -linerange [GetLineNum ../src/cache/cachefsm.sv "exclusion-tag: icache CacheBusW"]
 | 
				
			||||||
coverage exclude -scope /dut/core/ifu/bus/icache/icache/cachefsm -linerange [GetLineNum ../src/cache/cachefsm.sv "exclusion-tag: icache SelAdrCauses"] -item e 1 -fecexprrow 4 10
 | 
					coverage exclude -scope /dut/core/ifu/bus/icache/icache/cachefsm -linerange [GetLineNum ../src/cache/cachefsm.sv "exclusion-tag: icache SelAdrCauses"] -item e 1 -fecexprrow 4 10
 | 
				
			||||||
coverage exclude -scope /dut/core/ifu/bus/icache/icache/cachefsm -linerange [GetLineNum ../src/cache/cachefsm.sv "exclusion-tag: icache CacheBusRCauses"] -item e 1 -fecexprrow 1-2 12
 | 
					coverage exclude -scope /dut/core/ifu/bus/icache/icache/cachefsm -linerange [GetLineNum ../src/cache/cachefsm.sv "exclusion-tag: icache CacheBusRCauses"] -item e 1 -fecexprrow 1-2 12
 | 
				
			||||||
 | 
					# cache.sv AdrSelMux and CacheBusAdrMux, excluding unhit Flush branch
 | 
				
			||||||
 | 
					coverage exclude -scope /dut/core/ifu/bus/icache/icache/AdrSelMux -linerange [GetLineNum ../src/generic/mux.sv "exclusion-tag: mux3"] -item b 1
 | 
				
			||||||
 | 
					coverage exclude -scope /dut/core/ifu/bus/icache/icache/CacheBusAdrMux -linerange [GetLineNum ../src/generic/mux.sv "exclusion-tag: mux3"] -item b 1 3
 | 
				
			||||||
 | 
					# CacheWay Dirty logic. -scope does not accept wildcards.
 | 
				
			||||||
 | 
					set numcacheways 4
 | 
				
			||||||
 | 
					for {set i 0} {$i < $numcacheways} {incr i} {
 | 
				
			||||||
 | 
					    coverage exclude -scope /dut/core/ifu/bus/icache/icache/CacheWays[$i] -linerange [GetLineNum ../src/cache/cacheway.sv "exclusion-tag: icache SetDirtyWay"] -item e 1
 | 
				
			||||||
 | 
					    coverage exclude -scope /dut/core/ifu/bus/icache/icache/CacheWays[$i] -linerange [GetLineNum ../src/cache/cacheway.sv "exclusion-tag: icache SelectedWiteWordEn"] -item e 1 -fecexprrow 4 6
 | 
				
			||||||
 | 
					    # below: flushD can't go high during an icache write b/c of pipeline stall
 | 
				
			||||||
 | 
					    coverage exclude -scope /dut/core/ifu/bus/icache/icache/CacheWays[$i] -linerange [GetLineNum ../src/cache/cacheway.sv "exclusion-tag: icache SetValidEN"] -item e 1 -fecexprrow 4
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
######################
 | 
					######################
 | 
				
			||||||
# Toggle exclusions
 | 
					# Toggle exclusions
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										28
									
								
								src/cache/cache.sv
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								src/cache/cache.sv
									
									
									
									
										vendored
									
									
								
							@ -73,6 +73,7 @@ module cache #(parameter LINELEN,  NUMLINES,  NUMWAYS, LOGBWPL, WORDLEN, MUXINTE
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic                          SelAdr;
 | 
					  logic                          SelAdr;
 | 
				
			||||||
 | 
					  logic [1:0]                    AdrSelMuxSel;
 | 
				
			||||||
  logic [SETLEN-1:0]             CacheSet;
 | 
					  logic [SETLEN-1:0]             CacheSet;
 | 
				
			||||||
  logic [LINELEN-1:0]            LineWriteData;
 | 
					  logic [LINELEN-1:0]            LineWriteData;
 | 
				
			||||||
  logic                          ClearDirty, SetDirty, SetValid;
 | 
					  logic                          ClearDirty, SetDirty, SetValid;
 | 
				
			||||||
@ -108,18 +109,10 @@ module cache #(parameter LINELEN,  NUMLINES,  NUMWAYS, LOGBWPL, WORDLEN, MUXINTE
 | 
				
			|||||||
  // and FlushAdr when handling D$ flushes
 | 
					  // and FlushAdr when handling D$ flushes
 | 
				
			||||||
  // The icache must update to the newest PCNextF on flush as it is probably a trap.  Trap
 | 
					  // The icache must update to the newest PCNextF on flush as it is probably a trap.  Trap
 | 
				
			||||||
  // sets PCNextF to XTVEC and the icache must start reading the instruction.
 | 
					  // sets PCNextF to XTVEC and the icache must start reading the instruction.
 | 
				
			||||||
  if (!READ_ONLY_CACHE) begin
 | 
					  assign AdrSelMuxSel = {SelFlush, ((SelAdr | SelHPTW) & ~((READ_ONLY_CACHE == 1) & FlushStage))};
 | 
				
			||||||
    logic [1:0]                    AdrSelMuxSel;
 | 
					  mux3 #(SETLEN) AdrSelMux(NextSet[SETTOP-1:OFFSETLEN], PAdr[SETTOP-1:OFFSETLEN], FlushAdr,
 | 
				
			||||||
    assign AdrSelMuxSel = {SelFlush, SelAdr | SelHPTW};
 | 
					 | 
				
			||||||
    mux3 #(SETLEN) AdrSelMux(NextSet[SETTOP-1:OFFSETLEN], PAdr[SETTOP-1:OFFSETLEN], FlushAdr,
 | 
					 | 
				
			||||||
    AdrSelMuxSel, CacheSet);
 | 
					    AdrSelMuxSel, CacheSet);
 | 
				
			||||||
  end
 | 
					
 | 
				
			||||||
  else begin
 | 
					 | 
				
			||||||
     logic                         AdrSelMuxSel;
 | 
					 | 
				
			||||||
     assign AdrSelMuxSel = ((SelAdr | SelHPTW) & ~FlushStage);
 | 
					 | 
				
			||||||
     mux2 #(SETLEN) AdrSelMux(NextSet[SETTOP-1:OFFSETLEN], PAdr[SETTOP-1:OFFSETLEN],
 | 
					 | 
				
			||||||
    AdrSelMuxSel, CacheSet);
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
  // Array of cache ways, along with victim, hit, dirty, and read merging logic
 | 
					  // Array of cache ways, along with victim, hit, dirty, and read merging logic
 | 
				
			||||||
  cacheway #(NUMLINES, LINELEN, TAGLEN, OFFSETLEN, SETLEN, READ_ONLY_CACHE) CacheWays[NUMWAYS-1:0](
 | 
					  cacheway #(NUMLINES, LINELEN, TAGLEN, OFFSETLEN, SETLEN, READ_ONLY_CACHE) CacheWays[NUMWAYS-1:0](
 | 
				
			||||||
    .clk, .reset, .CacheEn, .CacheSet, .PAdr, .LineWriteData, .LineByteMask,
 | 
					    .clk, .reset, .CacheEn, .CacheSet, .PAdr, .LineWriteData, .LineByteMask,
 | 
				
			||||||
@ -159,14 +152,11 @@ module cache #(parameter LINELEN,  NUMLINES,  NUMWAYS, LOGBWPL, WORDLEN, MUXINTE
 | 
				
			|||||||
    .PAdr(WordOffsetAddr), .ReadDataLine, .ReadDataWord);
 | 
					    .PAdr(WordOffsetAddr), .ReadDataLine, .ReadDataWord);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  // Bus address for fetch, writeback, or flush writeback
 | 
					  // Bus address for fetch, writeback, or flush writeback
 | 
				
			||||||
  if (!READ_ONLY_CACHE)
 | 
					  mux3 #(`PA_BITS) CacheBusAdrMux(.d0({PAdr[`PA_BITS-1:OFFSETLEN], {OFFSETLEN{1'b0}}}),
 | 
				
			||||||
    mux3 #(`PA_BITS) CacheBusAdrMux(.d0({PAdr[`PA_BITS-1:OFFSETLEN], {OFFSETLEN{1'b0}}}),
 | 
					    .d1({Tag, PAdr[SETTOP-1:OFFSETLEN], {OFFSETLEN{1'b0}}}),
 | 
				
			||||||
      .d1({Tag, PAdr[SETTOP-1:OFFSETLEN], {OFFSETLEN{1'b0}}}),
 | 
					    .d2({Tag, FlushAdr, {OFFSETLEN{1'b0}}}),
 | 
				
			||||||
      .d2({Tag, FlushAdr, {OFFSETLEN{1'b0}}}),
 | 
					    .s({SelFlush, SelWriteback}), .y(CacheBusAdr));
 | 
				
			||||||
      .s({SelFlush, SelWriteback}), .y(CacheBusAdr));
 | 
					  
 | 
				
			||||||
  else
 | 
					 | 
				
			||||||
    assign CacheBusAdr = {PAdr[`PA_BITS-1:OFFSETLEN], {OFFSETLEN{1'b0}}};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /////////////////////////////////////////////////////////////////////////////////////////////
 | 
					  /////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
  // Write Path
 | 
					  // Write Path
 | 
				
			||||||
  /////////////////////////////////////////////////////////////////////////////////////////////
 | 
					  /////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										20
									
								
								src/cache/cacheway.sv
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								src/cache/cacheway.sv
									
									
									
									
										vendored
									
									
								
							@ -97,22 +97,10 @@ module cacheway #(parameter NUMLINES=512, LINELEN = 256, TAGLEN = 26,
 | 
				
			|||||||
  /////////////////////////////////////////////////////////////////////////////////////////////
 | 
					  /////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  assign SetValidWay = SetValid & SelData;
 | 
					  assign SetValidWay = SetValid & SelData;
 | 
				
			||||||
  if (!READ_ONLY_CACHE) begin
 | 
					  assign SetDirtyWay = SetDirty & SelData;                                 // exclusion-tag: icache SetDirtyWay
 | 
				
			||||||
    assign SetDirtyWay = SetDirty & SelData;
 | 
					  assign ClearDirtyWay = ClearDirty & SelData;
 | 
				
			||||||
    assign ClearDirtyWay = ClearDirty & SelData;
 | 
					  assign SelectedWriteWordEn = (SetValidWay | SetDirtyWay) & ~FlushStage;  // exclusion-tag: icache SelectedWiteWordEn
 | 
				
			||||||
    assign SelectedWriteWordEn = (SetValidWay | SetDirtyWay) & ~FlushStage;
 | 
					  assign SetValidEN = SetValidWay & ~FlushStage;                           // exclusion-tag: icache SetValidEN
 | 
				
			||||||
    assign SetValidEN = SetValidWay & ~FlushStage;
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
  else begin
 | 
					 | 
				
			||||||
    // Don't cover FlushStage assertion during SetValidWay.
 | 
					 | 
				
			||||||
    // it's not explicitely gated anywhere, but for read-only caches,
 | 
					 | 
				
			||||||
    // there's no way that a FlushD can happen during the write stage
 | 
					 | 
				
			||||||
    // of a fetch.
 | 
					 | 
				
			||||||
    // coverage off -item e 1 -fecexprrow 4
 | 
					 | 
				
			||||||
    assign SelectedWriteWordEn = SetValidWay & ~FlushStage;
 | 
					 | 
				
			||||||
    // coverage off -item e 1 -fecexprrow 4
 | 
					 | 
				
			||||||
    assign SetValidEN = SetValidWay & ~FlushStage;
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // If writing the whole line set all write enables to 1, else only set the correct word.
 | 
					  // If writing the whole line set all write enables to 1, else only set the correct word.
 | 
				
			||||||
  assign FinalByteMask = SetValidWay ? '1 : LineByteMask; // OR
 | 
					  assign FinalByteMask = SetValidWay ? '1 : LineByteMask; // OR
 | 
				
			||||||
 | 
				
			|||||||
@ -40,7 +40,7 @@ module mux3 #(parameter WIDTH = 8) (
 | 
				
			|||||||
  input  logic [1:0]       s, 
 | 
					  input  logic [1:0]       s, 
 | 
				
			||||||
  output logic [WIDTH-1:0] y);
 | 
					  output logic [WIDTH-1:0] y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  assign y = s[1] ? d2 : (s[0] ? d1 : d0); 
 | 
					  assign y = s[1] ? d2 : (s[0] ? d1 : d0); // exclusion-tag: mux3
 | 
				
			||||||
endmodule
 | 
					endmodule
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module mux4 #(parameter WIDTH = 8) (
 | 
					module mux4 #(parameter WIDTH = 8) (
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user