从Verilog合成器获取FFGEN

从Verilog合成器获取FFGEN,verilog,synthesis,Verilog,Synthesis,每当我通过Design Vision合成器传递以下行为代码时,我都会得到FFGEN实例,这意味着合成器将我的逻辑视为具有闩锁,即使它应该是完全组合的 代码: 有谁能建议如何修改代码,以便我可以使用自己的设计库进行输出结构verilog这是一个非常常见的错误。您的case项不能满足case语句表达式的所有可能值Op 您可以通过在最后一个case项之后的末尾添加default语句来修复它 为了进一步阅读,这里有Greg的一个很好的答案-请记住所有依赖项,并将它们列入敏感列表中。此外,如所述,不要忘记

每当我通过Design Vision合成器传递以下行为代码时,我都会得到FFGEN实例,这意味着合成器将我的逻辑视为具有闩锁,即使它应该是完全组合的

代码:


有谁能建议如何修改代码,以便我可以使用自己的设计库进行输出结构verilog这是一个非常常见的错误。您的case项不能满足case语句表达式的所有可能值
Op

您可以通过在最后一个case项之后的末尾添加
default
语句来修复它


为了进一步阅读,这里有Greg的一个很好的答案-

请记住所有依赖项,并将它们列入敏感列表中。此外,如所述,不要忘记在案例陈述中添加默认案例作为最后一个案例。

此外,使用关键字“Verilog”和“lack”进行搜索会得到121次点击,其中大多数都适用于您的情况。Hello可能重复。。谢谢大家的回复。是的,指定所有的情况就可以移除锁存逻辑。但我还是能理解这种逻辑。我不明白这有什么意义。这个逻辑不能完全组合表示吗???我知道(*)是合适的,但是,保留敏感列表可以更简单地避免FFGEN错误。@LearningCurve您不应该看到为此生成的任何顺序逻辑。我不知道你为什么会看到它,但你可以分享你的更新代码让我们看看
module decoder(input  [1:0] Op,
input  [5:0] Funct,

output reg[9:0] controls);

    // Main Decoder
 always @(*)  begin
    case(Op)
    // Data-processing immediate
    2'b00: if (Funct[5]) controls = 10'b0000101001;
    // Data-processing register
    else controls = 10'b0000001001;
    // LDR
    2'b01: if (Funct[0]) controls = 10'b0001111000;
    // STR
    else controls = 10'b1001110100;
    // B
    2'b10: controls = 10'b0110100010;
    endcase
 end
endmodule