用Verilog编写同步RAM

编程知识 更新时间:2023-04-07 00:52:11

本文转载自泡面狂的博客的博客:http://blog.sina/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资源中。

更多推荐

用Verilog编写同步RAM

本文发布于:2023-04-07 00:52:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/342171b5e34bb5b4a44493a8d1e8b530.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Verilog   RAM

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 51460文章数
  • 14阅读数
  • 0评论数