gpt4 book ai didi

Verilog:if 语句和 case 语句之间的区别

转载 作者:行者123 更新时间:2023-12-04 03:22:09 24 4
gpt4 key购买 nike

我是 Verilog 语言的新手,想做一些练习来熟悉它。我在 HDLbits 上遇到了这个问题:DFF8ar
这个问题要求我创建具有高电平有效异步复位的 8 个 D 触发器。我用的是 case处理 areset 的语句信号:

module top_module (
input clk,
input areset, // active high asynchronous reset
input [7:0] d,
output reg[7:0] q
);

always @(posedge clk or posedge areset) begin
case (areset)
1'b1: q <= 8'b0;
default: q <= d;
endcase
end
endmodule
令我惊讶的是,它生成的电路忽略了 clk信号:
enter image description here
但是,如果我切换 case声明 if-else语句,结果将是正确的:
always @(posedge clk or posedge areset) begin
if (areset)
q <= 8'b0;
else q <= d;
end
enter image description here
即使做了一些研究,我也不知道背后的原因。是否 if-else声明和 case陈述有一些根本的区别吗?任何帮助表示赞赏!

最佳答案

Synthesis 对正常的 Verilog 语言设置了一些特殊的限制。
综合工具识别特定的 Verilog 编码模式,但您的 case代码不匹配任何这些模式,而您的 if/else代码可以。您的工具集应该有文档说明综合支持哪些语法。运行综合时,可能有警告或错误消息;检查任何日志文件。
尽管这 2 种编码样式在模拟中的行为可能相同,但您需要将自己限制为支持的综合语法。

关于Verilog:if 语句和 case 语句之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68325546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com