FPGA常用调试技术
?查看综合报告
?仿真测试
?在线调试
?其他工具
在FPGA 的开发过程中,对于设计中的问题,我们经常采用如下方法来定位错误。
查看综合报告
综合工具在分析代码时,对于可能出问题的
地方,会予以警告。
很多警告是无关紧要的,而某些警告则是需
要根据具体情况来确定它的严重程度的。
设计者可以通过某些警告发现工程中潜在的
错误。
这些潜在的错误往往是由于较差的coding
style或是人为疏忽导致的。
XST综合工具中几种常见的warning
1.未用端口
WARNING:Xst:1306 -Output
is never assigned.
这个warning表示一个称为
输出端口没有被赋值。
WARNING:Xst:647 -Input
这个warning表示一个称为
会被保留。
2.赋值与使用缺其一
WARNING:Xst:646 -Signal
assigned but never used. This unconnected
signal will be trimmed during the optimization
process.
这个warning表示一个称为< clk12M_buf >
的信号在模块中被赋值,但是没有用于其它
逻辑的驱动,这个信号将会在optimization
环节中被优化掉。
WARNING:Xst:653 -Signal is used but never assigned. This sourceless signal will be automatically connected to value 00000000.
这个warning表示一个称为的信号在模块中被使用,但是它却没有被赋值。那么这个信号将被自动地把00000000做为驱动源。
3.存在latch
WARNING:Xst:737 -Found 1-bit latch for
signal
from incomplete case or if statements. We
do not recommend the use of latches in
FPGA/CPLD designs, as they may lead to
timing problems.
这个warning表示一个称为< clk6M >的信号
可能存在latch,这个latch可能是由于一个
不完整的case分支语句或是不完整的条件语
句而导致的。这个latch不会被优化,可能会
导致某些时序问题。
4.信号被优化为固定值
WARNING:Xst:1710 -FF/Latch
constant value of 0 in block
trimmed during the optimization process.
这个warning表示一个称为< data_E_buf_7
>的信号在
有一个固定值0。这个信号将会optimization
环节中被优化掉。
4.组合逻辑回环
WARNING:Xst:2170 -Unit debug_warning:
the following signal(s) form a combinatorial
loop: sum_AB<8>.
这个warning表示在debug_warning单元中
,有一个称为sum_AB<8>的信号导致了组
合逻辑回环现象。
综合器报告warning的情况有很多种。以上只列举了一些。建议大家根据具体的情况酌情考虑warning的严重程度。
debug_warning工程是一个具体的例子。大家可以把它放在XST下综合,根据综合的报告,检查电路中的错误,并尝试修正。
仿真测试
FPGA电路的仿真分为两种。一种是门级仿真,有的地方也称为行为仿真(Behavior Simulation );另一种是时序仿真,有的地方也称为布线后仿真(Post-Route Simulation )。
行为仿真是对综合所生成的门级电路模型仿真,由于它不包含各元件的时延信息,仿真的结果是一种理想的情况。
布线后仿真则针对布线后生成的具体电路,加入了各元件的时延信息,仿真的结果更趋近于实际情况。
门级仿真
下面介绍在ISE里,使用其自带的ISim仿真工具对设计做门级仿真。
1. 在打开的ISE工程中,找到
“Design”窗口,在工程所
对应的目标器件上右击,
单击“Design Properties”
选项。
2. 将其中的
simulator属性修
改成“ISim(
VHDL/Verilog)
”。
3. 点击“OK”,退出
此对话框。
4. 在工程中添加或新建源文件。这里,一共有两
种类型的文件,一种用于综合生成电路网表,另一种用于TestBench激励。
5. 选择“Design”窗口中的“Source for”属性,将
“Simulation”前面的圆圈点为实心,并且在其后的下拉列表中选用“Behavior”。因为我们将要进行的是行为仿真(门级仿真)。
6. 在“Design”窗口中,选中TestBench激励源文件。然
后在“Process”一栏中,双击“Simulate Behavior
Model”。如果源代码无误,则会弹出如下界面;否则将报告响应的错误,可根据错误提示修改代码后再试。
7. 默认情况下,ISim在自动加载时,会将激励文件运行
1us,并将被仿真文件中的端口信号的波形图写入
“Default.wcfg”文件中,并予以显示。
8. 如果需要添加观测信号,可以在最左侧的“Instance
and Processes”窗口中,选中信号所处的模块,然后在其右侧的“Object”窗口中选中待添加的信号并右击,点击“Add to Wave Window”。
9. 在波形界面中,波形的值是以二进制的形式显示的(
ISE11.3是这样的)。我们可以在某些信号上右击,设置“Radix”的属性,以选择合适的显示形式。
10. 为了方便查看和管理,我们可以将一些信号归为一组
。方法是同时选中这些信号,右击选择“New Group”
,还可以为这个组重命名。
11. 下面是工具栏中部分图标的作用。
图标用于放大波形的视图。
图标用于缩小波形的视图。
图标可以将波形调整为最佳视图。
图标可以复位波形图。
图标可以运行激励直至停止。
图标可以运行激励一段指定的时间,时间参数
在其后的方格中指定。
12. 我们可以将激励得到的波形图存储,以便于下次运行或查看。在菜单栏中选择“File”->“Save As”,将文件重新命名。下次在打开Isim 的时候,可以选择“Flies”->“Open”此文件查看波形或是重新运行激励。
在线调试
FPGA的在线调试,一般是在FPGA中嵌入一个类似于逻辑分析仪的模块,在满足触发条件时,对需观测的信号进行采集,并通过JTAG线缆将存储的波形上传至计算机,供调试人员检查。
这种技术的优势在于,它能帮助设计人员观测FPGA内部的信号状态,对定位错误非常有用。
目前的两大FPGA生产厂商就有均有其在线调试工具。Xilinx称之为ChipScope,Altera称之为SignalTap。