5.10 典型实例9:SignalTap II功能演示
5.10.1 实例的内容及目标
1.实例的主要内容
本节旨在通过给定的工程实例——“正弦波发生器”来熟悉Altera Quartus II高级调试功能SignalTap II和Intent Memory Content Editor的使用方法。同时使用基于Altera FPGA的开发板将该实例进行下载验证,完成工程设计的硬件实现。在本节中,将主要讲解下面知识点。
· Quartus II原理图输入方式。
· Quartus II约束设计。
· Quartus II工程编译。
· Quartus II硬件下载。
· SignalTap II在线调试。
· Intent Memory Content Editor在线修改片上ROM数据。
通过这些知识点,按照实例的流程,读者可以迅速地掌握使用Quartus II软件高级调试技巧。
2.实例目标
通过详细的流程讲解,读者应达到下面的目标。
· 熟悉Quartus II原理图设计方法。
· 熟悉SignalTap II在线调试方法。
· 熟悉Intent Memory Content Editor在线修改片上ROM数据的方法。
5.10.2 实例详解
本实例将使用图解的方式将整个流程一步一步展现给读者,使读者能够轻松掌握开发的流程。
5.10.2.1 工程系统框图
本实例使用Quartus II自带的宏模块(MegaWizard Plug-in Manager)来设计逻辑功能,并使用嵌入式硬件逻辑分析仪观察结果。
正弦函数发生器的原理比较简单,硬件实现也比较简单:首先设计一个ROM用来存放正弦函数的幅度数据;用一个计数器来指定ROM地址(也就是相位)的增加,输出相应的幅度值。这样在连续的时间内显示的就是一个完整的正弦波形。
系统的电路图如图5.40所示。
图5.40 系统电路图
div模块是分频模块,可以用前面设计过的分频器的程序生成模块(symbol),也可以使用Altera的计数器宏模块来生成分频器。
5.10.2.2 添加分频器模块
1.将分频文件添加到工程
将分频器模块div.v加入到工程中,在工程中打开分频器模块div.v(分频器程序由读者完成),如图5.41所示。
2.产生.bsf文件
选择“File”/“Create/Update”/“Create Symbol Files for Current File”选项。软件会自动分析div.v程序的语法错误,如图5.42所示。
图5.41 分频器Verilog HDL文件
图5.42 生成模块菜单
3.修改程序语法错误
如果出错则修改错误,直到没有错误为止。此时软件会自动生成div.bsf文件,此文件为原理图中的模块图形。
4.在原理图中加入分频器模块div.bsf
在原理图文件中单击“”按钮,就可以加入刚刚建立的模块,如图5.43所示。
图5.43 在原理图中添加分频器模块
5.10.2.3 添加Quartus II系统自带宏模块
ROM和计数器都可以通过Quartus II自带的宏模块生成。
1.建立ROM初始化文件
在菜单中选择新建文件,在“Other Files”中选择“Memory Initialization File”选项,如图5.44所示。
填入如图5.45所示的正弦波幅度数据。当然也可以用MATLAB、C++或Excel的函数生成数据。保存文件,命名sin.mif。
图5.44 新建ROM初始化文件 图5.45 输入正弦波幅度数据
2.添加自带宏模块
在“Tools”菜单中选择“MegaWizard Plug-Pn Manager”选项,出现如图5.46所示的对话框,选择新建宏模块单击“Next”按钮。
图5.46 引用自带宏对话框
图5.47左侧是Quartus II自带的免费的宏模型,可以看到Quartus提供了很多免费的IP核。
其中ROM在storage目录中,计数器counter在arithmetic目录中。
3.添加ROM
在storage中选择ROM,并在右侧的选项栏中选择Cyclone系列芯片,output file类型选择Verilog HDL,并在下方选择ROM文件的生成地址及名称,如图5.48所示。
图5.47 选择系统自带宏模块
图5.48 选择ROM宏模块
单击“Next”按钮,设定ROM基本参数,包括ROM的位宽q、地址位宽(存储深度)和时钟。一般ROM的时钟选为单时钟控制Single clock,如图5.49所示。
单击“Next”按钮,设定ROM其他参数,设定输出寄存器、时钟使能端和异步清零。如果选中“'q' output port”,则会在输出端加一级寄存器,如图5.50所示。
单击“Next”按钮,接下来在对话框中填入ROM初始化文件,并选中“allow in-system memory”选项,并选择名称为“NONE”,如图5.51所示。
图5.49 rom宏模块基本参数设置
图5.50 设置ROM宏模块其他参数
图5.51 设置ROM宏模块初始化文件
单击“Next”按钮,完成设置,向导生成的文件如图5.52所示。
图5.52 设置ROM宏模块完成
4.添加计数器
引入计数器作为ROM的地址,当计数器地址递增时,相应的ROM的地址递增(正弦波的相位增加)。同样的在“MegaWizard Plug-In Manager”中选择arithmetic数学库中的“LPM COUNTER”宏模块,添加计数器,如图5.53所示。
图5.53 新建计数器模块参数
本实例中用的ROM宽度为8,深度为64,也就是数据宽度是8位,可以存64个数据。ROM有64个地址,因此计数器的位宽要定义为6位,如图5.54所示。
图5.54 设置计数器宏模块参数
一直单击“Next”按钮,使用系统默认设置,直到生成如图5.55所示的文件输出。
图5.55 完成计数器宏模块设置
5.10.2.4 添加端口
要添加输入输出端口,选择按钮,打开如图5.56所示的对话框,然后选择需要增加的端口形式。
图5.56 加入输入输出端口
添加后双击端口,给端口命名,总线型端口要命名name[N..0]的格式,如图5.57所示。
图5.57 完成工程原理图输入
5.10.2.5 编译工程
按照2.5节进行语法分析,指定FPGA设备,指定管脚,整体编译程序。在本实例中只需要对主时钟管脚进行分配,即pin_153。
5.10.2.6 使用SignalTap II观察波形
1.建立SignalTap II文件
在菜单中选择“Tools”/“SignalTap II Logic Analyzer”选项,打开如图5.58所示界面。
图5.58 新建SignalTap II文件
作如图5.59所示的设置。
图5.59 SignalTap II文件设置
SignalTap II基本设置需注意以下问题。
(1)分频时钟作为采样信号,不要放到被观察的信号中。
(2)采样信号不宜用作主时钟,可以用作分频后的时钟,采样条件可用Center trigger position。
下载程序,就可以看仿真的波形了。
2.设置SignalTap II高级触发条件
在如图5-58所示的添加观察信号区域窗口中,将Trigger Levels选项改为Advanced,将Basic改为Advanced,则会弹出高级触发设置页面,如图5.60和图5.61所示。
图5.60 打开SignalTap II文件高级触发设置
图5.61 SignalTap II文件高级触发设置
本例中设置为当地址信号address=0时开始触发。从“node list”中拖入address信号,在“Object Library”/“Comparison Operator”中加入equality,最后加入“Input Objects”/“Bus Value”。得到如图5.62所示的触发条件。
图5.62 SignalTap II高级触发设置结果
3.运行SignalTap II并观察波形
首先整体编译工程,在菜单栏中单击按钮,开始编译。之后使用JTAG模式将程序下载到FPGA中运行。打开SignalTap II文件,选择如图5.63所示的下载电缆。
在Instance Manager中单击按钮进行一次触发,将会得到如图5.64所示的波形。
图5.64 观察采样数据数字显示波形
因为开发板硬件没有AD/DA功能,要想看模拟信号的输出也可以用逻辑分析仪来完成。在信号名(比如q信号)上单击右键,选择“Bus Display Format”/“Unsigned Line Chart”选项,如图5.65所示。
图5.65 观察采样数据模拟显示波形 图5.66 观察采样数据模拟显示波形结果图
此时,就可以显示如图5.66所示的模拟波形了。
5.10.2.7 使用在线ROM编辑器
嵌入式存储数据编辑器是通过JTAG下载电缆来观看FPGA中ROM加载的数据的,不仅能观看,还能在线修改数据,无需重新编译与下载。
1.打开ROM编辑器
选择“Tools”/“In system Memory Content Editor”选项,打开如图5.67所示的rom编辑器。
图5.67 打开在线ROM编辑器窗口
2.选择下载电缆
使用打印口LPT1下载电缆,如图5.68所示。
图5.68 设置下载电缆
3.选择ROM标号
点击设置ROM参数时指定的none的文件,将出现FPGA运行之中的ROM的数据,如图5.69所示。
图5.69 选择ROM标号
4.读取ROM数据
右键单击“NONE”,选择“Read Data from System Memory”选项,就可以得到ROM中的数据了,如图5.70所示。
图5.70 读取ROM数据
5.修改ROM数据
通过编辑器,可以修改ROM中的数据。例如可以把数据中的几个数改成0,然后单击“write”,再回到逻辑分析仪中观察波形,就可以发现其中的变化,如图5.71所示。
图5.71 修改后ROM数据显示
5.10.3 小结
上述训练流程就是一个完整的Quartus II硬件调试流程。虽然此训练实现的功能比较简单,但对于初学者来说,是一个不错的入门训练。其主要目的是让初学者对的设计有一个初步的了解。通过该训练来熟悉Quartus II的高级调试技巧,为今后的学习打下基础。