【问题标题】:Problems with wires declared inside verilog generate blocks在verilog中声明的电线问题生成块
【发布时间】:2017-12-19 04:09:36
【问题描述】:

generate 块内,我有多个if 语句。当我在第一个 if 语句中声明一条线时 - 我不能在其他 if 语句中使用它

请参阅以下我的模块的精简示例:

module my_module 
#(parameter integer NUM_X_PORTS = 1,
  parameter integer NUM_Y_PORTS = 1)
 (
  // port declarations
 );

generate 

  if (NUM_X_PORTS > 0) begin
    wire [NUM_X_PORTS-1:0] x1;
    // logic filled in here
  end

  if (NUM_Y_PORTS > 0) begin
    wire [NUM_Y_PORTS-1:0] y1;
    // logic filled in here
  end

  if ((NUM_X_PORTS > 0) && (NUM_Y_PORTS > 0)) begin
    for (i=0; i<NUM_Y_PORTS; i=i+1) begin
      assign z[i] = y1[i] & |x1; // I can't use x1 and y1 here
    end

endgenerate

来自 VCS 和 nLint 的错误消息是标识符 x1 和 y1 尚未声明。

但它们已在之前生成的 if 语句中声明 - 这里有什么问题?

【问题讨论】:

    标签: declaration verilog


    【解决方案1】:

    x1y1 的线在分配范围之外定义。一种解决方案是添加和引用范围标签:

    if (NUM_X_PORTS > 0) begin : scope_x1
      wire [NUM_X_PORTS-1:0] x1;
      // logic filled in here
    end
    
    if (NUM_Y_PORTS > 0) begin : scope_y1
      wire [NUM_Y_PORTS-1:0] y1;
      // logic filled in here
    end
    
    if ((NUM_X_PORTS > 0) && (NUM_Y_PORTS > 0)) begin : scope_z
      for (i=0; i<NUM_Y_PORTS; i=i+1) begin : scopes_z_i_ // loop has unique scope
        // x1 & y1 accessed by scope label found by its parent
        assign z[i] = scope_y1.y1[i] & |scope_x1.x1; 
      end
    end
    

    要使分配工作,x1y1 的声明必须存在于 scope_2 或其父级的范围内。

    if ((NUM_X_PORTS > 0) && (NUM_Y_PORTS > 0)) begin  : scope_z
      wire [NUM_X_PORTS-1:0] x1;
      wire [NUM_Y_PORTS-1:0] y1;
      // logic filled in here
      for (i=0; i<NUM_Y_PORTS; i=i+1) begin : scopes_z_i_ // loop has unique scope
        assign z[i] = y1[i] & |x1; // everything is withing scope_z
      end
    end
    

    在这两种情况下,x1y1 的范围都是有限的。如果您不希望在其受人尊敬的NUM_*_PORTS &gt; 0 为 false 时该线路存在,那么您必须遵循第一个示例。

    参见IEEE Std 1800-2012 § 27。生成构造了解更多关于生成的信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多