【问题标题】:How to correctly slice an array of real numbers in SystemVerilog?如何在 SystemVerilog 中正确分割实数数组?
【发布时间】:2018-09-24 18:14:55
【问题描述】:

Quartus 返回此错误:“索引 x 返回一个聚合值”。 代码:

module splineInterp(x, y);
input real x [64:0][0:4];
output real y;
y = x[1] - x[0];
endmodule

【问题讨论】:

  • 是的,我做到了。但在实际程序中我没有

标签: system-verilog quartus


【解决方案1】:

您有一个二维(未打包)实数数组:

input real x [64:0][0:4];

在 Verilog 中不索引所有未打包的维度(如果您索引其中任何一个维度)是非法的。添加缺少的assign 语句,这仍然是非法的:

assign y = x[1] - x[0];

因为您只索引了第一个维度。您将不得不说类似

assign y = x[1][4] - x[0][4];

基本上,错误消息告诉您x[0] 是一个聚合值 - 即它是一个实数数组,而不是一个实数。

【讨论】:

  • 我试过但得到了相同的结果。我认为verilog中的实数类型总是由64位表示,然后我不必指定实数数组:实数x [64:0] [0:4]。我试图这样定义它:real x [0:4]。但是当我尝试以这种方式使用 x 数组中的一个实数时:assign y = x[1] - x[0],quartus 返回我之前提到的错误。
  • 带实数的代码不可综合。 (即,您不能将带有实数的代码转换为硬件。)您不应该使用 Quartus 编译此代码。但是,需要明确的是,real x [64:0][0:4] 是一个 65 x 5 实数的二维数组。
  • 非常感谢。那么你知道有哪些开源库可以在 verilog 中处理固定或浮点数吗?
  • 不,我不知道,对不起。在我上一份工作中,我曾经在芯片上工作,那是 100,000 个信号处理逻辑门,都是用定点完成的。全部手工完成 - 我们没有使用任何类型的库。
猜你喜欢
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多