0
点赞
收藏
分享

微信扫一扫

FPGA-RAM核的使用及调试


百度百科:RAM

随机存取存储器(random access memory,RAM)又称作“随机存储器​”,是与CPU​直接交换数据的内部存储器​,也叫主存​(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。

存储单元​的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。 按照存储单元的工作原理,随机存储器又分为静态随机存储器​(英文:Static RAM,SRAM)和动态随机存储器(英文Dynamic RAM,DRAM)。

这里直接调用ip核进行测试

选择单口的ram进行写数据操作,并通过波形分析chipscope进行数据的核对

因为这里我截图不方便就不贴RAM核的生成过程了后面转一篇至芯科技的ram核的生成贴供大家参考

话不多说直接贴代码:

top.v:

module top(ext_clk_25m,ext_rst_n,ram_rddb
);
input ext_clk_25m;
input ext_rst_n;
output[7:0] ram_rddb;

ram_controller uut_ram_controller(
.clk(ext_clk_25m),
.rst_n(ext_rst_n),
.ram_rddb(ram_rddb)
);
endmodule

ram_controller.v:

module ram_controller(clk,rst_n,ram_rddb
);
input clk;
input rst_n;
output [7:0] ram_rddb;

reg [4:0]ram_addr;//RAM地址
reg [7:0]ram_wrdb;//RAM写入数据
reg ram_wren;//写入使能
reg[9:0] cnt;
always@(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
cnt<=1'b0;
end
else begin
cnt<=cnt+1'b1;
end
end
always@(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
ram_wren<=1'b0;
ram_wrdb<=1'b0;
ram_addr<=1'b0;
end
else if((cnt>10'd0)&&(cnt<10'd33))begin
ram_wren<=1'b1;
ram_wrdb<=ram_wrdb+1'b1;
ram_addr<=ram_addr+1'b1;
end
else if((cnt>10'd0)&&(cnt<10'd33))begin
ram_wren<=1'b1;
ram_wrdb<=1'd0;
ram_addr<=ram_addr+1'b1;
end
else begin
ram_wren<=1'b0;
ram_wrdb<=1'b0;
ram_addr<=1'b0;
end
end
my_ram your_instance_name (
.clka(clk), // input clka
.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

举报

相关推荐

0 条评论