FPGA常用调试技术
- 格式:pdf
- 大小:2.90 MB
- 文档页数:41
FPGA常用调试技术⍓查看综合报告⍓仿真测试⍓在线调试⍓其他工具在FPGA 的开发过程中,对于设计中的问题,我们经常采用如下方法来定位错误。
查看综合报告综合工具在分析代码时,对于可能出问题的地方,会予以警告。
很多警告是无关紧要的,而某些警告则是需要根据具体情况来确定它的严重程度的。
设计者可以通过某些警告发现工程中潜在的错误。
这些潜在的错误往往是由于较差的codingstyle或是人为疏忽导致的。
XST综合工具中几种常见的warning1.未用端口WARNING:Xst:1306 -Output <clk12M>is never assigned.这个warning表示一个称为<clk12M>的输出端口没有被赋值。
WARNING:Xst:647 -Input <RST_n> is never used. This port will be preserved and left unconnected if it belongs to a top-level block or it belongs to a sub-block and the hierarchy of this sub-block is preserved.这个warning表示一个称为<RST_n>的输入端口没有在模块中使用,这个输入端口将会被保留。
2.赋值与使用缺其一WARNING:Xst:646 -Signal <clk12M_buf> isassigned but never used. This unconnectedsignal will be trimmed during the optimizationprocess.这个warning表示一个称为< clk12M_buf >的信号在模块中被赋值,但是没有用于其它逻辑的驱动,这个信号将会在optimization环节中被优化掉。
WARNING:Xst:653 -Signal <B> is used but never assigned. This sourceless signal will be automatically connected to value 00000000.这个warning表示一个称为<B>的信号在模块中被使用,但是它却没有被赋值。
那么这个信号将被自动地把00000000做为驱动源。
3.存在latchWARNING:Xst:737 -Found 1-bit latch forsignal <clk6M>. Latches may be generatedfrom incomplete case or if statements. Wedo not recommend the use of latches inFPGA/CPLD designs, as they may lead totiming problems.这个warning表示一个称为< clk6M >的信号可能存在latch,这个latch可能是由于一个不完整的case分支语句或是不完整的条件语句而导致的。
这个latch不会被优化,可能会导致某些时序问题。
4.信号被优化为固定值WARNING:Xst:1710 -FF/Latch<data_E_buf_7> (without init value) has aconstant value of 0 in block<debug_warning>. This FF/Latch will betrimmed during the optimization process.这个warning表示一个称为< data_E_buf_7>的信号在<debug_warning>这个模块中拥有一个固定值0。
这个信号将会optimization环节中被优化掉。
4.组合逻辑回环WARNING:Xst:2170 -Unit debug_warning:the following signal(s) form a combinatorialloop: 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 BehaviorModel”。
如果源代码无误,则会弹出如下界面;否则将报告响应的错误,可根据错误提示修改代码后再试。
7. 默认情况下,ISim在自动加载时,会将激励文件运行1us,并将被仿真文件中的端口信号的波形图写入“Default.wcfg”文件中,并予以显示。
8. 如果需要添加观测信号,可以在最左侧的“Instanceand 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。
ChipScope模块添加下面介绍在ISE里,向工程中添加ChipScope 模块的两种方法。
方法<1>1. 在打开的ISE工程中,找到“Design”窗口,在工程所对应的目标器件上右击,选择“New Source”。
2. 在弹出的对话框中,选中“ChipScope Definishionand Connection File ”,然后再右侧的“File Name”一栏中输入添加的模块的名称。
还可以在下方输入文件生成的路径,一般我们采用默认路径。
3. 点击“Next”继续,出现的对话界面中是让我们选择待添加的模块属于那个文件,点击“Next”继续,最后点击“Finsh”完成该文件的创建。
4. 请留意在“Design”窗口中,多了一个后缀为cdc的文件,这个文件就是我们刚才创建的文件,在此文件上双击,便进入cdc文件的编辑界面。
5. 在此界面中,点击“Next”,在这个界面中,我们需要创建至少一个“ILA”或“ATC2”模块,可以选择点击“New ILA Unit”或“New ATC2 Unit”添加,也可以点击“Next”,会自动添加一个“ILA”模块。
5. 在上图所示的界面中,选中“Trigger Parameters”窗口,然后在“Number of Input Ports”后面的下拉列表中选择触发通道的个数。
5. 触发通道的个数确定之后,接下来需要确定每个通道的位宽以及触发的类型,如下图所示。
6. 点击“Next”,或是中“Capture Parameters”窗口。
在如下的界面中,勾选需要用到的Trigger Port,设置采样深度,Data Port与Trigger Port是否相同等。
7. 点击“Next”,或是中“Net Connections”窗口。
为clock通道和Trigger通道指定网络标号。
8. 为clock通道指定网络标号,此时钟用于同步触发信号,并对各通道信号进行采样。
双击红色的“clock port”字样,在“Net Name”对应的列表中找到待指定的信号,然后点击右侧的“make connections”按钮,则该信号便与时钟通道对应起来。
9. 为了能快速地找到信号,可以在“Pattern”窗口后面的方框中输入匹配字符,然后点击“Filter”按钮或是按下键盘的回车键,然后从筛选后的信号列表中找到该信号。
如下图所示。
10. 点击“OK”按钮,完成时钟通道信号的指定。
接下来为Trigger Port通道指定信号。
在“TRIGGER PORTS”下的某个通道上双击,弹出如下对话框,在右侧选中“Trigger/Data Signals”窗口,在下方指定相应的通道并连接信号,完成后点击“OK”。