FPGA:ROM(IP核)使用实例
一、实验要求:
调用Quartus II
自带的IP核,生成ROM,并设置ROM存储的数值,实现正弦波、三角波和锯齿波的输出,并使用在线逻辑分析工具Signal Tap
观察波形。
二、实验步骤:
1.ROM介绍
ROM(Read Only Memory)只读存储器,这种存储器(Memory)的内容任何情况下都不会改变,电脑与用户只能读取保存在这里的指令,和使用存储在ROM的资料,但不能变更或存入资料。ROM被存储在一个非易失性芯片上,也就是说,即使在关机之后记忆的内容仍可以被保存,所以这种存储器多用来存储特定功能的程序,如固件。
ROM有地址,只能读而不能写。用初始化文件mif/ceo
将内容存进去,读取不会使得数据减少消失。
2.生成波形数据文件(sin.mif、Triangle.mif、Sawtooth.mif)
生成mif文件的方法有三种:
1.利用Quartus自带的mif编辑器
2.利用mif软件(Mif_Maker2010.exe 提取码:03ey)来生成
3.利用高级语言生成
这里我用第二种方法,Mif_Maker生成:
首先设置全局参数:
设置波形的长度为 512,宽度为 8 :
sin.mif
:
Triangle.mif
:
Sawtooth.mif
:
3.Quartus配置ROM核并将mif文件加入工程
1.找到ROM-1PORT
,并创建rom.v
文件:
2.配置ROM空间的位宽和字长:
3.找到mif波形文件路径:
图中仅示例了sin.mif
文件添加路径,其他两个路径按照上述步骤新建rom1.v
、rom2.v
添加波形路径。
4.将mif文件添加至工程:
Assignments
-> Settings
-> Files
,选中需添加至工程的mif文件后,记得点击OK
,这样才会保存刚刚改动的设置。
5.写地址控制器:
//地址寄存器
reg [9:0] addr = 10'd0;
//地址控制
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
addr <= 10'd0;
else if(addr == 10'd511)
addr <= 10'd0;
else
addr <= addr + 1'b1;
end
5.调用ROM核:
//Sin
rom my_rom1(
.address (addr),
.clock (clk),
.q (Sin)
);
//Triangle
rom1 my_rom2(
.address (addr),
.clock (clk),
.q (Triangle)
);
//Sawtooth
rom2 my_rom3(
.address (addr),
.clock (clk),
.q (Sawtooth)
);
三、实验仿真:
1.新建testbeach文件:
`timescale 1ns/1ns
module rom_tb();
reg clk;
reg rst;
wire [7:0] Sin;
wire [7:0] Triangle;
wire [7:0] Sawtooth;
initial begin
clk <= 0;
rst <= 0;
#15
rst <= 1;
end
always begin
#10 clk <= ~clk;
end
rom_test rom_sin(
.clk (clk),
.rst_n (rst),
.Sin (Sin),
.Triangle (Triangle),
.Sawtooth (Sawtooth)
);
endmodule
2.modelism仿真结果:
因为数据没有波形明显,我们这里需要将这三个信号设置一下:
Format - Analog(custom) :
最后仿真波形显示如下:
四、在线逻辑分析
1.新建STL文件:
2.设置clk和数据分析长度
3.添加分析信号:
4.保存文件并进行编译
5.添加设备
6.分析仿真:
7.调制设置显示波形:
选择 Bus Display Format
- Unsigned Line Chart
版权声明:本文为qq_44852369原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。