[英]In synthesizable verilog, can we use assign statement in generate block?
For example, I have the below piece of code. 例如,我有下面的代码。 Can we assign wire inside the generate block in synthesizable verilog? 我们可以在可合成Verilog中在generate块内分配导线吗? Can we use assign statement inside the generate block in synthesizable verilog? 我们可以在可合成的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] };
end
endgenerate
Yes. 是。 It is possible. 有可能的。 A generate statement is just a code generator directive to the synthesizer. generate语句只是合成器的代码生成器指令。 Basically, it is just loop unrolling. 基本上,它只是循环展开。 This is if the loop can be statically elaborated. 这是可以静态地构造循环的情况。 That is, the number of times the loop is to executed should be determinable at compile time. 也就是说,循环的执行次数应在编译时确定。
genvar i;
generate
for (i = 0; i < 2 ; i++) {
assign x[i] = i;}
endgenerate
unrolls into
assign x[0] = 0;
assign x[1] = 1;
In synthesizeable Verilog, it is possible to use an assign statement inside of a generate block. 在可综合的Verilog中,可以在generate块内部使用一个assign语句。 All a generate block does is mimic multiple instants. 生成块所做的只是模仿多个瞬间。 Be careful though, because just like a for loop, it could be very big space-wise. 但是要小心,因为就像for循环一样,它在空间上可能非常大。
You can use assign in generate statment, it is quite common to help parameterise the hook up modules 您可以在生成语句中使用assign,这很常见,可以帮助参数化连接模块
The original code has some issues: L
is defined multiple times and it is only assigned 2 out of 3 bits 原始代码存在一些问题: 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
Could be changed to: 可以更改为:
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
Here L[i]
selects the i'th wire [1:0]
part of L. While a[i]
and b[i]
are bit selects. L[i]
在这里选择L[i]
的第i wire [1:0]
。a a[i]
和b[i]
是位选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.