mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Cleaned up some names in dcache and lsu.
This commit is contained in:
		
							parent
							
								
									bc6e776609
								
							
						
					
					
						commit
						995cfb1cf3
					
				
							
								
								
									
										258
									
								
								wally-pipelined/src/cache/dcache.sv
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										258
									
								
								wally-pipelined/src/cache/dcache.sv
									
									
									
									
										vendored
									
									
								
							@ -44,10 +44,10 @@ module dcache
 | 
				
			|||||||
   output logic 							DCacheStall,
 | 
					   output logic 							DCacheStall,
 | 
				
			||||||
   output logic 							DCacheMiss,
 | 
					   output logic 							DCacheMiss,
 | 
				
			||||||
   output logic 							DCacheAccess,
 | 
					   output logic 							DCacheAccess,
 | 
				
			||||||
   output logic 							DCCommittedM,
 | 
					   output logic 							DCacheCommittedM,
 | 
				
			||||||
   output logic 							DCWriteLine,
 | 
					   output logic 							DCacheWriteLine,
 | 
				
			||||||
   output logic 							DCFetchLine,
 | 
					   output logic 							DCacheFetchLine,
 | 
				
			||||||
   input logic 								BUSACK,
 | 
					   input logic 								DCacheBusAck,
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   output logic [`PA_BITS-1:0] 				DCacheBusAdr,
 | 
					   output logic [`PA_BITS-1:0] 				DCacheBusAdr,
 | 
				
			||||||
@ -64,119 +64,105 @@ module dcache
 | 
				
			|||||||
   input logic 								IgnoreRequest
 | 
					   input logic 								IgnoreRequest
 | 
				
			||||||
   );
 | 
					   );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  localparam integer	       BLOCKLEN = `DCACHE_BLOCKLENINBITS;
 | 
					  localparam integer 						BLOCKLEN = `DCACHE_BLOCKLENINBITS;
 | 
				
			||||||
  localparam integer	       NUMLINES = `DCACHE_WAYSIZEINBYTES*8/BLOCKLEN;
 | 
					  localparam integer 						NUMLINES = `DCACHE_WAYSIZEINBYTES*8/BLOCKLEN;
 | 
				
			||||||
  localparam integer	       NUMWAYS = `DCACHE_NUMWAYS;
 | 
					  localparam integer 						NUMWAYS = `DCACHE_NUMWAYS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  localparam integer	       BLOCKBYTELEN = BLOCKLEN/8;
 | 
					  localparam integer 						BLOCKBYTELEN = BLOCKLEN/8;
 | 
				
			||||||
  localparam integer	       OFFSETLEN = $clog2(BLOCKBYTELEN);
 | 
					  localparam integer 						OFFSETLEN = $clog2(BLOCKBYTELEN);
 | 
				
			||||||
  localparam integer	       INDEXLEN = $clog2(NUMLINES);
 | 
					  localparam integer 						INDEXLEN = $clog2(NUMLINES);
 | 
				
			||||||
  localparam integer	       TAGLEN = `PA_BITS - OFFSETLEN - INDEXLEN;
 | 
					  localparam integer 						TAGLEN = `PA_BITS - OFFSETLEN - INDEXLEN;
 | 
				
			||||||
  localparam integer	       WORDSPERLINE = BLOCKLEN/`XLEN;
 | 
					  localparam integer 						WORDSPERLINE = BLOCKLEN/`XLEN;
 | 
				
			||||||
  localparam integer	       LOGWPL = $clog2(WORDSPERLINE);
 | 
					  localparam integer 						LOGWPL = $clog2(WORDSPERLINE);
 | 
				
			||||||
  localparam integer 	       LOGXLENBYTES = $clog2(`XLEN/8);
 | 
					  localparam integer 						LOGXLENBYTES = $clog2(`XLEN/8);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  localparam integer FlushAdrThreshold   = NUMLINES - 1;
 | 
					  localparam integer 						FlushAdrThreshold   = NUMLINES - 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic [1:0] 		       SelAdrM;
 | 
					  logic [1:0] 								SelAdrM;
 | 
				
			||||||
  logic [INDEXLEN-1:0]	       RAdr;
 | 
					  logic [INDEXLEN-1:0] 						RAdr;
 | 
				
			||||||
  logic [INDEXLEN-1:0]	       WAdr;  
 | 
					  logic [BLOCKLEN-1:0] 						SRAMWriteData;
 | 
				
			||||||
  logic [BLOCKLEN-1:0]	       SRAMWriteData;
 | 
					  logic 									SetValid, ClearValid;
 | 
				
			||||||
  logic			       SetValid, ClearValid;
 | 
					  logic 									SetDirty, ClearDirty;
 | 
				
			||||||
  logic			       SetDirty, ClearDirty;
 | 
					  logic [BLOCKLEN-1:0] 						ReadDataBlockWayMaskedM [NUMWAYS-1:0];
 | 
				
			||||||
  logic [BLOCKLEN-1:0] 	       ReadDataBlockWayMaskedM [NUMWAYS-1:0];
 | 
					  logic [NUMWAYS-1:0] 						WayHit;
 | 
				
			||||||
  logic [NUMWAYS-1:0]	       WayHit;
 | 
					  logic 									CacheHit;
 | 
				
			||||||
  logic			       CacheHit;
 | 
					  logic [BLOCKLEN-1:0] 						ReadDataBlockM;
 | 
				
			||||||
  logic [BLOCKLEN-1:0]	       ReadDataBlockM;
 | 
					  logic [WORDSPERLINE-1:0] 					SRAMWordEnable;
 | 
				
			||||||
  logic [`XLEN-1:0]	       ReadDataWordMuxM;
 | 
					 | 
				
			||||||
  logic [WORDSPERLINE-1:0]     SRAMWordEnable;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic 		       SRAMWordWriteEnableM;
 | 
					  logic 									SRAMWordWriteEnableM;
 | 
				
			||||||
  logic 		       SRAMBlockWriteEnableM;
 | 
					  logic 									SRAMBlockWriteEnableM;
 | 
				
			||||||
  logic [NUMWAYS-1:0] 	       SRAMBlockWayWriteEnableM;
 | 
					  logic [NUMWAYS-1:0] 						SRAMBlockWayWriteEnableM;
 | 
				
			||||||
  //logic 		       SRAMWriteEnable;
 | 
					  logic [NUMWAYS-1:0] 						SRAMWayWriteEnable;
 | 
				
			||||||
  logic [NUMWAYS-1:0] 	       SRAMWayWriteEnable;
 | 
					 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic [NUMWAYS-1:0] 	       VictimWay;
 | 
					  logic [NUMWAYS-1:0] 						VictimWay;
 | 
				
			||||||
  logic [NUMWAYS-1:0] 	       VictimDirtyWay;
 | 
					  logic [NUMWAYS-1:0] 						VictimDirtyWay;
 | 
				
			||||||
  logic 		       VictimDirty;
 | 
					  logic 									VictimDirty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic [2**LOGWPL-1:0]	       MemPAdrDecodedW;
 | 
					  logic [2**LOGWPL-1:0] 					MemPAdrDecodedW;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic [TAGLEN-1:0] 	       VictimTagWay [NUMWAYS-1:0];
 | 
					  logic [TAGLEN-1:0] 						VictimTagWay [NUMWAYS-1:0];
 | 
				
			||||||
  logic [TAGLEN-1:0] 	       VictimTag;
 | 
					  logic [TAGLEN-1:0] 						VictimTag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic [INDEXLEN-1:0] 	       FlushAdr;
 | 
					  logic [INDEXLEN-1:0] 						FlushAdr;
 | 
				
			||||||
  logic [INDEXLEN-1:0] 	       FlushAdrP1;
 | 
					  logic [INDEXLEN-1:0] 						FlushAdrP1;
 | 
				
			||||||
  logic 		       FlushAdrCntEn;
 | 
					  logic 									FlushAdrCntEn;
 | 
				
			||||||
  logic 		       FlushAdrCntRst;
 | 
					  logic 									FlushAdrCntRst;
 | 
				
			||||||
  logic 		       FlushAdrFlag;
 | 
					  logic 									FlushAdrFlag;
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  logic [NUMWAYS-1:0] 	       FlushWay;
 | 
					  logic [NUMWAYS-1:0] 						FlushWay;
 | 
				
			||||||
  logic [NUMWAYS-1:0] 	       NextFlushWay;
 | 
					  logic [NUMWAYS-1:0] 						NextFlushWay;
 | 
				
			||||||
  logic 		       FlushWayCntEn;
 | 
					  logic 									FlushWayCntEn;
 | 
				
			||||||
  logic 		       FlushWayCntRst;  
 | 
					  logic 									FlushWayCntRst;  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic 		       VDWriteEnable;
 | 
					  logic 									VDWriteEnable;
 | 
				
			||||||
    
 | 
					  logic 									SelEvict;
 | 
				
			||||||
  logic SelEvict;
 | 
					  logic 									LRUWriteEn;
 | 
				
			||||||
 | 
					  logic [NUMWAYS-1:0] 						VDWriteEnableWay;
 | 
				
			||||||
  logic LRUWriteEn;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  logic [NUMWAYS-1:0] VDWriteEnableWay;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Read Path CPU (IEU) side
 | 
					  // Read Path CPU (IEU) side
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  mux3 #(INDEXLEN)
 | 
					  mux3 #(INDEXLEN)
 | 
				
			||||||
  AdrSelMux(.d0(MemAdrE[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
 | 
					  AdrSelMux(.d0(MemAdrE[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
 | 
				
			||||||
	    .d1(MemPAdrM[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
 | 
								.d1(MemPAdrM[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
 | 
				
			||||||
	    .d2(FlushAdr),
 | 
								.d2(FlushAdr),
 | 
				
			||||||
	    .s(SelAdrM),
 | 
								.s(SelAdrM),
 | 
				
			||||||
	    .y(RAdr));
 | 
								.y(RAdr));
 | 
				
			||||||
 | 
					 | 
				
			||||||
  mux2 #(INDEXLEN)
 | 
					 | 
				
			||||||
  WAdrSelMux(.d0(MemPAdrM[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
 | 
					 | 
				
			||||||
	     .d1(FlushAdr),
 | 
					 | 
				
			||||||
	     .s(&SelAdrM),
 | 
					 | 
				
			||||||
	     .y(WAdr));
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  cacheway #(.NUMLINES(NUMLINES), .BLOCKLEN(BLOCKLEN), .TAGLEN(TAGLEN), .OFFSETLEN(OFFSETLEN), .INDEXLEN(INDEXLEN))
 | 
					  cacheway #(.NUMLINES(NUMLINES), .BLOCKLEN(BLOCKLEN), .TAGLEN(TAGLEN), .OFFSETLEN(OFFSETLEN), .INDEXLEN(INDEXLEN))
 | 
				
			||||||
  MemWay[NUMWAYS-1:0](.clk,
 | 
					  MemWay[NUMWAYS-1:0](.clk,
 | 
				
			||||||
		      .reset,
 | 
										  .reset,
 | 
				
			||||||
		      .RAdr,
 | 
										  .RAdr,
 | 
				
			||||||
		      .WAdr,
 | 
										  .WAdr(RAdr),  // *** Reduce after addressing in icache also
 | 
				
			||||||
		      .PAdr(MemPAdrM),
 | 
										  .PAdr(MemPAdrM),
 | 
				
			||||||
		      .WriteEnable(SRAMWayWriteEnable),
 | 
										  .WriteEnable(SRAMWayWriteEnable),
 | 
				
			||||||
		      .VDWriteEnable(VDWriteEnableWay),
 | 
										  .VDWriteEnable(VDWriteEnableWay),
 | 
				
			||||||
		      .WriteWordEnable(SRAMWordEnable),
 | 
										  .WriteWordEnable(SRAMWordEnable),
 | 
				
			||||||
		      .TagWriteEnable(SRAMBlockWayWriteEnableM), 
 | 
										  .TagWriteEnable(SRAMBlockWayWriteEnableM), 
 | 
				
			||||||
		      .WriteData(SRAMWriteData),
 | 
										  .WriteData(SRAMWriteData),
 | 
				
			||||||
		      .SetValid,
 | 
										  .SetValid,
 | 
				
			||||||
		      .ClearValid,
 | 
										  .ClearValid,
 | 
				
			||||||
		      .SetDirty,
 | 
										  .SetDirty,
 | 
				
			||||||
		      .ClearDirty,
 | 
										  .ClearDirty,
 | 
				
			||||||
		      .SelEvict,
 | 
										  .SelEvict,
 | 
				
			||||||
		      .VictimWay,
 | 
										  .VictimWay,
 | 
				
			||||||
		      .FlushWay,
 | 
										  .FlushWay,
 | 
				
			||||||
		      .SelFlush,
 | 
										  .SelFlush,
 | 
				
			||||||
		      .ReadDataBlockWayMasked(ReadDataBlockWayMaskedM),
 | 
										  .ReadDataBlockWayMasked(ReadDataBlockWayMaskedM),
 | 
				
			||||||
		      .WayHit,
 | 
										  .WayHit,
 | 
				
			||||||
		      .VictimDirtyWay,
 | 
										  .VictimDirtyWay,
 | 
				
			||||||
		      .VictimTagWay,
 | 
										  .VictimTagWay,
 | 
				
			||||||
		      .InvalidateAll(1'b0));
 | 
										  .InvalidateAll(1'b0));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  generate
 | 
					  generate
 | 
				
			||||||
    if(NUMWAYS > 1) begin
 | 
					    if(NUMWAYS > 1) begin
 | 
				
			||||||
      cachereplacementpolicy #(NUMWAYS, INDEXLEN, OFFSETLEN, NUMLINES)
 | 
					      cachereplacementpolicy #(NUMWAYS, INDEXLEN, OFFSETLEN, NUMLINES)
 | 
				
			||||||
      cachereplacementpolicy(.clk, .reset,
 | 
					      cachereplacementpolicy(.clk, .reset,
 | 
				
			||||||
			     .WayHit,
 | 
												 .WayHit,
 | 
				
			||||||
			     .VictimWay,
 | 
												 .VictimWay,
 | 
				
			||||||
			     .MemPAdrM(MemPAdrM[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
 | 
												 .MemPAdrM(MemPAdrM[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
 | 
				
			||||||
			     .RAdr,
 | 
												 .RAdr,
 | 
				
			||||||
			     .LRUWriteEn);
 | 
												 .LRUWriteEn);
 | 
				
			||||||
    end else begin
 | 
					    end else begin
 | 
				
			||||||
      assign VictimWay = 1'b1; // one hot.
 | 
					      assign VictimWay = 1'b1; // one hot.
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
@ -207,54 +193,53 @@ module dcache
 | 
				
			|||||||
  
 | 
					  
 | 
				
			||||||
  assign ReadDataWordM = ReadDataBlockSetsM[MemPAdrM[$clog2(WORDSPERLINE+`XLEN/8) : $clog2(`XLEN/8)]];
 | 
					  assign ReadDataWordM = ReadDataBlockSetsM[MemPAdrM[$clog2(WORDSPERLINE+`XLEN/8) : $clog2(`XLEN/8)]];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Write Path CPU (IEU) side
 | 
					  // Write Path CPU (IEU) side
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onehotdecoder #(LOGWPL)
 | 
					  onehotdecoder #(LOGWPL)
 | 
				
			||||||
  adrdec(.bin(MemPAdrM[LOGWPL+LOGXLENBYTES-1:LOGXLENBYTES]),
 | 
					  adrdec(.bin(MemPAdrM[LOGWPL+LOGXLENBYTES-1:LOGXLENBYTES]),
 | 
				
			||||||
		.decoded(MemPAdrDecodedW));
 | 
							 .decoded(MemPAdrDecodedW));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  assign SRAMWordEnable = SRAMBlockWriteEnableM ? '1 : MemPAdrDecodedW;
 | 
					  assign SRAMWordEnable = SRAMBlockWriteEnableM ? '1 : MemPAdrDecodedW;
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  assign SRAMBlockWayWriteEnableM = SRAMBlockWriteEnableM ? VictimWay : '0;
 | 
					  assign SRAMBlockWayWriteEnableM = SRAMBlockWriteEnableM ? VictimWay : '0;
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  mux2 #(NUMWAYS) WriteEnableMux(.d0(SRAMWordWriteEnableM ? WayHit : '0),
 | 
					  mux2 #(NUMWAYS) WriteEnableMux(.d0(SRAMWordWriteEnableM ? WayHit : '0),
 | 
				
			||||||
				 .d1(SRAMBlockWayWriteEnableM),
 | 
													 .d1(SRAMBlockWayWriteEnableM),
 | 
				
			||||||
				 .s(SRAMBlockWriteEnableM),
 | 
													 .s(SRAMBlockWriteEnableM),
 | 
				
			||||||
				 .y(SRAMWayWriteEnable));
 | 
													 .y(SRAMWayWriteEnable));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  mux2 #(BLOCKLEN) WriteDataMux(.d0({WORDSPERLINE{FinalWriteDataM}}),
 | 
					  mux2 #(BLOCKLEN) WriteDataMux(.d0({WORDSPERLINE{FinalWriteDataM}}),
 | 
				
			||||||
				.d1(DCacheMemWriteData),
 | 
													.d1(DCacheMemWriteData),
 | 
				
			||||||
				.s(SRAMBlockWriteEnableM),
 | 
													.s(SRAMBlockWriteEnableM),
 | 
				
			||||||
				.y(SRAMWriteData));
 | 
													.y(SRAMWriteData));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  mux3 #(`PA_BITS) BaseAdrMux(.d0({MemPAdrM[`PA_BITS-1:OFFSETLEN], {{OFFSETLEN}{1'b0}}}),
 | 
					  mux3 #(`PA_BITS) BaseAdrMux(.d0({MemPAdrM[`PA_BITS-1:OFFSETLEN], {{OFFSETLEN}{1'b0}}}),
 | 
				
			||||||
			      .d1({VictimTag, MemPAdrM[INDEXLEN+OFFSETLEN-1:OFFSETLEN], {{OFFSETLEN}{1'b0}}}),
 | 
												  .d1({VictimTag, MemPAdrM[INDEXLEN+OFFSETLEN-1:OFFSETLEN], {{OFFSETLEN}{1'b0}}}),
 | 
				
			||||||
			      .d2({VictimTag, FlushAdr, {{OFFSETLEN}{1'b0}}}),
 | 
												  .d2({VictimTag, FlushAdr, {{OFFSETLEN}{1'b0}}}),
 | 
				
			||||||
			      .s({SelFlush, SelEvict}),
 | 
												  .s({SelFlush, SelEvict}),
 | 
				
			||||||
			      .y(DCacheBusAdr));
 | 
												  .y(DCacheBusAdr));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // flush address and way generation.
 | 
					  // flush address and way generation.
 | 
				
			||||||
  flopenr #(INDEXLEN)
 | 
					  flopenr #(INDEXLEN)
 | 
				
			||||||
  FlushAdrReg(.clk,
 | 
					  FlushAdrReg(.clk,
 | 
				
			||||||
	      .reset(reset | FlushAdrCntRst),
 | 
								  .reset(reset | FlushAdrCntRst),
 | 
				
			||||||
	      .en(FlushAdrCntEn & FlushWay[NUMWAYS-1]),
 | 
								  .en(FlushAdrCntEn & FlushWay[NUMWAYS-1]),
 | 
				
			||||||
	      .d(FlushAdrP1),
 | 
								  .d(FlushAdrP1),
 | 
				
			||||||
	      .q(FlushAdr));
 | 
								  .q(FlushAdr));
 | 
				
			||||||
  assign FlushAdrP1 = FlushAdr + 1'b1;
 | 
					  assign FlushAdrP1 = FlushAdr + 1'b1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  flopenl #(NUMWAYS)
 | 
					  flopenl #(NUMWAYS)
 | 
				
			||||||
  FlushWayReg(.clk,
 | 
					  FlushWayReg(.clk,
 | 
				
			||||||
	      .load(reset | FlushWayCntRst),
 | 
								  .load(reset | FlushWayCntRst),
 | 
				
			||||||
	      .en(FlushWayCntEn),
 | 
								  .en(FlushWayCntEn),
 | 
				
			||||||
	      .val({{NUMWAYS-1{1'b0}}, 1'b1}),
 | 
								  .val({{NUMWAYS-1{1'b0}}, 1'b1}),
 | 
				
			||||||
	      .d(NextFlushWay),
 | 
								  .d(NextFlushWay),
 | 
				
			||||||
	      .q(FlushWay));
 | 
								  .q(FlushWay));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  assign VDWriteEnableWay = FlushWay & {NUMWAYS{VDWriteEnable}};
 | 
					  assign VDWriteEnableWay = FlushWay & {NUMWAYS{VDWriteEnable}};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -262,44 +247,17 @@ module dcache
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  assign FlushAdrFlag = FlushAdr == FlushAdrThreshold[INDEXLEN-1:0] & FlushWay[NUMWAYS-1];
 | 
					  assign FlushAdrFlag = FlushAdr == FlushAdrThreshold[INDEXLEN-1:0] & FlushWay[NUMWAYS-1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
  //assign SRAMWriteEnable = SRAMBlockWriteEnableM | SRAMWordWriteEnableM;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // controller
 | 
					  // controller
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  dcachefsm dcachefsm(.clk,
 | 
					  dcachefsm dcachefsm(.clk, .reset, .DCacheFetchLine, .DCacheWriteLine, .DCacheBusAck, 
 | 
				
			||||||
 		      .reset,
 | 
										  .MemRWM, .AtomicM, .CPUBusy, .CacheableM, .IgnoreRequest,
 | 
				
			||||||
					  .DCFetchLine,
 | 
					 					  .CacheHit, .VictimDirty, .DCacheStall, .DCacheCommittedM, 
 | 
				
			||||||
					  .DCWriteLine,
 | 
										  .DCacheMiss, .DCacheAccess, .SelAdrM, .SetValid, 
 | 
				
			||||||
					  .BUSACK,
 | 
										  .ClearValid, .SetDirty, .ClearDirty, .SRAMWordWriteEnableM,
 | 
				
			||||||
		      .MemRWM,
 | 
										  .SRAMBlockWriteEnableM, .SelEvict, .SelFlush,
 | 
				
			||||||
		      .AtomicM,
 | 
										  .FlushAdrCntEn, .FlushWayCntEn, .FlushAdrCntRst,
 | 
				
			||||||
 		      .CPUBusy,
 | 
										  .FlushWayCntRst, .FlushAdrFlag, .FlushDCacheM, 
 | 
				
			||||||
 		      .CacheableM,
 | 
										  .VDWriteEnable, .LRUWriteEn);
 | 
				
			||||||
			  .IgnoreRequest,
 | 
					 | 
				
			||||||
 		      .CacheHit,
 | 
					 | 
				
			||||||
 		      .VictimDirty,
 | 
					 | 
				
			||||||
		      .DCacheStall,
 | 
					 | 
				
			||||||
					 .DCCommittedM, 
 | 
					 | 
				
			||||||
		      .DCacheMiss,
 | 
					 | 
				
			||||||
		      .DCacheAccess,
 | 
					 | 
				
			||||||
		      .SelAdrM,
 | 
					 | 
				
			||||||
		      .SetValid,
 | 
					 | 
				
			||||||
		      .ClearValid,
 | 
					 | 
				
			||||||
		      .SetDirty,
 | 
					 | 
				
			||||||
		      .ClearDirty,
 | 
					 | 
				
			||||||
		      .SRAMWordWriteEnableM,
 | 
					 | 
				
			||||||
		      .SRAMBlockWriteEnableM,
 | 
					 | 
				
			||||||
		      .SelEvict,
 | 
					 | 
				
			||||||
		      .SelFlush,
 | 
					 | 
				
			||||||
		      .FlushAdrCntEn,
 | 
					 | 
				
			||||||
		      .FlushWayCntEn,
 | 
					 | 
				
			||||||
		      .FlushAdrCntRst,
 | 
					 | 
				
			||||||
		      .FlushWayCntRst,		      
 | 
					 | 
				
			||||||
		      .FlushAdrFlag,
 | 
					 | 
				
			||||||
		      .FlushDCacheM,
 | 
					 | 
				
			||||||
		      .VDWriteEnable,
 | 
					 | 
				
			||||||
		      .LRUWriteEn);
 | 
					 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endmodule // dcache
 | 
					endmodule // dcache
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										26
									
								
								wally-pipelined/src/cache/dcachefsm.sv
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								wally-pipelined/src/cache/dcachefsm.sv
									
									
									
									
										vendored
									
									
								
							@ -38,7 +38,7 @@ module dcachefsm
 | 
				
			|||||||
   // hptw inputs
 | 
					   // hptw inputs
 | 
				
			||||||
   input logic 		  IgnoreRequest,
 | 
					   input logic 		  IgnoreRequest,
 | 
				
			||||||
   // Bus inputs
 | 
					   // Bus inputs
 | 
				
			||||||
   input logic 		  BUSACK,
 | 
					   input logic 		  DCacheBusAck,
 | 
				
			||||||
   // dcache internals
 | 
					   // dcache internals
 | 
				
			||||||
   input logic 		  CacheHit,
 | 
					   input logic 		  CacheHit,
 | 
				
			||||||
   input logic 		  VictimDirty,
 | 
					   input logic 		  VictimDirty,
 | 
				
			||||||
@ -50,9 +50,9 @@ module dcachefsm
 | 
				
			|||||||
   output logic 	  DCacheMiss,
 | 
					   output logic 	  DCacheMiss,
 | 
				
			||||||
   output logic 	  DCacheAccess,
 | 
					   output logic 	  DCacheAccess,
 | 
				
			||||||
   // Bus outputs
 | 
					   // Bus outputs
 | 
				
			||||||
   output logic       DCCommittedM,
 | 
					   output logic       DCacheCommittedM,
 | 
				
			||||||
   output logic 	  DCWriteLine,
 | 
					   output logic 	  DCacheWriteLine,
 | 
				
			||||||
   output logic 	  DCFetchLine,
 | 
					   output logic 	  DCacheFetchLine,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   // dcache internals
 | 
					   // dcache internals
 | 
				
			||||||
   output logic [1:0] SelAdrM,
 | 
					   output logic [1:0] SelAdrM,
 | 
				
			||||||
@ -123,8 +123,8 @@ module dcachefsm
 | 
				
			|||||||
    FlushWayCntRst = 1'b0;	
 | 
					    FlushWayCntRst = 1'b0;	
 | 
				
			||||||
    VDWriteEnable = 1'b0;
 | 
					    VDWriteEnable = 1'b0;
 | 
				
			||||||
    NextState = STATE_READY;
 | 
					    NextState = STATE_READY;
 | 
				
			||||||
	DCFetchLine = 1'b0;
 | 
						DCacheFetchLine = 1'b0;
 | 
				
			||||||
	DCWriteLine = 1'b0;
 | 
						DCacheWriteLine = 1'b0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case (CurrState)
 | 
					    case (CurrState)
 | 
				
			||||||
      STATE_READY: begin
 | 
					      STATE_READY: begin
 | 
				
			||||||
@ -204,7 +204,7 @@ module dcachefsm
 | 
				
			|||||||
		else if((|MemRWM) & CacheableM & ~CacheHit) begin
 | 
							else if((|MemRWM) & CacheableM & ~CacheHit) begin
 | 
				
			||||||
		  NextState = STATE_MISS_FETCH_WDV;
 | 
							  NextState = STATE_MISS_FETCH_WDV;
 | 
				
			||||||
		  DCacheStall = 1'b1;
 | 
							  DCacheStall = 1'b1;
 | 
				
			||||||
		  DCFetchLine = 1'b1;
 | 
							  DCacheFetchLine = 1'b1;
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		else NextState = STATE_READY;
 | 
							else NextState = STATE_READY;
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
@ -213,7 +213,7 @@ module dcachefsm
 | 
				
			|||||||
		DCacheStall = 1'b1;
 | 
							DCacheStall = 1'b1;
 | 
				
			||||||
		SelAdrM = 2'b01;
 | 
							SelAdrM = 2'b01;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		if (BUSACK) begin
 | 
							if (DCacheBusAck) begin
 | 
				
			||||||
          NextState = STATE_MISS_FETCH_DONE;
 | 
					          NextState = STATE_MISS_FETCH_DONE;
 | 
				
			||||||
        end else begin
 | 
					        end else begin
 | 
				
			||||||
          NextState = STATE_MISS_FETCH_WDV;
 | 
					          NextState = STATE_MISS_FETCH_WDV;
 | 
				
			||||||
@ -225,7 +225,7 @@ module dcachefsm
 | 
				
			|||||||
		SelAdrM = 2'b01;
 | 
							SelAdrM = 2'b01;
 | 
				
			||||||
		if(VictimDirty) begin
 | 
							if(VictimDirty) begin
 | 
				
			||||||
		  NextState = STATE_MISS_EVICT_DIRTY;
 | 
							  NextState = STATE_MISS_EVICT_DIRTY;
 | 
				
			||||||
		  DCWriteLine = 1'b1;
 | 
							  DCacheWriteLine = 1'b1;
 | 
				
			||||||
		end else begin
 | 
							end else begin
 | 
				
			||||||
		  NextState = STATE_MISS_WRITE_CACHE_BLOCK;
 | 
							  NextState = STATE_MISS_WRITE_CACHE_BLOCK;
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
@ -299,7 +299,7 @@ module dcachefsm
 | 
				
			|||||||
		DCacheStall = 1'b1;
 | 
							DCacheStall = 1'b1;
 | 
				
			||||||
		SelAdrM = 2'b01;
 | 
							SelAdrM = 2'b01;
 | 
				
			||||||
		SelEvict = 1'b1;
 | 
							SelEvict = 1'b1;
 | 
				
			||||||
		if(BUSACK) begin
 | 
							if(DCacheBusAck) begin
 | 
				
			||||||
		  NextState = STATE_MISS_WRITE_CACHE_BLOCK;
 | 
							  NextState = STATE_MISS_WRITE_CACHE_BLOCK;
 | 
				
			||||||
		end else begin
 | 
							end else begin
 | 
				
			||||||
		  NextState = STATE_MISS_EVICT_DIRTY;
 | 
							  NextState = STATE_MISS_EVICT_DIRTY;
 | 
				
			||||||
@ -344,7 +344,7 @@ module dcachefsm
 | 
				
			|||||||
		  NextState = STATE_FLUSH_WRITE_BACK;
 | 
							  NextState = STATE_FLUSH_WRITE_BACK;
 | 
				
			||||||
		  FlushAdrCntEn = 1'b0;
 | 
							  FlushAdrCntEn = 1'b0;
 | 
				
			||||||
		  FlushWayCntEn = 1'b0;
 | 
							  FlushWayCntEn = 1'b0;
 | 
				
			||||||
		  DCWriteLine = 1'b1;
 | 
							  DCacheWriteLine = 1'b1;
 | 
				
			||||||
		end else if (FlushAdrFlag) begin
 | 
							end else if (FlushAdrFlag) begin
 | 
				
			||||||
		  NextState = STATE_READY;
 | 
							  NextState = STATE_READY;
 | 
				
			||||||
		  DCacheStall = 1'b0;
 | 
							  DCacheStall = 1'b0;
 | 
				
			||||||
@ -359,7 +359,7 @@ module dcachefsm
 | 
				
			|||||||
		DCacheStall = 1'b1;
 | 
							DCacheStall = 1'b1;
 | 
				
			||||||
		SelAdrM = 2'b10;
 | 
							SelAdrM = 2'b10;
 | 
				
			||||||
		SelFlush = 1'b1;
 | 
							SelFlush = 1'b1;
 | 
				
			||||||
		if(BUSACK) begin
 | 
							if(DCacheBusAck) begin
 | 
				
			||||||
		  NextState = STATE_FLUSH_CLEAR_DIRTY;
 | 
							  NextState = STATE_FLUSH_CLEAR_DIRTY;
 | 
				
			||||||
		end else begin
 | 
							end else begin
 | 
				
			||||||
		  NextState = STATE_FLUSH_WRITE_BACK;
 | 
							  NextState = STATE_FLUSH_WRITE_BACK;
 | 
				
			||||||
@ -391,7 +391,7 @@ module dcachefsm
 | 
				
			|||||||
    endcase
 | 
					    endcase
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  assign DCCommittedM = CurrState != STATE_READY;
 | 
					  assign DCacheCommittedM = CurrState != STATE_READY;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endmodule // dcachefsm
 | 
					endmodule // dcachefsm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -32,7 +32,7 @@ module lrsc
 | 
				
			|||||||
    input  logic                FlushW, CPUBusy,
 | 
					    input  logic                FlushW, CPUBusy,
 | 
				
			||||||
    input  logic                MemReadM,
 | 
					    input  logic                MemReadM,
 | 
				
			||||||
    input  logic [1:0]          LsuRWM,
 | 
					    input  logic [1:0]          LsuRWM,
 | 
				
			||||||
    output logic [1:0]          DCRWM,
 | 
					    output logic [1:0]          DCacheRWM,
 | 
				
			||||||
    input  logic [1:0] 	        LsuAtomicM,
 | 
					    input  logic [1:0] 	        LsuAtomicM,
 | 
				
			||||||
    input  logic [`PA_BITS-1:0] MemPAdrM,  // from mmu to dcache
 | 
					    input  logic [`PA_BITS-1:0] MemPAdrM,  // from mmu to dcache
 | 
				
			||||||
    output logic                SquashSCW
 | 
					    output logic                SquashSCW
 | 
				
			||||||
@ -47,7 +47,7 @@ module lrsc
 | 
				
			|||||||
  assign scM = LsuRWM[0] && LsuAtomicM[0]; 
 | 
					  assign scM = LsuRWM[0] && LsuAtomicM[0]; 
 | 
				
			||||||
  assign WriteAdrMatchM = LsuRWM[0] && (MemPAdrM[`PA_BITS-1:2] == ReservationPAdrW) && ReservationValidW;
 | 
					  assign WriteAdrMatchM = LsuRWM[0] && (MemPAdrM[`PA_BITS-1:2] == ReservationPAdrW) && ReservationValidW;
 | 
				
			||||||
  assign SquashSCM = scM && ~WriteAdrMatchM;
 | 
					  assign SquashSCM = scM && ~WriteAdrMatchM;
 | 
				
			||||||
  assign DCRWM = SquashSCM ? 2'b00 : LsuRWM;
 | 
					  assign DCacheRWM = SquashSCM ? 2'b00 : LsuRWM;
 | 
				
			||||||
  always_comb begin // ReservationValidM (next value of valid reservation)
 | 
					  always_comb begin // ReservationValidM (next value of valid reservation)
 | 
				
			||||||
    if (lrM) ReservationValidM = 1;  // set valid on load reserve
 | 
					    if (lrM) ReservationValidM = 1;  // set valid on load reserve
 | 
				
			||||||
    else if (scM || WriteAdrMatchM) ReservationValidM = 0; // clear valid on store to same address or any sc
 | 
					    else if (scM || WriteAdrMatchM) ReservationValidM = 0; // clear valid on store to same address or any sc
 | 
				
			||||||
 | 
				
			|||||||
@ -95,12 +95,12 @@ module lsu
 | 
				
			|||||||
  logic 					   DTLBMissM;
 | 
					  logic 					   DTLBMissM;
 | 
				
			||||||
  logic 					   DTLBWriteM;
 | 
					  logic 					   DTLBWriteM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic [1:0] 				   DCRWM;
 | 
					  logic [1:0] 				   DCacheRWM;
 | 
				
			||||||
  logic [1:0] 				   LsuRWM;
 | 
					  logic [1:0] 				   LsuRWM;
 | 
				
			||||||
  logic [2:0] 				   LsuFunct3M;
 | 
					  logic [2:0] 				   LsuFunct3M;
 | 
				
			||||||
  logic [1:0] 				   LsuAtomicM;
 | 
					  logic [1:0] 				   LsuAtomicM;
 | 
				
			||||||
  logic [`PA_BITS-1:0] 		   LsuPAdrM, LocalLsuBusAdr;
 | 
					  logic [`PA_BITS-1:0] 		   LsuPAdrM, LocalLsuBusAdr;
 | 
				
			||||||
  logic [11:0] 				   LsuAdrE, DCAdrE;  
 | 
					  logic [11:0] 				   LsuAdrE, DCacheAdrE;  
 | 
				
			||||||
  logic 					   CPUBusy;
 | 
					  logic 					   CPUBusy;
 | 
				
			||||||
  logic 					   MemReadM;
 | 
					  logic 					   MemReadM;
 | 
				
			||||||
  logic 					   DataMisalignedM;
 | 
					  logic 					   DataMisalignedM;
 | 
				
			||||||
@ -115,7 +115,7 @@ module lsu
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  logic 					   InterlockStall;
 | 
					  logic 					   InterlockStall;
 | 
				
			||||||
  logic 					   IgnoreRequest;
 | 
					  logic 					   IgnoreRequest;
 | 
				
			||||||
  logic 					   BusCommittedM, DCCommittedM;
 | 
					  logic 					   BusCommittedM, DCacheCommittedM;
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  flopenrc #(`XLEN) AddressMReg(clk, reset, FlushM, ~StallM, IEUAdrE, IEUAdrM);
 | 
					  flopenrc #(`XLEN) AddressMReg(clk, reset, FlushM, ~StallM, IEUAdrE, IEUAdrM);
 | 
				
			||||||
@ -236,13 +236,13 @@ module lsu
 | 
				
			|||||||
	  assign DTLBLoadPageFaultM = DTLBPageFaultM & LsuRWM[1];
 | 
						  assign DTLBLoadPageFaultM = DTLBPageFaultM & LsuRWM[1];
 | 
				
			||||||
	  assign DTLBStorePageFaultM = DTLBPageFaultM & LsuRWM[0];
 | 
						  assign DTLBStorePageFaultM = DTLBPageFaultM & LsuRWM[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	  assign DCAdrE = SelReplayCPURequest ? IEUAdrM[11:0] : LsuAdrE;
 | 
						  assign DCacheAdrE = SelReplayCPURequest ? IEUAdrM[11:0] : LsuAdrE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	end // if (`MEM_VIRTMEM)
 | 
						end // if (`MEM_VIRTMEM)
 | 
				
			||||||
	else begin
 | 
						else begin
 | 
				
			||||||
	  assign InterlockStall = 1'b0;
 | 
						  assign InterlockStall = 1'b0;
 | 
				
			||||||
	  
 | 
						  
 | 
				
			||||||
	  assign DCAdrE = LsuAdrE;
 | 
						  assign DCacheAdrE = LsuAdrE;
 | 
				
			||||||
	  assign SelHPTW = 1'b0;
 | 
						  assign SelHPTW = 1'b0;
 | 
				
			||||||
	  assign IgnoreRequest = 1'b0;
 | 
						  assign IgnoreRequest = 1'b0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -263,7 +263,7 @@ module lsu
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
  endgenerate
 | 
					  endgenerate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  assign CommittedM = SelHPTW | DCCommittedM | BusCommittedM;
 | 
					  assign CommittedM = SelHPTW | DCacheCommittedM | BusCommittedM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  mmu #(.TLB_ENTRIES(`DTLB_ENTRIES), .IMMU(0))
 | 
					  mmu #(.TLB_ENTRIES(`DTLB_ENTRIES), .IMMU(0))
 | 
				
			||||||
  dmmu(.clk, .reset, .SATP_REGW, .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP,
 | 
					  dmmu(.clk, .reset, .SATP_REGW, .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP,
 | 
				
			||||||
@ -299,10 +299,10 @@ module lsu
 | 
				
			|||||||
	if (`A_SUPPORTED) begin
 | 
						if (`A_SUPPORTED) begin
 | 
				
			||||||
	  assign MemReadM = LsuRWM[1] & ~(IgnoreRequest) & ~DTLBMissM;
 | 
						  assign MemReadM = LsuRWM[1] & ~(IgnoreRequest) & ~DTLBMissM;
 | 
				
			||||||
	  lrsc lrsc(.clk, .reset, .FlushW, .CPUBusy, .MemReadM, .LsuRWM, .LsuAtomicM, .MemPAdrM,
 | 
						  lrsc lrsc(.clk, .reset, .FlushW, .CPUBusy, .MemReadM, .LsuRWM, .LsuAtomicM, .MemPAdrM,
 | 
				
			||||||
				.SquashSCW, .DCRWM);
 | 
									.SquashSCW, .DCacheRWM);
 | 
				
			||||||
	end else begin
 | 
						end else begin
 | 
				
			||||||
      assign SquashSCW = 0;
 | 
					      assign SquashSCW = 0;
 | 
				
			||||||
      assign DCRWM = LsuRWM;
 | 
					      assign DCacheRWM = LsuRWM;
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
  endgenerate
 | 
					  endgenerate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -355,9 +355,9 @@ module lsu
 | 
				
			|||||||
  
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic 			   DCWriteLine;
 | 
					  logic 			   DCacheWriteLine;
 | 
				
			||||||
  logic 			   DCFetchLine;
 | 
					  logic 			   DCacheFetchLine;
 | 
				
			||||||
  logic 			   BUSACK;
 | 
					  logic 			   DCacheBusAck;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic 			   UnCachedLsuBusRead;
 | 
					  logic 			   UnCachedLsuBusRead;
 | 
				
			||||||
  logic 			   UnCachedLsuBusWrite;
 | 
					  logic 			   UnCachedLsuBusWrite;
 | 
				
			||||||
@ -365,23 +365,23 @@ module lsu
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  dcache dcache(.clk, .reset, .CPUBusy,
 | 
					  dcache dcache(.clk, .reset, .CPUBusy,
 | 
				
			||||||
				.MemRWM(DCRWM),
 | 
									.MemRWM(DCacheRWM),
 | 
				
			||||||
				.Funct3M(LsuFunct3M),
 | 
									.Funct3M(LsuFunct3M),
 | 
				
			||||||
				.Funct7M, .FlushDCacheM,
 | 
									.Funct7M, .FlushDCacheM,
 | 
				
			||||||
				.AtomicM(LsuAtomicM),
 | 
									.AtomicM(LsuAtomicM),
 | 
				
			||||||
				.MemAdrE(DCAdrE),
 | 
									.MemAdrE(DCacheAdrE),
 | 
				
			||||||
				.MemPAdrM,
 | 
									.MemPAdrM,
 | 
				
			||||||
				.FinalWriteDataM, .ReadDataWordM, .DCacheStall,
 | 
									.FinalWriteDataM, .ReadDataWordM, .DCacheStall,
 | 
				
			||||||
				.DCacheMiss, .DCacheAccess, .IgnoreRequest,
 | 
									.DCacheMiss, .DCacheAccess, .IgnoreRequest,
 | 
				
			||||||
				.CacheableM(CacheableM), 
 | 
									.CacheableM(CacheableM), 
 | 
				
			||||||
				.DCCommittedM,
 | 
									.DCacheCommittedM,
 | 
				
			||||||
				.DCacheBusAdr,
 | 
									.DCacheBusAdr,
 | 
				
			||||||
				.ReadDataBlockSetsM,
 | 
									.ReadDataBlockSetsM,
 | 
				
			||||||
				.SelFlush,
 | 
									.SelFlush,
 | 
				
			||||||
				.DCacheMemWriteData,
 | 
									.DCacheMemWriteData,
 | 
				
			||||||
				.DCFetchLine,
 | 
									.DCacheFetchLine,
 | 
				
			||||||
				.DCWriteLine,
 | 
									.DCacheWriteLine,
 | 
				
			||||||
				.BUSACK
 | 
									.DCacheBusAck
 | 
				
			||||||
				);
 | 
									);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -475,10 +475,10 @@ module lsu
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	case(BusCurrState)
 | 
						case(BusCurrState)
 | 
				
			||||||
	  STATE_BUS_READY:           if(IgnoreRequest)               BusNextState = STATE_BUS_READY;
 | 
						  STATE_BUS_READY:           if(IgnoreRequest)               BusNextState = STATE_BUS_READY;
 | 
				
			||||||
	                             else if(DCRWM[0] & ~CacheableM) BusNextState = STATE_BUS_UNCACHED_WRITE;
 | 
						                             else if(DCacheRWM[0] & ~CacheableM) BusNextState = STATE_BUS_UNCACHED_WRITE;
 | 
				
			||||||
		                         else if(DCRWM[1] & ~CacheableM) BusNextState = STATE_BUS_UNCACHED_READ;
 | 
							                         else if(DCacheRWM[1] & ~CacheableM) BusNextState = STATE_BUS_UNCACHED_READ;
 | 
				
			||||||
		                         else if(DCFetchLine)            BusNextState = STATE_BUS_FETCH;
 | 
							                         else if(DCacheFetchLine)            BusNextState = STATE_BUS_FETCH;
 | 
				
			||||||
		                         else if(DCWriteLine)            BusNextState = STATE_BUS_WRITE;
 | 
							                         else if(DCacheWriteLine)            BusNextState = STATE_BUS_WRITE;
 | 
				
			||||||
      STATE_BUS_UNCACHED_WRITE:  if(LsuBusAck)                   BusNextState = STATE_BUS_UNCACHED_WRITE_DONE;
 | 
					      STATE_BUS_UNCACHED_WRITE:  if(LsuBusAck)                   BusNextState = STATE_BUS_UNCACHED_WRITE_DONE;
 | 
				
			||||||
		                         else                            BusNextState = STATE_BUS_UNCACHED_WRITE;
 | 
							                         else                            BusNextState = STATE_BUS_UNCACHED_WRITE;
 | 
				
			||||||
      STATE_BUS_UNCACHED_READ:   if(LsuBusAck)                   BusNextState = STATE_BUS_UNCACHED_READ_DONE;
 | 
					      STATE_BUS_UNCACHED_READ:   if(LsuBusAck)                   BusNextState = STATE_BUS_UNCACHED_READ_DONE;
 | 
				
			||||||
@ -498,24 +498,24 @@ module lsu
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  assign CntReset = BusCurrState == STATE_BUS_READY;
 | 
					  assign CntReset = BusCurrState == STATE_BUS_READY;
 | 
				
			||||||
  assign BusStall = (BusCurrState == STATE_BUS_READY & ~IgnoreRequest & ((~CacheableM & (|DCRWM)) | DCFetchLine | DCWriteLine)) |
 | 
					  assign BusStall = (BusCurrState == STATE_BUS_READY & ~IgnoreRequest & ((~CacheableM & (|DCacheRWM)) | DCacheFetchLine | DCacheWriteLine)) |
 | 
				
			||||||
					(BusCurrState == STATE_BUS_UNCACHED_WRITE) |
 | 
										(BusCurrState == STATE_BUS_UNCACHED_WRITE) |
 | 
				
			||||||
					(BusCurrState == STATE_BUS_UNCACHED_READ) |
 | 
										(BusCurrState == STATE_BUS_UNCACHED_READ) |
 | 
				
			||||||
					(BusCurrState == STATE_BUS_FETCH)  |
 | 
										(BusCurrState == STATE_BUS_FETCH)  |
 | 
				
			||||||
					(BusCurrState == STATE_BUS_WRITE);
 | 
										(BusCurrState == STATE_BUS_WRITE);
 | 
				
			||||||
  assign PreCntEn = BusCurrState == STATE_BUS_FETCH | BusCurrState == STATE_BUS_WRITE;
 | 
					  assign PreCntEn = BusCurrState == STATE_BUS_FETCH | BusCurrState == STATE_BUS_WRITE;
 | 
				
			||||||
  assign UnCachedLsuBusWrite = (BusCurrState == STATE_BUS_READY & ~CacheableM & (DCRWM[0])) |
 | 
					  assign UnCachedLsuBusWrite = (BusCurrState == STATE_BUS_READY & ~CacheableM & (DCacheRWM[0])) |
 | 
				
			||||||
							   (BusCurrState == STATE_BUS_UNCACHED_WRITE);
 | 
												   (BusCurrState == STATE_BUS_UNCACHED_WRITE);
 | 
				
			||||||
  assign LsuBusWrite = UnCachedLsuBusWrite | (BusCurrState == STATE_BUS_WRITE);
 | 
					  assign LsuBusWrite = UnCachedLsuBusWrite | (BusCurrState == STATE_BUS_WRITE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  assign UnCachedLsuBusRead = (BusCurrState == STATE_BUS_READY & ~CacheableM & (|DCRWM[1])) |
 | 
					  assign UnCachedLsuBusRead = (BusCurrState == STATE_BUS_READY & ~CacheableM & (|DCacheRWM[1])) |
 | 
				
			||||||
							  (BusCurrState == STATE_BUS_UNCACHED_READ);
 | 
												  (BusCurrState == STATE_BUS_UNCACHED_READ);
 | 
				
			||||||
  assign LsuBusRead = UnCachedLsuBusRead | (BusCurrState == STATE_BUS_FETCH);
 | 
					  assign LsuBusRead = UnCachedLsuBusRead | (BusCurrState == STATE_BUS_FETCH);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  assign BUSACK = (BusCurrState == STATE_BUS_FETCH & WordCountFlag & LsuBusAck) |
 | 
					  assign DCacheBusAck = (BusCurrState == STATE_BUS_FETCH & WordCountFlag & LsuBusAck) |
 | 
				
			||||||
				  (BusCurrState == STATE_BUS_WRITE & WordCountFlag & LsuBusAck);
 | 
											(BusCurrState == STATE_BUS_WRITE & WordCountFlag & LsuBusAck);
 | 
				
			||||||
  assign BusCommittedM = BusCurrState != STATE_BUS_READY;
 | 
					  assign BusCommittedM = BusCurrState != STATE_BUS_READY;
 | 
				
			||||||
  assign SelUncachedAdr = (BusCurrState == STATE_BUS_READY & (|DCRWM & ~CacheableM)) |
 | 
					  assign SelUncachedAdr = (BusCurrState == STATE_BUS_READY & (|DCacheRWM & ~CacheableM)) |
 | 
				
			||||||
						  (BusCurrState == STATE_BUS_UNCACHED_READ |
 | 
											  (BusCurrState == STATE_BUS_UNCACHED_READ |
 | 
				
			||||||
						   BusCurrState == STATE_BUS_UNCACHED_READ_DONE |
 | 
											   BusCurrState == STATE_BUS_UNCACHED_READ_DONE |
 | 
				
			||||||
						   BusCurrState == STATE_BUS_UNCACHED_WRITE |
 | 
											   BusCurrState == STATE_BUS_UNCACHED_WRITE |
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user