RobFPGA 27 8 июня, 2018 Опубликовано 8 июня, 2018 · Жалоба Приветствую! Экономия получается на отладке в Modelsim...., которая занимает ~80% времени. На чем именно экономия? Ведь отлаживать Вы будете генерацию сигналов управления в FSM точно так же. А кода при этом как минимум в 2 раза больше. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 8 июня, 2018 Опубликовано 8 июня, 2018 · Жалоба .... При раздельном описании 9 линий кода для инстацирования модуля счетчика, 5 линии кода для описания сигналов управления, и собственно счетчика 4 линии для сигналов управления в начале FSM (default value) 2 (в среднем) линии для сигналов управления в каждой ветви где счетчиком надо управлять. .... Приветствую! На чем именно экономия? Ведь отлаживать Вы будете генерацию сигналов управления в FSM точно так же. А кода при этом как минимум в 2 раза больше. Удачи! Rob. Вот только мы экономим не строчки кода, а время. И из всех строчек кода мы фактически должны проверить только сигналы управления счетчиком. Ибо все остальное было проверено и отлажено ранее. Если взять счетчик с сигналом разрешения работы, и синхронной загрузкой мы в FSM формируем только эти сигналы, ну возможно ещё данные, которые загружаем в счетчик, соответственно и проверяем только их. Остальное мы отладили раньше. А если в счетчике есть параметр вывода его значения на консоль - то мы можем вообще смотреть в консоли то что выдает счетчик. Или вообще писать все это добро в файл. И включать этот режим очень быстро и просто - в настройках модуля. А вообще спор ни о чем. Каждый делает так, как считает правильным . Ибо так как правильно зависит от личного опыта, и субъективного взгляда на организацию HDL проектов. :beer: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demon3200 0 8 июня, 2018 Опубликовано 8 июня, 2018 · Жалоба Переделал модуль. Теперь счетчик, вынесенный из автомата, описывается в комбинационной части. Да, если так, то писанины стало меньше. С точки зрения реализации же, по-моему, оба счетчика абсолютно одинаковы. Но теперь читается хуже. Счетчик, который в автомате, сразу виден в одном месте. А вот работа второго счетчика не так очевидна. Для этого надо смотреть на сам автомат, а также на логику, которая управляет счетчом. Причем каждый сигнал описывается отдельно. module cnt_test ( //Global input CLK_i , input nRESET_i , //Input input IN_PULSE_i , //Control input ENA_CNT_i , input CLR_CNT_i , //Output of counter output [31:0] OUT_CNT0_o32 , output [31:0] OUT_CNT1_o32 ); reg [31:0] out_cnt0_o32; reg [31:0] out_cnt1_o32; assign OUT_CNT0_o32 = out_cnt0_o32; assign OUT_CNT1_o32 = out_cnt1_o32; reg [7:0] state; //FSM localparam integer sIDLE = 0, sCOUNT = 1, sSTOP = 2; wire cnt_1_en = (state == sCOUNT) & ENA_CNT_i & IN_PULSE_i; wire cnt_1_clr = (state == sSTOP) & CLR_CNT_i; always @(posedge CLK_i or negedge nRESET_i) begin if(~nRESET_i) begin out_cnt0_o32 <= 0; state <= sIDLE; end else begin case(state) sIDLE: begin if(ENA_CNT_i) state <= sCOUNT; end sCOUNT: begin if(ENA_CNT_i) begin if(IN_PULSE_i) begin out_cnt0_o32 <= out_cnt0_o32 + 1'b1; end end else begin state <= sSTOP; end end sSTOP: begin state <= sIDLE; if(CLR_CNT_i) begin out_cnt0_o32 <= 0; end end endcase end end always @(posedge CLK_i or negedge nRESET_i) begin if(~nRESET_i) begin out_cnt1_o32 <= 0; end else begin if(cnt_1_en) out_cnt1_o32 <= out_cnt1_o32 + 1'b1; else if(cnt_1_clr) out_cnt1_o32 <= 0; end end endmodule Если же делать так, чтобы счетчик считал только в одном конкретном состоянии автомата, тогда надо добавлять состояний. В одном счетчик тикает, в другом простаивает. Однако тогда между автоматом и счетчиком будет минимум логики. Особенно при кодировке One-Hot. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flammmable 1 13 июня, 2018 Опубликовано 13 июня, 2018 · Жалоба Если Вы знаете, что такое "автомат", то попробуйте представить себе набор автоматов - мастер-слэйв-слэйв. Отличный паттерн разработки! Спасибо! А не подскажите ли, как лучше по вашему опыту: все автоматы делать в одном блоке always - в разных case (я сейчас так сделал) или "один автомат - один модуль"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 13 июня, 2018 Опубликовано 13 июня, 2018 · Жалоба как лучше по вашему опыту: все автоматы делать в одном блоке always - в разных case (я сейчас так сделал) или "один автомат - один модуль"? Я Ваш вопрос не понял. А что касается мастер-слэйв, то об этом можно прочитать в "Кратком Курсе", раздел "дополнительный об автоматах"... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться