在可合成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] };

例如,我有下面的一段代码。我们可以在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] };
        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]
是位选择。

在以后的问题中,请显示您得到的错误。