crazybird

【原创】vivado之信号保持

2
阅读(4058) 评论(7)

    有时候,我们会发现,一个设计电路的某些信号在vivado中进行综合实现之后被优化掉了,导致不能在线调试这些信号。那怎样才能将这些信号在综合实现之后不被优化掉呢?下面举个简单的例子就清楚了。

    假设设计实现的是与门和或门的功能,而或门的结果没有作为引脚输出,电路实现代码如下所示:

module logic_gate
(
    input       dina,
    input       dinb,
    output      and_out
);
//---------------------
wire            or_out;
assign  and_out = dina & dinb;
assign  or_out  = dina | dinb;

endmodule

    综合之后,网表和原理图分别如图1和图2所示。

网表被优化.png

图1  or_and信号被优化

或门被优化.png

图2  或门被优化掉

    从网表和原理图中可以看出,或门已经被优化掉了。所以我们不能在线调试或门的功能。

    有什么办法可以避免或门被优化呢?方法很简单,在或门信号or_out定义之前加上(*keep = "true"*)就OK了。设计代码修改之后如下所示:

module logic_gate
(
    input       dina,
    input       dinb,
    output      and_out
);
//---------------------
(*keep = "true"*)wire            or_out;
assign  and_out = dina & dinb;
assign  or_out  = dina | dinb;

endmodule

     综合之后,网表和原理图分别如图3和图4所示。从网表和原理图中可以看出,或门(或or_out信号)保持,从而可以对或门进行在线调试。

网表没有被优化.png

图3  or_out信号保持

原理图没有被优化.png

图4  或门保持

  1. 经常遇到这的问题,但看xilinx的一些文档,不推荐使用这些属性功能呢?很迷惑,谁能解释一下。

  2. 学习了,不错!

  3. @zuicao   

    终于找到了,原来加上(*keep = "true"*)就可以防止wire类型的被优化,就可以在线调试了。

  4. 终于找到了,原来加上(*keep = "true"*)就可以防止wire类型的被优化,就可以在线调试了。

  5. keep_touch推荐

  6. @coding   

    学习学习。

    *^_^*

  7. 学习学习。