skyspark 0 1 декабря, 2008 Опубликовано 1 декабря, 2008 · Жалоба Упорно не получается сделать FSM так что бы работало :). Я наверное что-то не понимаю :cranky: . После первых экспериментов, воспользовался smf файлом, и нарисовал что нужно. Смотрю симулятором и в железе EP2C5T144C8 @ 100Мгц. Quartus генерирует код вида: always @(posedge clock) begin if (clock) begin fstate <= reg_fstate; end end always @(fstate or reset or tx_busy or f_smpl_rdy or f_all_reg) begin if (reset) begin ... end else begin case (fstate) WAIT: begin if (f_smpl_rdy) reg_fstate <= START_PACKET; // Having else block to avoid latch inference else reg_fstate <= WAIT; ... end На это квартус говорит: Warning (10240): Verilog HDL Always Construct warning at bsc.v(56): inferring latch(es) for variable "f_adrrst", which holds its previous value in one or more paths through the always construct В симуляторе работает, в железе виснет. Мне сначала показалось, что разумным было бы внести все в один блок always @(posedge clock) и это естественно устраняет варнинг, но получается бред если посмотреть в RTL Viewer и в симуляторе. Когда убираю регистр fstate и вношу все в один блок always @(posedge clock) и делаю case (reg_fstate), вроде все начинает работать но только в симуляторе. Направте не путь истинный, как реализовать FSM, почему код генерируемый стандартными стредствами IDE приводит к защелкиванию схемы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
id_gene 0 1 декабря, 2008 Опубликовано 1 декабря, 2008 · Жалоба Защелкивает у вас переменню "f_addrrst". Вот на ее логику и смотрите. Машина состояний на двух always-блоках - это нормально. подробнее про FSM читайте на sunburst-design Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skyspark 0 1 декабря, 2008 Опубликовано 1 декабря, 2008 · Жалоба подробнее про FSM читайте на sunburst-design Читал Synthesizable Finite State Machine Design Techniques от туда, понимаю что нормально, но почему Квартус валит ошибку. Защелкивание он валит по всем выходам КА. В проекте только один КА и больше ничего. В железе проверял уже подключая к остальной схеме, на сколько я понял защелкивается. Не совсем понимаю куда девается reg_fstate в случае с двумя блоками always. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
id_gene 0 1 декабря, 2008 Опубликовано 1 декабря, 2008 · Жалоба Не совсем понимаю куда девается reg_fstate в случае с двумя блоками always. reg_fstate в этом случае - это комбинаторная логика, при синтезе она размазывается. Триггера в описании второго always блока нет. Как избавится от латчей - это даже в хелпе квартуса написано. встаете на сообщение, жмете на Ф1 - и там все будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
druzhin 4 1 декабря, 2008 Опубликовано 1 декабря, 2008 · Жалоба Документ по ссылке смотрите. CummingsSNUG2003SJ_SystemVerilogFSM.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skyspark 0 1 декабря, 2008 Опубликовано 1 декабря, 2008 · Жалоба Как избавится от латчей - это даже в хелпе квартуса написано. встаете на сообщение, жмете на Ф1 - и там все будет. Спасибо помогло :). Понял как оно работет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться