【问题标题】:What is multiple constant driver error in VHDL什么是 VHDL 中的多个常量驱动程序错误
【发布时间】:2019-08-05 17:29:25
【问题描述】:

我正在为闪存接口开发一个 VHDL 程序。在编译我的程序时,我得到了这个错误。

(可点击)

正如您在图片中看到的,两个信号(右侧)被“xnor”编辑,结果被分配给输出(flash_oe)。

谁能描述一下这个错误信息是什么?

【问题讨论】:

  • 声明和向我们展示第 75 行怎么样?
  • 你不能给我们看看你的完整代码吗?
  • 错误 10028 通常是由于在多个进程或其他并发语句中分配了相同的信号。

标签: vhdl quartus


【解决方案1】:

Google 搜索 "Error (10028) altera" 返回 this Altera Quartus II help 作为第一次点击,说:

无法在 (ID: 10028) 解析网络“”的多个常量驱动程序

原因:
在当前设计中,多个恒定(非三态)驱动器正在竞争指定的网络,该网络由 Quartus II 集成综合创建以表示一个或多个信号。当 Verilog 设计文件 (.v) 或 VHDL 设计文件 (.vhd) 包含对同一信号的多个并发分配时,通常会发生这种情况。 Quartus II Integrated Synthesis 尝试解决电气等效分配,但无法将竞争分配解决到单个等效驱动程序中。

紧接在此消息下方的消息指示网络的常量驱动程序与网络的第一个常量驱动程序冲突。

操作:检查设计是否有多个并发分配到同一信号。

情况是,在综合中每个信号只能有一个驱动程序,而在仿真中可以有多个用于解析的信号,因此您可能会看到设计在仿真中通过了编译,但在综合中没有通过。

所以为flash_oe寻找多个驱动器。

【讨论】:

    【解决方案2】:

    你在做这样的事情吗?

    ENTITY test IS
      PORT ( sig1, sig3 : IN BIT;
             sig2 : OUT BIT);
    END test;
    ---------------------------
    ARCHITECTURE test_arch of test is
    BEGIN
      PROCESS(sig1)
      BEGIN
        sig2 <= '0';
      END process;
    
      PROCESS(sig3)
      BEGIN
        sig2 <= '1';
      END process;
    END test_arch;
    

    让我们测试一下这段代码:

    ghdl -a test.vhd
    ghdl -e test
    ghdl -r test
    

    我们得到这个错误:

    sig2
    ./test:error: several sources for unresolved signal
    for signal: .test(test_arch).ghdl: compilation error
    

    这与您在上面发布的类似,它之所以出现是因为我的代码在两个不同的进程中为sig2 分配了一个值。这怎么能实现到电路中?

    也许有一个解决方法,我没有为你的问题提供解决方案,因为我不知道你的代码是什么样的。

    【讨论】:

    • 对于您显示的代码,您不需要包 std_logic_1164 的 use 子句。
    • 是的,这只是一种习惯。我已将其删除。
    猜你喜欢
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    相关资源
    最近更新 更多