Jackov 1 23 сентября, 2015 Опубликовано 23 сентября, 2015 · Жалоба я не очень искушен в квартусе, но сейчас в последних версиях там есть какие-то интерактивные отчеты, которые не файлы, а в среде открываются какие-то вкладочки, закладочки, и там все это написано, там есть прям закладка FSM и в ней все автоматы собраны.Так это оно и есть, он из этих файлов в GUI и выводит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 23 сентября, 2015 Опубликовано 23 сентября, 2015 · Жалоба так че он ваще не увидел в этом месте автомата? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
embddr 0 24 сентября, 2015 Опубликовано 24 сентября, 2015 · Жалоба У Альтеры нет примитива startup? Я вот тоже задавался этим вопросом, но не нашел ничего. Сделал вот такой модуль для генерации сброса после загрузки (см. приложение). Входной сигнал tick - это тики от таймера, он по всему проекту разведен чтоб таймауты считать. internal_reset.v Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 24 сентября, 2015 Опубликовано 24 сентября, 2015 · Жалоба так че он ваще не увидел в этом месте автомата? Ну получается так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 24 сентября, 2015 Опубликовано 24 сентября, 2015 · Жалоба так че он ваще не увидел в этом месте автомата? Ну получается так. у вас состояние автомата выходит наружу в явном виде output reg [1:0]State; т.е. именно в той кодировке, в которой вы это явно описали. в этом случае quartus никакого преобразования в safe-state machine типа one-hot encoding произвести не может. да, в отчетах это выглядит будто автомат не распознан. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 24 сентября, 2015 Опубликовано 24 сентября, 2015 · Жалоба т.е. именно в той кодировке, в которой вы это явно описали. А как можно иначе? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 24 сентября, 2015 Опубликовано 24 сентября, 2015 · Жалоба вывести не сам автомат а производные от его состояний output state_is_init; reg [2:0] FSM; localparam FSM_INIT=0; localparam FSM_IDLE=1; localparam FSM_RAM_RD_WAIT_1=2; localparam FSM_RAM_RD_WAIT_2=3; localparam FSM_DO_SOMETHING=4; localparam FSM_RAM_WRITE=5; always @(posedge clk or negedge nreset) begin if (!nreset) begin FSM <= FSM_INIT; end else begin case (FSM) FSM_INIT: begin FSM <= FSM_IDLE; end FSM_IDLE: begin <-------------- ну и так далее ------------------> end endcase end end assign state_is_init = (FSM == FSM_INIT); надеюсь смысл ясен. и ещё, допустимы только строгие равенства или неравенства, т.е. если напишете assign state_is_init = (FSM < FSM_IDLE); то тоже как автомат не распознает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 24 сентября, 2015 Опубликовано 24 сентября, 2015 · Жалоба надеюсь смысл ясен.Ага, интересно. Спасибо, попробую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 24 сентября, 2015 Опубликовано 24 сентября, 2015 · Жалоба Можно написать и как у вас, только наружу выдавать не состояние а численное значение схематично case(State) 0: out <= 00; 1: out <= 01; 2: out <= 10; то есть вы развязываете значение выхода и численное значение состояния, и тогда номера и значения состояний можно перекодировать и квартусу полегчает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
embddr 0 25 сентября, 2015 Опубликовано 25 сентября, 2015 · Жалоба Ага, интересно. Спасибо, попробую. Можно еще сделать через enum (только для SystemVerilog'а): enum int unsigned { FSM_INIT, FSM_IDLE, FSM_RAM_RD_WAIT_1, FSM_RAM_RD_WAIT_2, FSM_DO_SOMETHING, FSM_RAM_WRITE } state; Получаются такие абстрактные названия состояний без привязки к номеру. И само собой получается, что сравнивать можно только на равенство (если забыть, как они по-умолчанию нумеруются) и выводить наружу опосредованно через case или if. Квартус распознает только беззнаковый enum для кодирования fsm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
masics 0 25 сентября, 2015 Опубликовано 25 сентября, 2015 · Жалоба Можно еще сделать через enum (только для SystemVerilog'а): enum int unsigned { FSM_INIT, FSM_IDLE, FSM_RAM_RD_WAIT_1, FSM_RAM_RD_WAIT_2, FSM_DO_SOMETHING, FSM_RAM_WRITE } state; Получаются такие абстрактные названия состояний без привязки к номеру. И само собой получается, что сравнивать можно только на равенство (если забыть, как они по-умолчанию нумеруются) и выводить наружу опосредованно через case или if. Квартус распознает только беззнаковый enum для кодирования fsm Лучше делать без неопределённостей: enum logic [2:0] { FSM_INIT = 3'd0, FSM_IDLE = 3'd1, FSM_RAM_RD_WAIT_1 = 3'd2, FSM_RAM_RD_WAIT_2 = 3'd3, FSM_DO_SOMETHING = 3'd4, FSM_RAM_WRITE = 3'd5 } state; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
embddr 0 25 сентября, 2015 Опубликовано 25 сентября, 2015 · Жалоба Лучше делать без неопределённостей: enum logic [2:0] { FSM_INIT = 3'd0, FSM_IDLE = 3'd1, FSM_RAM_RD_WAIT_1 = 3'd2, FSM_RAM_RD_WAIT_2 = 3'd3, FSM_DO_SOMETHING = 3'd4, FSM_RAM_WRITE = 3'd5 } state; Чем лучше? Это по сути не отличается от определения через localparam, и снова лишает абстрактности, не позволяющей сравнивать "больше/меньше" и выводить за пределы модуля. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
masics 0 25 сентября, 2015 Опубликовано 25 сентября, 2015 · Жалоба Чем лучше? Это по сути не отличается от определения через localparam, и снова лишает абстрактности, не позволяющей сравнивать "больше/меньше" и выводить за пределы модуля. 1. Абстрактность в state machine - это нонсенс. 2. Использование enum очень облегчает разработку и уменьшает вероятность ошибок. 3. Никто не запрещает выводить состояние наружу (хотя я не совсем представляю зачем). 4. Сравнение состояний? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
embddr 0 25 сентября, 2015 Опубликовано 25 сентября, 2015 · Жалоба 1. Абстрактность в state machine - это нонсенс. 2. Использование enum очень облегчает разработку и уменьшает вероятность ошибок. 3. Никто не запрещает выводить состояние наружу (хотя я не совсем представляю зачем). 4. Сравнение состояний? "Абстрактность - это нонсенс"? Давайте тогда делать на триггерах и базовой логике, зачем лишняя абстракция? Про вывод и сравнение речь была выше. В вашем варианте более вероятно попытаться сравнить (больше/меньше) и вывести наружу состояния, чем в абстрактном варианте без нумерации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
masics 0 25 сентября, 2015 Опубликовано 25 сентября, 2015 · Жалоба "Абстрактность - это нонсенс"? Давайте тогда делать на триггерах и базовой логике, зачем лишняя абстракция? Про вывод и сравнение речь была выше. В вашем варианте более вероятно попытаться сравнить (больше/меньше) и вывести наружу состояния, чем в абстрактном варианте без нумерации. Я неправильно выразился. Моя ошибка. Под "абстрактностью" подразумевалось состояния, описанные как в начальном посте. Я все-равно считаю, что надо использовать enum/localparam для состояний. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться