【问题标题】:Array of parameters in systemverilogsystemverilog 中的参数数组
【发布时间】:2019-09-26 14:23:25
【问题描述】:

我尝试实例化参数数组,例如

module top();
    parameter array_size = 10;
    parameter par_array [array_size] = '{array_size{12}};

    initial begin
        $display("%d",par_array[array_size-1]);
    end
endmodule

但是当我尝试在 questasim 中编译这个模块时,我得到了这种错误

-- 编译模块顶部 **错误:(vlog-13069)parameters_array.sv(3):靠近“[”:语法错误,意外'[',期待';'或','。

搜索这个主题让我找到了following 主题,回答者说 systemverilog 确实允许这种构造。
我真的不想使用长参数向量,因为它会导致新的困难,并且此构造正在 Vivado 中编译(但为了验证我需要使用 Questa)。

【问题讨论】:

    标签: system-verilog questasim


    【解决方案1】:

    参数数组仅在system verilog 中受支持。因此,请确保您在系统 verilog 模式下编译(文件扩展名为 .sv 或您需要的任何限定符)。

    另外你最好在你的情况下使用int

    parameter int par_array [array_size] = '{array_size{12}};`
    ----------^^^
    

    【讨论】:

    • 是的,我很确定,我正在使用 systemverilog(文件扩展名为 sv),并且我尝试使用 int。
    • 好吧,它可能不会在 questa 中实现。与他们的支持交谈。
    • 奇怪的事情——我又试了一次,它确实奏效了。很抱歉提供错误信息。
    【解决方案2】:

    解压后的数组参数需要数据类型。

    parameter int par_array [array_size] = '{array_size{12}};
    

    只能指定简单的整数参数,没有数据类型和范围。

    帮自己一个忙,永远不要依赖任何地方的隐式数据类型。

    【讨论】:

      【解决方案3】:

      尝试在某些地方定义一个动态数组类型:

      typedef int int_arr_t[];
      

      然后在你的模块中使用新的定义类型

      module #(parameter array_size =12,
                        parameter int_arr_t par_array = '{array_size{12}})
      

      【讨论】:

        猜你喜欢
        • 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
        相关资源
        最近更新 更多