Обычно я программист на С#/Java, и у меня все еще возникают проблемы с полным пониманием описания оборудования.
У меня есть регистр, который загружает значение. После этого компаратор сравнивает вывод регистра со значением «16». Если значение меньше или равно, я перехожу к State_0, если оно больше, я перехожу к State_3.
У меня есть процесс «controlsignals», работающий одновременно с моим процессом с состоянием. Для моих управляющих сигналов я знаю, что я должен установить разрешение для регистра на высокий уровень, когда я нахожусь в State_2, поэтому:
controlsignals: PROCESS (Tstep_Q)
BEGIN
.... initialisation ...
CASE Tstep_Q IS
.... other states ....
WHEN T2 => --define signals in time step T2
enRegister = '1';
Для моей таблицы состояний:
statetable: PROCESS (Tstep_Q, regOutput)
BEGIN
CASE Tstep_Q IS
.... other states ....
WHEN T2 =>
IF ((regOutput - 16) > 0)
THEN Tstep_D <= T3;
ELSE Tstep_D <= T0;
END IF;
И ближе к концу моего кода у меня есть:
fsmflipflops: PROCESS (Clock)
BEGIN
IF Clock'EVENT AND Clock = '1' THEN
Tstep_Q <= Tstep_D;
END IF;
END PROCESS;
reg: regn PORT MAP (somevalue, enReg, Clock, regOutput);
Поскольку моя таблица состояний и мои управляющие сигналы являются параллельными блоками, меня смущает... сначала включу ли я регистр, а затем запущу компаратор, чтобы определить мое следующее состояние, как я хочу, чтобы моя схема работала (поскольку таблица состояний чувствительна к regOutput )? Или было бы безопаснее создать новое состояние после T2, где у меня есть компаратор? Заранее спасибо.