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

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

1
2
3
4
5
6
7
8
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)是常量时,会直接综合掉

1
2
3
4
5
6
7
8
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)是变量时会报错

1
2
3
4
5
6
7
8
9
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的作用只是帮助设计者思维设计这么一个过程,不会在设计电路中有体现

1
2
3
4
5
6
7
8
9
10
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

在这里插入图片描述