FPGA21 嵌入式块Ram应用之Rom(Read only memory)

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第1张图片

FPGA21 嵌入式块Ram应用之Rom(Read only memory)

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第2张图片

模块名称: romIP Core

主要功能 :调用内部的资源,实现只读功能

实验目的 :了解这些芯片专用硬件资源的情况下,将其合理的应用到对应的系统中.

主要应用: 系统一些初始化参数的配置的数据,DAC实现的任意信号的发送。

实验现象:

1、将一组固定的数据(三角波形表)存储在FPGA中使用IP核构建的片上ROM中,开发板上电后,系统开始从ROM中读出数据,并将数据直接通过并口输出。通过使用signalTapⅡl软件实时抓取并口上的数据,显示得到三角波形。

2、使用Quartusll软件中提供的 Iln-System Memory ContentEditor工具在线更改ROM中的数据(将数据更改为正弦波形表),再次观察signal Tap l工具抓取到的波形数据。

使用 signalTapⅡ 调试的一种方式:

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第3张图片

知识点:
1、ROM存储器lP核的使用

2、In-system Memory Content Editor内存查看工具的使用。

3、SignalTap Ⅱ调试工具的简单使用

使用IP 核配置 单口ROM设计流程:

1、选中 Tools --> MegaWizard Plug-In Manager

2、开始下方的配置操作

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第4张图片

2、rom模块的配置

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第5张图片

1、首先,我们使用的是使用Ram 实现的Rom功能,也就是说,由原来的可【读/写】,变成 了只可以【读】功能。

所以在 图上可以看到输入端只有两个端口:

​ ① address[] ② clock

输出端只有1个端口 : q[7:0].

所以在图上也可以看到rom的结构是 不支持写操作的,这个也是符合我们对rom 的理解

2、配置选项介绍

​ 数据输出端的位宽 q

​ rom的字节大小

​ 内存内部的结构类型 : 注,一般来说选择 auto 即可

​ 输入和输出时钟的配置: 有两个选择; ① 选择单一时钟 ② 输入输出选择不同的时钟

3、选项配置操作

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第6张图片

① 选择是否加入寄存器

② 是否创建时钟使能信号

③是否创建一个寄存器数据清零信号

④是否创建一个读使能信号

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第7张图片

提示使用 hex文件或者是 mif 文件对rom 进行初始化。

所以我们要先创建一个mif数据初始化文件。

创建一个mif文件

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第8张图片

配置生成的内存大小和数据位宽

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第9张图片

可以看到生成的mif文件

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第10张图片

接下来就是对所有的数据进行修改

本次我们使用excel 生成一个三角波信号

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第11张图片

对生成的数据复制到mif文件中,结果如下:

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第12张图片

再次进行上述的配置操作:即

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第13张图片

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第14张图片

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第15张图片

设置位顶层文件,但是编译效果如下:

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第16张图片

注:表示工程的mif 文件只能是存放在 prj/xxx.mif 中,而不能存放在其它文件中,即存放在更目录下。

rom 模块测试:

rom_tb.v文件

`timescale 1ns/1ns

`define clk_period 20

module rom_tb;

	reg [7:0]addr;
	reg clk;
	
	wire [7:0]q;

	rom rom(
		.address(addr),
		.clock(clk),
		.q(q)
	);
	
	initial clk = 1;
	always #(`clk_period/2) clk = ~clk;
	
	integer i;
	
	initial begin
		addr = 0;
		#21;
		for(i=0;i<2550;i=i+1)begin
			#`clk_period;
			addr = addr + 1;	
		end
		#(`clk_period * 50);
		$stop;	
	end
	
endmodule

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第17张图片

可以看到,数据数据会延迟一个时钟周期变化(注:不是两个时钟周期,数据到来之后,只有再次捕获到时钟上升沿才会变化)

将数据修改为可以理解的三角波形(我们实际效果的波形现阶段是三角波)的操作:

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第18张图片

通过该地方进行修改,即可得到模拟的三角波,效果如下所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c0LBGtnB-1628069863133)(E:/Blog_Template/source/_posts/img/blog_img/fpga/image-20210315160718951.png)]

注: 这个是我们在仿真中可以做到和实际电路中运行的效果尽可能的保持一致,便于我们分析

​ 我们切换 sin.mif 文件,再次编译和仿真,得到的效果如下所示:

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第19张图片

发现波形很奇怪,我们需要修改显示的一个方式,具体操作如下所示:

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第20张图片

修该显示的最小值和最大值:

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第21张图片

调整完以后,显示的效果如下所示:

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第22张图片

可以看到一个sin波形

当为我们仿真的时间拉长的时候,得到的效果如下所示:

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第23张图片

2、In-system Memory Content Editor 内存查看工具的使用。

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第24张图片

编写顶层文件

ROM_top.v

module ROM_top(Clk,Rst_n,q);

	input Clk;
	input Rst_n;
	
	output [7:0]q;
	
	reg [7:0]addr;
	
	rom rom(
		.address(addr),
		.clock(Clk),
		.q(q)
	);
	
	always@(posedge Clk or negedge Rst_n)
	if(!Rst_n)
		addr <= 8'd0;
	else 
		addr <= addr + 1'b1;

endmodule

创建文件,使用内部逻辑分析仪:

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第25张图片

效果如下所示:

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第26张图片

具体配置如下:

①配置时钟

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第27张图片

② 配置要分析(抓取)的数据

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第28张图片

可以看到,添加我们要检测的信号即可(根据实际情况来选中)

③ 选择采样的数据深度(根据自己设计的需求来进行设计即可)

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第29张图片

配置添加好的文件如下:

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第30张图片

再次对项目编译,烧写文件到芯片中后。

双击打开 stp1.stp文件

进行一定的设置,如下所示:

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第31张图片

可以点击单词抓取或者连续抓取(注;一定要点击,不然下方的数据是无法显示的)

抓取的数据如下所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SQKabCYD-1628069863142)(E:/Blog_Template/source/_posts/img/blog_img/fpga/image-20210315165835633.png)]

可以看到仅仅是个数据,但是我们想要看的是波形,便于我们进行分析

所以开启如下配置:

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第32张图片

修改好后,就可以看到数据的波形了,如下所示:

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第33张图片

在线修改Rom中的数据操作:

将三角波的数据修改成 正弦波的数据

① 选中 In-System Memory Content Editor

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第34张图片

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第35张图片

修改[xxx.mif]文件操作:

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第36张图片

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第37张图片

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第38张图片

点击写入到fpga,即可完成rom中数据的修改。

此时再次观看波形

FPGA21 嵌入式块Ram应用之Rom(Read only memory)_第39张图片

可以发现,数据修改成功了。

你可能感兴趣的:(FPGA)