Verilog程序always里有两个敏感参数,用if区分,编译出错

2024-11-21 13:16:26
推荐回答(3个)
回答(1):

其实你的这个程序在modelsim里面仿真是没有问题的,能够实现你想要的功能。
但是在某些编译环境中,要求,当always的敏感变量为两个或以上时,其中一个可以作为时钟,而另外一个必须出现在always中的第一个if的条件中,否则不能综合。在你的程序里,如果always中先对clr信号使用if,之后再在每个情况中判断en是否为高,那么应该就可以通过了。
祝好~

回答(2):

module
......

always @ (posedge clk)
begin
if(en)
begin
if(clr) q<=3'b000;
else
if (load)
begin
case(q)
3'b000:q<=3'b001;
3'b001:q<=3'b010;
3'b010:q<=3'b100;
3'b100:q<=3'b000;
default:q<=3'b000;
endcase
end
end

endmodule

begin 。。。。end 之类的格式自己去对齐吧。

回答(3):

没有遵循硬件描述的规则,乱用verilog语法。
1、使能信号不能当时钟信号用
2、default后面要加冒号
3、D触发器一般有个复位端