赞
踩
ROM简介
ROM(read only memory)中的数据需要先进行初始化,即要先将数据写入到 ROM 内部的存储单元中;然后系统正常工作时,只能读出其中存储的数据。而不能写入信息。掉电不丢失。
在 FPGA 中,ROM 常 用于存放初始数据。
思想与Vivado ROM IP核的配置一样。
主要有:
How wide should the ‘q’ output bus be?:用于指定输出端口的位宽,默认值为 8;
z How many 8-bit words of memory?:用于指定存储器的深度,默认值为 256;
q output port:用于选择是否寄存输出端口 q,默认值为选择。
Do you want to specify the initial content of the memory?:用于指定存储器的初始存储数据内容,我们需要为存储器提供存储器初始化文件(.mif)或者 Inter 格式的 16 进制文件(.hex)。
该 IP 核能生成的所有文件中,ROM_inst.v 是我们 ROM 初始化模板。
用记事本打开,可以看到.mif的格式
最后有个end
利用 Quartus II 软件自带的 mif 编辑器生成 mif 文件:对于小容量的 ROM,我们可以快速方便的完成 mif 文件的编辑工作
【File】→【new】,在弹出的对话框中,我们选择【Memory Initialization file】点击打开
利用 C 语言、Matlab 或者一些实用的软件工具生成 mif 文件
testbench
`timescale 1 ps/ 1 ps module Verilog_Ip_ROM_vlg_tst(); reg CLK_50M; reg RST_N; reg [4:0] address; reg [4:0] address_n; wire [7:0] readdata; Verilog_Ip_ROM i1 ( .CLK_50M(CLK_50M), .RST_N(RST_N), .address(address), .readdata(readdata) ); initial begin CLK_50M = 0; RST_N = 0; #10 RST_N = 1; #1000000 $stop; end always #10000 CLK_50M = ~CLK_50M; always @ (negedge CLK_50M or negedge RST_N) begin if(!RST_N) address <= 1'b0; else address <= address_n; end always @ (*) begin if(address == 5'd31) address_n = 1'b0; else address_n = address + 1'b1; end endmodule
仿真结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。