一般在做前仿真(即功能仿真)时,不会考虑信号被优化的问题。最近在利用SignalTap II观察信号时遇到某些模块内部的信号被优化掉的情况。
在Verilog描述的程序中,通常包括两种类型的信号,即wire型,和reg型。对于不同类型的信号,需要使用不同的综合属性。
(1)对于wire型信号,使用/* synthesis keep=“1” */综合属性,例如:
wire[7:0] data_in/* synthesis keep="1" */;
如果上述成功,可以使用
(* keep *) wire[7:0] data_in;
(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 */
。
图中的cnt_byte是被优化了的信号,在代码中设置了之后才显示出来