百度百科:RAM
随机存取存储器(random access memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。
存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。 按照存储单元的工作原理,随机存储器又分为静态随机存储器(英文:Static RAM,SRAM)和动态随机存储器(英文Dynamic RAM,DRAM)。
这里直接调用ip核进行测试
选择单口的ram进行写数据操作,并通过波形分析chipscope进行数据的核对
因为这里我截图不方便就不贴RAM核的生成过程了后面转一篇至芯科技的ram核的生成贴供大家参考
话不多说直接贴代码:
top.v:
moduletop(ext_clk_25m,ext_rst_n,ram_rddb ); inputext_clk_25m; inputext_rst_n; output[7:0] ram_rddb; ram_controlleruut_ram_controller( .clk(ext_clk_25m), .rst_n(ext_rst_n), .ram_rddb(ram_rddb) ); endmodule
ram_controller.v:
moduleram_controller(clk,rst_n,ram_rddb ); inputclk; inputrst_n; output [7:0] ram_rddb; reg [4:0]ram_addr;//RAM地址reg [7:0]ram_wrdb;//RAM写入数据regram_wren;//写入使能reg[9:0] cnt; always@(posedgeclkornegedgerst_n)beginif(rst_n==1'b0)begincnt<=1'b0;endelsebegincnt<=cnt+1'b1;endendalways@(posedgeclkornegedgerst_n)beginif(rst_n==1'b0)beginram_wren<=1'b0;ram_wrdb<=1'b0;ram_addr<=1'b0;endelseif((cnt>10'd0)&&(cnt<10'd33))beginram_wren<=1'b1;ram_wrdb<=ram_wrdb+1'b1;ram_addr<=ram_addr+1'b1;endelseif((cnt>10'd0)&&(cnt<10'd33))beginram_wren<=1'b1;ram_wrdb<=1'd0;ram_addr<=ram_addr+1'b1;endelsebeginram_wren<=1'b0;ram_wrdb<=1'b0;ram_addr<=1'b0;endendmy_ramyour_instance_name ( .clka(clk), //inputclka .wea(ram_wren), //input [0 : 0] wea .addra(ram_addr), //input [4 : 0] addra .dina(ram_wrdb), //input [7 : 0] dina .douta(ram_rddb) //output [7 : 0] douta ); endmodule
如果使用波形分析仪的话需要新建cdc文件
配置文件的方法我博文中有讲到
写博文的时候不小心把波形分析仪关闭了就不跟截图了over