vivado ROM IP核简单使用
vivado配置
下面选择数据的存储深度和数据的位宽
ROM内存储的数据由coe文件初始化
下面是初始化coe文件的内容
memory_initialization_radix=10;
memory_initialization_vector=
1,
2,
3,
4,
5,
6,
7,
8,
9,
10; //每个数据后面用逗号或者空格或者换行符隔开,最后一个数据后面加分号
第一行定义的是数据的格式,可以是2进制,10进制,16进制数据,下面的数据要以分号结尾。
仿真结果
`timescale 1ns / 1ps
module tb_ROM();
//输入
reg sys_clk;
reg sys_rst_n;
reg ena;
//output
wire [15 : 0] douta;
//信号初始化
initial begin
sys_clk = 1'b0;
sys_rst_n = 1'b0;
ena = 1'b1;
#10
sys_rst_n = 1'b1;
end
//生成时钟
always #10 sys_clk = ~sys_clk;
reg [3 : 0] rom_addr; //ROM输入地址
always @ (posedge sys_clk or negedge sys_rst_n)
begin
if(!sys_rst_n | (rom_addr >= 9))
rom_addr <= 4'b0;
else
rom_addr <= rom_addr+1'b1;
end
blk_mem_gen_0 u_blk_mem_gen_0 (
.clka(sys_clk), // input wire clka
.ena(ena), // input wire ena
.addra(rom_addr), // input wire [3 : 0] addra
.douta(douta) // output wire [15 : 0] douta
);
endmodule
2022年3月29日
生成ROM有两种不同的方式,分别是Block RAM 和Distributed RAM。
简称是bram和dram。
其中bram是在芯片设计的时候就已经硬件实现了,无论是否使用,都在那里放着,而dram是利用FPGA中的逻辑资源实现的,可以实现使用多少就生成多少。
bram:
- 存储容量大,且必须使用时钟触发
dram:
- 使用灵活,且可以使用时钟也可以不使用时钟组合逻辑输出。
二者使用的简单原则一般是:
较大的存储应用,用bram;零星的小ram,用dram。当然只是一般原则,要结合实际项目考虑