【问题标题】:Undeclared identifier in VerliogVerilog 中未声明的标识符
【发布时间】:2022-01-09 13:10:22
【问题描述】:

我在 Verilog 中做一些项目,我在这部分代码中遇到了一些问题。

'''
parameter OP_mode = 2'b01;

if(OP_mode == 2'b00)
  parameter k=4;
else if(OP_mode == 2'b01)
  parameter k=8;
      .
      .
      .
reg [k-1:0] inputs;

'''

在这种情况下,编译器给我错误“未声明的标识符:k”我该如何解决这个错误?

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

    您在无法从外部引用的未命名代码块中声明参数 (IEEE 1800-2017 SystemVerilog LRM)

    27.5 条件生成构造

    条件生成结构中的生成块可以命名或不命名,它们可能只包含一项,不需要用begin-end 关键字包围。即使没有begin-end 关键字,它仍然是一个生成块,它与所有生成块一样,在实例化时包含一个单独的范围和一个新的层次结构。

    parameter OP_mode = 2'b01;
    if(OP_mode == 2'b00) begin: block
      parameter k=4;
    end
    else if(OP_mode == 2'b01) begin : block
      parameter k=8;
    end
    logic [k-1:0] inputs;
    

    更好的方法是使用函数调用:

    module top;
      
      parameter OP_mode = 2'b01;
      
      function int f_k;
        if(OP_mode == 2'b00)
           return 4;
        else if(OP_mode == 2'b01) 
           return 8;
        return 0;
      endfunction
      
      parameter k = f_k();
      logic [k-1:0] inputs;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      相关资源
      最近更新 更多