#generics #vhdl #generic-programming #decoder
#vhdl #quartus
Вопрос:
Я разрабатываю программу VHDL для интерфейса flash. При компиляции моей программы я получил эту ошибку.
Как вы можете видеть на рисунке, два сигнала (справа) редактируются «xnor», а результат присваивается выходу (flash_oe).
Кто-нибудь может описать, что это за сообщение об ошибке?
Комментарии:
1. Как насчет объявлений и показа нам строки 75?
2. Не могли бы вы показать нам свой полный код?
3. Ошибка 10028 обычно является результатом назначения одного и того же сигнала в нескольких процессах или других параллельных операторах.
Ответ №1:
Поиск в Google по запросу «Ошибка (10028) altera» возвращает эту справку Altera Quartus II в качестве первого попадания, говоря:
Не удается разрешить несколько постоянных драйверов для сети «<name>» в <location> (ID: 10028)
ПРИЧИНА:
В текущем проекте несколько драйверов с постоянными (не трехфазными) состояниями конкурируют за указанную сеть, которая была создана с помощью интегрированного синтеза Quartus II для представления одного или нескольких сигналов. Это условие обычно возникает, когда файл разработки Verilog (.v) или файл разработки VHDL (.vhd) содержит несколько одновременных назначений одному и тому же сигналу. Интегрированный синтез Quartus II попытался разрешить электрически эквивалентные назначения, но не может разрешить конкурирующие назначения в одном эквивалентном драйвере.Сообщения непосредственно под этим сообщением указывают на постоянные драйверы для сети, которые конфликтуют с первым постоянным драйвером сети.
ДЕЙСТВИЕ: Проверьте дизайн на наличие нескольких одновременных назначений одному и тому же сигналу.
Дело в том, что при синтезе может быть только один драйвер для каждого сигнала, тогда как при моделировании может быть несколько для разрешенных сигналов, поэтому вы можете видеть, что проект проходит компиляцию при моделировании, но не при синтезе.
Поэтому ищите несколько дисков для 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
в двух разных процессах. Как это может быть реализовано в схеме?
Возможно, есть обходной путь, я не предоставил решение вашей проблемы, поскольку я не знаю, как выглядит ваш код.
Комментарии:
1. Вам не нужно предложение use для пакета std_logic_1164 для кода, который вы показываете.
2. Да, это просто привычка. Я удалил ее.