新闻  |   论坛  |   博客  |   在线研讨会
防止FPGA设计中综合后的信号被优化
xie0jing0 | 2011-07-11 22:37:11    阅读:13903   发布文章

      这不是一个新话题了,写这个也是当作自己的一个小小的笔记吧!觉得挺有用的。

      一般在做前仿真(即功能仿真)时,不会考虑信号被优化的问题。最近做一个关于运算的小程序,前仿真的数据没有问题,但是实际出来的数据总是有错误,所以不得不要进行后仿真。而后仿真一个很大的问题就是设计中很多信号在综合的过程中都优化掉了,所以需要添加相应的综合属性,让软件在综合的工程中,保留这些信号。另外,在利用SignalTap II观察信号时也会遇到相同的问题。

      在Verilog描述的程序中,通常包括两种类型的信号,即wire型,和reg型。对于不行类型的信号,需要使用不同的综合属性。

(1)对于wire型信号,使用/* synthesis keep="1" */综合属性,例如下面的语句:

      wire[7:0] data_in/* synthesis keep="1" */;

(2)对于reg型信号,使用/* synthesis preserve = 1 */综合属性,例如下面的语句:

      reg[7:0] data_in/* synthesis preserve = 1 */;

      需要注意的是:描述综合属性的语句一定要添加在“;”前面。

      其中,/* synthesis keep="1" */是Quartus II自带综合器的综合属性,对应于Synplify的综合属性是/* synthesis syn_keep=1 */。不过现在Quartus II也支持/* synthesis syn_keep=1 */


在这个BUF两端的信号线上加上下面的属性(Verilog HDL版本):
wire bufin  /* synthesis syn_keep=1 xc_props="X" */;
具体解释:
1、syn_keep=1就是保留这个信号线,是它成为一个instance(synplify的),然后就可以对它添加XILINX的约束属性;
2、xc_props=“”是synplify为XILINX保留留的约束属性,可以透传到ISE的实现中去,从而约束实现过程。
3、“X”属性是在MAP时识别的KEEP属性,如果用XST综合就只需要在信号线的两端加上X属性就可以透传到MAP中去。但是synplify并不能识别,因此需要通过以上的方法将X属性透传到MAP中去。
类似在 VHDL中也适用
attribute syn_keep of temp01 : signal is true;
attribute xc_props of temp01 : signal is "X";

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客