mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Various code syntax changes to bring HDL to a synthesizable level
This commit is contained in:
		
							parent
							
								
									35f8b4f74f
								
							
						
					
					
						commit
						1018a10625
					
				
							
								
								
									
										16
									
								
								wally-pipelined/src/cache/dmapped.sv
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								wally-pipelined/src/cache/dmapped.sv
									
									
									
									
										vendored
									
									
								
							@ -59,13 +59,13 @@ module rodirectmappedmem #(parameter LINESIZE = 256, parameter NUMLINES = 512, p
 | 
				
			|||||||
    // Swizzle bits to get the offset, set, and tag out of the read and write addresses
 | 
					    // Swizzle bits to get the offset, set, and tag out of the read and write addresses
 | 
				
			||||||
    always_comb begin
 | 
					    always_comb begin
 | 
				
			||||||
        // Read address
 | 
					        // Read address
 | 
				
			||||||
        assign WordSelect = ReadLowerAdr[OFFSETWIDTH-1:0];
 | 
					        WordSelect = ReadLowerAdr[OFFSETWIDTH-1:0];
 | 
				
			||||||
        assign ReadPAdr = {ReadUpperPAdr, ReadLowerAdr};
 | 
					        ReadPAdr = {ReadUpperPAdr, ReadLowerAdr};
 | 
				
			||||||
        assign ReadSet = ReadPAdr[SETWIDTH+OFFSETWIDTH-1:OFFSETWIDTH];
 | 
					        ReadSet = ReadPAdr[SETWIDTH+OFFSETWIDTH-1:OFFSETWIDTH];
 | 
				
			||||||
        assign ReadTag = ReadPAdr[`XLEN-1:SETWIDTH+OFFSETWIDTH];
 | 
					        ReadTag = ReadPAdr[`XLEN-1:SETWIDTH+OFFSETWIDTH];
 | 
				
			||||||
        // Write address
 | 
					        // Write address
 | 
				
			||||||
        assign WriteSet = WritePAdr[SETWIDTH+OFFSETWIDTH-1:OFFSETWIDTH];
 | 
					        WriteSet = WritePAdr[SETWIDTH+OFFSETWIDTH-1:OFFSETWIDTH];
 | 
				
			||||||
        assign WriteTag = WritePAdr[`XLEN-1:SETWIDTH+OFFSETWIDTH];
 | 
					        WriteTag = WritePAdr[`XLEN-1:SETWIDTH+OFFSETWIDTH];
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    genvar i;
 | 
					    genvar i;
 | 
				
			||||||
@ -85,8 +85,8 @@ module rodirectmappedmem #(parameter LINESIZE = 256, parameter NUMLINES = 512, p
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Get the data and valid out of the lines
 | 
					    // Get the data and valid out of the lines
 | 
				
			||||||
    always_comb begin
 | 
					    always_comb begin
 | 
				
			||||||
        assign DataWord = LineOutputs[ReadSet];
 | 
					        DataWord = LineOutputs[ReadSet];
 | 
				
			||||||
        assign DataValid = ValidOutputs[ReadSet] & (TagOutputs[ReadSet] == ReadTag);
 | 
					        DataValid = ValidOutputs[ReadSet] & (TagOutputs[ReadSet] == ReadTag);
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endmodule
 | 
					endmodule
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								wally-pipelined/src/cache/line.sv
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								wally-pipelined/src/cache/line.sv
									
									
									
									
										vendored
									
									
								
							@ -62,7 +62,7 @@ module rocacheline #(parameter LINESIZE = 256, parameter TAGSIZE = 32, parameter
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    always_comb begin
 | 
					    always_comb begin
 | 
				
			||||||
        assign DataWord = DataLinesOut[WordSelect[OFFSETSIZE-1:$clog2(WORDSIZE)]];
 | 
					        DataWord = DataLinesOut[WordSelect[OFFSETSIZE-1:$clog2(WORDSIZE)]];
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endmodule
 | 
					endmodule
 | 
				
			||||||
 | 
				
			|||||||
@ -85,7 +85,7 @@ module pagetablewalker (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  // Signals for direct, fake translations. Not part of the final Wally version.
 | 
					  // Signals for direct, fake translations. Not part of the final Wally version.
 | 
				
			||||||
  logic [`XLEN-1:0]     DirectInstrPTE, DirectMemPTE;
 | 
					  logic [`XLEN-1:0]     DirectInstrPTE, DirectMemPTE;
 | 
				
			||||||
  logic [9:0]           DirectPTEFlags = {2'b0, 8'b00001111};
 | 
					  localparam            DirectPTEFlags = {2'b0, 8'b00001111};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic [`VPN_BITS-1:0] PCPageNumber, MemAdrPageNumber;
 | 
					  logic [`VPN_BITS-1:0] PCPageNumber, MemAdrPageNumber;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -133,17 +133,23 @@ module pagetablewalker (
 | 
				
			|||||||
  assign PageTypeF = PageType;
 | 
					  assign PageTypeF = PageType;
 | 
				
			||||||
  assign PageTypeM = PageType;
 | 
					  assign PageTypeM = PageType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  localparam IDLE = 3'h0;
 | 
				
			||||||
 | 
					  localparam LEVEL1 = 3'h1;
 | 
				
			||||||
 | 
					  localparam LEVEL0 = 3'h2;
 | 
				
			||||||
 | 
					  localparam LEAF = 3'h3;
 | 
				
			||||||
 | 
					  localparam FAULT = 3'h4;
 | 
				
			||||||
 | 
					  localparam LEVEL2 = 3'h5;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  logic [2:0] WalkerState, NextWalkerState;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  generate
 | 
					  generate
 | 
				
			||||||
    if (`XLEN == 32) begin
 | 
					    if (`XLEN == 32) begin
 | 
				
			||||||
      logic [9:0] VPN1, VPN0;
 | 
					      logic [9:0] VPN1, VPN0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      assign SvMode = SATP_REGW[31];
 | 
					      assign SvMode = SATP_REGW[31];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      typedef enum {IDLE, LEVEL1, LEVEL0, LEAF, FAULT} walker_statetype;
 | 
					 | 
				
			||||||
      walker_statetype WalkerState, NextWalkerState;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      // *** Do we need a synchronizer here for walker to talk to ahblite?
 | 
					      // *** Do we need a synchronizer here for walker to talk to ahblite?
 | 
				
			||||||
      flopenl #(.TYPE(walker_statetype)) mmureg(HCLK, ~HRESETn, 1'b1, NextWalkerState, IDLE, WalkerState);
 | 
					      flopenl #(3) mmureg(HCLK, ~HRESETn, 1'b1, NextWalkerState, IDLE, WalkerState);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // State transition logic
 | 
					      // State transition logic
 | 
				
			||||||
      always_comb begin
 | 
					      always_comb begin
 | 
				
			||||||
@ -179,38 +185,38 @@ module pagetablewalker (
 | 
				
			|||||||
      // Assign combinational outputs
 | 
					      // Assign combinational outputs
 | 
				
			||||||
      always_comb begin
 | 
					      always_comb begin
 | 
				
			||||||
        // default values
 | 
					        // default values
 | 
				
			||||||
        assign TranslationPAdr = '0;
 | 
					        TranslationPAdr = '0;
 | 
				
			||||||
        assign PageTableEntry = '0;
 | 
					        PageTableEntry = '0;
 | 
				
			||||||
        assign PageType ='0;
 | 
					        PageType ='0;
 | 
				
			||||||
        assign MMUTranslationComplete = '0;
 | 
					        MMUTranslationComplete = '0;
 | 
				
			||||||
        assign DTLBWriteM = '0;
 | 
					        DTLBWriteM = '0;
 | 
				
			||||||
        assign ITLBWriteF = '0;
 | 
					        ITLBWriteF = '0;
 | 
				
			||||||
        assign InstrPageFaultM = '0;
 | 
					        InstrPageFaultM = '0;
 | 
				
			||||||
        assign LoadPageFaultM = '0;
 | 
					        LoadPageFaultM = '0;
 | 
				
			||||||
        assign StorePageFaultM = '0;
 | 
					        StorePageFaultM = '0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case (NextWalkerState)
 | 
					        case (NextWalkerState)
 | 
				
			||||||
          LEVEL1: begin
 | 
					          LEVEL1: begin
 | 
				
			||||||
            assign TranslationPAdr = {BasePageTablePPN, VPN1, 2'b00};
 | 
					            TranslationPAdr = {BasePageTablePPN, VPN1, 2'b00};
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
          LEVEL0: begin
 | 
					          LEVEL0: begin
 | 
				
			||||||
            assign TranslationPAdr = {CurrentPPN, VPN0, 2'b00};
 | 
					            TranslationPAdr = {CurrentPPN, VPN0, 2'b00};
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
          LEAF: begin
 | 
					          LEAF: begin
 | 
				
			||||||
            // Keep physical address alive to prevent HADDR dropping to 0
 | 
					            // Keep physical address alive to prevent HADDR dropping to 0
 | 
				
			||||||
            assign TranslationPAdr = {CurrentPPN, VPN0, 2'b00};
 | 
					            TranslationPAdr = {CurrentPPN, VPN0, 2'b00};
 | 
				
			||||||
            assign PageTableEntry = CurrentPTE;
 | 
					            PageTableEntry = CurrentPTE;
 | 
				
			||||||
            assign PageType = (WalkerState == LEVEL1) ? 2'b01 : 2'b00;
 | 
					            PageType = (WalkerState == LEVEL1) ? 2'b01 : 2'b00;
 | 
				
			||||||
            assign MMUTranslationComplete = '1;
 | 
					            MMUTranslationComplete = '1;
 | 
				
			||||||
            assign DTLBWriteM = DTLBMissM;
 | 
					            DTLBWriteM = DTLBMissM;
 | 
				
			||||||
            assign ITLBWriteF = ~DTLBMissM;  // Prefer data over instructions
 | 
					            ITLBWriteF = ~DTLBMissM;  // Prefer data over instructions
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
          FAULT: begin
 | 
					          FAULT: begin
 | 
				
			||||||
            assign TranslationPAdr = {CurrentPPN, VPN0, 2'b00};
 | 
					            TranslationPAdr = {CurrentPPN, VPN0, 2'b00};
 | 
				
			||||||
            assign MMUTranslationComplete = '1;
 | 
					            MMUTranslationComplete = '1;
 | 
				
			||||||
            assign InstrPageFaultM = ~DTLBMissM;
 | 
					            InstrPageFaultM = ~DTLBMissM;
 | 
				
			||||||
            assign LoadPageFaultM = DTLBMissM && ~MemStore;
 | 
					            LoadPageFaultM = DTLBMissM && ~MemStore;
 | 
				
			||||||
            assign StorePageFaultM = DTLBMissM && MemStore;
 | 
					            StorePageFaultM = DTLBMissM && MemStore;
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
        endcase
 | 
					        endcase
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
@ -232,11 +238,8 @@ module pagetablewalker (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      logic GigapageMisaligned, BadGigapage;
 | 
					      logic GigapageMisaligned, BadGigapage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      typedef enum {IDLE, LEVEL2, LEVEL1, LEVEL0, LEAF, FAULT} walker_statetype;
 | 
					 | 
				
			||||||
      walker_statetype WalkerState, NextWalkerState;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      // *** Do we need a synchronizer here for walker to talk to ahblite?
 | 
					      // *** Do we need a synchronizer here for walker to talk to ahblite?
 | 
				
			||||||
      flopenl #(.TYPE(walker_statetype)) mmureg(HCLK, ~HRESETn, 1'b1, NextWalkerState, IDLE, WalkerState);
 | 
					      flopenl #(3) mmureg(HCLK, ~HRESETn, 1'b1, NextWalkerState, IDLE, WalkerState);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      always_comb begin
 | 
					      always_comb begin
 | 
				
			||||||
        case (WalkerState)
 | 
					        case (WalkerState)
 | 
				
			||||||
@ -279,42 +282,42 @@ module pagetablewalker (
 | 
				
			|||||||
      // *** Should translate this flop block into our flop module notation
 | 
					      // *** Should translate this flop block into our flop module notation
 | 
				
			||||||
      always_comb begin
 | 
					      always_comb begin
 | 
				
			||||||
        // default values
 | 
					        // default values
 | 
				
			||||||
        assign TranslationPAdr = '0;
 | 
					        TranslationPAdr = '0;
 | 
				
			||||||
        assign PageTableEntry = '0;
 | 
					        PageTableEntry = '0;
 | 
				
			||||||
        assign PageType = '0;
 | 
					        PageType = '0;
 | 
				
			||||||
        assign MMUTranslationComplete = '0;
 | 
					        MMUTranslationComplete = '0;
 | 
				
			||||||
        assign DTLBWriteM = '0;
 | 
					        DTLBWriteM = '0;
 | 
				
			||||||
        assign ITLBWriteF = '0;
 | 
					        ITLBWriteF = '0;
 | 
				
			||||||
        assign InstrPageFaultM = '0;
 | 
					        InstrPageFaultM = '0;
 | 
				
			||||||
        assign LoadPageFaultM = '0;
 | 
					        LoadPageFaultM = '0;
 | 
				
			||||||
        assign StorePageFaultM = '0;
 | 
					        StorePageFaultM = '0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case (NextWalkerState)
 | 
					        case (NextWalkerState)
 | 
				
			||||||
          LEVEL2: begin
 | 
					          LEVEL2: begin
 | 
				
			||||||
            assign TranslationPAdr = {BasePageTablePPN, VPN2, 3'b000};
 | 
					            TranslationPAdr = {BasePageTablePPN, VPN2, 3'b000};
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
          LEVEL1: begin
 | 
					          LEVEL1: begin
 | 
				
			||||||
            assign TranslationPAdr = {CurrentPPN, VPN1, 3'b000};
 | 
					            TranslationPAdr = {CurrentPPN, VPN1, 3'b000};
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
          LEVEL0: begin
 | 
					          LEVEL0: begin
 | 
				
			||||||
            assign TranslationPAdr = {CurrentPPN, VPN0, 3'b000};
 | 
					            TranslationPAdr = {CurrentPPN, VPN0, 3'b000};
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
          LEAF: begin
 | 
					          LEAF: begin
 | 
				
			||||||
            // Keep physical address alive to prevent HADDR dropping to 0
 | 
					            // Keep physical address alive to prevent HADDR dropping to 0
 | 
				
			||||||
            assign TranslationPAdr = {CurrentPPN, VPN0, 3'b000};
 | 
					            TranslationPAdr = {CurrentPPN, VPN0, 3'b000};
 | 
				
			||||||
            assign PageTableEntry = CurrentPTE;
 | 
					            PageTableEntry = CurrentPTE;
 | 
				
			||||||
            assign PageType = (WalkerState == LEVEL2) ? 2'b11 : 
 | 
					            PageType = (WalkerState == LEVEL2) ? 2'b11 : 
 | 
				
			||||||
                                ((WalkerState == LEVEL1) ? 2'b01 : 2'b00);
 | 
					                                ((WalkerState == LEVEL1) ? 2'b01 : 2'b00);
 | 
				
			||||||
            assign MMUTranslationComplete = '1;
 | 
					            MMUTranslationComplete = '1;
 | 
				
			||||||
            assign DTLBWriteM = DTLBMissM;
 | 
					            DTLBWriteM = DTLBMissM;
 | 
				
			||||||
            assign ITLBWriteF = ~DTLBMissM;  // Prefer data over instructions
 | 
					            ITLBWriteF = ~DTLBMissM;  // Prefer data over instructions
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
          FAULT: begin
 | 
					          FAULT: begin
 | 
				
			||||||
            assign TranslationPAdr = {CurrentPPN, VPN0, 3'b000};
 | 
					            TranslationPAdr = {CurrentPPN, VPN0, 3'b000};
 | 
				
			||||||
            assign MMUTranslationComplete = '1;
 | 
					            MMUTranslationComplete = '1;
 | 
				
			||||||
            assign InstrPageFaultM = ~DTLBMissM;
 | 
					            InstrPageFaultM = ~DTLBMissM;
 | 
				
			||||||
            assign LoadPageFaultM = DTLBMissM && ~MemStore;
 | 
					            LoadPageFaultM = DTLBMissM && ~MemStore;
 | 
				
			||||||
            assign StorePageFaultM = DTLBMissM && MemStore;
 | 
					            StorePageFaultM = DTLBMissM && MemStore;
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
        endcase
 | 
					        endcase
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
@ -331,4 +334,4 @@ module pagetablewalker (
 | 
				
			|||||||
    end
 | 
					    end
 | 
				
			||||||
  endgenerate
 | 
					  endgenerate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endmodule
 | 
					endmodule
 | 
				
			||||||
 | 
				
			|||||||
@ -22,6 +22,7 @@ module fpu (
 | 
				
			|||||||
  //signals, modules, and combinational logic closely defined.
 | 
					  //signals, modules, and combinational logic closely defined.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //used for OSU DP-size hardware to wally XLEN interfacing
 | 
					  //used for OSU DP-size hardware to wally XLEN interfacing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  integer XLENDIFF;
 | 
					  integer XLENDIFF;
 | 
				
			||||||
  assign XLENDIFF = `XLEN - 64;
 | 
					  assign XLENDIFF = `XLEN - 64;
 | 
				
			||||||
  integer XLENDIFFN;
 | 
					  integer XLENDIFFN;
 | 
				
			||||||
@ -465,13 +466,18 @@ module fpu (
 | 
				
			|||||||
  always_comb begin
 | 
					  always_comb begin
 | 
				
			||||||
           
 | 
					           
 | 
				
			||||||
  //zero extension  
 | 
					  //zero extension  
 | 
				
			||||||
  if(`XLEN > 64) begin
 | 
					
 | 
				
			||||||
      FPUResultW <= {FPUResultDirW,{XLENDIFF{1'b0}}};
 | 
					// Teo 04/13/2021
 | 
				
			||||||
  end
 | 
					// Commented out XLENDIFF{1'b0} due to error:
 | 
				
			||||||
 | 
					// Repetition multiplier must be constant.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //if(`XLEN > 64) begin
 | 
				
			||||||
 | 
					  //    FPUResultW <= {FPUResultDirW,{XLENDIFF{1'b0}}};
 | 
				
			||||||
 | 
					  //end
 | 
				
			||||||
  //truncate
 | 
					  //truncate
 | 
				
			||||||
  else begin
 | 
					  //else begin
 | 
				
			||||||
      FPUResultW <= FPUResultDirW[63:64-`XLEN];
 | 
					      FPUResultW <= FPUResultDirW[63:64-`XLEN];
 | 
				
			||||||
  end
 | 
					  //end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  end  
 | 
					  end  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -94,9 +94,9 @@ module icache(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Read from memory if we don't have the address we want
 | 
					    // Read from memory if we don't have the address we want
 | 
				
			||||||
    always_comb if (LastReadDataValidF & (InstrPAdrF == LastReadAdrF)) begin
 | 
					    always_comb if (LastReadDataValidF & (InstrPAdrF == LastReadAdrF)) begin
 | 
				
			||||||
        assign InstrReadF = 0;
 | 
					        InstrReadF = 0;
 | 
				
			||||||
    end else begin
 | 
					    end else begin
 | 
				
			||||||
        assign InstrReadF = 1;
 | 
					        InstrReadF = 1;
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Pick from the memory input or from the previous read, as appropriate
 | 
					    // Pick from the memory input or from the previous read, as appropriate
 | 
				
			||||||
@ -128,11 +128,11 @@ module icache(
 | 
				
			|||||||
    // incomplete, since the pipeline stalls for us when it isn't), or a NOP for
 | 
					    // incomplete, since the pipeline stalls for us when it isn't), or a NOP for
 | 
				
			||||||
    // the cycle when the first of two reads comes in.
 | 
					    // the cycle when the first of two reads comes in.
 | 
				
			||||||
    always_comb if (~FlushDLastCyclen) begin
 | 
					    always_comb if (~FlushDLastCyclen) begin
 | 
				
			||||||
        assign InstrDMuxChoice = 2'b10;
 | 
					        InstrDMuxChoice = 2'b10;
 | 
				
			||||||
    end else if (DelayD & (MisalignedHalfInstrD[1:0] != 2'b11)) begin
 | 
					    end else if (DelayD & (MisalignedHalfInstrD[1:0] != 2'b11)) begin
 | 
				
			||||||
        assign InstrDMuxChoice = 2'b11;
 | 
					        InstrDMuxChoice = 2'b11;
 | 
				
			||||||
    end else begin
 | 
					    end else begin
 | 
				
			||||||
        assign InstrDMuxChoice = {1'b0, DelayD};
 | 
					        InstrDMuxChoice = {1'b0, DelayD};
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    mux4 #(32) instrDMux (AlignedInstrD, {InstrInF[15:0], MisalignedHalfInstrD}, nop, {16'b0, MisalignedHalfInstrD}, InstrDMuxChoice, InstrRawD);
 | 
					    mux4 #(32) instrDMux (AlignedInstrD, {InstrInF[15:0], MisalignedHalfInstrD}, nop, {16'b0, MisalignedHalfInstrD}, InstrDMuxChoice, InstrRawD);
 | 
				
			||||||
endmodule
 | 
					endmodule
 | 
				
			||||||
 | 
				
			|||||||
@ -24,9 +24,6 @@
 | 
				
			|||||||
// OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
					// OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
				
			||||||
///////////////////////////////////////////
 | 
					///////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
`include "wally-config.vh"
 | 
					 | 
				
			||||||
`include "wally-constants.vh"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module cam_line #(parameter KEY_BITS = 20,
 | 
					module cam_line #(parameter KEY_BITS = 20,
 | 
				
			||||||
                  parameter HIGH_SEGMENT_BITS = 10) (
 | 
					                  parameter HIGH_SEGMENT_BITS = 10) (
 | 
				
			||||||
  input                 clk, reset,
 | 
					  input                 clk, reset,
 | 
				
			||||||
@ -76,4 +73,4 @@ module cam_line #(parameter KEY_BITS = 20,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  assign Match = ({1'b1, VirtualPageNumberQuery} == Key);
 | 
					  assign Match = ({1'b1, VirtualPageNumberQuery} == Key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endmodule
 | 
					endmodule
 | 
				
			||||||
 | 
				
			|||||||
@ -24,9 +24,6 @@
 | 
				
			|||||||
// OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
					// OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
				
			||||||
///////////////////////////////////////////
 | 
					///////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
`include "wally-config.vh"
 | 
					 | 
				
			||||||
`include "wally-constants.vh"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * sv32 specs
 | 
					 * sv32 specs
 | 
				
			||||||
 * ----------
 | 
					 * ----------
 | 
				
			||||||
@ -52,6 +49,9 @@
 | 
				
			|||||||
 *   least recently)
 | 
					 *   least recently)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`include "wally-config.vh"
 | 
				
			||||||
 | 
					`include "wally-constants.vh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// The TLB will have 2**ENTRY_BITS total entries
 | 
					// The TLB will have 2**ENTRY_BITS total entries
 | 
				
			||||||
module tlb #(parameter ENTRY_BITS = 3) (
 | 
					module tlb #(parameter ENTRY_BITS = 3) (
 | 
				
			||||||
  input              clk, reset,
 | 
					  input              clk, reset,
 | 
				
			||||||
 | 
				
			|||||||
@ -57,4 +57,4 @@ module tlb_ram #(parameter ENTRY_BITS = 3) (
 | 
				
			|||||||
      ram[i] = `XLEN'b0;
 | 
					      ram[i] = `XLEN'b0;
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endmodule
 | 
					endmodule
 | 
				
			||||||
 | 
				
			|||||||
@ -29,7 +29,7 @@ module tlb_rand #(parameter ENTRY_BITS = 3) (
 | 
				
			|||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  logic [31:0] data;
 | 
					  logic [31:0] data;
 | 
				
			||||||
  assign data = $urandom;
 | 
					  assign data = 32'b0;
 | 
				
			||||||
  assign WriteIndex = data[ENTRY_BITS-1:0];
 | 
					  assign WriteIndex = data[ENTRY_BITS-1:0];
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
endmodule
 | 
					endmodule
 | 
				
			||||||
 | 
				
			|||||||
@ -1479,21 +1479,15 @@ module shifter_l64 (Z, A, Shift);
 | 
				
			|||||||
   logic [63:0]        stage3;
 | 
					   logic [63:0]        stage3;
 | 
				
			||||||
   logic [63:0]        stage4;
 | 
					   logic [63:0]        stage4;
 | 
				
			||||||
   logic [63:0]        stage5;   
 | 
					   logic [63:0]        stage5;   
 | 
				
			||||||
   logic [31:0]        thirtytwozeros = 32'h0;
 | 
					 | 
				
			||||||
   logic [15:0]        sixteenzeros = 16'h0;
 | 
					 | 
				
			||||||
   logic [ 7:0]        eightzeros = 8'h0;
 | 
					 | 
				
			||||||
   logic [ 3:0]        fourzeros = 4'h0;
 | 
					 | 
				
			||||||
   logic [ 1:0]        twozeros = 2'b00;
 | 
					 | 
				
			||||||
   logic 	       onezero = 1'b0;   
 | 
					 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
   output logic [63:0] Z;      
 | 
					   output logic [63:0] Z;      
 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
   mux2 #(64) mx01(A,      {A[31:0], thirtytwozeros}, Shift[5], stage1);   
 | 
					   mux2 #(64) mx01(A,      {A[31:0], 32'h0}, Shift[5], stage1);   
 | 
				
			||||||
   mux2 #(64) mx02(stage1, {stage1[47:0], sixteenzeros}, Shift[4], stage2);
 | 
					   mux2 #(64) mx02(stage1, {stage1[47:0], 16'h0}, Shift[4], stage2);
 | 
				
			||||||
   mux2 #(64) mx03(stage2, {stage2[55:0], eightzeros}, Shift[3], stage3);
 | 
					   mux2 #(64) mx03(stage2, {stage2[55:0], 8'h0}, Shift[3], stage3);
 | 
				
			||||||
   mux2 #(64) mx04(stage3, {stage3[59:0], fourzeros}, Shift[2], stage4);
 | 
					   mux2 #(64) mx04(stage3, {stage3[59:0], 4'h0}, Shift[2], stage4);
 | 
				
			||||||
   mux2 #(64) mx05(stage4, {stage4[61:0], twozeros}, Shift[1], stage5);
 | 
					   mux2 #(64) mx05(stage4, {stage4[61:0], 2'h0}, Shift[1], stage5);
 | 
				
			||||||
   mux2 #(64) mx06(stage5, {stage5[62:0], onezero}, Shift[0], Z);
 | 
					   mux2 #(64) mx06(stage5, {stage5[62:0], 1'h0}, Shift[0], Z);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endmodule // shifter_l64
 | 
					endmodule // shifter_l64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1507,21 +1501,15 @@ module shifter_r64 (Z, A, Shift);
 | 
				
			|||||||
   logic [63:0]        stage3;
 | 
					   logic [63:0]        stage3;
 | 
				
			||||||
   logic [63:0]        stage4;
 | 
					   logic [63:0]        stage4;
 | 
				
			||||||
   logic [63:0]        stage5;   		  
 | 
					   logic [63:0]        stage5;   		  
 | 
				
			||||||
   logic [31:0]        thirtytwozeros = 32'h0;		  
 | 
					 | 
				
			||||||
   logic [15:0]        sixteenzeros = 16'h0;
 | 
					 | 
				
			||||||
   logic [ 7:0]        eightzeros = 8'h0;
 | 
					 | 
				
			||||||
   logic [ 3:0]        fourzeros = 4'h0;
 | 
					 | 
				
			||||||
   logic [ 1:0]        twozeros = 2'b00;
 | 
					 | 
				
			||||||
   logic 	       onezero = 1'b0;   
 | 
					 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
   output logic [63:0] Z;
 | 
					   output logic [63:0] Z;
 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
   mux2 #(64) mx01(A, {thirtytwozeros, A[63:32]}, Shift[5], stage1);		  
 | 
					   mux2 #(64) mx01(A, {32'h0, A[63:32]}, Shift[5], stage1);		  
 | 
				
			||||||
   mux2 #(64) mx02(stage1, {sixteenzeros, stage1[63:16]}, Shift[4], stage2);
 | 
					   mux2 #(64) mx02(stage1, {16'h0, stage1[63:16]}, Shift[4], stage2);
 | 
				
			||||||
   mux2 #(64) mx03(stage2, {eightzeros, stage2[63:8]}, Shift[3], stage3);
 | 
					   mux2 #(64) mx03(stage2, {8'h0, stage2[63:8]}, Shift[3], stage3);
 | 
				
			||||||
   mux2 #(64) mx04(stage3, {fourzeros, stage3[63:4]}, Shift[2], stage4);
 | 
					   mux2 #(64) mx04(stage3, {4'h0, stage3[63:4]}, Shift[2], stage4);
 | 
				
			||||||
   mux2 #(64) mx05(stage4, {twozeros, stage4[63:2]}, Shift[1], stage5);
 | 
					   mux2 #(64) mx05(stage4, {2'h0, stage4[63:2]}, Shift[1], stage5);
 | 
				
			||||||
   mux2 #(64) mx06(stage5, {onezero, stage5[63:1]},  Shift[0], Z);
 | 
					   mux2 #(64) mx06(stage5, {1'h0, stage5[63:1]},  Shift[0], Z);
 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
endmodule // shifter_r64
 | 
					endmodule // shifter_r64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1534,19 +1522,14 @@ module shifter_l32 (Z, A, Shift);
 | 
				
			|||||||
   logic [31:0]        stage2;
 | 
					   logic [31:0]        stage2;
 | 
				
			||||||
   logic [31:0]        stage3;
 | 
					   logic [31:0]        stage3;
 | 
				
			||||||
   logic [31:0]        stage4;
 | 
					   logic [31:0]        stage4;
 | 
				
			||||||
   logic [15:0]        sixteenzeros = 16'h0;
 | 
					 | 
				
			||||||
   logic [ 7:0]        eightzeros = 8'h0;
 | 
					 | 
				
			||||||
   logic [ 3:0]        fourzeros = 4'h0;
 | 
					 | 
				
			||||||
   logic [ 1:0]        twozeros = 2'b00;
 | 
					 | 
				
			||||||
   logic 	       onezero = 1'b0;   
 | 
					 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
   output logic [31:0] Z;      
 | 
					   output logic [31:0] Z;      
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   mux2 #(32) mx01(A,      {A[15:0], sixteenzeros},    Shift[4], stage1);
 | 
					   mux2 #(32) mx01(A,      {A[15:0], 16'h0},    Shift[4], stage1);
 | 
				
			||||||
   mux2 #(32) mx02(stage1, {stage1[23:0], eightzeros}, Shift[3], stage2);
 | 
					   mux2 #(32) mx02(stage1, {stage1[23:0], 8'h0}, Shift[3], stage2);
 | 
				
			||||||
   mux2 #(32) mx03(stage2, {stage2[27:0], fourzeros},  Shift[2], stage3);
 | 
					   mux2 #(32) mx03(stage2, {stage2[27:0], 4'h0},  Shift[2], stage3);
 | 
				
			||||||
   mux2 #(32) mx04(stage3, {stage3[29:0], twozeros},   Shift[1], stage4);
 | 
					   mux2 #(32) mx04(stage3, {stage3[29:0], 2'h0},   Shift[1], stage4);
 | 
				
			||||||
   mux2 #(32) mx05(stage4, {stage4[30:0], onezero},    Shift[0], Z);
 | 
					   mux2 #(32) mx05(stage4, {stage4[30:0], 1'h0},    Shift[0], Z);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endmodule // shifter_l32
 | 
					endmodule // shifter_l32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1559,19 +1542,14 @@ module shifter_r32 (Z, A, Shift);
 | 
				
			|||||||
   logic [31:0]        stage2;
 | 
					   logic [31:0]        stage2;
 | 
				
			||||||
   logic [31:0]        stage3;
 | 
					   logic [31:0]        stage3;
 | 
				
			||||||
   logic [31:0]        stage4;
 | 
					   logic [31:0]        stage4;
 | 
				
			||||||
   logic [15:0]        sixteenzeros = 16'h0;
 | 
					 | 
				
			||||||
   logic [ 7:0]        eightzeros = 8'h0;
 | 
					 | 
				
			||||||
   logic [ 3:0]        fourzeros = 4'h0;
 | 
					 | 
				
			||||||
   logic [ 1:0]        twozeros = 2'b00;
 | 
					 | 
				
			||||||
   logic 	       onezero = 1'b0;   
 | 
					 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
   output logic [31:0] Z;
 | 
					   output logic [31:0] Z;
 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
   mux2 #(32) mx01(A,      {sixteenzeros, A[31:16]},   Shift[4], stage1);
 | 
					   mux2 #(32) mx01(A,      {16'h0, A[31:16]},   Shift[4], stage1);
 | 
				
			||||||
   mux2 #(32) mx02(stage1, {eightzeros, stage1[31:8]}, Shift[3], stage2);
 | 
					   mux2 #(32) mx02(stage1, {8'h0, stage1[31:8]}, Shift[3], stage2);
 | 
				
			||||||
   mux2 #(32) mx03(stage2, {fourzeros, stage2[31:4]},  Shift[2], stage3);
 | 
					   mux2 #(32) mx03(stage2, {4'h0, stage2[31:4]},  Shift[2], stage3);
 | 
				
			||||||
   mux2 #(32) mx04(stage3, {twozeros, stage3[31:2]},   Shift[1], stage4);
 | 
					   mux2 #(32) mx04(stage3, {2'h0, stage3[31:2]},   Shift[1], stage4);
 | 
				
			||||||
   mux2 #(32) mx05(stage4, {onezero, stage4[31:1]},    Shift[0], Z);
 | 
					   mux2 #(32) mx05(stage4, {1'h0, stage4[31:1]},    Shift[0], Z);
 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
endmodule // shifter_r32
 | 
					endmodule // shifter_r32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -80,7 +80,7 @@ module csrc (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            for (j=0; j<= `COUNTERS; j = j+1) begin 
 | 
					            for (j=0; j<= `COUNTERS; j = j+1) begin 
 | 
				
			||||||
                // Write enables
 | 
					                // Write enables
 | 
				
			||||||
                if (j !==1) begin
 | 
					                if (j != 1) begin
 | 
				
			||||||
                    assign WriteHPMCOUNTERM[j] = CSRMWriteM && (CSRAdrM == MHPMCOUNTER[j]);
 | 
					                    assign WriteHPMCOUNTERM[j] = CSRMWriteM && (CSRAdrM == MHPMCOUNTER[j]);
 | 
				
			||||||
                    // Count Signals 
 | 
					                    // Count Signals 
 | 
				
			||||||
                    assign HPMCOUNTERPlusM[j] = HPMCOUNTER_REGW[j] + {63'b0, MCOUNTEN[j] & ~MCOUNTINHIBIT_REGW[j]}; 
 | 
					                    assign HPMCOUNTERPlusM[j] = HPMCOUNTER_REGW[j] + {63'b0, MCOUNTEN[j] & ~MCOUNTINHIBIT_REGW[j]}; 
 | 
				
			||||||
 | 
				
			|||||||
@ -24,6 +24,7 @@
 | 
				
			|||||||
///////////////////////////////////////////
 | 
					///////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
`include "wally-config.vh"
 | 
					`include "wally-config.vh"
 | 
				
			||||||
 | 
					`include "wally-constants.vh"
 | 
				
			||||||
/* verilator lint_on UNUSED */
 | 
					/* verilator lint_on UNUSED */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module wallypipelinedhart (
 | 
					module wallypipelinedhart (
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user