从 Verilog 合成器获取 FFGEN
getting FFGEN from Verilog Synthesizer
每当我通过 Design Vision 合成器传递以下行为代码时,我都会得到 FFGEN 实例,这意味着合成器将我的逻辑视为具有锁存器,即使它应该是完全组合的。
代码:
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
任何人都可以建议如何修改代码,以便我可以使用自己的设计库来输出结构 verilog
这是一个很常见的错误。您的案例项无法满足案例语句表达式 Op
.
的所有可能值
您可以通过在最后一个案例项目之后添加一个 default
语句来修复它。
为了进一步阅读,这里有 Greg 的出色回答 - What is inferred latch and how it is created when it is missing else statement in if condition.can anybody explain briefly?
只需记住所有依赖项并将它们列入敏感列表即可。另外,正如 所提到的,不要忘记在您的 case 语句中添加 default 案例作为它的最后一个案例。
每当我通过 Design Vision 合成器传递以下行为代码时,我都会得到 FFGEN 实例,这意味着合成器将我的逻辑视为具有锁存器,即使它应该是完全组合的。
代码:
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
任何人都可以建议如何修改代码,以便我可以使用自己的设计库来输出结构 verilog
这是一个很常见的错误。您的案例项无法满足案例语句表达式 Op
.
您可以通过在最后一个案例项目之后添加一个 default
语句来修复它。
为了进一步阅读,这里有 Greg 的出色回答 - What is inferred latch and how it is created when it is missing else statement in if condition.can anybody explain briefly?
只需记住所有依赖项并将它们列入敏感列表即可。另外,正如