在可合成verilog中,我们可以在generate块中使用assign语句吗?
例如,我有下面的一段代码。我们可以在synthesizable verilog中的generate块内分配导线吗?我们可以在synthesizable verilog的generate块中使用assign语句吗在可合成verilog中,我们可以在generate块中使用assign语句吗?,verilog,Verilog,例如,我有下面的一段代码。我们可以在synthesizable verilog中的generate块内分配导线吗?我们可以在synthesizable verilog的generate块中使用assign语句吗 genvar i; generate for (i = 0; i < W; i=i+1) begin:m wire [2:0] L; assign L[1:0] = { a[i], b[i] };
genvar i;
generate
for (i = 0; i < W; i=i+1) begin:m
wire [2:0] L;
assign L[1:0] = { a[i], b[i] };
end
endgenerate
genvari;
生成
对于(i=0;i
在可合成的Verilog中,可以在generate块内使用assign语句。生成块所做的只是模拟多个瞬间。不过要小心,因为就像for循环一样,它在空间上可能非常大。是的。这是可能的。generate语句只是合成器的代码生成器指令。基本上,它只是循环展开。这是如果可以静态地详细描述循环。也就是说,循环的执行次数应该可以在编译时确定
genvar i;
generate
for (i = 0; i < 2 ; i++) {
assign x[i] = i;}
endgenerate
unrolls into
assign x[0] = 0;
assign x[1] = 1;
genvari;
生成
对于(i=0;i<2;i++){
分配x[i]=i;}
最终生成
展开成
分配x[0]=0;
分配x[1]=1;
您可以在generate statment中使用assign,帮助参数化连接模块是很常见的
原始代码有一些问题:L
被定义了多次,并且只分配了3位中的2位
genvar i;
generate
for (i = 0; i < W; i=i+1) begin:m
wire [2:0] L;
assign L[1:0] = { a[i], b[i] };
end
endgenerate
genvari;
生成
对于(i=0;i
可更改为:
localparam W = 4;
reg [W-1:0] a;
reg [W-1:0] b;
wire [1:0] L [0:W-1];
genvar i;
generate
for (i = 0; i < W; i=i+1) begin:m
assign L[i] = { a[i], b[i] };
end
endgenerate
localparam W=4;
注册号[W-1:0]a;
reg[W-1:0]b;
金属丝[1:0]L[0:W-1];
genvar i;
生成
对于(i=0;i
在这里,
L[i]
选择L的第i个wire[1:0]
部分。而a[i]
和b[i]
是位选择。在以后的问题中,请显示您得到的错误。