verilog generate if中条件量只能是常量

1always块中if的条件内的量可以是变量,也可以是常量parameter
(1)是输入变量时,那么综合出来会有一个选择器

module  QQ(a,b,c,clk);
input a,b,clk;
parameter d=1;
output reg c;
always@(posedge clk)
if(a==1)  c=a+b;
else c=b;
endmodule

在这里插入图片描述
(2)是常量时,会直接综合掉

module  QQ(a,b,c,clk);
input a,b,clk;
parameter d=1;
output reg c;
always@(posedge clk)
if(d==0)  c=a+b;
else c=b;
endmodule

在这里插入图片描述
2generate if内量只能是parameter类型
(1)是变量时会报错

module  QQ(a,b,c,clk);
input a,b,clk;
parameter d=1;
output  c;
generate 
if(a==1) assign c=a+b;
else assign c=c;
endgenerate
endmodule 

报错
Error (10734): Verilog HDL error at QQ.v(7): a is not a constant
(2)是parameter类型时可以,当然条件选择会直接综合掉
ps:generate中赋值还得assign或者always,再加上条件选择会综合掉,所以generate的作用只是帮助设计者思维设计这么一个过程,不会在设计电路中有体现

module  QQ(a,b,c,clk);
input a,b,clk;
parameter d=1;

output  c;
generate 
if(d==1) assign c=a+b;
else assign c=c;
endgenerate
endmodule 

在这里插入图片描述

发布了56 篇原创文章 · 获赞 12 · 访问量 7849

猜你喜欢

转载自blog.csdn.net/weixin_44884357/article/details/105402580