IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> FPGA21 嵌入式块Ram应用之Rom(Read only memory) -> 正文阅读

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

在这里插入图片描述

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B1eJSYkr-1628069863115)(img/blog_img/fpga/image-20210804172656559.png)]

模块名称: romIP Core

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

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

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

实验现象:

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

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

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

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

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

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

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

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

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

2、开始下方的配置操作

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

2、rom模块的配置

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

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

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

? ① address[] ② clock

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

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

2、配置选项介绍

? 数据输出端的位宽 q

? rom的字节大小

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

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

3、选项配置操作

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

① 选择是否加入寄存器

② 是否创建时钟使能信号

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

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

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

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

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

创建一个mif文件

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

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

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

可以看到生成的mif文件

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

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

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

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

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

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

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

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

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

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

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

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

注:表示工程的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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

可以看到一个sin波形

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

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

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

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

编写顶层文件

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

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

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

效果如下所示:

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

具体配置如下:

①配置时钟

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

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

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

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

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

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

配置添加好的文件如下:

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

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

双击打开 stp1.stp文件

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

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

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

抓取的数据如下所示:

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

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

所以开启如下配置:

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

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

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

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

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

① 选中 In-System Memory Content Editor

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

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

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

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

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

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

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

此时再次观看波形

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

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

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:31:05  更:2021-08-05 17:31:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:59:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码