вот как выглядит мой код ... (я знаю, что он не компилируется, это просто псевдокод.)
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 в последнем состоянии 'OUTPUT', но только если они находятся в заданных пределах интервала.Итак, теперь у меня есть 6 условий, которые мне нужно проверить.Если все верно, я вывожу результаты 1-3;если хотя бы один из них ложный, я хочу установить флаг ошибки.
Я работаю с платой Xilinx на частоте 25 МГц, но хотел бы иметь надежную конструкцию, способную обрабатывать и более высокие частоты.
Итак, теперь мой вопрос (ы) ... Какой лучший способ проверить, находятся ли результаты 1-3 в заданных пределах?1. Я знаю, что есть несколько вариантов, но какой из них лучший, особенно если учесть сроки?2. Варианты 1 и 2 из моего кода переводятся на одно и то же оборудование или есть различия?3. Лучше ли мне проверять эти условия вне конечного автомата в отдельных (параллельных) процессах, поскольку я имею дело с 16-битными векторами?(Я думаю, что 6 вложенных 16-битных сравнений приводят к проблемам с синхронизацией!?)
Я довольно плохо знаком с VHDL (только что закончил) и был бы очень признателен за вашу помощь.Спасибо:)