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 |