use*_*216 5 verilog hdl system-verilog
我是 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
Run Code Online (Sandbox Code Playgroud)
但是,如果我将case
语句切换为if-else
语句,结果将是正确的:
always @(posedge clk or posedge areset) begin
if (areset)
q <= 8'b0;
else q <= d;
end
Run Code Online (Sandbox Code Playgroud)
即使进行了一些研究后,我也不知道其背后的原因。if-else
陈述和case
陈述有什么根本区别吗?任何帮助表示赞赏!
Synthesis 对普通 Verilog 语言提出了一些特殊限制。综合工具可识别特定的 Verilog 编码模式,但您的case
代码与这些模式都不匹配,而您的if/else
代码则匹配。您的工具集应该有文档,显示综合支持哪些语法。当您运行综合时,可能会出现警告或错误消息;检查是否有任何日志文件。
尽管这两种编码风格在模拟中可能表现相同,但您需要将自己限制在支持的综合语法上。
归档时间: |
|
查看次数: |
1290 次 |
最近记录: |