如何统计always_ff语句中创建的触发器数量?是否存在判定算法?
统计always_ff语句中触发器数量的方法与判定算法
要统计always_ff块里生成的触发器数量,核心是识别被时序逻辑驱动的状态变量——每一个这类变量的每一位都会对应一个触发器(除非综合工具做了优化,但从逻辑判定角度先按结构统计)。这类统计有明确的可落地算法,具体步骤如下:
- 先确认目标块是
always_ff:这类块的敏感列表必然包含时钟沿,天生对应时序逻辑电路,是触发器的生成载体。 - 遍历块内所有赋值操作,筛选出符合条件的变量:
- 用**非阻塞赋值(
<=)**赋值的变量,肯定是触发器输出; - 即使在复位分支用阻塞赋值(
=),但在非复位分支被赋值为自身关联逻辑(比如Count = Count +1)的变量,本质是时序状态变量,同样对应触发器。
- 用**非阻塞赋值(
- 计算每个符合条件变量的位宽:单bit变量(比如
logic Out)计1个触发器;多bit总线(比如logic [7:0] Count)按位宽计数(这里是8个)。 - 额外说明:如果变量被赋值后从未被使用,或者逻辑上等价于常量,综合工具会优化掉对应的触发器,但算法判定阶段先按逻辑结构统计。
示例代码分析
logic Out; logic [7:0] Count; always_ff @(posedge Clock or posedge Reset) begin if (Reset) Count = 0; else Count = Count + 1; Out <= Count[7]; end
Count是8bit状态变量,复位时被置0,时钟沿触发时自增,对应8个触发器;Out通过非阻塞赋值由Count[7]驱动,属于时序输出,对应1个触发器;- 总计生成9个触发器。
内容的提问来源于stack exchange,提问作者Jingle Jangle
相关产品推荐
相关产品推荐

