См. Стандарт IEEE 1076-2008. 6.4.2.3 Сигнальные декларации, пункт 9 (частично):
Сигнал может иметь один или несколько источников . Для сигнала скалярного типа каждый источник является либо драйвером (см. 14.7.2), либо out , inout , буфер или порт связывания экземпляра компонента или оператора блока, с которым связан сигнал.
Драйверы поступают из операторов присваивания в процессах. См. 14.7.2, пункт 1:
14.7.2 Драйверы
Каждый оператор назначения сигнала в операторе процесса определяет набор драйверов для определенных скалярных сигналов. Существует один драйвер для данного скалярного сигнала S в операторе процесса, при условии, что в этом операторе процесса есть по крайней мере один оператор назначения сигнала и что самый длинный статический префикс целевого сигнала этого оператора назначения сигнала обозначает S или обозначает составной сигнал, S является субэлементом. Каждый такой оператор назначения сигнала называется связанным с этим драйвером. Выполнение оператора назначения сигнала влияет только на связанный драйвер (ы).
В этом случае ваша ошибка вызвана несколькими источниками (двумя портами буфера режима), один из которых не является производным от драйвера и оператора присваивания, имеет статическое значение по умолчанию («X» для моделирования и, вероятно, «» 0 'для синтеза).
Вы можете изменить режим портов буфера на режим в (sertopar
) и режим в (partoser
). Не забудьте обновить объявления компонентов, чтобы они соответствовали.
Обратите внимание, что они оба подключены к сигналу txd
(который показывает синтаксическую ошибку в объявлении в uart_rl, которое должно быть:
signal txd : std_logic;
и требует назначения для ledg (0):
ledg(0) <= txd;
Использование того же сигнала для последовательного выхода из partoser, что и для последовательного входа в sertopar, обеспечит обратную связь через последовательный порт. Фактически все, что это делает, это мигает светодиодом.
Без тестового стенда нелегко определить, что в модели нет ничего структурно неправильного. Обычный случай ошибок приводит к тому, что некоторая его часть поглощается во время синтеза.
Глядя на это, мы видим, что есть два источника для Rdata
. Процесс в uartrl
(оператор присваивания, который должен быть удален с предоставлением статического значения всех нулей) и присвоение data_out
в sertopar
операторе процесса, обеспечивающем два источника.
Вы также можете заметить, что процесс в uart_rl
имеет clk
в списке чувствительности, пока он не оценивается в процессе. Это приводит к открытию, что txd_rdy
имеет драйвер там, а также partoser
. Мы также находим там драйвер для parity_bit, а также параллельный оператор после U2. Rend
там также присваивается значение «00», а других значений нет. Казалось бы, дизайн не полностью функционален.
Никаких дальнейших ошибок не было найдено во время анализа проблемы. Самый простой способ найти дальнейшие ошибки - это симуляция.
Причина сообщаемой ошибки отличается от Ошибка (10028): не удается разрешить несколько постоянных драйверов для сети… VHDL ERROR в том, что один из статических источников вызван неуправляемым портом Предоставление буферизованного вывода с постоянным значением по умолчанию.