Make DFFRAM behavioural COLS parameter
We want to use the DFFRAM behavioural with other sizes, so add
in the COLS parameter.
diff --git a/verilog/rtl/DFFRAM.v b/verilog/rtl/DFFRAM.v
index b80677f..59f0375 100644
--- a/verilog/rtl/DFFRAM.v
+++ b/verilog/rtl/DFFRAM.v
@@ -16,31 +16,45 @@
`default_nettype none
`ifndef USE_CUSTOM_DFFRAM
-module DFFRAM(
+module DFFRAM #( parameter COLS=1)
+(
`ifdef USE_POWER_PINS
- input VPWR,
- input VGND,
+ VPWR,
+ VGND,
`endif
- input CLK,
- input [3:0] WE,
- input EN,
- input [31:0] Di,
- output reg [31:0] Do,
- input [7:0] A
+ CLK,
+ WE,
+ EN,
+ Di,
+ Do,
+ A
);
-
+ localparam A_WIDTH = 8+$clog2(COLS);
-reg [31:0] mem [0:`MEM_WORDS-1];
+`ifdef USE_POWER_PINS
+ input VPWR;
+ input VGND;
+`endif
+ input wire CLK;
+ input wire [3:0] WE;
+ input wire EN;
+ input wire [31:0] Di;
+ output reg [31:0] Do;
+ input wire [(A_WIDTH - 1): 0] A;
-always @(posedge CLK) begin
- if (EN == 1'b1) begin
- Do <= mem[A];
- if (WE[0]) mem[A][ 7: 0] <= Di[ 7: 0];
- if (WE[1]) mem[A][15: 8] <= Di[15: 8];
- if (WE[2]) mem[A][23:16] <= Di[23:16];
- if (WE[3]) mem[A][31:24] <= Di[31:24];
- end
-end
+ reg [31:0] RAM[(256*COLS)-1 : 0];
+
+ always @(posedge CLK)
+ if(EN) begin
+ Do <= RAM[A];
+ if(WE[0]) RAM[A][ 7: 0] <= Di[7:0];
+ if(WE[1]) RAM[A][15:8] <= Di[15:8];
+ if(WE[2]) RAM[A][23:16] <= Di[23:16];
+ if(WE[3]) RAM[A][31:24] <= Di[31:24];
+ end
+ else
+ Do <= 32'b0;
+
endmodule
`else
@@ -173,4 +187,4 @@
endmodule
-`endif
\ No newline at end of file
+`endif