在FPGA设计实现中,经常要用到RAM,这里的RAM一般指的是是静态的RAM。一般FPGA(如xilinx)中就有所谓的block RAM, 它就是现成的RAM资源,我们如果合理编写verilog代码,就可以使我们想要的RAM被综合成block RAM,从而节省逻辑资源,而且性能更优。
在书写某些模块时候,用到了特别大的RAM,比如reg [14:0] mem[0:9999999];通常情况下会出现无法综合的情况,这时候我们就需要自己书写一个RAM模块,然后在原来模块中调用RAM模块。
module double_ram_gclis
#(
parameter DATA_WDTH = 6'd15, //输入数据的位宽
parameter COL = 2048, //RAM中数据个数
parameter COL_BITS = 11 //地址线位数
)
(
input clk, //时钟信号
input [COL_BITS-1:0] addra, //写入数据的地址
input [DATA_WDTH-1:0] dina, //写入的数据
input wea, //写有效信号
input [COL_BITS-1:0] addrb, //输出数据的地址
output [DATA_WDTH-1:0] doutb //输出的数据
);
reg [DATA_WDTH-1:0] mem[0:COL-1]; //定义RAM
assign doutb = mem[addrb + 0];
always @ ( posedge c