Quartus II 中的 SystemVerilog 参数化函数

SystemVerilog parameterized functions in Quartus II

我有以下代码,文件 c.sv:

virtual class C#(parameter W = 32); // line #2 where error message points
    static function logic [W-1 : 0] f(input logic [W-1 : 0] in);
        return ~in;
    endfunction
endclass

然后我从 top.sv:

调用它
`include "c.sv"
module top(input wire [3:0] key, ouptut wire [3:0] led);
    assign led = C#(4)::f(sw);
endmodule

在 ModelSim 10.3d 中工作正常,但 Quartus II x64 15.0.1 build 150 在 Analysis & Synthesis 后报告此错误:

Error (10170): Verilog HDL syntax error at c.sv(2) near text "virtual"; expecting a description

如果我注释掉 inlcude "c.sv" 并用简单的 ~led 替换函数调用,那么它可以在开发板中运行。

我做错了什么?

遗憾的是,目前无法在 Altera Quartus 中支持参数化函数。您可以采取以下行动:

  1. 向 Altera 提出支持请求
  2. 使用第三方综合工具并将网表输入 Quartus
  3. 重构您的代码以减少通用性

选项 2 当然会涉及支付一笔不小的金额。 Synopsys Design Compiler 支持此构造,您的里程可能因其他工具而异。

对于选项 3,您可以求助于宏、生成的代码或可选的文件编译来获得类似的结果。

A​​ltera FPGA 用户无法使用此功能,这有点令人沮丧。为了社区的利益,无论您选择何种行动,都请提出问题。需求越多,Altera 实现此功能的可能性就越大。

"Width independent functions" question.

上有一些不涉及 类 的可能解决方法的更多讨论和原型设计