在Quartus中编译Verilog代码

在Quartus中编译Verilog代码,verilog,hdl,intel-fpga,Verilog,Hdl,Intel Fpga,我是verilog HDL的新手,我的第一个项目是使用一组寄存器实现一个简单的秒表计数器。我用的是Altera Quartus 当我试图编译下面的代码时,每个寄存器都会出现错误。其中一条错误消息如下所示: 错误(10028):无法解析test_interface.v(127)处网络“sec0[3]”的多个常量驱动程序 有人能帮忙吗?代码在Modelsim中模拟得很好 下面是导致问题的代码片段: always @ (posedge clk) if (qsoutput == 1)

我是verilog HDL的新手,我的第一个项目是使用一组寄存器实现一个简单的秒表计数器。我用的是Altera Quartus

当我试图编译下面的代码时,每个寄存器都会出现错误。其中一条错误消息如下所示:

错误(10028):无法解析test_interface.v(127)处网络“sec0[3]”的多个常量驱动程序

有人能帮忙吗?代码在Modelsim中模拟得很好

下面是导致问题的代码片段:

always @ (posedge clk)

  if (qsoutput == 1)
      sec0 = sec0 + 1;
  else if (sec0 == 4'b1010) begin
      sec1 = sec1 + 1;
      sec0 = 4'b0000;
  end else if (sec1 == 4'b0110) begin
      min0 = min0 + 1;
      sec1 = 4'b0000;
  end else if (min0 == 4'b1010) begin
      min1 = min1 + 1;
      min0 = 4'b0000;     
  end else if (min1 == 4'b0110) begin
      sec0 = 4'b0000;
      sec1 = 4'b0000;
      min0 = 4'b0000;
      min1 = 4'b0000;
  end
基于,在多个
始终
块中分配寄存器。这对于合成和Altera Quartus错误消息的共同赞助者来说是非法的。
reg
类型只能在一个
始终
块中分配

例如,
sec0
是在
always@(posedge reset_reg)
和您问题中提供的代码中定义的。更糟糕的是,您将计数器逻辑拆分为4个单独的始终块,分配
sec0

我建议您将所有的
sec*
min*
电阻器放置在一个时钟同步始终与一个异步块之间:

always(@posedge clk or posedge reset_reg)
begin
  if(reset_reg)
  begin
    // ... asynchronous reset code ...
  end
  else
  begin
    // ... synchronous counter code ...
  end
end
本文详细介绍了用于合成的良好verilog编码实践:


您将遇到的其他问题:

  • 使用非阻塞(
    基于,您在多个
    始终
    块中分配寄存器。这对于合成和Altera Quartus错误消息的共同赞助者是非法的。一个
    reg
    类型只能在一个
    始终
    块中分配

    例如,
    sec0
    是在
    always@(posedge reset_reg)
    和您问题中提供的代码中定义的。更糟糕的是,您将计数器逻辑拆分为4个单独的always块,分配
    sec0

    我建议您将所有的
    sec*
    min*
    电阻器放置在一个时钟同步始终与一个异步块之间:

    always(@posedge clk or posedge reset_reg)
    begin
      if(reset_reg)
      begin
        // ... asynchronous reset code ...
      end
      else
      begin
        // ... synchronous counter code ...
      end
    end
    
    本文详细介绍了用于合成的良好verilog编码实践:


    您将遇到的其他问题:


    • 使用非阻塞(
      我真的看不出这段代码有什么错误。你能在记录第127行的同时发布整个“test_interface.v”吗?你能发布整个编译错误列表吗?事实上,我每行代码都有多个错误,而不仅仅是127个。它是这样的:Error(10028):无法在测试_接口处解析网络“sec0[3]”的多个常量驱动程序。v--错误(10028):无法解析网络“sec1[3]”的多个常量驱动程序在test_interface.v等网站,我们需要您提供更多信息。如果您想让我进一步了解,请发布我要求的两件事。您可以选择
      编辑
      ,将它们添加到您的文章底部。下面是代码链接:很抱歉,这是我第一次使用此网站,我在格式化代码时遇到问题e本身!没问题,欢迎。如果您想粘贴代码,只需复制一个大的块,粘贴到编辑器中,选择代表代码的整个文本块,然后按Ctrl-K键或单击编辑器栏中的大括号。这样可以将其格式化为代码示例。我真的看不出这段代码有任何错误。你可以发布“test_interface.v”的全部内容,同时记下哪一行是第127行吗?你也可以发布编译错误的全部列表吗?事实上,每行代码都有多个错误,而不仅仅是127个。它是这样的:Error(10028):无法解析test_interface.v处net“sec0[3]”的多个常量驱动程序——Error(10028):无法解析网络“sec1[3]的多个常量驱动程序在test_interface.v等网站,我们需要您提供更多信息。如果您想让我进一步了解,请发布我要求的两件事。您可以选择
      编辑
      ,将它们添加到您的文章底部。下面是代码链接:很抱歉,这是我第一次使用此网站,我在格式化代码时遇到问题e本身!没问题,欢迎使用。如果要粘贴代码,只需复制一个大的块,将其粘贴到编辑器中,选择代表代码的整个文本块,然后按Ctrl-K键或单击编辑器栏中的大括号。这样可以很好地将其格式化为代码示例。