systemverilog 中的锁存器推理

问题描述 投票:0回答:1

我正在尝试系统verilog代码,并且有一个锁存推断,这是asic流程的错误。

m_f1=m1[10]?(m1[9:1]):(m1[8:0]);
e=m1[10]?(e+1):e; 
m_f = m_f1;

这里错误或锁存推断位于 m_f=m_f1 ,唯一使用它的其他地方是

    always@(posedge clk) begin c[15]=s3; c[8:0]=m_f; c[14:9]=e; end

verilog system-verilog
1个回答
0
投票

正如评论中@dave_59 所指出的,锁存器推断来自于该多路复用器的反馈

e =m1[10] ? (e + 1) :e ; 

其示意图如下所示:

很明显,这是围绕组合逻辑(多路复用器,又名多路复用器)的反馈,也称为锁存器。

可以使用多路复用器在

e
e + 1
之间进行选择,但不能将它们反馈到多路复用器周围。

您可以在反馈路径中放置一个寄存器(如果这是您想要的行为),并且有关锁存器的警告将会消失。有时累加器或累加器看起来像多路复用器周围的反馈,但是您需要一个寄存器来正确建模累加器。

与寄存器相同的电路可能如下所示:

这将允许您加载 e,然后使用 select m1[10] 添加 1。

© www.soinside.com 2019 - 2024. All rights reserved.