(笔者使用的是QuartusII 的SignalTap II Logic Analyzer)在使用开发软件逻辑分析仪的时候,软件为了节约内存。有时候会自动优化一些信号,使得这些信号变得不可见,通过以下方式可以得到一些解决。
解决这个问题首先要了解一下扇入扇出问题。
网上的解释很多,但是个人认为扇入就是指定义的reg类型寄存器作为输入,扇出就是作为reg类型的寄存器作输出。若这个信号没有作为输出,则称为零扇出,若这个信号没有作为输入,则称为这个信号作为零扇入。从这个理解角度,我们可以:
1. 如果是组合逻辑信号,可以使用keep属性:
(* keep *) wire sig;
2. 如果是寄存器,并且不是零扇出,可以使用preserve属性:
(* preserve *) reg sig;
使用preserve有以下限制:
1)不会从该寄存器推断出状态机;
2)对零扇出寄存器无效。
3. 如果是寄存器,并且是零扇出的,可以使用noprune属性:
(* noprune *) reg sig;
倘若想要整个module中定义的信号都不被优化掉。我们可以:
module TEXT(
input clk,
input rst_n,
input cnt,
output data
);/*synthsis noprune*/
及在module定义结束处,加上/*synthsis noprune*/