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 中支持参数化函数。您可以采取以下行动:
- 向 Altera 提出支持请求
- 使用第三方综合工具并将网表输入 Quartus
- 重构您的代码以减少通用性
选项 2 当然会涉及支付一笔不小的金额。 Synopsys Design Compiler 支持此构造,您的里程可能因其他工具而异。
对于选项 3,您可以求助于宏、生成的代码或可选的文件编译来获得类似的结果。
Altera FPGA 用户无法使用此功能,这有点令人沮丧。为了社区的利益,无论您选择何种行动,都请提出问题。需求越多,Altera 实现此功能的可能性就越大。
在 "Width independent functions" question.
上有一些不涉及 类 的可能解决方法的更多讨论和原型设计
我有以下代码,文件 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 中支持参数化函数。您可以采取以下行动:
- 向 Altera 提出支持请求
- 使用第三方综合工具并将网表输入 Quartus
- 重构您的代码以减少通用性
选项 2 当然会涉及支付一笔不小的金额。 Synopsys Design Compiler 支持此构造,您的里程可能因其他工具而异。
对于选项 3,您可以求助于宏、生成的代码或可选的文件编译来获得类似的结果。
Altera FPGA 用户无法使用此功能,这有点令人沮丧。为了社区的利益,无论您选择何种行动,都请提出问题。需求越多,Altera 实现此功能的可能性就越大。
在 "Width independent functions" question.
上有一些不涉及 类 的可能解决方法的更多讨论和原型设计