mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Moved a few muxes around after sww changes.
This commit is contained in:
		
							parent
							
								
									6a2bcfcd01
								
							
						
					
					
						commit
						beac362364
					
				@ -190,20 +190,25 @@ module ifu (
 | 
				
			|||||||
    logic                ICacheBusAck;
 | 
					    logic                ICacheBusAck;
 | 
				
			||||||
    logic                save,restore;
 | 
					    logic                save,restore;
 | 
				
			||||||
    logic [31:0]         temp;
 | 
					    logic [31:0]         temp;
 | 
				
			||||||
 | 
					    logic                SelUncachedAdr;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    busdp #(WORDSPERLINE, LINELEN, 32, LOGWPL) 
 | 
					    busdp #(WORDSPERLINE, LINELEN, LOGWPL) 
 | 
				
			||||||
    busdp(.clk, .reset,
 | 
					    busdp(.clk, .reset,
 | 
				
			||||||
          .LSUBusHRDATA(IFUBusHRDATA), .LSUBusAck(IFUBusAck), .LSUBusWrite(), .LSUBusWriteCrit(),
 | 
					          .LSUBusHRDATA(IFUBusHRDATA), .LSUBusAck(IFUBusAck), .LSUBusWrite(), .LSUBusWriteCrit(),
 | 
				
			||||||
          .LSUBusRead(IFUBusRead), .LSUBusSize(), 
 | 
					          .LSUBusRead(IFUBusRead), .LSUBusSize(), 
 | 
				
			||||||
          .LSUFunct3M(3'b010), .LSUBusAdr(IFUBusAdr), .DCacheBusAdr(ICacheBusAdr),
 | 
					          .LSUFunct3M(3'b010), .LSUBusAdr(IFUBusAdr), .DCacheBusAdr(ICacheBusAdr),
 | 
				
			||||||
          .WordCount(), .LSUBusHWDATA(),
 | 
					          .WordCount(), 
 | 
				
			||||||
          .DCacheFetchLine(ICacheFetchLine),
 | 
					          .DCacheFetchLine(ICacheFetchLine),
 | 
				
			||||||
          .DCacheWriteLine(1'b0), .DCacheBusAck(ICacheBusAck), 
 | 
					          .DCacheWriteLine(1'b0), .DCacheBusAck(ICacheBusAck), 
 | 
				
			||||||
          .DCacheBusWriteData(ICacheBusWriteData), .LSUPAdrM(PCPF),
 | 
					          .DCacheBusWriteData(ICacheBusWriteData), .LSUPAdrM(PCPF),
 | 
				
			||||||
          .FinalWriteDataM(), .ReadDataWordM(FinalInstrRawF), .ReadDataWordMuxM(AllInstrRawF[31:0]), 
 | 
					          .FinalWriteDataM(), .SelUncachedAdr,
 | 
				
			||||||
          .IgnoreRequest(ITLBMissF), .LSURWM(2'b10), .CPUBusy, .CacheableM(CacheableF),
 | 
					          .IgnoreRequest(ITLBMissF), .LSURWM(2'b10), .CPUBusy, .CacheableM(CacheableF),
 | 
				
			||||||
          .BusStall, .BusCommittedM());
 | 
					          .BusStall, .BusCommittedM());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mux2 #(32) UnCachedDataMux(.d0(FinalInstrRawF), .d1(ICacheBusWriteData[32-1:0]),
 | 
				
			||||||
 | 
					      .s(SelUncachedAdr), .y(AllInstrRawF[31:0]));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(`IMEM == `MEM_CACHE) begin : icache
 | 
					    if(`IMEM == `MEM_CACHE) begin : icache
 | 
				
			||||||
      logic [1:0] IFURWF;
 | 
					      logic [1:0] IFURWF;
 | 
				
			||||||
      assign IFURWF = CacheableF ? 2'b10 : 2'b00;
 | 
					      assign IFURWF = CacheableF ? 2'b10 : 2'b00;
 | 
				
			||||||
 | 
				
			|||||||
@ -34,7 +34,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
`include "wally-config.vh"
 | 
					`include "wally-config.vh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module busdp #(parameter WORDSPERLINE, LINELEN, WORDLEN, LOGWPL, LSU=0)
 | 
					module busdp #(parameter WORDSPERLINE, LINELEN, LOGWPL, LSU=0)
 | 
				
			||||||
  (
 | 
					  (
 | 
				
			||||||
  input logic                 clk, reset,
 | 
					  input logic                 clk, reset,
 | 
				
			||||||
  // bus interface
 | 
					  // bus interface
 | 
				
			||||||
@ -42,7 +42,6 @@ module busdp #(parameter WORDSPERLINE, LINELEN, WORDLEN, LOGWPL, LSU=0)
 | 
				
			|||||||
  input logic                 LSUBusAck,
 | 
					  input logic                 LSUBusAck,
 | 
				
			||||||
  output logic                LSUBusWrite,
 | 
					  output logic                LSUBusWrite,
 | 
				
			||||||
  output logic                LSUBusRead,
 | 
					  output logic                LSUBusRead,
 | 
				
			||||||
  output logic [`XLEN-1:0]    LSUBusHWDATA,
 | 
					 | 
				
			||||||
  output logic [2:0]          LSUBusSize, 
 | 
					  output logic [2:0]          LSUBusSize, 
 | 
				
			||||||
  input logic [2:0]           LSUFunct3M,
 | 
					  input logic [2:0]           LSUFunct3M,
 | 
				
			||||||
  output logic [`PA_BITS-1:0] LSUBusAdr,
 | 
					  output logic [`PA_BITS-1:0] LSUBusAdr,
 | 
				
			||||||
@ -53,12 +52,11 @@ module busdp #(parameter WORDSPERLINE, LINELEN, WORDLEN, LOGWPL, LSU=0)
 | 
				
			|||||||
  input logic                 DCacheWriteLine,
 | 
					  input logic                 DCacheWriteLine,
 | 
				
			||||||
  output logic                DCacheBusAck,
 | 
					  output logic                DCacheBusAck,
 | 
				
			||||||
  output logic [LINELEN-1:0]  DCacheBusWriteData,
 | 
					  output logic [LINELEN-1:0]  DCacheBusWriteData,
 | 
				
			||||||
 | 
					  output logic                SelUncachedAdr,
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
  // lsu interface
 | 
					  // lsu interface
 | 
				
			||||||
  input logic [`PA_BITS-1:0]  LSUPAdrM,
 | 
					  input logic [`PA_BITS-1:0]  LSUPAdrM,
 | 
				
			||||||
  input logic [`XLEN-1:0]     FinalWriteDataM,
 | 
					  input logic [`XLEN-1:0]     FinalWriteDataM,
 | 
				
			||||||
  input logic [WORDLEN-1:0]   ReadDataWordM,
 | 
					 | 
				
			||||||
  output logic [WORDLEN-1:0]  ReadDataWordMuxM,
 | 
					 | 
				
			||||||
  input logic                 IgnoreRequest,
 | 
					  input logic                 IgnoreRequest,
 | 
				
			||||||
  input logic [1:0]           LSURWM,
 | 
					  input logic [1:0]           LSURWM,
 | 
				
			||||||
  input logic                 CPUBusy,
 | 
					  input logic                 CPUBusy,
 | 
				
			||||||
@ -70,26 +68,17 @@ module busdp #(parameter WORDSPERLINE, LINELEN, WORDLEN, LOGWPL, LSU=0)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  localparam integer   WordCountThreshold = (`DMEM == `MEM_CACHE) ? WORDSPERLINE - 1 : 0;
 | 
					  localparam integer   WordCountThreshold = (`DMEM == `MEM_CACHE) ? WORDSPERLINE - 1 : 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic [`XLEN-1:0]           PreLSUBusHWDATA;
 | 
					 | 
				
			||||||
  logic [`PA_BITS-1:0]        LocalLSUBusAdr;
 | 
					  logic [`PA_BITS-1:0]        LocalLSUBusAdr;
 | 
				
			||||||
  logic                       SelUncachedAdr;
 | 
					 | 
				
			||||||
  genvar                      index;
 | 
					  genvar                      index;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  for (index = 0; index < WORDSPERLINE; index++) begin:fetchbuffer
 | 
					  for (index = 0; index < WORDSPERLINE; index++) begin:fetchbuffer
 | 
				
			||||||
    flopen #(`XLEN) fb(.clk, .en(LSUBusAck & LSUBusRead & (index == WordCount)),
 | 
					    flopen #(`XLEN) fb(.clk, .en(LSUBusAck & LSUBusRead & (index == WordCount)),
 | 
				
			||||||
                       .d(LSUBusHRDATA), .q(DCacheBusWriteData[(index+1)*`XLEN-1:index*`XLEN]));
 | 
					                       .d(LSUBusHRDATA), .q(DCacheBusWriteData[(index+1)*`XLEN-1:index*`XLEN]));
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  mux2 #(`PA_BITS) localadrmux(DCacheBusAdr, LSUPAdrM, SelUncachedAdr, LocalLSUBusAdr);
 | 
					  mux2 #(`PA_BITS) localadrmux(DCacheBusAdr, LSUPAdrM, SelUncachedAdr, LocalLSUBusAdr);
 | 
				
			||||||
  assign LSUBusAdr = ({{`PA_BITS-LOGWPL{1'b0}}, WordCount} << $clog2(`XLEN/8)) + LocalLSUBusAdr;
 | 
					  assign LSUBusAdr = ({{`PA_BITS-LOGWPL{1'b0}}, WordCount} << $clog2(`XLEN/8)) + LocalLSUBusAdr;
 | 
				
			||||||
  if(LSU == 1) mux2 #(`XLEN) lsubushwdatamux( .d0(ReadDataWordM), .d1(FinalWriteDataM),
 | 
					 | 
				
			||||||
                 .s(SelUncachedAdr), .y(LSUBusHWDATA));
 | 
					 | 
				
			||||||
  else assign LSUBusHWDATA = '0;
 | 
					 | 
				
			||||||
   mux2 #(3) lsubussizemux(.d0(`XLEN == 32 ? 3'b010 : 3'b011), .d1(LSUFunct3M), 
 | 
					   mux2 #(3) lsubussizemux(.d0(`XLEN == 32 ? 3'b010 : 3'b011), .d1(LSUFunct3M), 
 | 
				
			||||||
    .s(SelUncachedAdr), .y(LSUBusSize));
 | 
					    .s(SelUncachedAdr), .y(LSUBusSize));
 | 
				
			||||||
  mux2 #(WORDLEN) UnCachedDataMux(.d0(ReadDataWordM), .d1(DCacheBusWriteData[WORDLEN-1:0]),
 | 
					 | 
				
			||||||
    .s(SelUncachedAdr), .y(ReadDataWordMuxM));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  busfsm #(WordCountThreshold, LOGWPL, (`DMEM == `MEM_CACHE)) // *** cleanup  Icache? must fix.
 | 
					  busfsm #(WordCountThreshold, LOGWPL, (`DMEM == `MEM_CACHE)) // *** cleanup  Icache? must fix.
 | 
				
			||||||
  busfsm(.clk, .reset, .IgnoreRequest, .LSURWM, .DCacheFetchLine, .DCacheWriteLine,
 | 
					  busfsm(.clk, .reset, .IgnoreRequest, .LSURWM, .DCacheFetchLine, .DCacheWriteLine,
 | 
				
			||||||
 | 
				
			|||||||
@ -194,16 +194,21 @@ module lsu (
 | 
				
			|||||||
    logic [`PA_BITS-1:0] WordOffsetAddr;
 | 
					    logic [`PA_BITS-1:0] WordOffsetAddr;
 | 
				
			||||||
    logic                SelBus;
 | 
					    logic                SelBus;
 | 
				
			||||||
    logic [LOGWPL-1:0]   WordCount;
 | 
					    logic [LOGWPL-1:0]   WordCount;
 | 
				
			||||||
 | 
					    logic                SelUncachedAdr;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
    busdp #(WORDSPERLINE, LINELEN, `XLEN, LOGWPL, 1) busdp(
 | 
					    busdp #(WORDSPERLINE, LINELEN, LOGWPL, 1) busdp(
 | 
				
			||||||
      .clk, .reset,
 | 
					      .clk, .reset,
 | 
				
			||||||
      .LSUBusHRDATA, .LSUBusHWDATA, .LSUBusAck, .LSUBusWrite, .LSUBusRead, .LSUBusSize,
 | 
					      .LSUBusHRDATA, .LSUBusAck, .LSUBusWrite, .LSUBusRead, .LSUBusSize,
 | 
				
			||||||
      .WordCount, .LSUBusWriteCrit,
 | 
					      .WordCount, .LSUBusWriteCrit,
 | 
				
			||||||
      .LSUFunct3M, .LSUBusAdr, .DCacheBusAdr, .DCacheFetchLine,
 | 
					      .LSUFunct3M, .LSUBusAdr, .DCacheBusAdr, .DCacheFetchLine,
 | 
				
			||||||
      .DCacheWriteLine, .DCacheBusAck, .DCacheBusWriteData, .LSUPAdrM, .FinalWriteDataM,
 | 
					      .DCacheWriteLine, .DCacheBusAck, .DCacheBusWriteData, .LSUPAdrM, .FinalWriteDataM,
 | 
				
			||||||
      .ReadDataWordM, .ReadDataWordMuxM, .IgnoreRequest, .LSURWM, .CPUBusy, .CacheableM,
 | 
					      .SelUncachedAdr, .IgnoreRequest, .LSURWM, .CPUBusy, .CacheableM,
 | 
				
			||||||
      .BusStall, .BusCommittedM);
 | 
					      .BusStall, .BusCommittedM);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mux2 #(`XLEN) UnCachedDataMux(.d0(ReadDataWordM), .d1(DCacheBusWriteData[`XLEN-1:0]),
 | 
				
			||||||
 | 
					      .s(SelUncachedAdr), .y(ReadDataWordMuxM));
 | 
				
			||||||
 | 
					    mux2 #(`XLEN) lsubushwdatamux( .d0(ReadDataWordM), .d1(FinalWriteDataM),
 | 
				
			||||||
 | 
					      .s(SelUncachedAdr), .y(LSUBusHWDATA));
 | 
				
			||||||
    assign WordOffsetAddr = LSUBusWriteCrit ? ({{`PA_BITS-LOGWPL{1'b0}}, WordCount} << $clog2(`XLEN/8)) : LSUPAdrM;
 | 
					    assign WordOffsetAddr = LSUBusWriteCrit ? ({{`PA_BITS-LOGWPL{1'b0}}, WordCount} << $clog2(`XLEN/8)) : LSUPAdrM;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    if(`DMEM == `MEM_CACHE) begin : dcache
 | 
					    if(`DMEM == `MEM_CACHE) begin : dcache
 | 
				
			||||||
@ -236,7 +241,7 @@ module lsu (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  if(`DMEM != `MEM_BUS) begin
 | 
					  if(`DMEM != `MEM_BUS) begin
 | 
				
			||||||
    logic [`XLEN-1:0] ReadDataWordMaskedM;
 | 
					    logic [`XLEN-1:0] ReadDataWordMaskedM;
 | 
				
			||||||
    assign ReadDataWordMaskedM = CacheableM ? ReadDataWordM : '0;
 | 
					    assign ReadDataWordMaskedM = CacheableM ? ReadDataWordM : '0; // AND-gate
 | 
				
			||||||
    subwordwrite subwordwrite(.HRDATA(ReadDataWordMaskedM), .HADDRD(LSUPAdrM[2:0]),
 | 
					    subwordwrite subwordwrite(.HRDATA(ReadDataWordMaskedM), .HADDRD(LSUPAdrM[2:0]),
 | 
				
			||||||
      .HSIZED({LSUFunct3M[2], 1'b0, LSUFunct3M[1:0]}),
 | 
					      .HSIZED({LSUFunct3M[2], 1'b0, LSUFunct3M[1:0]}),
 | 
				
			||||||
	  .HWDATAIN(FinalAMOWriteDataM), .HWDATA(FinalWriteDataM));
 | 
						  .HWDATAIN(FinalAMOWriteDataM), .HWDATA(FinalWriteDataM));
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user