mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Merge branch 'main' of github.com:ross144/cvw into main
This commit is contained in:
		
						commit
						318a9ec0f3
					
				
							
								
								
									
										16
									
								
								src/cache/cache.sv
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								src/cache/cache.sv
									
									
									
									
										vendored
									
									
								
							@ -39,7 +39,7 @@ module cache #(parameter LINELEN,  NUMLINES,  NUMWAYS, LOGBWPL, WORDLEN, MUXINTE
 | 
				
			|||||||
  input  logic [1:0]             CacheAtomic,       // Atomic operation
 | 
					  input  logic [1:0]             CacheAtomic,       // Atomic operation
 | 
				
			||||||
  input  logic                   FlushCache,        // Flush all dirty lines back to memory
 | 
					  input  logic                   FlushCache,        // Flush all dirty lines back to memory
 | 
				
			||||||
  input  logic                   InvalidateCache,   // Clear all valid bits
 | 
					  input  logic                   InvalidateCache,   // Clear all valid bits
 | 
				
			||||||
  input  logic [11:0]            NextAdr,           // Virtual address, but we only use the lower 12 bits.
 | 
					  input  logic [11:0]            NextSet,           // Virtual address, but we only use the lower 12 bits.
 | 
				
			||||||
  input  logic [`PA_BITS-1:0]    PAdr,              // Physical address
 | 
					  input  logic [`PA_BITS-1:0]    PAdr,              // Physical address
 | 
				
			||||||
  input  logic [(WORDLEN-1)/8:0] ByteMask,          // Which bytes to write (D$ only)
 | 
					  input  logic [(WORDLEN-1)/8:0] ByteMask,          // Which bytes to write (D$ only)
 | 
				
			||||||
  input  logic [WORDLEN-1:0]     CacheWriteData,    // Data to write to cache (D$ only)
 | 
					  input  logic [WORDLEN-1:0]     CacheWriteData,    // Data to write to cache (D$ only)
 | 
				
			||||||
@ -50,7 +50,7 @@ module cache #(parameter LINELEN,  NUMLINES,  NUMWAYS, LOGBWPL, WORDLEN, MUXINTE
 | 
				
			|||||||
  output logic                   CacheMiss,         // Cache miss
 | 
					  output logic                   CacheMiss,         // Cache miss
 | 
				
			||||||
  output logic                   CacheAccess,       // Cache access
 | 
					  output logic                   CacheAccess,       // Cache access
 | 
				
			||||||
  // lsu control
 | 
					  // lsu control
 | 
				
			||||||
  input  logic                   SelHPTW,           // Use PAdr from Hardware Page Table Walker rather than NextAdr
 | 
					  input  logic                   SelHPTW,           // Use PAdr from Hardware Page Table Walker rather than NextSet
 | 
				
			||||||
  // Bus fsm interface
 | 
					  // Bus fsm interface
 | 
				
			||||||
  input  logic                   CacheBusAck,       // Bus operation completed
 | 
					  input  logic                   CacheBusAck,       // Bus operation completed
 | 
				
			||||||
  input  logic                   SelBusBeat,        // Word in cache line comes from BeatCount
 | 
					  input  logic                   SelBusBeat,        // Word in cache line comes from BeatCount
 | 
				
			||||||
@ -74,7 +74,7 @@ module cache #(parameter LINELEN,  NUMLINES,  NUMWAYS, LOGBWPL, WORDLEN, MUXINTE
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  logic                          SelAdr;
 | 
					  logic                          SelAdr;
 | 
				
			||||||
  logic [1:0]                    AdrSelMuxSel;
 | 
					  logic [1:0]                    AdrSelMuxSel;
 | 
				
			||||||
  logic [SETLEN-1:0]             CAdr;
 | 
					  logic [SETLEN-1:0]             CacheSet;
 | 
				
			||||||
  logic [LINELEN-1:0]            LineWriteData;
 | 
					  logic [LINELEN-1:0]            LineWriteData;
 | 
				
			||||||
  logic                          ClearValid, ClearDirty, SetDirty, SetValid;
 | 
					  logic                          ClearValid, ClearDirty, SetDirty, SetValid;
 | 
				
			||||||
  logic [LINELEN-1:0]            ReadDataLineWay [NUMWAYS-1:0];
 | 
					  logic [LINELEN-1:0]            ReadDataLineWay [NUMWAYS-1:0];
 | 
				
			||||||
@ -106,24 +106,24 @@ module cache #(parameter LINELEN,  NUMLINES,  NUMWAYS, LOGBWPL, WORDLEN, MUXINTE
 | 
				
			|||||||
  // Read Path
 | 
					  // Read Path
 | 
				
			||||||
  /////////////////////////////////////////////////////////////////////////////////////////////
 | 
					  /////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Choose read address (CAdr).  Normally use NextAdr, but use PAdr during stalls
 | 
					  // Choose read address (CacheSet).  Normally use NextSet, but use PAdr during stalls
 | 
				
			||||||
  // 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.
 | 
				
			||||||
  assign AdrSelMuxSel = {SelFlush, ((SelAdr | SelHPTW) & ~((READ_ONLY_CACHE == 1) & FlushStage))};
 | 
					  assign AdrSelMuxSel = {SelFlush, ((SelAdr | SelHPTW) & ~((READ_ONLY_CACHE == 1) & FlushStage))};
 | 
				
			||||||
  mux3 #(SETLEN) AdrSelMux(NextAdr[SETTOP-1:OFFSETLEN], PAdr[SETTOP-1:OFFSETLEN], FlushAdr,
 | 
					  mux3 #(SETLEN) AdrSelMux(NextSet[SETTOP-1:OFFSETLEN], PAdr[SETTOP-1:OFFSETLEN], FlushAdr,
 | 
				
			||||||
    AdrSelMuxSel, CAdr);
 | 
					    AdrSelMuxSel, CacheSet);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // 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, .CAdr, .PAdr, .LineWriteData, .LineByteMask,
 | 
					    .clk, .reset, .CacheEn, .CacheSet, .PAdr, .LineWriteData, .LineByteMask,
 | 
				
			||||||
    .SetValid, .ClearValid, .SetDirty, .ClearDirty, .SelWriteback, .VictimWay,
 | 
					    .SetValid, .ClearValid, .SetDirty, .ClearDirty, .SelWriteback, .VictimWay,
 | 
				
			||||||
    .FlushWay, .SelFlush, .ReadDataLineWay, .HitWay, .ValidWay, .DirtyWay, .TagWay, .FlushStage, .InvalidateCache);
 | 
					    .FlushWay, .SelFlush, .ReadDataLineWay, .HitWay, .ValidWay, .DirtyWay, .TagWay, .FlushStage, .InvalidateCache);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Select victim way for associative caches
 | 
					  // Select victim way for associative caches
 | 
				
			||||||
  if(NUMWAYS > 1) begin:vict
 | 
					  if(NUMWAYS > 1) begin:vict
 | 
				
			||||||
    cacheLRU #(NUMWAYS, SETLEN, OFFSETLEN, NUMLINES) cacheLRU(
 | 
					    cacheLRU #(NUMWAYS, SETLEN, OFFSETLEN, NUMLINES) cacheLRU(
 | 
				
			||||||
      .clk, .reset, .CacheEn, .FlushStage, .HitWay, .ValidWay, .VictimWay, .CAdr, .LRUWriteEn(LRUWriteEn & ~FlushStage),
 | 
					      .clk, .reset, .CacheEn, .FlushStage, .HitWay, .ValidWay, .VictimWay, .CacheSet, .LRUWriteEn(LRUWriteEn & ~FlushStage),
 | 
				
			||||||
      .SetValid, .PAdr(PAdr[SETTOP-1:OFFSETLEN]), .InvalidateCache, .FlushCache);
 | 
					      .SetValid, .PAdr(PAdr[SETTOP-1:OFFSETLEN]), .InvalidateCache, .FlushCache);
 | 
				
			||||||
  end else 
 | 
					  end else 
 | 
				
			||||||
    assign VictimWay = 1'b1; // one hot.
 | 
					    assign VictimWay = 1'b1; // one hot.
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										9
									
								
								src/cache/cacheLRU.sv
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								src/cache/cacheLRU.sv
									
									
									
									
										vendored
									
									
								
							@ -37,7 +37,7 @@ module cacheLRU
 | 
				
			|||||||
  input  logic                CacheEn,         // Enable the cache memory arrays.  Disable hold read data constant
 | 
					  input  logic                CacheEn,         // Enable the cache memory arrays.  Disable hold read data constant
 | 
				
			||||||
  input  logic [NUMWAYS-1:0]  HitWay,          // Which way is valid and matches PAdr's tag
 | 
					  input  logic [NUMWAYS-1:0]  HitWay,          // Which way is valid and matches PAdr's tag
 | 
				
			||||||
  input  logic [NUMWAYS-1:0]  ValidWay,        // Which ways for a particular set are valid, ignores tag
 | 
					  input  logic [NUMWAYS-1:0]  ValidWay,        // Which ways for a particular set are valid, ignores tag
 | 
				
			||||||
  input  logic [SETLEN-1:0]   CAdr,            // Cache address, the output of the address select mux, NextAdr, PAdr, or FlushAdr
 | 
					  input  logic [SETLEN-1:0]   CacheSet,            // Cache address, the output of the address select mux, NextAdr, PAdr, or FlushAdr
 | 
				
			||||||
  input  logic [SETLEN-1:0]   PAdr,            // Physical address 
 | 
					  input  logic [SETLEN-1:0]   PAdr,            // Physical address 
 | 
				
			||||||
  input  logic                LRUWriteEn,      // Update the LRU state
 | 
					  input  logic                LRUWriteEn,      // Update the LRU state
 | 
				
			||||||
  input  logic                SetValid,        // Set the dirty bit in the selected way and set
 | 
					  input  logic                SetValid,        // Set the dirty bit in the selected way and set
 | 
				
			||||||
@ -124,8 +124,7 @@ module cacheLRU
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  // LRU storage must be reset for modelsim to run. However the reset value does not actually matter in practice.
 | 
					  // LRU storage must be reset for modelsim to run. However the reset value does not actually matter in practice.
 | 
				
			||||||
  // This is a two port memory.
 | 
					  // This is a two port memory.
 | 
				
			||||||
  // Every cycle must read from CAdr and each load/store must write the new LRU.
 | 
					  // Every cycle must read from CacheSet and each load/store must write the new LRU.
 | 
				
			||||||
  // this is still wrong.***************************
 | 
					 | 
				
			||||||
  always_ff @(posedge clk) begin
 | 
					  always_ff @(posedge clk) begin
 | 
				
			||||||
    if (reset) for (int set = 0; set < NUMLINES; set++) LRUMemory[set] <= '0;
 | 
					    if (reset) for (int set = 0; set < NUMLINES; set++) LRUMemory[set] <= '0;
 | 
				
			||||||
    if(CacheEn) begin
 | 
					    if(CacheEn) begin
 | 
				
			||||||
@ -133,10 +132,10 @@ module cacheLRU
 | 
				
			|||||||
      else if (LRUWriteEn & ~FlushStage) begin 
 | 
					      else if (LRUWriteEn & ~FlushStage) begin 
 | 
				
			||||||
        LRUMemory[PAdr] <= NextLRU;
 | 
					        LRUMemory[PAdr] <= NextLRU;
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
      if(LRUWriteEn & ~FlushStage & (PAdr == CAdr))
 | 
					      if(LRUWriteEn & ~FlushStage & (PAdr == CacheSet))
 | 
				
			||||||
        CurrLRU <= #1 NextLRU;
 | 
					        CurrLRU <= #1 NextLRU;
 | 
				
			||||||
      else 
 | 
					      else 
 | 
				
			||||||
        CurrLRU <= #1 LRUMemory[CAdr];
 | 
					        CurrLRU <= #1 LRUMemory[CacheSet];
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										14
									
								
								src/cache/cacheway.sv
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								src/cache/cacheway.sv
									
									
									
									
										vendored
									
									
								
							@ -35,7 +35,7 @@ module cacheway #(parameter NUMLINES=512, LINELEN = 256, TAGLEN = 26,
 | 
				
			|||||||
  input  logic                        reset,
 | 
					  input  logic                        reset,
 | 
				
			||||||
  input  logic                        FlushStage,     // Pipeline flush of second stage (prevent writes and bus operations)
 | 
					  input  logic                        FlushStage,     // Pipeline flush of second stage (prevent writes and bus operations)
 | 
				
			||||||
  input  logic                        CacheEn,        // Enable the cache memory arrays.  Disable hold read data constant
 | 
					  input  logic                        CacheEn,        // Enable the cache memory arrays.  Disable hold read data constant
 | 
				
			||||||
  input  logic [$clog2(NUMLINES)-1:0] CAdr,           // Cache address, the output of the address select mux, NextAdr, PAdr, or FlushAdr
 | 
					  input  logic [$clog2(NUMLINES)-1:0] CacheSet,           // Cache address, the output of the address select mux, NextAdr, PAdr, or FlushAdr
 | 
				
			||||||
  input  logic [`PA_BITS-1:0]         PAdr,           // Physical address 
 | 
					  input  logic [`PA_BITS-1:0]         PAdr,           // Physical address 
 | 
				
			||||||
  input  logic [LINELEN-1:0]          LineWriteData,  // Final data written to cache (D$ only)
 | 
					  input  logic [LINELEN-1:0]          LineWriteData,  // Final data written to cache (D$ only)
 | 
				
			||||||
  input  logic                        SetValid,       // Set the dirty bit in the selected way and set
 | 
					  input  logic                        SetValid,       // Set the dirty bit in the selected way and set
 | 
				
			||||||
@ -114,7 +114,7 @@ module cacheway #(parameter NUMLINES=512, LINELEN = 256, TAGLEN = 26,
 | 
				
			|||||||
  /////////////////////////////////////////////////////////////////////////////////////////////
 | 
					  /////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ram1p1rwbe #(.DEPTH(NUMLINES), .WIDTH(TAGLEN)) CacheTagMem(.clk, .ce(CacheEn),
 | 
					  ram1p1rwbe #(.DEPTH(NUMLINES), .WIDTH(TAGLEN)) CacheTagMem(.clk, .ce(CacheEn),
 | 
				
			||||||
    .addr(CAdr), .dout(ReadTag), .bwe('1),
 | 
					    .addr(CacheSet), .dout(ReadTag), .bwe('1),
 | 
				
			||||||
    .din(PAdr[`PA_BITS-1:OFFSETLEN+INDEXLEN]), .we(SetValidEN));
 | 
					    .din(PAdr[`PA_BITS-1:OFFSETLEN+INDEXLEN]), .we(SetValidEN));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
@ -136,7 +136,7 @@ module cacheway #(parameter NUMLINES=512, LINELEN = 256, TAGLEN = 26,
 | 
				
			|||||||
  localparam           LOGNUMSRAM = $clog2(NUMSRAM);
 | 
					  localparam           LOGNUMSRAM = $clog2(NUMSRAM);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  for(words = 0; words < NUMSRAM; words++) begin: word
 | 
					  for(words = 0; words < NUMSRAM; words++) begin: word
 | 
				
			||||||
    ram1p1rwbe #(.DEPTH(NUMLINES), .WIDTH(SRAMLEN)) CacheDataMem(.clk, .ce(CacheEn), .addr(CAdr),
 | 
					    ram1p1rwbe #(.DEPTH(NUMLINES), .WIDTH(SRAMLEN)) CacheDataMem(.clk, .ce(CacheEn), .addr(CacheSet),
 | 
				
			||||||
      .dout(ReadDataLine[SRAMLEN*(words+1)-1:SRAMLEN*words]),
 | 
					      .dout(ReadDataLine[SRAMLEN*(words+1)-1:SRAMLEN*words]),
 | 
				
			||||||
      .din(LineWriteData[SRAMLEN*(words+1)-1:SRAMLEN*words]),
 | 
					      .din(LineWriteData[SRAMLEN*(words+1)-1:SRAMLEN*words]),
 | 
				
			||||||
      .we(SelectedWriteWordEn), .bwe(FinalByteMask[SRAMLENINBYTES*(words+1)-1:SRAMLENINBYTES*words]));
 | 
					      .we(SelectedWriteWordEn), .bwe(FinalByteMask[SRAMLENINBYTES*(words+1)-1:SRAMLENINBYTES*words]));
 | 
				
			||||||
@ -152,9 +152,9 @@ module cacheway #(parameter NUMLINES=512, LINELEN = 256, TAGLEN = 26,
 | 
				
			|||||||
  always_ff @(posedge clk) begin // Valid bit array, 
 | 
					  always_ff @(posedge clk) begin // Valid bit array, 
 | 
				
			||||||
    if (reset) ValidBits        <= #1 '0;
 | 
					    if (reset) ValidBits        <= #1 '0;
 | 
				
			||||||
    if(CacheEn) begin 
 | 
					    if(CacheEn) begin 
 | 
				
			||||||
	  ValidWay <= #1 ValidBits[CAdr];
 | 
						  ValidWay <= #1 ValidBits[CacheSet];
 | 
				
			||||||
	  if(InvalidateCache)                    ValidBits <= #1 '0;
 | 
						  if(InvalidateCache)                    ValidBits <= #1 '0;
 | 
				
			||||||
      else if (SetValidEN | (ClearValidWay & ~FlushStage)) ValidBits[CAdr] <= #1 SetValidWay;
 | 
					      else if (SetValidEN | (ClearValidWay & ~FlushStage)) ValidBits[CacheSet] <= #1 SetValidWay;
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -168,8 +168,8 @@ module cacheway #(parameter NUMLINES=512, LINELEN = 256, TAGLEN = 26,
 | 
				
			|||||||
      // reset is optional.  Consider merging with TAG array in the future.
 | 
					      // reset is optional.  Consider merging with TAG array in the future.
 | 
				
			||||||
      //if (reset) DirtyBits <= #1 {NUMLINES{1'b0}}; 
 | 
					      //if (reset) DirtyBits <= #1 {NUMLINES{1'b0}}; 
 | 
				
			||||||
      if(CacheEn) begin
 | 
					      if(CacheEn) begin
 | 
				
			||||||
        Dirty <= #1 DirtyBits[CAdr];
 | 
					        Dirty <= #1 DirtyBits[CacheSet];
 | 
				
			||||||
        if((SetDirtyWay | ClearDirtyWay) & ~FlushStage) DirtyBits[CAdr] <= #1 SetDirtyWay;
 | 
					        if((SetDirtyWay | ClearDirtyWay) & ~FlushStage) DirtyBits[CacheSet] <= #1 SetDirtyWay;
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end else assign Dirty = 1'b0;
 | 
					  end else assign Dirty = 1'b0;
 | 
				
			||||||
 | 
				
			|||||||
@ -43,7 +43,7 @@ module hazard (
 | 
				
			|||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic                                       StallFCause, StallDCause, StallECause, StallMCause, StallWCause;
 | 
					  logic                                       StallFCause, StallDCause, StallECause, StallMCause, StallWCause;
 | 
				
			||||||
  logic                                       FirstUnstalledD, FirstUnstalledE, FirstUnstalledM, FirstUnstalledW;
 | 
					  logic                                       LatestUnstalledD, LatestUnstalledE, LatestUnstalledM, LatestUnstalledW;
 | 
				
			||||||
  logic                                       FlushDCause, FlushECause, FlushMCause, FlushWCause;
 | 
					  logic                                       FlushDCause, FlushECause, FlushMCause, FlushWCause;
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  // stalls and flushes
 | 
					  // stalls and flushes
 | 
				
			||||||
@ -95,14 +95,14 @@ module hazard (
 | 
				
			|||||||
  assign #1 StallW = StallWCause;
 | 
					  assign #1 StallW = StallWCause;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // detect the first stage that is not stalled
 | 
					  // detect the first stage that is not stalled
 | 
				
			||||||
  assign FirstUnstalledD = ~StallD & StallF;
 | 
					  assign LatestUnstalledD = ~StallD & StallF;
 | 
				
			||||||
  assign FirstUnstalledE = ~StallE & StallD;
 | 
					  assign LatestUnstalledE = ~StallE & StallD;
 | 
				
			||||||
  assign FirstUnstalledM = ~StallM & StallE;
 | 
					  assign LatestUnstalledM = ~StallM & StallE;
 | 
				
			||||||
  assign FirstUnstalledW = ~StallW & StallM;
 | 
					  assign LatestUnstalledW = ~StallW & StallM;
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  // Each stage flushes if the previous stage is the last one stalled (for cause) or the system has reason to flush
 | 
					  // Each stage flushes if the previous stage is the last one stalled (for cause) or the system has reason to flush
 | 
				
			||||||
  assign #1 FlushD = FirstUnstalledD | FlushDCause; 
 | 
					  assign #1 FlushD = LatestUnstalledD | FlushDCause; 
 | 
				
			||||||
  assign #1 FlushE = FirstUnstalledE | FlushECause;
 | 
					  assign #1 FlushE = LatestUnstalledE | FlushECause;
 | 
				
			||||||
  assign #1 FlushM = FirstUnstalledM | FlushMCause;
 | 
					  assign #1 FlushM = LatestUnstalledM | FlushMCause;
 | 
				
			||||||
  assign #1 FlushW = FirstUnstalledW | FlushWCause;
 | 
					  assign #1 FlushW = LatestUnstalledW | FlushWCause;
 | 
				
			||||||
endmodule
 | 
					endmodule
 | 
				
			||||||
 | 
				
			|||||||
@ -245,7 +245,7 @@ module ifu (
 | 
				
			|||||||
             .CacheWriteData('0),
 | 
					             .CacheWriteData('0),
 | 
				
			||||||
             .CacheRW(CacheRWF), 
 | 
					             .CacheRW(CacheRWF), 
 | 
				
			||||||
             .CacheAtomic('0), .FlushCache('0),
 | 
					             .CacheAtomic('0), .FlushCache('0),
 | 
				
			||||||
             .NextAdr(PCSpillNextF[11:0]),
 | 
					             .NextSet(PCSpillNextF[11:0]),
 | 
				
			||||||
             .PAdr(PCPF),
 | 
					             .PAdr(PCPF),
 | 
				
			||||||
             .CacheCommitted(CacheCommittedF), .InvalidateCache(InvalidateICacheM));
 | 
					             .CacheCommitted(CacheCommittedF), .InvalidateCache(InvalidateICacheM));
 | 
				
			||||||
      ahbcacheinterface #(WORDSPERLINE, LOGBWPL, LINELEN, LLENPOVERAHBW) 
 | 
					      ahbcacheinterface #(WORDSPERLINE, LOGBWPL, LINELEN, LLENPOVERAHBW) 
 | 
				
			||||||
 | 
				
			|||||||
@ -266,7 +266,7 @@ module lsu (
 | 
				
			|||||||
      cache #(.LINELEN(`DCACHE_LINELENINBITS), .NUMLINES(`DCACHE_WAYSIZEINBYTES*8/LINELEN),
 | 
					      cache #(.LINELEN(`DCACHE_LINELENINBITS), .NUMLINES(`DCACHE_WAYSIZEINBYTES*8/LINELEN),
 | 
				
			||||||
              .NUMWAYS(`DCACHE_NUMWAYS), .LOGBWPL(LLENLOGBWPL), .WORDLEN(`LLEN), .MUXINTERVAL(`LLEN), .READ_ONLY_CACHE(0)) dcache(
 | 
					              .NUMWAYS(`DCACHE_NUMWAYS), .LOGBWPL(LLENLOGBWPL), .WORDLEN(`LLEN), .MUXINTERVAL(`LLEN), .READ_ONLY_CACHE(0)) dcache(
 | 
				
			||||||
        .clk, .reset, .Stall(GatedStallW), .SelBusBeat, .FlushStage(FlushW), .CacheRW(CacheRWM), .CacheAtomic(CacheAtomicM),
 | 
					        .clk, .reset, .Stall(GatedStallW), .SelBusBeat, .FlushStage(FlushW), .CacheRW(CacheRWM), .CacheAtomic(CacheAtomicM),
 | 
				
			||||||
        .FlushCache(FlushDCache), .NextAdr(IEUAdrE[11:0]), .PAdr(PAdrM), 
 | 
					        .FlushCache(FlushDCache), .NextSet(IEUAdrE[11:0]), .PAdr(PAdrM), 
 | 
				
			||||||
        .ByteMask(ByteMaskM), .BeatCount(BeatCount[AHBWLOGBWPL-1:AHBWLOGBWPL-LLENLOGBWPL]),
 | 
					        .ByteMask(ByteMaskM), .BeatCount(BeatCount[AHBWLOGBWPL-1:AHBWLOGBWPL-LLENLOGBWPL]),
 | 
				
			||||||
        .CacheWriteData(LSUWriteDataM), .SelHPTW,
 | 
					        .CacheWriteData(LSUWriteDataM), .SelHPTW,
 | 
				
			||||||
        .CacheStall(DCacheStallM), .CacheMiss(DCacheMiss), .CacheAccess(DCacheAccess),
 | 
					        .CacheStall(DCacheStallM), .CacheMiss(DCacheMiss), .CacheAccess(DCacheAccess),
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user