【问题标题】:I got a lot of error when trying to tranfer my verilog code from modelsim to quartus尝试从 modelsim 传输我的 verilog 代码时出现很多错误
【发布时间】:2020-11-06 08:49:35
【问题描述】:

大家好,我在 modelsim 中构建了一个包含大量 verilog 文件的简单设计。我正在尝试获取 RTL 原理图,所以我想将我的项目转移到 quartus。但即使我的代码在 modelsim 上运行正常,我也遇到了很多错误。

module OR_64BITS (out, in1, in2);
  input wire [63:0] in1, in2;
  output wire [63:0] out;
  
  genvar i;
    generate
        for (i = 0; i < 64; i = i + 1) begin
      or (out[i], in1[i], in2[i]);
        end
    endgenerate 
endmodule

我收到此错误错误 (10644): 在 basic_components_2.v(9) 出现 Verilog HDL 错误:此块需要名称 在这条线上

for (i = 0; i < 64; i = i + 1) begin

请帮助我。谢谢。

【问题讨论】:

  • 我没有看到任何问题,尽管我无法访问 Quartus。这是 Quartus 的最新版本吗?如果 Quartus 坚持使用名称,请尝试将行更改为 for (i = 0; i &lt; 64; i = i + 1) begin: a_name,尽管我认为标准不需要这样做。
  • @DavidShah 似乎另一个工具“spyglass lint”(也许是这个?)也会将没有块名称的 generate 块视为错误。
  • @Light spyglass lint?
  • 您的代码与 Verilog-2005 兼容,但与 Verilog-2001 不兼容。看起来 Quartus 期待 Verilog-2001,而 Modelsim 则适用于 Verilog-2005。在 Verilog-2005 中删除了命名生成块的要求。

标签: verilog fpga modelsim quartus


【解决方案1】:

我有一个版本为:IEEE Std 1364-2001,2001 年 9 月 28 日的 verilog 标准 pdf 文件。

在其中,我可以找到generate-for 块的标准 BNF 定义:

generate_loop_statement ::=
  for ( genvar_assignment ; constant_expression ; genvar_assignment )
    begin : generate_block_identifier { generate_item } end

据此,: generate_block_identifier 部分是必需的。

您可以按照@David Shah 在评论中的建议修改您的代码。将: a_uniq_block_name 添加到for(...) 行。

编辑:
我只有这个 verilog-2001 标准文档。正如@Matthew Taylor 评论的那样,这一要求已在 IEEE Std 1364-2005 中删除。也许您可以在一些深度对话中找到您的 quartus 符合哪个标准版本。

【讨论】:

  • 在 IEEE Std 1364-2005 中删除了对 : generate_block_identifier 的要求。
  • 即使删除了该要求,命名所有块仍然是一个好主意,并为原始实例命名(在您的or 门中缺失)。当工具必须为您创建名称时,有助于更好地调试和跨工具命名。
猜你喜欢
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
相关资源
最近更新 更多