Swup 0 22 марта, 2012 Опубликовано 22 марта, 2012 · Жалоба Интересует пример описание такого автомата. И проблема такая, хотя может я неправильно все понял... СЕ формируется по счетчику вынесенному за автомат. т.е. при некоторой доработке автомата необходимо менять формирование этого СЕ, правильно? Да и достаточно точно знать все времянки функционала автомата. Так выглядит достаточно сложно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 22 марта, 2012 Опубликовано 22 марта, 2012 · Жалоба - формируем глобальный FSM.CE но... не меандро-подобный а с розрывами где надо умножать.А так же и там, где умножать не надо :smile3046: Так устроит?Если ТС устроит эффективное понижение частоты FSM, то да. Но скорее всего нет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topor_topor 0 22 марта, 2012 Опубликовано 22 марта, 2012 (изменено) · Жалоба СЕ формируется по счетчику вынесенному за автомат. т.е. при некоторой доработке автомата необходимо менять формирование этого СЕ, правильно? Да и достаточно точно знать все времянки функционала автомата. Так выглядит достаточно сложно. 1) "при некоторой доработке автомата необходимо менять формирование этого СЕ, правильно?" - правильно. 2) "Да и достаточно точно знать все времянки функционала автомата." - правильно 3) "Так выглядит достаточно сложно." - всё относительно.... У Вас есть выбор: а) напихать Wait States в FSM, б) ускорить умножитель, с) шагать равномерно но медленнее (соотв. самому медленному комбинаторному пути) д) шагать неравномерно. 2) Пример FSM с СЕ (fsm_ce): reg [1:0] FSM_seq, FSM_next; wire fsm_ce; always @ (FSM_seq) begin case (FSM_seq) state0 : FSM_next <= state1; state1 : FSM_next <= BIG_state2; BIG_state2 : FSM_next <= state3; state3 : FSM_next <= state0; endcase end always @ (posedge clk) begin if (fsm_ce) FSM_seq <= FSM_next; else FSM_seq <= FSM_seq; end ... Пример как шагать медленнее CLK но равномерно: reg [2:0] ce_counter; always @ (posedge clk) ce_counter <= ce_counter + 1; // 1/4 максимальной скорости assign fsm_ce = ce_counter[2] & ce_counter[1] & ce_counter[0]; ... Шагаем со скоростью CLK, при этом BIG_state2=7*CLK: reg [3:0] ce_counter; always @ (posedge clk) begin if (ce_counter == 8) ce_counter <= 0; else ce_counter <= ce_counter + 1; end // BIG_state2 = 7xCLK assign fsm_ce = (ce_counter == 0 || ce_counter == 1 || ce_counter == 8 ) ? 1 : 0; P.S. Не симулил... Ресеты викинул для наглядности.... Изменено 22 марта, 2012 пользователем Torpeda Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться