我正在为闪存接口开发一个 VHDL 程序。在编译我的程序时,我得到了这个错误。
正如您在图片中看到的,两个信号(右侧)是“xnor”ed,结果分配给输出(flash_oe)。
谁能描述这个错误信息是什么?
谷歌搜索“Error (10028) altera”返回这个 Altera Quartus II 帮助作为第一次点击,说:
无法解析 <location> 处网络“<name>”的多个常量驱动程序(ID:10028)
原因:
在当前设计中,多个恒定(非三态)驱动器正在竞争指定的网络,该网络由 Quartus II 集成综合创建以表示一个或多个信号。当 Verilog 设计文件 (.v) 或 VHDL 设计文件 (.vhd) 包含对同一信号的多个并发分配时,通常会发生这种情况。Quartus II Integrated Synthesis 尝试解决电气等效分配,但无法将竞争分配解决到单个等效驱动程序中。紧接在该消息下方的消息指示网络的常量驱动程序与网络的第一个常量驱动程序冲突。
行动:检查设计是否有多个并发分配到同一信号。
情况是,在综合中,每个信号只能有一个驱动器,而在仿真中,可以有多个用于解析的信号,因此您可能会看到设计在仿真中通过了编译,但在综合中没有通过。
所以寻找多个驱动器flash_oe
。
你在做这样的事情吗?
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
在两个不同的进程中分配了一个值。这怎么能在电路中实现呢?
也许有一种解决方法,我没有为您的问题提供解决方案,因为我不知道您的代码是什么样的。