Вот Minimal Complete and Verifiable example создан из вашего вопроса и комментариев:
library ieee;
use ieee.std_logic_1164.all;
entity baffling_problem is
end entity;
architecture foo of baffling_problem is
type state_type is (state_bufferingToClk, state_bufferingToSclk);
signal state: state_type; -- defaults to 'LEFT, state_bufferingToClk
signal dataRegisterBuf: std_logic_vector (31 downto 0) :=
(1 | 2 => '1', others => '0');
signal dataRegister: std_logic_vector (31 downto 0) := (others => '0');
signal registerReady: std_logic;
signal sclk: std_logic := '1';
begin
SclkDomainBuffering: process(sclk)
variable step: natural := 0;
begin
if (rising_edge(sclk)) then
if (state = state_bufferingToSclk) then
if (step = 0) then
dataRegister <= dataRegisterBuf;
step := 1;
elsif (step = 1) then
registerReady <= '1';
step := 2;
end if;
else
step := 0;
registerReady <= '0';
end if;
end if;
end process SclkDomainBuffering;
SOMEOTHERPROCESS:
process (state)
begin
if state = state_type'LEFT then -- other than state_bufferingToSclk
dataRegister <= (others => '0');
end if;
end process;
STIMULI:
process
begin
wait for 20 ns;
sclk <= '0';
wait for 5 ns;
sclk <= '1';
wait for 0 ns; -- state transitions in distinct delta cycle
state <= state_bufferingToSclk;
wait for 20 ns;
sclk <= '0';
wait for 5 ns;
sclk <= '1';
wait for 20 ns;
wait;
end process;
end architecture;
И это дает поведение вашему описать:
См IEEE Std 1076-2008 14.7.3 распространение сигнала значения, 14.7.3.1 Общие сведения:
Как время моделирования a dvances, транзакции в прогнозируемой форме выходного сигнала данного драйвера (см. 14.7.2) будут поочередно становиться значением драйвера. Когда драйвер получает новое значение таким образом или в результате того, что драйвер или задержка запланирована для драйвера, независимо от того, отличается ли новое значение от предыдущего значения, этот драйвер считается активным в течение этого цикла моделирования. Предполагается, что для целей определения активности водителя считается, что водитель, приобретающий значение из нулевой транзакции, приобрел новое значение. Сигнал считается активным в течение заданного цикла моделирования, если активен один из его источников.
.
- Один из его подэлементов активен.
- Сигнал назван в официальной части элемента ассоциации в списке ассоциаций портов, и соответствующий фактический активен.
- Сигнал является подэлементом разрешенного сигнала, и разрешенный сигнал активен.
- Сила, депозит или релиз запланированы для сигнала.
- Сигнал представляет собой подэлемент другого сигнала, для которого назначается сила или депозит.
Так что сигналы (dataReady (1) и dataReady (2) является активными их источники являются активными.
Объяснения того, почему их значение разрешенного значения их водителей находится в 14.7.3.2 вождения значения, ни один из сигналов, содержащих dataReady, не является основным сигналом, см. пункт 3 f).
И почему вы видите значение dataReady как «00000000000000000000000000000XX0» описано в 14.7.3.3. Эффективные значения.
Язык VHDL описывает моделирование модели проекта, а также описание синтаксиса и семантики. Разработанная проектная модель состоит из процессов, описанных в иерархии, связанной между собой сигналами, и сигналы имеют историю не только ценность. Обновления сигналов запланированы в прогнозируемых выходных сигналах (см. 10.5 «Назначение задания сигнала»).
Многие пользователи, только начинающие в VHDL, применяют то, что знают о поведении других языков для VHDL, примером являются лишние (но не запрещенные) круглые скобки, окружающие условие в выражении if. Знание других языков не влияет на поведение сигналов (определяется архитектурой имитационных моделей, основанных на циклах моделирования.
. Одна из вещей, которые вы заметите, - это то, что процессы (11.3) приостанавливаются и возобновляются на основе явного или неявного ожидания утверждения (10.2).
Все одновременно отчетности выработанные в процессах и или процессов и отчетности блока (11. Одновременные заявления).
вызовы подпрограмм являются либо выражения (функции, 9.3.4) или заявления (процедуры, 10.7)
Значение сигнала не обновляется в то время как любой процесс, который должен быть активным (те прогнозируемые выходные сигналы, соответствующие текущему времени моделирования, 14.7.4 Исполнение модели, 14.7.3.4 Обновление сигнала).
Сигналы, управляемые в нескольких процессах, представляют собой несколько наборов оборудования. Проблема возникает из-за того, что вы использовали разрешенные типы данных, если вы использовали неразрешенные типы данных, вместо этого вы получили бы ошибку разработки (6.4.2.3. Объявления сигналов, пункт 8). Разрешенным сигналам разрешено иметь несколько драйверов.
Таблица разрешений для элементов std_logic содержится в корпусе пакета для пакета std_logic_1164 (см. Сноску 15 Приложение A Описание сопроводительных файлов для доступа к источнику пакетов VHDL, включенным в стандарт). Таблица разрешений будет разрешать «0» и «1» на «X».
И если все это звучит сложно, вы можете изучить простые правила для предотвращения проблем.
В этом случае эмпирическое правило должно всегда приводить сигнал от одного процесса.
Пожалуйста, включите в вопрос соответствующий код как текст (а не изображение). – mkrieger1
Сообщите нам, что еще управляет 'dataRegister'. (Используйте команду «drivers» в вашем симуляторе, если вам нужно). ПРИМЕЧАНИЕ. Два или более драйверов по сигналу, без арбитражной логики, обычно являются плохими идеями. –
Соответствующий код будет [Минимальный полный и проверяемый пример] (https://stackoverflow.com/help/mcve). Проблема не воспроизводится из того, что вы показали. – user1155120