首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Verilog: if语句和case语句之间的差异

Verilog: if语句和case语句之间的差异
EN

Stack Overflow用户
提问于 2021-07-10 15:12:04
回答 1查看 105关注 0票数 3

我是Verilog语言的新手,我想做一些练习来熟悉它。我在HDLbits上遇到了这个问题:DFF8ar

这个问题要求我创建8个带高电平异步复位的D触发器。我使用case语句来处理areset信号:

代码语言:javascript
复制
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信号:

但是,如果我将case语句切换为if-else语句,结果将是正确的:

代码语言:javascript
复制
always @(posedge clk or posedge areset) begin
    if (areset)
        q <= 8'b0; 
    else q <= d;
end

即使做了一些研究,我也不知道背后的原因。if-else语句和case语句有什么根本的区别吗?如有任何帮助,我们不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-10 18:25:38

综合对普通的Verilog语言施加了一些特殊的限制。合成工具可以识别特定的Verilog编码模式,但是您的case代码与这些模式中的任何一个都不匹配,而您的if/else代码可以。您的工具集应该有说明合成所支持的语法的文档。当您运行合成时,可能会出现警告或错误消息;请检查所有日志文件。

尽管这两种编码风格在模拟中可能表现相同,但您需要将自己限制为合成所支持的语法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68325546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档