精华内容
下载资源
问答
  • 在线调试,可以用ila,也可以用debug。平时我都用的ila或者chipscope。但是在block开发方式下,module里面不能含有IP核,否则add module失败。当然也可以把module封装成IP核,然后在block中添加。自己开发的时候,又...

         在线调试,可以用ila,也可以用debug。平时我都用的ila或者chipscope。但是在block开发方式下,module里面不能含有IP核,否则add module失败。当然也可以把module封装成IP核,然后在block中添加。自己开发的时候,又懒得把所有模块封装成IP核,耗时,麻烦。这样想要添加测试信号的时候,就需要用到debug。

         在使用chipscope的时候,有的信号可能你在端口列表中根本找不到,添加(*keep= “true”*)也不行,这里就可以凸显mark_debug 的优势。用mark_debug 就能观测到改信号。

    1 、 在代码中添加(* mark_debug="true" *) 语句

    2、在block design 时,在信号上右键  ------  debug 

         在使用debug 的时候,有一个问题很头疼。比如我这次添加了3个信号,等会想去掉一个,或者添加一个。首先,综合然后才能打开添加debug的界面;其次,每次新打开debug,代码中所有的debug都会有,而不是上次添加多的,还需要自己一个个找,如果代码中debug的信号特别多,添加/删除 信号很麻烦。

        其实,第一次采用debug界面生成,后面直接修改XDC文件就可以了,下面是我尝试添加了两个信号,已经生成的bit文件。

    上图,红色方框圈起来的是后来自己新添加的信号。后期添加,就按照这样,每组4条指令添加即可。第一组是位宽为1 的信号,第二组是位宽为8的信号。

    上图中各标号说明:

    1:probe 15 ,紧接上面的编号往下续的

    2:probe 15 ,紧接上面的编号往下续的

    3:标识该测试信号的位宽为1

    4:probe 15 ,紧接上面的编号往下续的

    5:测试的信号。注意和后面“7”对比,不仅仅是位宽拼接的不同,这里比“7”中也多了一个ssd_rd_judge_0_XXX。o_ssd_m_tready和其他module相连,这里在使用o_ssd_m_tready这个信号 的时候,要标识是哪个模块的数据。所以这里使用了

    ssd_rd_judge_0_o_ssd_m_tready (注意ssd_rd_judge_0 是模块block界面上面的名字)

    6:标识该测试信号的位宽为8

    7:测试的信号。和“5”的不同不仅仅是位宽拼接,在信号说明的时候,没有RAID_CTRL_0.那是因为,这里的信号没有和其他模块相连。 多位拼接按照固定格式来就可以了。

    8: 额外说明一点:多数据拼接的时候不要有换行,有的时候换行会报错。然后把换行去掉,所有的都写为一行,就没有错误了。自动生成的XDC文件中也有换行的,不知道为什么自己添加的就不行。

    上面的描述,我都是在block中,右键debug看的信号。代码内部的在这里没用到。代码内部的,应该是design_1_i/module_name/signal   这类格式。信号索引按照module一层层往下找。可以参考自动生成的xdc文件格式来续。

     

     

     

     

     

     

     

     

     

     

         

     

    展开全文
  • vivado中关于mark_debug综合被优化的问题 带尺寸的图片: 居中的图片: 居中并且带尺寸的图片: 当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。 如何插入一段漂亮的代码片 去博客设置页面,选择一款...

    vivado中关于mark_debug综合被优化的问题

    最近项目中到了FPGA验证阶段,使用vivado2010版本
    百度各种方法去探测想要debug的信号,一些简单的信号,直接在netlist中标记即可,但是如果是比较复杂的bus信号,如AHB BUS,100多个Bit信号,直接在网表中发现找不到想要观测的信号,或者找得到但是位宽不完整,只有部分bit,而且百度收到的方法无外乎一下几种,我都尝试过了,可能我尝试的操作有误,总是都没有成功标记到我想要标记的AHB BUS信号;
    先普及下百度收到的几种方法:
    1)在代码中对需要观测的信号前面添加 (* mark_debug=“true” );
    如下:
    (
    mark_debug=“true” )input [63:0] din_data,
    (
    mark_debug=“true” )input din_sop,
    (
    mark_debug=“true” )input din_eop,
    (
    mark_debug=“true” )input din_valid,
    然后run synthesis–》open netlist–》在左边SYNTHESIS界面中点击Set Up Debug,会自动显示出mark_debug的那些信号,(注意:一定不要点击Window—Debug,因为可能不会显示全不得之前在rtl中mark_debug的信号)
    2)不在代码中添加 (
    mark_debug=“true” *),单独新建一个.xdc文件,用于添加需要观测的信号:
    就是说如果不新建xdc,则默认会保存在你自己定义引脚位置的那个xdc文件中,这样比较混乱,新建一个,区分开不影响之前的xdc定义,这种方法我没有尝试,因为编写xdc文件太麻烦了,使用工具自动生成的不是更好;
    set_property MARK_DEBUG true [get_nets i_system_wrapper/system_i/dfe/pre_gain_ctrl/inst/valid_out]
    set_property MARK_DEBUG true [get_nets {i_system_wrapper/system_i/dfe/pre_gain_ctrl/inst/dout[0]}]
    使用此方法需要注意的有:空格不能多也不能少,要严格遵循xdc的语法;当添加的信号是单bit时,不需要加{};当添加的信号是多bit时,记得需要添加{},而且信号后面最好要跟[0],要不然可能只保留此信号的一个bit,或者不保留;
    添加完mark_debug之后,进行综合,综合完成后,点击 SYNTHESIS 下的 Set Up Debug 选项,添加debug信号;
    在这里插入图片描述

    随后我们在 xdc 文件里面添加的信号就会出现在 ILA 里面 (如下图),然后保存 ILA 的 debug.xdc文件,进行implememt 即可。
    在这里插入图片描述
    3)代码中例化ILA IP核
    在这里插入图片描述
    需要探测多少个信号,信号的位宽是多少,直接选择即可:
    在这里插入图片描述上图中Capture Control和Advance Trigger建议勾上,这样方便板子上调试;如果不勾,板子上好像无法选择触发方式;
    下面界面可以选择探测信号宽度以及触发方式:
    在这里插入图片描述
    可谓之简单粗暴,如果没人干预你,就这样用也没关系。之后直接在程序中例化即可。
    这种方法我也尝试了,算是最麻烦的一种方法,因为IP Catloge里调用ILA核还有生成,还要copy代码去连线,还要更改原有设计,最重要的是我都照着上面操作完成了,然后保存,重新综合实现,gen bitstream,最后发现网表中竟然没有出现ila核,我也很郁闷,难不成又是被优化了吗?还是我哪点搞错了,操作失误呢;
    4)通过网表标记
    先描述一般步骤,
    综合后生成网表,在网表中设置Debug:Mark Debug。
    在这里插入图片描述
    在标记Debug后,就等于选择了需要debug的信号,之后在综合设置里设置Debug参数即可:
    在这里插入图片描述
    选择需要Debug的信号,设置时钟域以及触发方式等:
    在这里插入图片描述
    选择采样深度:这个建议按照最大深度选择,要不然板级调试时观测场到的波形太短了,几乎看不到有用的波形;
    在这里插入图片描述
    之后,重新综合,实现生成bit流文件即可完成debug,准备上板子吧。
    注意:有些信号能够Mark Debug,有些则不能,例如模块直接的输入信号不能:
    在这里插入图片描述
    它经过一个Buf之后就可以:
    在这里插入图片描述
    在这里插入图片描述
    能不能自己鼠标点击下就看到了;
    综合后可以打开原理图,选择Debug即可看到一只小乌龟就是了:
    在这里插入图片描述
    这种方法的前提是你能在netlist中找到你想标记的信号,比如我就没找到,所以这种方法对我就不适用了;

    以上四种总结无非就是怎么把你想观测的信号标记上就行了,然后set_up Debug–选择触发方式,深度,时钟域,等等,—重新综合—implement–bitstream–down bitfile,ltx文件—over;

    但是由于我想观测的信号被优化了找不到,因此作了如下尝试:
    1)vivado set的synthesis中有个-flatten_hierarchy默认设置是rebuilt,我改成none,综合后就可以找到想要观测的信号,但是这种就会让工具对其他不观测模块也不进行优化,会影响整个项目的优化结果,也不可取
    2)对想要观测的整个模块前加上(DONT_TOUCH=“TRUE”),意思就是让工具不优化这个模块,效果和1)相同,OK
    3)在想要观测的信号前加上(mark_debug=“true”,keep=“true”),这种按理说是可以让综合优化的,但是仿真证明还是没找到我标记的信号,还是被优化了,我也很郁闷

    最终我才用的就是方法2),还在尝试中

    另外说明一点:
    1)在rtl中标记keep=true并不能100%保证信号不被优化,有的还是会被优化;
    2)在rtl中标记/* synthesis keep */可以保证信号不被优化,但是名字会被修改
    3)加入Dont touch依然不能保证一组BUS信号的所有bit都不被优化掉,implement后发现没有使用的bit位依然会被工具优化掉,即使对整个模块加入了dont touch也还是不行;

    展开全文
  • xilinx vivado debug

    2017-12-05 10:56:37
    • VHDL Syntax Example attribute mark_debug : string; attribute mark_debug of char_fifo_dout: signal is "true"; • Verilog Syntax Example (* mark_debug = "true" *) wire [7:0] char_fifo_dout;
    • VHDL Syntax Example
    attribute mark_debug : string;
    attribute mark_debug of char_fifo_dout: signal is "true";
    • Verilog Syntax Example
    (* mark_debug = "true" *) wire [7:0] char_fifo_dout;
    展开全文
  • 最近两个月开始用Vivado做项目,之前一直用ISE开发,个人觉得ISE方便好用,而Vivado编译又慢,还占内存,打开一个工程就需要好半天,可视化界面感觉也没什么用处,不如模块化的代码来的简单,而且还有一些bug。...

    最近两个月开始用Vivado做项目,之前一直用ISE开发,个人觉得ISE方便好用,而Vivado编译又慢,还占内存,打开一个工程就需要好半天,可视化界面感觉也没什么用处,不如模块化的代码来的简单,而且还有一些bug。无奈xilinx公司不再开发ISE,到14.7就结束了,以后的芯片只能用Vivado做设计了,只能用它了,现在已经更新到了2014.4版本,我现在用的是2013.4版本,开发板是zedboard。

    用Vivado进行硬件调试,就是要插入ila核,即“集成逻辑分析仪”,然后将想要引出来观察的信号连到这个核的probe上。

    首先第一步,需要把想要观测的信号标记出来,即mark_debug,有两种mark_debug的方法,我用verilog写了一个简单的流水灯程序,只有几行代码,如下:

    1. module main(
    2. input            clk,
    3. input            rst,
    4. output reg [7:0] led
    5.     );
    6. (*mark_debug = "true"*)reg [23:0] counter;
    7. always @(posedge clk) begin
    8. if(rst) begin
    9. counter <= 0;
    10. led <= 8'b00000001;
    11. end
    12. else counter <= counter + 1;
    13. if (counter == 24'hffffff)
    14. led <= {led[6:0],led[7]};
    15. end
    16.  
    17. endmodule
    例如,要观察counter信号的波形,那么在第7行定义reg型信号counter时,前面加上(*mark_debug=“true”*),这样就把counter信号标记了出来。如果用vhdl语言实现的话,这句话用该这样写:
    1. signal counter : std_logic_vector (23 downto 0);
    2. attribute mark_debug: string;
    3. attribute mark_debug of counter : signal is "true";
    另外添加xdc约束文件,内容如下:
    1. set_property PACKAGE_PIN Y9 [get_ports clk]
    2. set_property PACKAGE_PIN T18 [get_ports rst]
    3.  
    4. set_property IOSTANDARD LVCMOS33 [get_ports clk]
    5. set_property IOSTANDARD LVCMOS18 [get_ports rst]
    6.  
    7. set_property PACKAGE_PIN T22 [get_ports {led[0]}]
    8. set_property PACKAGE_PIN T21 [get_ports {led[1]}]
    9. set_property PACKAGE_PIN U22 [get_ports {led[2]}]
    10. set_property PACKAGE_PIN U21 [get_ports {led[3]}]
    11. set_property PACKAGE_PIN V22 [get_ports {led[4]}]
    12. set_property PACKAGE_PIN W22 [get_ports {led[5]}]
    13. set_property PACKAGE_PIN U19 [get_ports {led[6]}]
    14. set_property PACKAGE_PIN U14 [get_ports {led[7]}]
    15.  
    16. set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
    17. set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
    18. set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
    19. set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]
    20. set_property IOSTANDARD LVCMOS33 [get_ports {led[4]}]
    21. set_property IOSTANDARD LVCMOS33 [get_ports {led[5]}]
    22. set_property IOSTANDARD LVCMOS33 [get_ports {led[6]}]
    23. set_property IOSTANDARD LVCMOS33 [get_ports {led[7]}]
    之后run synthesis综合,之后open synthesized design,在左上角选择debug layout,在debug窗口中netlist看到counter信号前面有一个绿色的小蜘蛛,表示counter信号被标记出来了。
    这其实是一种比较繁琐的方法,更为方便的方法是,直接综合工程,在之后打开综合设计,在netlist中直接选中想要查看的信号,右键选择mark debug,即可将信号标记出来。
    但是采用第一种方式的好处是,如果工程比较复杂的话,一些信号可能会被综合优化掉,加上模块层层实例化,在netlist中可能找不到要观测的信号,这时在代码里面mark_debug,依旧可以将该信号引出来。
     
    接着第二步就是插入调试内核了,在Vivado界面下方,找到Unassigned Debug Nets,右键选择 set up debug,在接下来的对话框中列出了counter信号的lk domain是CLK_IBUG_BUFG,其trig和data项都打了对勾,表示counter信号既作为触发信号也作为数据信号。
     
    选择next,在接下来的对话框中将enable advanced trigger mode 和enable basic capture mode勾选上,继续next,最后finish,在界面下方的debug窗口显示如下:
     
     
    右键dbg_hub,选择implement debug cores,接着在打开的schematic中,可以看见插入的ila核,其probe端口与counter相连,打开xdc文件,在最后几行多出来这几行代码:
    1. create_debug_core u_ila_0 labtools_ila_v3
    2. set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_0]
    3. set_property ALL_PROBE_SAME_MU_CNT 4 [get_debug_cores u_ila_0]
    4. set_property C_ADV_TRIGGER true [get_debug_cores u_ila_0]
    5. set_property C_DATA_DEPTH 1024 [get_debug_cores u_ila_0]
    6. set_property C_EN_STRG_QUAL true [get_debug_cores u_ila_0]
    7. set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_0]
    8. set_property C_TRIGIN_EN false [get_debug_cores u_ila_0]
    9. set_property C_TRIGOUT_EN false [get_debug_cores u_ila_0]
    10. set_property port_width 1 [get_debug_ports u_ila_0/clk]
    11. connect_debug_port u_ila_0/clk [get_nets [list clk_IBUF_BUFG]]
    12. set_property port_width 24 [get_debug_ports u_ila_0/probe0]
    13. connect_debug_port u_ila_0/probe0 [get_nets [list {counter[0]} {counter[1]} {counter[2]} {counter[3]} {counter[4]} {counter[5]} {counter[6]} {counter[7]} {counter[8]} {counter[9]} {counter[10]} {counter[11]} {counter[12]} {counter[13]} {counter[14]} {counter[15]} {counter[16]} {counter[17]} {counter[18]} {counter[19]} {counter[20]} {counter[21]} {counter[22]} {counter[23]}]]
    14. set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub]

    到此为止,成功将要观察的信号引出来,完成了插入调试内核,接着直接运行generate bitstream,即可生成bit文件。

    最后一步,连上zedboard开始调试,用impact将bit文件下载到板卡上,或者在后面hardware manager中选择program device也可以。打开hardware manager,然后open new target,一直next直到结束,即可打开Vivado硬件逻辑分析仪,如下图所示:

    要查看波形,必须要有信号触发,将counter信号拖入右方的basic trigger setup窗口,可以设置,想要counter等于何值时触发,右键counter,选择run trigger,并将counter信号添加到波形窗口中,接着便可以在打开的波形窗口中观察counter信号的变化。

    硬件调试的流程大致如上述所示,这只是非常简单的一个例子,作为对官网视频教程的一个翻译加补充吧,如果工程较大的话,debug时还会遇到各种问题,就需要一步步慢慢摸索解决啦。

    参考官网视频教程,另外在xilinx官网上也可以搜到debug的文档:

    http://china.xilinx.com/training/vivado/inserting-debug-cores-into-the-design.htm
    http://china.xilinx.com/training/vivado/programming-and-debugging-design-in-hardware.htm

    附加两点我曾遇到的小问题:

    (1)在进行综合之前,需要将先将xdc约束文件添加到工程中,否则最后write bitstream时出错。Vivado的一个问题就是,有好多ise中综合时就能检测出的错误,而Vivado要等到生成bitstream时才报错。

    (2)在打开hardware manager之后,提示vcseserver没有开启,在vivado/2013.4/bin下面运行vcseserver的bat程序即可。

    转载于:https://www.cnblogs.com/tubujia/p/9242895.html

    展开全文
  • 在ISE中称为ChipScope而Vivado中就称为in system debug。下面就介绍Vivado中如何使用debug工具。 Debug分为3个阶段: 1. 探测信号:在设计中标志想要查看的信号 2. 布局布线:给包含了debug IP的设计布局布线 3. ...
  • Vivado中提供了多种Debug的操作方式,下面就来总结一下: 方式一:代码中例化ILA IP核 第一种,直接例化ILA IP核: 需要探测多少个信号,信号的位宽是多少,直接选择即可: 下面界面可以选择探测信号宽度以及触发...
  • Vivado中提供了多种Debug的操作方式,下面就来总结一下: 方式一:代码中例化ILA IP核 第一种,直接例化ILA IP核: 需要探测多少个信号,信号的位宽是多少,直接选择即可: 下面界面可以选择探测信号宽度以及触发...
  • vivado (*mark_debug = "true"*) use guide

    千次阅读 2018-12-26 08:45:04
    Add (*mark_debug = "true"*) before signal Run synthesis ,then open synthesized Design -&gt; Set Up Debug  add or delete signals, then click -&gt;Next Set ila core option....
  • vivado----fpga硬件调试 (二)----mark_debug

    万次阅读 2017-05-06 10:05:45
    在ISE中称为ChipScope而Vivado中就称为in system debug。下面就介绍Vivado中如何使用debug工具。 Debug分为3个阶段: 1. 探测信号:在设计中标志想要查看的信号 2. 布局布线:给包含了debug IP的设计布局布线 3. ...
  • vivado----fpga硬件调试 (三)----mark_debug

    千次阅读 2017-05-06 10:07:31
    Vivado下在线调试是利用ILA进行的,Xilinx官方给出了一个视频,演示了如何使用Vivadodebug cores,下面我根据这个官方视频的截图的来演示一下: 官方的视频使用的软件版本为2012.2,不过在2015.3下也是差不多的...
  • vivado----fpga硬件调试 (四)----mark_debug

    万次阅读 2017-05-06 10:15:32
    vivado中fpga功能验证比ise中方便了很多,主要体现在debug的ip核生成以及最后的波形观察和调试上,下面我就从这两个方面说一下vivado的fpga验证调试。  fpga验证的步骤一般是:  × 在代码中加入关键字,表示...
  • vivado----fpga硬件调试 (一)----mark_debug

    万次阅读 2017-05-06 10:04:46
    最近两个月开始用Vivado做项目,之前一直用ISE开发,个人觉得ISE方便好用,而Vivado编译又慢,还占内存,打开一个工程就需要好半天,可视化界面感觉也没什么用处,不如模块化的代码来的简单,而且还有一些bug。...
  • 使用vivado工具添加debug信号

    千次阅读 2019-08-08 11:52:33
    vavado工具编译时,会将我们代码中很多信号给综合或者优化掉;因此当我们想添加一下信号至ILA中进行上板... 1:在代码中对需要观测的信号前面添加 (* mark_debug="true" *); (* mark_debug="true" *)input ...
  • 在FPGA调试时经常会用到set up debug功能对开发板的引脚波或数据形进行分析,相比于例化ILA来说,set up debug更为便捷,只需要在我们所要观察的信号波形前面加上(*mark_debug = true*)即可,不需要调用ila IP核。...
  • 这里重点说明一下,网络上绝大多数(几乎所有)的资料包括博客都是用(*mark_debug=''ture''*) 来标记要抓的信号,但是随着vivado版本的更新,这种标记语言已经不行了,正确的标记方式是(...
  • 使用vivado进行观测PLL模块输出的时钟,发现正好顺序反了,不知道哪里有问题。 代码: ``` `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// ...
  • Vivado下在线调试是利用ILA进行的,Xilinx官方给出了一个视频,演示了如何使用Vivadodebug cores,下面我根据这个官方视频的截图的来演示一下: 官方的视频使用的软件版本为2012.2,不过在2015.3下也是差不多的...
  • 流程 1.建立好工程后,首先设置综合选项为保留设计的层次结构,...一种方法:在源代码待观察信号名前添加(*mark_debug="true"*)综合属性,综合完毕后会自动显示在set debug窗口。 另一种方法:打开综合好的网表,...
  • Vivado下在线调试是利用ILA进行的,Xilinx官方给出了一个视频,演示了如何使用Vivadodebug cores,下面我根据这个官方视频的截图的来演示一下: 官方的视频使用的软件版本为2012.2,不过在2015.3下也是差不多的...
  • 报错 (1) not vivado-debuggable it is not accessible from ...These errors are because you are setting the property “MARK_DEBUG” to signals that are not accesible to the ILA. That could be direct inpu
  • Vivado及Zynq使用经验

    2020-12-09 00:16:15
    1.添加debug核的合理方法是在源代码中添加(mark_debug=“true”),综合后,打开综合结果,set debug内这些标记的信号全部在网标内,不会被优化掉。如果不在代码里加这些标记,直接在综合结果里添加net,很多感兴趣的...
  • Vivado如何使用Chipscope

    千次阅读 2019-03-24 10:18:36
    vivado中取消了chipscope但是可以直接用ILA逻辑分析仪来抓信号,而且非常方便,我后面...步骤其实很简单,首先在你想抓的信号前面加上(*mark_debug = "true"*),然后综合,综合完毕以后在综合下拉菜单中选择Set ...
  • 如何使用vivado的ILA

    2021-03-14 09:14:58
    当使用综合后的网表作为debug目标时,在综合设置中需要将flatten_hierarchy设置为none...但是vivado更推荐我们使用综合后的网表文件进行debug的设计,有如下三种方式插入待测信号: 在插入完毕信号之后,还需要对de..
  • vivado中使用attribute

    2016-08-21 18:15:00
     之前最常用的一个attribute就是mark_debug了,语法如下:(*mark_debug="ture"*)。  今天又学到几个新的,原文在这里:http://china.xilinx.com/support/answers/54357.html  一、PARALLEL_CA...
  • 使用vivado的ila在线调试

    千次阅读 2018-04-27 23:15:57
    我一般是新建一个xdc文件(不要在原本的约束文件上添加,因为vivado会自动添加一些ila的约束到文件后面,需要分割开来,便于解耦),在里面添加约束:如,set_property MARK_DEBUG true [get_nets yc_hs]set_...
  • Vivado调试常见问题

    2020-05-12 14:11:01
    可以在Verilog代码中插入(*mark_debug = "true"*)属性,这样在Set Up Debug的时候可以快速找到这个信号。 (2)找不到Debug内核 大部分原因是debug内核时钟输入有问题,或者时钟输入频率低于30Mhz,如果有多...
  • vivado ILA 和管脚分配

    2019-07-03 15:52:16
    ILA attribute keep : string; attribute keep of signal_name: signal is"true"; attribute mark_debug: string; attribute mark_debug of counter : signal is "true";...(*mark_debug = "true"*)reg [23:0] c...
  • 一、在想要抓取的信号之前添加(* mark_debug = "true" *)、保存、编译。如:二、编译完成之后点击set up debug。点击下一步.....直至出现如下页面右键clock domain--&gt;select clock domain,...

空空如也

空空如也

1 2 3
收藏数 46
精华内容 18
关键字:

debugmarkvivado