实验现象:
将一组固定的数据(三角波、正弦波)存储在IP核构建的rom中。系统工作时,从rom中按照地址顺序读取数据,有modelsim仿真工具观察波形。
第一步:
第二步:配置ip核rom
主要设置数据位宽和地址深度。
第三步:
rom默认必须要有一个初始化.mif文件(而ram不必要),需要在一开始就先新建一个.mif文件。
第四步:
生成IP核后,记着把.qip文件设置成Top顶层文件。
testbench测试文件编写:
`timescale 1ns/1ns
`define clock_period 20
module rom_tb;
reg [7:0] address;
reg clock;
wire [7:0] q;
integer i;
rom rom(
.address(address),
.clock(clock),
.q(q)
);
initial clock=1;
always #(`clock_period/2) clock=~clock;
initial begin
address=0;
#(`clock_period*20+1);
for(i=0;i<=255;i=i+1) begin
#(`clock_period);
address=address+1;
end
#(`clock_period*20);
$stop;
end
endmodule
这里三角波是数据宽度=8位0~255,地址深度=256,从0~128~1一共256个数字;
正弦波是数据宽度=10位0~1023,地址宽度=2048,从512~1023~0~510一共2048个数字;
所以在编辑rom IP核时需要注意位宽和深度,在tesbench中的激励定义和for循环中也要做相应的修改。
波形图分析:
图1和图二都是三角波
图三是正弦波
图四是对上面的三角波和正弦波合在一个mif文件中,修改rom位宽和深度读取到的数据波形
如何在已有的IP核基础上进行编辑: