[求助]verilog生成块语句的疑问
生成块语句有三种形式:循环生成,条件生成,Case生成。循环生成可以用一个语句来完成对所有类似语句的生成,那条件生成和Case生成有什么用呢?
我看的是Verilog教材是Samir Palnitkar的,里面的关于条件生成块的例句是这样的:
...//声明略去,一个参数化乘法器,a0_width和a1_width是参数,值都为8,product 16位,a0,a1 8位
generate
if (a0_width<8)||(a1_width<8)
cla_multiplier #(a0_width,a1_width) m0 (product,a0,a1);
else
tree_multiplier #(a0_width,a1_width) m0 (product,a0,a1);
endgenerate
关于上面这段代码,这个#()代表的是什么?是延迟吗?在这里生成块是什么意思?在书上对那条语句解释说“不能在实例引用时通过传递参数语句,即#(参数1,参数2..)的方法修改”这句话是什么意思? #(a0_width,a1_width)表示括号内参数a0_width,a1_width所对应的实例m0 (product,a0,a1)【multiplier(product,a0,a1)中已定义a0_width,a1_width】
“不能在实例引用时通过传递参数语句,即#(参数1,参数2..)的方法修改”是由于localparam声明了它们l是在本module内有效的定义,不可用于参数传递,即不能把参数改变了再返回上一层定义的该参数。 #(a0_width,a1_width)表示括号内参数a0_width,a1_width所对应的实例m0 (product,a0,a1)【multiplier(product,a0,a1)中已定义a0_width,a1_width】
“不能在实例引用时通过传递参数语句,即#(参数1,参数2..)的方法修改”是由于localparam声明了它们l是在本module内有效的定义,不可用于参数传递,即不能把参数改变了再返回上一层定义的该参数。 66666666666666666666666
页:
[1]