mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Minor busdp cleanup.
This commit is contained in:
		
							parent
							
								
									ea29291024
								
							
						
					
					
						commit
						59f04f2518
					
				| @ -83,8 +83,8 @@ module ifu ( | ||||
|     output logic                ICacheAccess, | ||||
|     output logic                ICacheMiss | ||||
| ); | ||||
| 
 | ||||
| (* mark_debug = "true" *)  logic [`XLEN-1:0]            PCCorrectE, UnalignedPCNextF, PCNextF; | ||||
|   localparam                    CACHE_ENABLED = `IMEM == `MEM_CACHE; | ||||
|   (* mark_debug = "true" *)  logic [`XLEN-1:0]            PCCorrectE, UnalignedPCNextF, PCNextF; | ||||
|   logic                        BranchMisalignedFaultE; | ||||
|   logic                        PrivilegedChangePCM; | ||||
|   logic                        IllegalCompInstrD; | ||||
| @ -182,8 +182,8 @@ module ifu ( | ||||
|               .DCacheCommittedM(), .DCacheMiss(ICacheMiss), .DCacheAccess(ICacheAccess)); | ||||
|      | ||||
|   end else begin : bus | ||||
|     localparam integer   WORDSPERLINE = (`IMEM == `MEM_CACHE) ? `ICACHE_LINELENINBITS/`XLEN : 1; | ||||
|     localparam integer   LINELEN = (`IMEM == `MEM_CACHE) ? `ICACHE_LINELENINBITS : `XLEN; | ||||
|     localparam integer   WORDSPERLINE = (CACHE_ENABLED) ? `ICACHE_LINELENINBITS/`XLEN : 1; | ||||
|     localparam integer   LINELEN = (CACHE_ENABLED) ? `ICACHE_LINELENINBITS : `XLEN; | ||||
|     localparam integer   LOGWPL = (`DMEM == `MEM_CACHE) ? $clog2(WORDSPERLINE) : 1; | ||||
|     logic [LINELEN-1:0]  ReadDataLine; | ||||
|     logic [LINELEN-1:0]  ICacheBusWriteData; | ||||
| @ -193,7 +193,7 @@ module ifu ( | ||||
|     logic [31:0]         temp; | ||||
|     logic                SelUncachedAdr; | ||||
|      | ||||
|     busdp #(WORDSPERLINE, LINELEN, LOGWPL)  | ||||
|     busdp #(WORDSPERLINE, LINELEN, LOGWPL, CACHE_ENABLED)  | ||||
|     busdp(.clk, .reset, | ||||
|           .LSUBusHRDATA(IFUBusHRDATA), .LSUBusAck(IFUBusAck), .LSUBusWrite(), .LSUBusWriteCrit(), | ||||
|           .LSUBusRead(IFUBusRead), .LSUBusSize(),  | ||||
| @ -210,7 +210,7 @@ module ifu ( | ||||
|       .s(SelUncachedAdr), .y(AllInstrRawF[31:0])); | ||||
|      | ||||
| 
 | ||||
|     if(`IMEM == `MEM_CACHE) begin : icache | ||||
|     if(CACHE_ENABLED) begin : icache | ||||
|       logic [1:0] IFURWF; | ||||
|       assign IFURWF = CacheableF ? 2'b10 : 2'b00; | ||||
|        | ||||
|  | ||||
| @ -34,7 +34,7 @@ | ||||
| 
 | ||||
| `include "wally-config.vh" | ||||
| 
 | ||||
| module busdp #(parameter WORDSPERLINE, LINELEN, LOGWPL, LSU=0) | ||||
| module busdp #(parameter WORDSPERLINE, LINELEN, LOGWPL, CACHE_ENABLED) | ||||
|   ( | ||||
|   input logic                 clk, reset, | ||||
|   // bus interface
 | ||||
| @ -66,7 +66,7 @@ module busdp #(parameter WORDSPERLINE, LINELEN, LOGWPL, LSU=0) | ||||
|   output logic                BusCommittedM); | ||||
|    | ||||
| 
 | ||||
|   localparam integer   WordCountThreshold = (`DMEM == `MEM_CACHE) ? WORDSPERLINE - 1 : 0; | ||||
|   localparam integer   WordCountThreshold = CACHE_ENABLED ? WORDSPERLINE - 1 : 0; | ||||
| 
 | ||||
|   logic [`PA_BITS-1:0]        LocalLSUBusAdr; | ||||
|   genvar                      index; | ||||
| @ -80,7 +80,7 @@ module busdp #(parameter WORDSPERLINE, LINELEN, LOGWPL, LSU=0) | ||||
|    mux2 #(3) lsubussizemux(.d0(`XLEN == 32 ? 3'b010 : 3'b011), .d1(LSUFunct3M),  | ||||
|     .s(SelUncachedAdr), .y(LSUBusSize)); | ||||
| 
 | ||||
|   busfsm #(WordCountThreshold, LOGWPL, (`DMEM == `MEM_CACHE)) // *** cleanup  Icache? must fix.
 | ||||
|   busfsm #(WordCountThreshold, LOGWPL, CACHE_ENABLED)  | ||||
|   busfsm(.clk, .reset, .IgnoreRequest, .LSURWM, .DCacheFetchLine, .DCacheWriteLine, | ||||
| 		 .LSUBusAck, .CPUBusy, .CacheableM, .BusStall, .LSUBusWrite, .LSUBusWriteCrit, .LSUBusRead, | ||||
| 		 .DCacheBusAck, .BusCommittedM, .SelUncachedAdr, .WordCount); | ||||
|  | ||||
| @ -32,7 +32,7 @@ | ||||
| 
 | ||||
| 
 | ||||
| module busfsm #(parameter integer   WordCountThreshold, | ||||
| 				parameter integer LOGWPL, parameter logic CacheEnabled ) | ||||
| 				parameter integer LOGWPL, parameter logic CACHE_ENABLED ) | ||||
|   (input logic               clk, | ||||
|    input logic               reset, | ||||
| 
 | ||||
| @ -88,7 +88,7 @@ module busfsm #(parameter integer   WordCountThreshold, | ||||
|   assign WordCountFlag = (WordCount == WordCountThreshold[LOGWPL-1:0]); | ||||
|   assign CntEn = PreCntEn & LSUBusAck; | ||||
| 
 | ||||
|   assign UnCachedAccess = ~CacheEnabled | ~CacheableM; | ||||
|   assign UnCachedAccess = ~CACHE_ENABLED | ~CacheableM; | ||||
| 
 | ||||
|   always_ff @(posedge clk) | ||||
|     if (reset)    BusCurrState <= #1 STATE_BUS_READY; | ||||
| @ -96,27 +96,27 @@ module busfsm #(parameter integer   WordCountThreshold, | ||||
|    | ||||
|   always_comb begin | ||||
| 	case(BusCurrState) | ||||
| 	  STATE_BUS_READY:           if(IgnoreRequest)               BusNextState = STATE_BUS_READY; | ||||
| 	                             else if(LSURWM[0] & (UnCachedAccess)) BusNextState = STATE_BUS_UNCACHED_WRITE; | ||||
| 		                         else if(LSURWM[1] & (UnCachedAccess)) BusNextState = STATE_BUS_UNCACHED_READ; | ||||
| 	  STATE_BUS_READY:           if(IgnoreRequest)                   BusNextState = STATE_BUS_READY; | ||||
| 	                             else if(LSURWM[0] & UnCachedAccess) BusNextState = STATE_BUS_UNCACHED_WRITE; | ||||
| 		                         else if(LSURWM[1] & UnCachedAccess) BusNextState = STATE_BUS_UNCACHED_READ; | ||||
| 		                         else if(DCacheFetchLine)            BusNextState = STATE_BUS_FETCH; | ||||
| 		                         else if(DCacheWriteLine)            BusNextState = STATE_BUS_WRITE; | ||||
|                                  else                             BusNextState = STATE_BUS_READY; | ||||
|       STATE_BUS_UNCACHED_WRITE:  if(LSUBusAck)                   BusNextState = STATE_BUS_UNCACHED_WRITE_DONE; | ||||
| 		                         else                            BusNextState = STATE_BUS_UNCACHED_WRITE; | ||||
|       STATE_BUS_UNCACHED_READ:   if(LSUBusAck)                   BusNextState = STATE_BUS_UNCACHED_READ_DONE; | ||||
| 		                         else                            BusNextState = STATE_BUS_UNCACHED_READ; | ||||
|       STATE_BUS_UNCACHED_WRITE_DONE: if(CPUBusy)                 BusNextState = STATE_BUS_CPU_BUSY; | ||||
|                                      else                        BusNextState = STATE_BUS_READY; | ||||
|       STATE_BUS_UNCACHED_READ_DONE:  if(CPUBusy)                 BusNextState = STATE_BUS_CPU_BUSY; | ||||
|                                      else                        BusNextState = STATE_BUS_READY; | ||||
| 	  STATE_BUS_CPU_BUSY:            if(CPUBusy)                 BusNextState = STATE_BUS_CPU_BUSY; | ||||
|                                      else                        BusNextState = STATE_BUS_READY; | ||||
|       STATE_BUS_FETCH:           if (WordCountFlag & LSUBusAck)  BusNextState = STATE_BUS_READY; | ||||
| 	                             else                            BusNextState = STATE_BUS_FETCH; | ||||
|       STATE_BUS_WRITE:           if(WordCountFlag & LSUBusAck)   BusNextState = STATE_BUS_READY; | ||||
| 	                             else                            BusNextState = STATE_BUS_WRITE; | ||||
| 	  default:                                                   BusNextState = STATE_BUS_READY; | ||||
|                                  else                                BusNextState = STATE_BUS_READY; | ||||
|       STATE_BUS_UNCACHED_WRITE:  if(LSUBusAck)                       BusNextState = STATE_BUS_UNCACHED_WRITE_DONE; | ||||
| 		                         else                                BusNextState = STATE_BUS_UNCACHED_WRITE; | ||||
|       STATE_BUS_UNCACHED_READ:   if(LSUBusAck)                       BusNextState = STATE_BUS_UNCACHED_READ_DONE; | ||||
| 		                         else                                BusNextState = STATE_BUS_UNCACHED_READ; | ||||
|       STATE_BUS_UNCACHED_WRITE_DONE: if(CPUBusy)                     BusNextState = STATE_BUS_CPU_BUSY; | ||||
|                                      else                            BusNextState = STATE_BUS_READY; | ||||
|       STATE_BUS_UNCACHED_READ_DONE:  if(CPUBusy)                     BusNextState = STATE_BUS_CPU_BUSY; | ||||
|                                      else                            BusNextState = STATE_BUS_READY; | ||||
| 	  STATE_BUS_CPU_BUSY:            if(CPUBusy)                     BusNextState = STATE_BUS_CPU_BUSY; | ||||
|                                      else                            BusNextState = STATE_BUS_READY; | ||||
|       STATE_BUS_FETCH:           if (WordCountFlag & LSUBusAck)      BusNextState = STATE_BUS_READY; | ||||
| 	                             else                                BusNextState = STATE_BUS_FETCH; | ||||
|       STATE_BUS_WRITE:           if(WordCountFlag & LSUBusAck)       BusNextState = STATE_BUS_READY; | ||||
| 	                             else                                BusNextState = STATE_BUS_WRITE; | ||||
| 	  default:                                                       BusNextState = STATE_BUS_READY; | ||||
| 	endcase | ||||
|   end | ||||
| 
 | ||||
| @ -128,14 +128,14 @@ module busfsm #(parameter integer   WordCountThreshold, | ||||
| 					(BusCurrState == STATE_BUS_FETCH)  | | ||||
| 					(BusCurrState == STATE_BUS_WRITE); | ||||
|   assign PreCntEn = BusCurrState == STATE_BUS_FETCH | BusCurrState == STATE_BUS_WRITE; | ||||
|   assign UnCachedLSUBusWrite = (BusCurrState == STATE_BUS_READY & UnCachedAccess & (LSURWM[0] & ~IgnoreRequest)) | | ||||
|   assign UnCachedLSUBusWrite = (BusCurrState == STATE_BUS_READY & UnCachedAccess & LSURWM[0] & ~IgnoreRequest) | | ||||
| 							   (BusCurrState == STATE_BUS_UNCACHED_WRITE); | ||||
|   assign LSUBusWrite = UnCachedLSUBusWrite | (BusCurrState == STATE_BUS_WRITE); | ||||
|   assign LSUBusWriteCrit = (BusCurrState == STATE_BUS_READY & UnCachedAccess & (LSURWM[0])) | | ||||
|   assign LSUBusWriteCrit = (BusCurrState == STATE_BUS_READY & UnCachedAccess & LSURWM[0]) | | ||||
| 						   (BusCurrState == STATE_BUS_UNCACHED_WRITE) | | ||||
|                            (BusCurrState == STATE_BUS_WRITE); | ||||
| 
 | ||||
|   assign UnCachedLSUBusRead = (BusCurrState == STATE_BUS_READY & UnCachedAccess & (|LSURWM[1] & IgnoreRequest)) | | ||||
|   assign UnCachedLSUBusRead = (BusCurrState == STATE_BUS_READY & UnCachedAccess & LSURWM[1] & IgnoreRequest) | | ||||
| 							  (BusCurrState == STATE_BUS_UNCACHED_READ); | ||||
|   assign LSUBusRead = UnCachedLSUBusRead | (BusCurrState == STATE_BUS_FETCH) | (BusCurrState == STATE_BUS_READY & DCacheFetchLine); | ||||
| 
 | ||||
| @ -147,5 +147,5 @@ module busfsm #(parameter integer   WordCountThreshold, | ||||
| 						   BusCurrState == STATE_BUS_UNCACHED_READ_DONE | | ||||
| 						   BusCurrState == STATE_BUS_UNCACHED_WRITE | | ||||
| 						   BusCurrState == STATE_BUS_UNCACHED_WRITE_DONE) | | ||||
| 						  ~CacheEnabled; // if no dcache always select uncachedadr.
 | ||||
| 						  ~CACHE_ENABLED; // if no dcache always select uncachedadr.
 | ||||
| endmodule | ||||
|  | ||||
| @ -82,6 +82,7 @@ module lsu ( | ||||
|    input var                logic [`XLEN-1:0] PMPADDR_ARRAY_REGW[`PMP_ENTRIES-1:0] // *** this one especially has a large note attached to it in pmpchecker.
 | ||||
|   ); | ||||
| 
 | ||||
|   localparam                CACHE_ENABLED = `DMEM == `MEM_CACHE; | ||||
|   logic [`XLEN+1:0]         IEUAdrExtM; | ||||
|   logic [`PA_BITS-1:0]      LSUPAdrM; | ||||
|   logic                     DTLBMissM; | ||||
| @ -192,9 +193,9 @@ module lsu ( | ||||
|               .DCacheMiss, .DCacheAccess); | ||||
|     assign SelUncachedAdr = '0; // value does not matter.
 | ||||
|   end else begin : bus   | ||||
|     localparam integer   WORDSPERLINE = (`DMEM == `MEM_CACHE) ? `DCACHE_LINELENINBITS/`XLEN : 1; | ||||
|     localparam integer   LINELEN = (`DMEM == `MEM_CACHE) ? `DCACHE_LINELENINBITS : `XLEN; | ||||
|     localparam integer   LOGWPL = (`DMEM == `MEM_CACHE) ? $clog2(WORDSPERLINE) : 1; | ||||
|     localparam integer   WORDSPERLINE = (CACHE_ENABLED) ? `DCACHE_LINELENINBITS/`XLEN : 1; | ||||
|     localparam integer   LINELEN = (CACHE_ENABLED) ? `DCACHE_LINELENINBITS : `XLEN; | ||||
|     localparam integer   LOGWPL = (CACHE_ENABLED) ? $clog2(WORDSPERLINE) : 1; | ||||
|     logic [LINELEN-1:0]  ReadDataLineM; | ||||
|     logic [LINELEN-1:0]  DCacheBusWriteData; | ||||
|     logic [`PA_BITS-1:0] DCacheBusAdr; | ||||
| @ -206,7 +207,7 @@ module lsu ( | ||||
|     logic                SelBus; | ||||
|     logic [LOGWPL-1:0]   WordCount; | ||||
|              | ||||
|     busdp #(WORDSPERLINE, LINELEN, LOGWPL, 1) busdp( | ||||
|     busdp #(WORDSPERLINE, LINELEN, LOGWPL, CACHE_ENABLED) busdp( | ||||
|       .clk, .reset, | ||||
|       .LSUBusHRDATA, .LSUBusAck, .LSUBusWrite, .LSUBusRead, .LSUBusSize, | ||||
|       .WordCount, .LSUBusWriteCrit, | ||||
| @ -224,7 +225,7 @@ module lsu ( | ||||
|       .y(WordOffsetAddr)); // *** can reduce width of mux. only need the offset.
 | ||||
|      | ||||
| 
 | ||||
|     if(`DMEM == `MEM_CACHE) begin : dcache | ||||
|     if(CACHE_ENABLED) begin : dcache | ||||
|       logic [1:0] RW, Atomic; | ||||
|       assign RW = CacheableM ? LSURWM : 2'b00;        // AND gate
 | ||||
|       assign Atomic = CacheableM ? LSUAtomicM : 2'b00; // AND gate
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user