вот как выглядит мой код... (я знаю, что он не компилируется, это просто псевдокод.)
signal lowBound : std_logic_vector(15 downto 0);
signal highBound : std_logic_vector(15 downto 0);
signal result_01 : std_logic_vector(15 downto 0);
signal result_02 : std_logic_vector(15 downto 0);
signal result_03 : std_logic_vector(15 downto 0);
...
p_state_machine: process(RESET, CLK)
if (RESET = '1') then
...
elsif (rising_edge(CLK_I)) then
case currentState is
when ...
...
when OUTPUT =>
-- check if results are within interval bounds
-- option 1
if ((result_01 > lowBound) AND (result_02 > lowBound) AND (result_03 > lowBound) AND ...) then
...
end if;
-- option 2
if ((result_01 > lowBound) then
if ((result_02 > lowBound) then
if ((result_03 > lowBound) then
...
end if;
end if;
end if;
end case;
end if;
end process;
Как видите, у меня есть конечный автомат, и я хотел бы выводить результаты 1-3 в последнем состоянии «ВЫВОД», но только если они находятся в пределах заданного интервала. Итак, теперь у меня есть 6 условий, которые мне нужно проверить. Если все верно, я вывожу результаты 1-3; если хотя бы одно неверно, я хочу установить флаг ошибки.
Я работаю с платой Xilinx на частоте 25 МГц, но хотел бы иметь надежную конструкцию, способную работать и на более высоких частотах.
Итак, теперь мой вопрос (вопросы)... Как лучше всего проверить, находятся ли результаты 1-3 в заданных пределах? 1. Я знаю, что есть несколько вариантов, но какой из них лучше, особенно с учетом времени? 2. Варианты 1 и 2 из моего кода переводятся на одно и то же оборудование или есть разница? 3. Не лучше ли мне проверять эти условия вне конечного автомата в отдельных (параллельных) процессах, так как я имею дело с 16-битными векторами? (Я полагаю, что 6 вложенных 16-битных сравнений могут привести к проблемам с синхронизацией!?)
Я новичок в VHDL (только что закончил обучение) и был бы очень признателен за вашу помощь. Спасибо :)