1

我有以下代码,文件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 在分析和综合后报告此错误:

错误 (10170):在 c.sv(2) 的文本“虚拟”附近出现 Verilog HDL 语法错误;期待描述

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

我究竟做错了什么?

4

1 回答 1

3

遗憾的是,目前在 Altera Quartus 中无法支持参数化功能。您有以下可用的行动方案:

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

选项 2 当然将涉及分出一笔不小的钱。Synopsys Design Compiler 支持这种结构,您的工作量可能会因其他工具而异。

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

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

关于“宽度独立函数”问题,还有一些不涉及类的可能解决方法的更多讨论和原型设计。

于 2015-09-09T07:02:46.227 回答