【问题标题】:Verilog error while declaring a array声明数组时出现 Verilog 错误
【发布时间】:2016-02-23 07:20:51
【问题描述】:
reg [11:0] rom_sin_type [0:4095]= '{12'h000, 12'h003, 12'h006, 12'h009, 12'h00d, 12'h010, 12'h013, 12'h016, .....};

在verilog中,当我合成上面包含4096个值的代码行时,每个12位,它的显示错误如下所示。

期望 ';',发现 '='

期待 'endmodule',发现 '{'

请任何人帮助我,如何克服这个问题?

【问题讨论】:

  • 请显示更多代码并指出错误行。
  • 我存储了 4096 个值,这将是巨大的代码显示在这里
  • 你使用的是verilog还是system-verilog?如果你这样做会发生什么:reg [11:0] rom_sin_type [0:4095]; initial begin rom_sin_type = '{12'h000, 12'h003, 12'h006, 12'h009,...} end 你的endmodule 可能在错误的地方。
  • 我使用的是 Verilog 代码,基本上是我在编码 NCO,在 "rom_sin_type 和 rom_cos_type" 中输入值

标签: arrays compiler-errors syntax-error verilog xilinx


【解决方案1】:

Verilog 不支持'{} 语法。这是一个 SystemVerilog (IEEE Std 1800-2012) 功能;请参阅 § 5.10 结构字面量、§ 5.11 数组字面量、§ 7.2.2 分配给结构、§ 和 10.9 分配模式。

您可以启用 SystemVerilog(所有现代 Verilog 模拟器都是 SystemVerilog 模拟器)或分配 Verilog 方式:

reg [11:0] rom_sin_type [0:4095];
initial begin
  rom_sin_type[0] = 12'h000;
  rom_sin_type[1] = 12'h003;
  rom_sin_type[2] = 12'h006;
  rom_sin_type[3] = 12'h009;
  .....
end

【讨论】:

  • 我的 xilinx 版本是 14.2,没有合成,你知道如何进行
【解决方案2】:

您也可以尝试 for 循环。

genvar  i;
for (i=0;i<4096;i= i+1) begin
    assign a[i] = i;
end

我不确定 rom_sin_type 是否需要分配语句。

【讨论】:

  • 在哪里声明值?
  • ` reg [11:0] rom_sin_type [0:4095];初始开始 genvar i; for (i=0;i
  • 我必须为 4096 个值执行此操作,用于 sin 和 cos LUT 更新并分配它们? :(
  • 我不确定你最后的评论是否正确。 FOR 循环应该能够在这 3 行中分配 4096。此外,您可以在同一 FOR 循环中分配 sin 和 cos LUT。
  • 我明白了,但我必须分配 4096 个值给
猜你喜欢
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多