用Verilog编写同步RAM

本文介绍了一种在FPGA设计中利用Block RAM资源的方法,通过Verilog代码实现单时钟双端口同步RAM,该方法已在ISE和Quartus中验证,能够有效节省逻辑资源并提升性能。

本文转载自泡面狂的博客的博客:http://blog.sina.com.cn/s/blog_79ce0d8f0101g0n1.html

在FPGA设计实现中,经常要用到RAM,这里的RAM一般指的是是静态的RAM。一般FPGA(如xilinx)中就有所谓的block RAM, 它就是现成的RAM资源,我们如果合理编写verilog代码,就可以使我们想要的RAM被综合成block RAM,从而节省逻辑资源,而且性能更优。

下面是一个单时钟同步RAM的模板:

代码已在quartus中验证

    module ram_X(
        //input:
        clk,
        wen,
        din,
        waddr,
        raddr,
        //output:
        dout
        );

        parameter   DWIDTH = 8; //数据宽度,请根据实际情况修改
        parameter   AWIDTH = 10; //地址宽度,请根据实际情况修改

        input clk;
        input wen;
        input [DWIDTH-1:0] din;
        input [AWIDTH-1:0] waddr;
        input   [AWIDTH-1:0] raddr;
        output [DWIDTH-1:0] dout; 

        reg [DWIDTH-1:0] RAM [2**AWIDTH-1:0];
        reg [AWIDTH-1:0] raddr_reg;

        always @ (posedge clk)
        begin
            if(wen) 
                begin
                RAM[waddr] <= din;
            end
        end

        always @ (posedge clk)
        begin
            raddr_reg <= raddr;
        end

        assign dout = RAM[raddr_reg];
    endmodule
	 

 

总结:

上面代码从功能上描述了一个单时钟双端口同步RAM的编写方法,在ISE和quartus中都能通过综合,被映射到实际的block RAM资源中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值