1、实验现象
实现一组固定的数据(三角波形表)存储在 FPGA 中使用 IP 核构建的片上 ROM 中,开发板上电后,系统开始从 ROM 中读出数据,并将数据直接通过并口输出。通过使用 Signal Tap II 软件实时抓取并口上的数据,显示得到三角波形。然后使用 Quartus 软件中 提供的 In-System Memory Content Editor 工具在线更改 ROM 中的数据(将数据更改为正弦波形表),然后再次观察 signal Tap II 工具抓取到的波形数据。
2、知识点
(1)ROM 存储器 IP 核的使用;
(2)In-System Memory Content Editor 内存查看工具的使用;
(3) SignalTap II 调试工具的简单使用
3、IP 核使用之 ROM
ROM 在上电后需要进行初始化,这里支持 HEX 以及 MIF 格式文件初始化。新建一个以名为 rom 的工程保存在 prj 下,单击 File→New,或者工具栏中的 New,弹出下图的选择框。此处选择 Memory Files 中的 Memory Initialization File,来创建一个 mif 文件。这里 选择数据个数为 256,数据位宽为 8。以 ROM.mif 保存至工程目录下。
为了生成三角波的数据,其中一种方式是使用 excel,本工程可在一列里使数据从 0 加 到 127 再减为 0。然后直接复制此列粘贴到生成的 mif 中即可,更为便捷和可靠的方法是使用 Mif 精灵工具填好参数后点击 OK,直接在 mif 精灵所在文件夹生成 mif 文件。
如果使用 mif 精灵工具生成文件,则需要明确生成 rom 数据的具体信息,包括位宽,进制,波形,存储深度,峰值等。需注意,这里的信息需和 FPGA 的 IP 设计存储容量相适配。
生成好 Mif 文件后,修改生成的 Mif 文件的文件名。例如本实验将其命名为 ROM,后缀 Mif 保持不变。
下一步,单击 Tools→MegaWizard Plug-In Manager 启动 IP 核目录。
选择生成一个新的 IP。
选择 Memory Compiler 下的 ROM:1-PORT(单端口 ROM),并将输出目录确定为工程文 件夹下的 ip 文件夹,以 rom 为文件名保存成 Verilog 格式,单击 Next,如下图所示。
这里将 ROM 的数据个数与位度设置为与 mif 文件大小一致,存储块类型自动,单时钟 操作,如下图所示。
选择输出端口 q 寄存,如下图所示。
ROM 初始化设置,这里可以看出必须进行初始化即 leave it blank 不可选,这里与上一 讲的 RAM 不同。通过 Browse 选择初始化文件,初始化文件可以选择为 hex 或者 mif 格式, 这里选择前面生成的已经存放于工程根目录下的三角波 mif 文件。为了在调试的时候使用系统内存储器内容编辑器,这里使能此功能,并将 ID 命名为 ROM,如下图所示。
然后预览汇总信息,确认后即可点击 Finish 来完成此 IP 的配置并将其加入工程中设置为顶层文件。
4、激励创建及仿真测试
为了测试仿真编写测试激励文件,新建 rom_tb.v 文件,保存到 testbench 文件夹下。这里除了实现例化需要仿真的文件以及时钟创建,还实现了地址数从 0 自加到 2550d,但是由于本 ROM 的最大数据个数是 255d,因此在 address 第一次加满 255 后会重新从 0 开始自加, 这样就有十个地址数循环。
`timescale 1ns/1ns
`define clk_period 20
module rom_tb;
reg [7:0]addr;
reg Clk;
wire [7:0]q;
integer i;
rom rom(
.address(addr),
.clock(Clk),
.q(q)
);
initial Clk = 1;
always#(`clk_period/2) Clk = ~Clk;
initial begin
addr = 0;
#(`clk_period + 1);
for(i = 0;i < 2560;i = i + 1)begin
#`clk_period;
addr = addr + 1;
end
#(`clk_period * 50);
$stop;
end
endmodule
设置好仿真脚本后进行功能仿真,可以看到如图 1 所示的数据输出时的波形文件。 发现数据发生变化了,但是不能直观看到三角波。可通过在 q 右键选择 Format→ Analog(automatic),将所有信号均切换到无符号数,并把输出数据格式改为模拟的自动模式, 即可看到图 2 所示的十个周期三角波波形文件。
下面仿真正弦波,使用 Sin3e 软件,或使用 mif 精灵生成一个正弦波的 mif 文件,并以此初始化 ROM。
完成 IP 的再次配置后,再次启动仿真可能看到如图 3 的波形文件,这是由于数据 格式为有符号整型,只需要修改为无符号整型即可。
如果看到如图 4 所示的波形,是因为这里当前波形数据的范围设置问题,只需右键 打开 Properties 按照图 5 修改即可。
设置无误后,即可看到如图6所示的正弦波波形,这样 ROM 的仿真即为通过。
5、SignaTap II 使用及板级验证
现在为了实现用 SignaTap II 逻辑分析仪以及 In-System Memory Content Editor,进行板级测试,编写一个顶层文件并以 ROM_top.v。这里除了实现调用已经设计好的ROM IP 核, 还实现了每当系统时钟上升沿到来后,ROM 地址进行加一。
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
SignaTap II 逻辑分析仪,用于辅助设计调试过程,提供了用户设计全速运行在 FPGA 芯 片上时不使用外部 I/O 引脚就能检查内部信号状态的解决方案。其与传统的外部物理逻辑分 析仪类似,可以在不使用硬件测试设备的前提下,调试正常操作期间的 FPGA 设计。
(1)单击 File→New 新建一个 SignalTap II 文件,如下图所示。
(2)在 Signal Configuration 中选择采样时钟,如图下所示。
(3)先将筛选关键字设置为 Pin:all,单击 List 列出所有符合筛选标准的引脚。这里选中 Clk 单击“>”将其确定为采样时钟,这里也可以直接双击 Clk 确定,如下图所示。
(4)现添加待采样信号,在 Setup 界面中双击空白处弹出如下图所示的界面。这里 选择输出信号 q 作为待测信号,这里只需将总线加入即可。
(5)选择过滤方式为” Registers:pre-synthesis”,然后将 addr 添加到待采样信号列表中, 如下图所示。
(6)设置好采样时钟以及待采样数据后,点击 file save 至工程目录下,名字可自取,这时即可以看出此时资源使用数据,包括使用的逻辑单元和存储器大小,如下图所示。
(7)这里采样时钟为 50M,一个周期的波形划分为 256 份,因此如果想看十个周期的波形这里深度最少 256*10,这里直接设置为 4K 深度,如下图。修改后可以看到资源使用随之增加。
(8)保存 SignalTap II 设置后,分配引脚后进行全编译,这里分配的 Pin 并没有实际意义, 因此输出可以随意设置为板子的空闲引脚即可,如下图所示。为保证本教程的可操作性,我们仍然给出了如下管脚绑定表供参考。例如我们这里给管脚分配作如下定义:
下图是 AC620 开发板管脚绑定完成后效果示例,前面已经提到过,管脚的绑定并无实 际的输入输出功能,仅用于学习 SignalTapII 而生成演示的端口。
(9)编译无误后,将本工程生成的 sof 文件下载进开发板。下载后双击工程下的 STP 文件来使用 SignalTap II 逻辑分析仪并设置好 JTAG。这里有两种采样方式,一种为单次采样,这样是单次抓取数据直到 4K 深度填满;一种为循环采集,如下图所示。这里选择循环采样,可看到下图的数据。
这里跟 modelsim 仿真时数据类似,也想看到更直观的波形。只需在信号 q 右键选择 Bus Display Fomat 中的 Unsigned Line Chart,如下图所示。
设置完成后 Signaltap 中的数据 就以模拟波形的形式显示了,如下图所示。
(10)这样就成功实现了 SignalTap II 逻辑分析仪抓取数据,现在为了实现在线更改 ROM 中的数据,这里介绍 In-System Memory Content Editor 工具的使用。
(11)单击 Tools 打开 In-System Memory Content Editor,如下图所示。
(12)选择好调试器待界面状态变成 JTAG ready,此时会看到数据框全为“??”,这是由 于尚未对 ROM 进行读取,只需先将列表中 rom 选取呈蓝底色,然后单击读取键即可,ROM 中的数据就会被读取出来如下图,读出的数据可与 mif 文件进行比对是否一致。
(13)实现在线数据读取后,现在实现数据写入。可直接在 rom 右键找到 Inport Data From File,如下图所示选择需要替换的三角波 mif 文件即可。
选择后点击写入,这时回到 SignalTap II 界面即可以看到更改 ROM 后的输出 q 的波形已切换为三角波,如下图所示。
(14)这时可以回到 In-System Memory Content Editor 界面,点击读取,ROM 中的数据就 会被再次读取出来如图 4.3-29,此时可与 mif 文件进行比对是否一致。
这样板级调试结束。这样就实现了将一组固定的数据(三角波形表)存储在 FPGA 中使用嵌入式块配置为 ROM 中,开发板上电后,系统开始从 ROM 中读出数据,并将数据直接 通过并口输出。通过使用 Signal Tap II 软件实时抓取并口上的数据,显示得到三角波形。然 后使用 Quartus 软件中提供的 In-System Memory Content Editor 工具在线更改 ROM 中的数据(将数据更改为正弦波形表),然后再次观察 signal Tap II 工具抓取到的波形数据。
标签:ROM,波形,FPGA,RAM,mif,II,012,所示,数据 From: https://www.cnblogs.com/little55/p/18124133