verilog中begin_end块中有多个if语句
时间:12-12
整理:3721RD
点击:
如果这些if语句的判断条件没有什么关系,既不互斥也不矛盾(描述的是不同变量的情况),这样写会不会有什么问题啊?(在实现功能和代码综合方面)比如:
alway@(a)
begin
if(b=1'b0) c=1'b0;
if(d=1'b0) e=1'b1;
end
alway@(a)
begin
if(b=1'b0) c=1'b0;
if(d=1'b0) e=1'b1;
end
这样写有问题,要将变量都放到敏感列表中:
always @* begin
if(b=1'b0) c=1'b0;
if(d=1'b0) e=1'b1;
end
这样等价于写两个always :
always @* begin
if(b=1'b0) c=1'b0;
end
always @* begin
if(d=1'b0) e=1'b1;
end
只要你真值表能得到唯一值就都没问题
综合工具基本都是基于真值表的
请问你是说这样写程序会综合出来锁存器么?
我猜他的意思应该是if后面没else会导致综合出latch,跟你说的多个变量没关系。
其实多个变量是可以放在一个always里的,只是要确保敏感列表要写全,其次是if不要缺else和case不要缺default。