嵌入式RAM使用之ROM
课程目标: 1.学会调用Quartus II软件中提供的ROM核并进行仿真
2.学会使用Signal Tap II软件以及In System Memory Content Editor
实验平台:芯航线FPGA学习套件核心板
实验原理:
FPGA内部并没有严格意义上的ROM,其都是有RAM经过适当的配置来实现一个ROM。
在进行系统调试时除了示波器还会经常用的逻辑分析仪,这里Altera提供了一组FPGA的偏上调试工具集:SignaTapII逻辑分析仪、SignalProbe(信号探测器)、逻辑分析仪接口(LAI)、In-System Memory Content Editor(系统内存储器内容编辑器)、ISSP(系统内的源和探针)以及虚拟JTAG接口。
SignaTap II逻辑分析仪,用于辅助设计调试过程,提供了用户设计全速运行在FPGA芯片上时不使用外部I/O引脚就能检查内部信号状态的解决方案。其与传统的外部物理逻辑分析仪类似,因此可以在不使用硬件测试设备的前提下调试正常FPGA操作期间的FPGA设计。
实验步骤:
新建一个以名为rom的工程保存在prj下,单击File—New,或者工具栏中的New,弹出图14-1的选择框。此处选择Memory Files中的Memory Initialization File,来创建一个mif文件。这里选择数据个数为256,数据位度为8。以ROM.mif保存至工程目录下。
图14-1创建mif文件
为了生成三角波的数据,便捷的方式是使用excel,在一列工具栏里使数据从0加到255再减为0。然后直接复制此列粘贴到生成的mif中即可。
单击Tools—MegaWizard Plug-In Manager来启动Mega Wizard插件管理器,并新建一个IP核。选择MemoryCompiler下的ROM:1-PORT,并将输出目录确定为工程文件夹下的ip文件夹,并以rom保存,单击Next。
图14-2新建一个单端口的ROM
这里将ROM的数据个数与位度设置为与mif文件大小一致,存储块类型自动,单时钟操作。
图14-3设置数据个数与位度
选择输出端口q寄存。
图14-4端口寄存方式选择
ROM初始化设置,这里可以看出必须进行初始化即leaveit blank不可选,这里与上一讲的RAM不同。通过Browse选择初始化文件,初始化文件可以选择为hex或者mif格式,这里选择前面生成的三角波mif文件。为了在调试的时候使用系统内存储器内容编辑器这里对其使能,并命名为ROM。
图14-5ROM初始化
然后预览汇总信息,确认后即可点击Finish来完成此IP的配置并将其加入工程中设置为顶层文件。
为了测试仿真编写测试激励文件,新建rom_tb.v文件并输入以下内容再次进行分析和综合直至没有错误以及警告,保存到testbench文件夹下。这里除了实现例化需要仿真的文件以及时钟创建,还实现了地址数从0自加到2555,但是由于本ROM的最大数据个数是255,因此在address第一次加满255后会重新从0开始自加,这样就有十个地址数循环。
设置好仿真脚本后进行功能仿真,可以看到如图14-6所示的数据写入时的波形文件。发现数据发生变化了,但是不能直观看到三角波,这里将所有信号均切换到无符号数,并把输出数据格式改为模拟的自动模式,即可看到图14-7所示的十个周期三角波波形文件。
图14-6修改输出数据显示格式
图14-7三角波仿真波形
这里使用Sin3e生成一个正弦波的mif文件,并以此初始化ROM。再次启动仿真可能看到如图14-8-1的波形文件,这是由于数据格式为有符号整型,只需要修改为无符号整型即可。如果看到如图14-8-2所示的波形,是因为这里当前波形数据的范围设置问题,只需右键打开Properties按照图14-9修改即可。设置无误后,即可看到如图14-10所示的正弦波波形。
图14-8-1正弦波仿真波形
图14-8-2 正弦波仿真波形
图14-9修改波形数据范围
图14-10正弦波仿真波形
这样ROM的仿真即为通过,现在为了实现用SignaTap II逻辑分析仪以及In-System Memory Content Editor,进行板级测试,编写一个顶层文件并以ROM_top.v保存至rtl下。这里除了实现调用已经设计好的ROM IP核,还实现了每当系统时钟上升沿到来后,ROM地址进行加一。
单击File—New新建一个SignalTap II文件。并在Signal Configuration中选择采样时钟,先将筛选关键字设置为Pin:all,单击List列出所有符合筛选标准的引脚。这里选中Clk单击“>”将其确定为采样时钟,这里也可以直接双击Clk确定。
图14-11新建SignalTap II文件
图14-12-1设置采样时钟
图14-12-2 设置采样时钟
现添加待采样信号,在Setup界面中双击空白处弹出如图14-13所示的界面。这里选择输出信号q作为待测信号,这里只需将总线加入即可。
图14-13-1添加待采样信号
图14-13-2添加待测信号
设置好采样时钟以及待采样数据点击file save至工程目录下,名字可自取。这时即可以看出此时资源使用数据。
图14-14深度256时资源使用数据
这里采样时钟为50M,一个周期的波形划分为256份,因此如果想看十个周期的波形这里深度最少256*10,这里直接设置为4K深度,如图14-15。修改后可以看到资源使用随之增加。
图14-15深度修改为4K
保存SignalTapII设置后,分配引脚后进行全编译,这里需指出这里分配的Pin并没有实际意义,因此输出可以随意设置为板子的空闲引脚即可,这里设置在GPIO0。编译无误后,下载进开发板。
图14-16 Pin Planner
下载后双击工程下的STP文件来使用SignalTap II逻辑分析仪并设置好JTAG。这里有两种采样方式,一种为单次采样这样是单次抓取数据直到4K深度填满;一种为循环采集。这里选择循环采集,可看到图14-18的数据。
图14-17设置JTAG
图14-18SignalTap II逻辑分析仪采样数据
这里跟modelsim仿真时数据类似,也想看到更直观的波形。只需在信号q右键选择BusDisplay Fomat中的UnsignedLine Chart即可看到调整后的数据显示,如图14-20。
图14-19设置数据显示格式
图14-20修改后数据显示格式的采样数据
这样就成功实现了SignalTapII逻辑分析仪抓取数据,现在为了实现在线更改ROM中的数据,这里介绍In-System Memory Content Editor工具的使用。
单击Tools打开In-System Memory Content Editor。
图14-20 启动In-System Memory Content Editor
选择好调试器待界面状态变成JTAG ready,此时会看到数据框全为??,这是由于尚未对ROM进行读取,只需单击读取键即可,ROM中的数据就会被读取出来如图14-21,可与mif文件进行比对是否一致。
实现在线数据读取后,现在实现数据写入。可直接在rom右键找到InportData From File,如图14-22所示选择需要替换的三角波mif文件即可。选择后点击写入,这时回到SignalTap II 界面即可以看到更改ROM后的输出q的波形已切换为三角波。
这时可以回到In-SystemMemory Content Editor界面,点击读取,ROM中的数据就会被再次读取出来如图14-25,可与此时的mif文件进行比对是否一致。
图14-21使用In-SystemMemory Content Editor读取ROM数据
图14-22在线修改ROM文件
图14-23写入修改后的mif文件
图14-24修改rom后的输出波形
图14-25读取更新后ROM数据
这样板级调试结束。这样就实现了将一组固定的数据(三角波形表)存储在FPGA中使用IP核构建的片上ROM中,开发板上电后,系统开始从ROM中读出数据,并将数据直接通过并口输出。通过使用Signal Tap II软件实时抓取并口上的数据,显示得到三角波形。然后使用Quartus II软件中提供的In-System Memory Content Editor工具在线更改ROM中的数据(将数据更改为正弦波形表),然后再次观察signal Tap II工具抓取到的波形数据。
小梅哥
芯航线电子工作室