Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Описываю FSM:
type state_type is (INIT_S, WORK_S, ну и другие состояния)
signal FSM, NewFSM: state_type;
process (CLK, RESET)
begin
if RESET='1' then
NewFSM <= INIT_S;
elsif CLK'event and CLK='0' then
case FSM is
when INIT_S => if пора работать
then NewFSM <= WORK_S;
else NewFSM <= FSM;
end if;
when WORK_S => if работа сделана
then NewFSM <= INIT_S;
else NewFSM <= FSM;
end if;
when others => NewFSM <= INIT_S;
end case;
end if;
end process;
process (CLK, RESET)
begin
if RESET='1' then
FSM <= INIT_S;
else if CLK'event and CLK='1' then
FSM <= NewFSM;
end if;
end process;
Почему на "раз-два" делаю, надеюсь, понятно. А вот, что творит из этого описания Sinplify. Смотрю в RTL, как оно откомпилировалось. Теоретически, у меня должна получится пачка LUT, следом за которыми стоит регистр для запоминания его результата NewFSM, работающий по спаду, за ним стоит регистр для запоминания FSM, работающий по фронту. На вход LUT должен приходить FSM и внешние сигналы. Теоретически. Практически оно тоже зачастую именно так и получается. А вот иногда, я не понимаю в каких ситуациях это происходит, но эта скотина на вход LUT подаёт NewFSM, а не FSM! Соответственно, начинаются гонки фронтов и всякая поебень!
Составить ответ | Вернуться на конференцию.
Ответы