flammmable 0 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба interface connect(); logic flag; endinterface module main (input CLOCK_50, output [7:0]LED); connect main_conn(); assign main_conn.flag = 1; logic clk_main; assign clk_main = CLOCK_50; logic [7:0]my_out; sub_module sub_module(.clk_in(clk_main), .sub_conn(main_conn), .sub_out(my_out)); assign LED[ 7: 0]= my_out[7:0]; endmodule module sub_module(input clk_in, connect sub_conn, output [7:0]sub_out); enum{IDLE, DUMMY_1, DUMMY_2, DUMMY_3, DYMMU_4, STAGE_1//=== Пункт №1 === } FSM; always @(posedge clk_in) begin case(FSM) IDLE: begin sub_out[7:0]<='b10101010; if(sub_conn.flag) //=== Пункт №2 === begin FSM <= STAGE_1; end end STAGE_1: begin sub_out[7:0]<='b11000011; FSM <= STAGE_1;//=== Пункт №3 === end default begin sub_out[7:0]<=FSM; end endcase end endmodule По идее приведенный код должен выдавать на LED последовательность 11000011: 1) ПЛИС стартует с обнуленными регистрами 2) срабатывает IDLE 3) т.к. main_conn.flag = 1, то FSM переключается в состояние STAGE_1 4) на следующем клоке в LED выдается 11000011, а FSM переводится в состояние STAGE_1, хотя он уже и так в нем. И так действительно работает, если закомментировать "пункт №3" и/или "пункт №2". Или в пункте №2 в качестве условия поставить "1". Или пробрасывать в условие значение из модуля "main", но не через интерфейс, а через logic/wire. Если же всё выполняется, как написано, то результат будет 11111010. Т.е. у case срабатывает ветка default и выдается текущее значение FSM, а оно оказывается равно инвертированному значению STAGE_1 (т.е. если удалить DUMMY_3 и DUMMY_4, то результатом работы будет 11111100). Проверял на самодельной плате с 10M02SCE144C8G и на DE0-NANO c EP4CE22F17C6N. Среда - Quartus 17.1 Lite. Что это такое, господа? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба FSM - это же объявленный тип, почему дальше в коде, вы с ним обращаетесь, как с сигналом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба 38 minutes ago, flammmable said: 1) ПЛИС стартует с обнуленными регистрами Далеко не факт, особенно для перечисляемого типа, без инициализации с форматом представляения отданным синтезатору. Все остальное следствие 20 minutes ago, Tausinov said: FSM - это же объявленный тип, почему дальше в коде, вы с ним обращаетесь, как с сигналом? что бы быть типом должен быть typedef Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 3 декабря, 2018 Опубликовано 3 декабря, 2018 · Жалоба Приветствую! 47 minutes ago, flammmable said: По идее приведенный код должен выдавать на LED последовательность 11000011: 1) ПЛИС стартует с обнуленными регистрами 2) срабатывает IDLE ... Что это такое, господа? Скорее всего это некорректный подход к кодированию. - Очень желательно явный ресет для FSM. Так как нулевое состояние регистров может не соответствовать IDLE - Qu вроде one-hot по умолчанию для fsm делает Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться