alwayszeta 发表于 2011-6-1 16:20:14

[求助]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..)的方法修改”这句话是什么意思?

tiphen 发表于 2011-7-21 22:33:32

#(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内有效的定义,不可用于参数传递,即不能把参数改变了再返回上一层定义的该参数。

tiphen 发表于 2011-7-21 22:34:13

#(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内有效的定义,不可用于参数传递,即不能把参数改变了再返回上一层定义的该参数。

fpga_feixiang 发表于 2022-1-10 17:56:18

66666666666666666666666
页: [1]
查看完整版本: [求助]verilog生成块语句的疑问