mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Fixed RAM bugs and refactored with read taking place after clock edge rather than before.
This commit is contained in:
		
							parent
							
								
									9f3c051f8d
								
							
						
					
					
						commit
						a194740562
					
				@ -34,7 +34,7 @@
 | 
			
		||||
 | 
			
		||||
`include "wally-config.vh"
 | 
			
		||||
 | 
			
		||||
module ram1p1rwbe #(parameter DEPTH=64, WIDTH=128) (
 | 
			
		||||
module ram1p1rwbe #(parameter DEPTH=64, WIDTH=44) (
 | 
			
		||||
  input logic                     clk,
 | 
			
		||||
  input logic                     ce,
 | 
			
		||||
  input logic [$clog2(DEPTH)-1:0] addr,
 | 
			
		||||
@ -69,7 +69,7 @@ module ram1p1rwbe #(parameter DEPTH=64, WIDTH=128) (
 | 
			
		||||
			      .A(addr), .D(din), 
 | 
			
		||||
			      .BWEB(~BitWriteMask), .Q(dout));
 | 
			
		||||
 | 
			
		||||
  end else if (`USE_SRAM == 1 & WIDTH == 22  & DEPTH == 32) begin // RV32 cache tag
 | 
			
		||||
  end else if ((`USE_SRAM == 1) & (WIDTH == 22)  & (DEPTH == 64)) begin // RV32 cache tag
 | 
			
		||||
     genvar index;
 | 
			
		||||
     // 64 x 22-bit SRAM
 | 
			
		||||
     logic [WIDTH-1:0] BitWriteMask;
 | 
			
		||||
@ -86,9 +86,15 @@ module ram1p1rwbe #(parameter DEPTH=64, WIDTH=128) (
 | 
			
		||||
    integer i;
 | 
			
		||||
 | 
			
		||||
    // Read
 | 
			
		||||
    always_ff @(posedge clk) 
 | 
			
		||||
      if(ce) dout <= #1 RAM[addr];
 | 
			
		||||
 
 | 
			
		||||
    logic [$clog2(DEPTH)-1:0] addrd;
 | 
			
		||||
    flopen #($clog2(DEPTH)) adrreg(clk, ce, addr, addrd);
 | 
			
		||||
    assign dout = RAM[addrd];
 | 
			
		||||
 | 
			
		||||
    /*      // Read
 | 
			
		||||
      always_ff @(posedge clk) 
 | 
			
		||||
	if(ce) dout <= #1 mem[addr]; */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // Write divided into part for bytes and part for extra msbs
 | 
			
		||||
	// Questa sim version 2022.3_2 does not allow multiple drivers for RAM when using always_ff.
 | 
			
		||||
	// Therefore these always blocks use the older always @(posedge clk) 
 | 
			
		||||
 | 
			
		||||
@ -33,7 +33,7 @@
 | 
			
		||||
 | 
			
		||||
`include "wally-config.vh"
 | 
			
		||||
 | 
			
		||||
module ram2p1r1wbe #(parameter DEPTH=128, WIDTH=256) (
 | 
			
		||||
module ram2p1r1wbe #(parameter DEPTH=1024, WIDTH=68) (
 | 
			
		||||
  input  logic                     clk,
 | 
			
		||||
  input  logic                     ce1, ce2,
 | 
			
		||||
  input  logic [$clog2(DEPTH)-1:0] ra1,
 | 
			
		||||
@ -52,7 +52,7 @@ module ram2p1r1wbe #(parameter DEPTH=128, WIDTH=256) (
 | 
			
		||||
  // TRUE Smem macro
 | 
			
		||||
  // ***************************************************************************
 | 
			
		||||
 | 
			
		||||
   if (`USE_SRAM == 1 & WIDTH == 68 & DEPTH == 1024) begin
 | 
			
		||||
   if ((`USE_SRAM == 1) & (WIDTH == 68) & (DEPTH == 1024)) begin
 | 
			
		||||
   
 | 
			
		||||
      ram2p1r1wbe_1024x68 memory1(.CLKA(clk), .CLKB(clk), 
 | 
			
		||||
				  .CEBA(~ce1), .CEBB(~ce2),
 | 
			
		||||
@ -64,7 +64,7 @@ module ram2p1r1wbe #(parameter DEPTH=128, WIDTH=256) (
 | 
			
		||||
				  .QA(rd1),
 | 
			
		||||
				  .QB());
 | 
			
		||||
 | 
			
		||||
   end else if (`USE_SRAM == 1 & WIDTH == 36 & DEPTH == 1024) begin
 | 
			
		||||
   end else if ((`USE_SRAM == 1) & (WIDTH == 36) & (DEPTH == 1024)) begin
 | 
			
		||||
   
 | 
			
		||||
      ram2p1r1wbe_1024x36 memory1(.CLKA(clk), .CLKB(clk), 
 | 
			
		||||
				  .CEBA(~ce1), .CEBB(~ce2),
 | 
			
		||||
@ -76,7 +76,7 @@ module ram2p1r1wbe #(parameter DEPTH=128, WIDTH=256) (
 | 
			
		||||
				  .QA(rd1),
 | 
			
		||||
				  .QB());      
 | 
			
		||||
 | 
			
		||||
   end else if (`USE_SRAM == 1 & WIDTH == 2 & DEPTH == 1024) begin
 | 
			
		||||
   end else if ((`USE_SRAM == 1) & (WIDTH == 2) & (DEPTH == 1024)) begin
 | 
			
		||||
 | 
			
		||||
      logic [SRAMWIDTH-1:0]     SRAMReadData;      
 | 
			
		||||
      logic [SRAMWIDTH-1:0]     SRAMWriteData;      
 | 
			
		||||
@ -113,9 +113,14 @@ module ram2p1r1wbe #(parameter DEPTH=128, WIDTH=256) (
 | 
			
		||||
      // ***************************************************************************
 | 
			
		||||
      integer i;
 | 
			
		||||
      
 | 
			
		||||
      // Read
 | 
			
		||||
    // Read
 | 
			
		||||
    logic [$clog2(DEPTH)-1:0] ra1d;
 | 
			
		||||
    flopen #($clog2(DEPTH)) adrreg(clk, ce1, ra1, ra1d);
 | 
			
		||||
    assign rd1 = mem[ra1d];
 | 
			
		||||
 | 
			
		||||
/*      // Read
 | 
			
		||||
      always_ff @(posedge clk) 
 | 
			
		||||
	if(ce1) rd1 <= #1 mem[ra1];
 | 
			
		||||
	if(ce1) rd1 <= #1 mem[ra1]; */
 | 
			
		||||
   
 | 
			
		||||
   // Write divided into part for bytes and part for extra msbs
 | 
			
		||||
   if(WIDTH >= 8) 
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user