Добавление вашего тестового стенда к вашему вопросу при условии Минимальный, полный и проверяемый пример .
Для тех из нас, кто не может правильно интерпретировать отображение вашей формы сигнала, может помочь цветная версия вместе с курсором, показывающим значения, перемещенные в критическую часть вашей формы сигнала:
В этом отображении осциллограммы мы видим, что скалярные сигналы (clk и т. Д.) Отображаются в виде «X», как в вашей цепочке инструментов «Решетка», в виде красных прямоугольников для «X» (вышеупомянутая форма сигнала выполняется с помощью gtkwave и ghdl).
То, что часы меняются между «X» и «0», говорит о том, что в тестовом стенде есть два драйвера для clk, и «0» появляется, когда оба драйвера запускают «0».
Драйвер создается путем назначения сигнала в процессе.
Параллельные назначения сигналов разрабатываются в эквивалентный процесс (IEEE Std 1076-2008 11.6 Параллельные операторы назначения сигналов
«Оператор одновременного назначения сигналов представляет собой эквивалентный оператор процесса, который присваивает значения сигналам». чей список чувствительности определяется с помощью 10.2 оператора ожидания «Это правило также используется для построения наборов чувствительности операторов ожидания в эквивалентных операторах процесса для операторов одновременного вызова процедуры (11.4), операторов одновременного утверждения (11.5) и операторов одновременного назначения сигналов (11.6). ".
Значение сигналов с несколькими драйверами определяется, как указано в 14.7.3.2 Управляющие значения:
e) Если S является основным сигналом:
...
- Если S является разрешенным сигналом и имеет один или несколько источников, то исследуются значения возбуждения источников S. Будет ошибкой, если какое-либо из этих значений возбуждения является составным, когда одно или несколько значений субэлемента определяются нулевой транзакцией (см. 10.5.2.2), а одно или несколько значений субэлемента не определяются нулевой транзакцией. Если S имеет регистр типа сигнала, и все источники S имеют значения, определенные нулевой транзакцией, то значение S для возбуждения не изменяется по сравнению с его предыдущим значением. В противном случае управляющее значение S получается путем выполнения функции разрешения, связанной с S, где эта функция вызывается с входным параметром, состоящим из объединения значений возбуждения источников S, за исключением значения любого источника. из S, текущее значение которого определяется нулевой транзакцией.
Где функция разрешения для типа std_logic находится в пакете IEEE std_logic_1164.
Так где же два драйвера для clk (и clk64)?
En <= '0';
clk <= '0';
clk65 <= '0';
Ipin <= B"0000";
-- *** Test Bench - User Defined Section ***
tb : PROCESS
BEGIN
wait for delay;
clk <='1';
clk65 <='1';
wait for delay;
clk <='0';
wait for delay;
clk <='1';
clk65 <='0';
wait for delay;
clk <='0';
--wait; -- will wait forever
END PROCESS;
Непосредственно над процессом tb находятся четыре одновременных оператора присваивания. Два вызывающих нескольких драйвера могут быть закомментированы (clk и clk64), не требуя начальных значений в объявлениях сигналов, потому что вы форсируете их значение в процессе.
Если мы закомментируем параллельные назначения сигналов для clk и clk65, ваш тестовый стенд сработает: