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信号;
vivado中关于mark_debug综合被优化的问题_第1张图片

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

你可能感兴趣的:(vivado)