【vivado】ila观测信号被拆分问题

一、前言

在FPGA中用ILA观测设计中的信号时,有时一些多比特信号会被拆分成一些零散的信号,这会增大信号观测的难度。这一问题的产生与vivado的综合工具有关,viavdo在综合时会对一些逻辑信号进行优化、重命名等操作,从而导致信号被拆分。

二、vivado相关综合属性

在对解决该问题之前,先对一些背景知识进行介绍,主要是对综合工具的一些属性设置。本小节内容主要来着Xilinx ug901 vivado综合相关文档。

2.1 KEEP

使用方式:

 KEEP Example (Verilog) 
(* keep = "true" *) wire sig1;
 assign sig1 = in1 & in2;
 assign out1 = sig1 & in2;

支持的 KEEP 值为:

• TRUE:保留信号。

• FALSE:允许优化 Vivado 综合。FALSE 值不会强制工具删除信号。默认值为 FALSE。

使用 KEEP 属性可防止信号被优化或被吸收到逻辑块中的优化。此属性指示合成工具保留它所放置的信号,并将该信号放置在网列表中。

可以在reg ,wire上使用该属性。推荐仅在 RTL 中设置此属性。由于需要保留的信号通常会在读取 XDC 文件之前进行优化,因此在 RTL 中设置此属性可确保使用该属性。

模块或实体的端口不支持 KEEP 属性。如果需要保留特定端口,使用 -flatten_hierarchy none 设置,或者在模块或实体本身上使用DONT_TOUCH属性。

KEEP 属性不会强制布局布线保留信号。作为替代,使用 DONT_TOUCH 属性可以强制保留。

2.2 KEPP_HIERARCHY

使用方式:

 KEEP_HIERARCHY Example (Verilog)
 On Module:
 (* keep_hierarchy = "yes" *) module bottom (in1, in2, in3, in4, out1, out2);
 On Instance:
 (* keep_hierarchy = "yes" *)bottom u0 (.in1(in1), .in2(in2), .out1(temp1));

 KEEP_HIERARCHY Example (XDC) 
On Instance:
 set_property keep_hierarchy yes [get_cells u0]

KEEP_HIERARCHY用于防止沿层次结构边界进行优化。Vivado 综合工具尝试保持 RTL 中指定的相同通用层次结构,但出于更好的结果质量 (QoR) 原因,它可以扁平化或修改它们。

如果将KEEP_HIERARCHY放置在实例上,则综合工具将使该级别的边界保持静态。该属性会影响综合结果,不应用于描述 3 态输出和 I/O 缓冲器控制逻辑的模块。

KEEP_HIERARCHY可以放置在模块或架构级别或实例中。可以在 RTL 和 XDC 中设置此属性。如果在 XDC 中使用,则只能将其放在实例上。

2.3  DONT_TOUCH

使用方式:

 DONT_TOUCH Verilog Examples

 Verilog Wire Example
 (* dont_touch = "yes" *) wire sig1;
 assign sig1 = in1 & in2;
 assign out1 = sig1 & in2;

 Verilog Module Example 
(* DONT_TOUCH = "yes" *) 
module example_dt_ver
 (clk,
 In1,
 In2,
 out1);

 Verilog Instance Example
 (* DONT_TOUCH = "yes" *) example_dt_ver U0 
(.clk(clk), 
.in1(a), 
.in2(b), 
out1(c));

DONT_TOUCH的值为 TRUE/FALSE 或 yes/no。可以将此属性放置在任何信号、模块、实体或组件上。

使用 DONT_TOUCH 属性代替 KEEP 或 KEEP_HIERARCHY。DONT_TOUCH的工作方式与 KEEP 或 KEEP_HIERARCHY 属性相同,但是,与 KEEP 和 KEEP_HIERARCHY 不同,DONT_TOUCH 是前向注释的,其作用范围包括布局布线阶段,用于防止布局布线进行逻辑优化。

 ​通常,DONT_TOUCH属性不建议使用在XDC文件中,因为对于信号来说,通常优化是发生在工具读取XDC文件前,因此设置属性可能导致无效。唯一一种推荐使用到XDC中的场景是当RTL代码中使用了DONT TOUCH属性并设置为yes时,想让该属性不生效但又不想改变RTL设计时,可以在XDC文件中再次进行DONT TOUCH属性设置为no的设置,此时后者设置生效,信号将会被优化。

三、ila信号被拆分的问题

有人在xilinx支持网站上提出了该问题:ILA中的信号被拆分成很多部分是什么原因,如何解决? (xilinx.com)

54699 - Design Assistant for Vivado Synthesis - Help with Synthesis HDL Attribute Support - dont_touch, full_case, gated_clock, shreg_extract (xilinx.com)

官方回答是建议使用DONT_TOUCH属性。网上也有帖子说使用该属性效果不行:

解决vivado抓取ila信号名错乱问题_vivado为什么ila信号被拆分-CSDN博客

官网的建议笔者尚未尝试,后面将进行验证。目前笔者的观察是该现象多是在mark_debug进行ila观测时出现,笔者将其改为使用ILA IP核后,目前就没有遇到过该问题了。

四、参考资料

xilinx ug901 Vivado Design Suite User Guide_Synthesis_2022

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值