广告

原创 Vivado 调试工具的使用 (2)

2017-9-21 22:21 570 0 分类: FPGA/CPLD

(一)网表插入调试探测流程的方法

当在分层设计时,插入vivado工具中的调试核,用于解决不同设计者的不同需求:

(1)最高级是在一个简单的向导内,基于所选择的用于调试的网络集合自动创建和配置集成逻辑分析仪(Integrated Logic Analyzer,ILA)核;

(2)下一个层次是,在Vivado主界面点击命令菜单 Window,弹出Debug。这个窗口内,允许控制单个调试核、端口和它们的属性;

(3)最低层次是Tcl调试命令集合,设计者可以手工输入或者作为脚本反复使用.

1.标记用于调试的HDL信号

  在综合前,通过使用mark_debug属性,设计者可以在HDL源文件中标识用于调试的信号。在HDL中,标识用于调试的信号所对应的网络将在“Debug”窗口中自动列出。用于调试所标记网络的过程,取决于RTL级的工程还是综合后的网表工程。

(1)对一个RTL网表工程

        <1> VHDL 或者 Verilog 源文件中,使用mark_debug约束可以标记用于调试的HDL信号。在HDL中,用于mark_debug约束的有效值是 TRUE 或者 FALSEVivado 综合特性不支持 SOFT值;

       <2>使用Xilinx综合技术(Xilinx Synthesis Technology,XST),设计者可以在VHDLVeilog源文件中,使用mark_debug属性标记用于调试的网络。此外,有效值是 TRUE 或者 FALSE。如果可能,SOFT值允许软件优化指定的网络。

(2)对一个综合后的网表工程

        <1>使用Synopsys Synplify综合工具,设计者可以在VHDL或者Veilog文件内,使用mark_debugsyn_keep属性,或者在SDC文件内单独使用mark_debug属性,来标记用于调试的网络。当该行为由syn_keep属性控制时,Synplify不支持SOFT值。

   <2>使用Mentor Graphics Precision综合工具,设计者可以在VHDL或者Verilog文件内,使用mark_debug属性来标记用于调试的网络。


2.标记用于调试的HDL信号的例子


(1)Vivado 综合mark_debug的例子

<1>VHDL语法

attribute mark_debug:string;
attributemark_debug of char_fifo_dout:signal is “true”;

<2>Verilog语法

(*mark_debug=”true”*)wire[7:0]char_fifo_dout;


(2)XST mark_debug语法例子

<1>VHDL语法

attribute mark_debug:string;
attributemark_debug of char_fifo_dout:signal is “true”;

<2>Veilog语法

(*mark_debug=”true”*)wire[7:0]char_fifo_dout;


(3)Synplify mark_debug语法

<1>VHDL语法

attribute syn_keep:Boolean;
attributemark_debug:string;
attribute syn_keepof char_fifo_dout:signal is true;
attributemark_debug of char_fifo_dout:signal is “true”;

<2>Verilog语法

(*syn_keep=”true”,mark_debug=”true”*)wire[7:0]char_fifo_dout;

<3>SDC语法

define_attribute {n:char_fifo_din[*]}{mark_debug}{“true”}


(二)网表插入探测流程的实现

1、添加测试点

    首先对设计进行综合,完成后,选择Open Synthesized Design,在Netlist窗口下,列出了当前设计中存在的所有网络的节点。


   

    从所列出的网络节点中,选择需要调试的端口,并进行标记。找到Inst_fifo1,展开,找到dout(8),单击鼠标右键,在浮动菜单内执行命令Mark Debug。将din,rd_en,wr_en 都进行同样的设置。

   然后运行实现,生成比特流,并将其下载到zeboard。下载完后,会出现调试器的界面。(将rd_en和er_en所对应的拨码开关置高,表明外部读写信号有效)

  找到Trigger Setup 对话框,将fifo_inst/rd_en  fifo_inst/wr_en添加进来,将它们的比较值都设置为1。同时设置 Set Trigger Condition to Global OR,表明rd_en 或者wr_en 1时,满足触发条件,用于捕获数据。



点击运行按钮



















广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
LoneSurvivor 2018-02-25 08:26
C++输入/输出流(2)
1. get()函数#include<iostream>using namespace std;int main(){    char s1[80], s2[...
LoneSurvivor 2018-02-23 12:19
C++输入/输出流(1)
1. 输入/输出流类层次 C++的输入/输出流类库是用派生方法建立起的,它有2个平行的基类,streambuf和ios。其他的流类都是从这两个基类直接或间接派生的。1.1  ...
LoneSurvivor 2018-02-19 11:36
C++多态(4)——特殊运算符重载和类类型转换
1.“++”和“--”的重载     运算符“++”和“--”的重载要区分前置和后置两种形式。如果不区分前置和后置,则使用operator++()或operator—()即可...
LoneSurvivor 2018-02-12 11:15
C++多态(3)——运算符重载
1.     运算符重载的定义     运算符重载也是实现多态的一个重要手段。运算符重载实现的是编译时的多态,即静态多态性。C++预...
LoneSurvivor 2018-02-12 10:31
C++多态(2)——纯虚函数与抽象类
   抽象类是一种特殊的类,它提供了统一的操作界面。建立抽象类是为了多态地使用抽象类的成员函数。抽象类是包含纯虚函数的类。 1.    ...
LoneSurvivor 2018-02-11 16:24
C++多态(1)
1.     多态      多态是人类思维方式的一种直接模拟,多态性是指不同对象接收到相同的消息时,根据对象类的不同而产...
我要评论
0
0
广告
关闭 热点推荐上一条 /1 下一条