RobFPGA 58 June 8, 2018 Posted June 8, 2018 · Report post Приветствую! Экономия получается на отладке в Modelsim...., которая занимает ~80% времени. На чем именно экономия? Ведь отлаживать Вы будете генерацию сигналов управления в FSM точно так же. А кода при этом как минимум в 2 раза больше. Удачи! Rob. Quote Share this post Link to post Share on other sites More sharing options...
Flip-fl0p 4 June 8, 2018 Posted June 8, 2018 · Report post .... При раздельном описании 9 линий кода для инстацирования модуля счетчика, 5 линии кода для описания сигналов управления, и собственно счетчика 4 линии для сигналов управления в начале FSM (default value) 2 (в среднем) линии для сигналов управления в каждой ветви где счетчиком надо управлять. .... Приветствую! На чем именно экономия? Ведь отлаживать Вы будете генерацию сигналов управления в FSM точно так же. А кода при этом как минимум в 2 раза больше. Удачи! Rob. Вот только мы экономим не строчки кода, а время. И из всех строчек кода мы фактически должны проверить только сигналы управления счетчиком. Ибо все остальное было проверено и отлажено ранее. Если взять счетчик с сигналом разрешения работы, и синхронной загрузкой мы в FSM формируем только эти сигналы, ну возможно ещё данные, которые загружаем в счетчик, соответственно и проверяем только их. Остальное мы отладили раньше. А если в счетчике есть параметр вывода его значения на консоль - то мы можем вообще смотреть в консоли то что выдает счетчик. Или вообще писать все это добро в файл. И включать этот режим очень быстро и просто - в настройках модуля. А вообще спор ни о чем. Каждый делает так, как считает правильным . Ибо так как правильно зависит от личного опыта, и субъективного взгляда на организацию HDL проектов. :beer: Quote Share this post Link to post Share on other sites More sharing options...
demon3200 0 June 8, 2018 Posted June 8, 2018 · Report post Переделал модуль. Теперь счетчик, вынесенный из автомата, описывается в комбинационной части. Да, если так, то писанины стало меньше. С точки зрения реализации же, по-моему, оба счетчика абсолютно одинаковы. Но теперь читается хуже. Счетчик, который в автомате, сразу виден в одном месте. А вот работа второго счетчика не так очевидна. Для этого надо смотреть на сам автомат, а также на логику, которая управляет счетчом. Причем каждый сигнал описывается отдельно. 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. Quote Share this post Link to post Share on other sites More sharing options...
flammmable 4 June 13, 2018 Posted June 13, 2018 · Report post Если Вы знаете, что такое "автомат", то попробуйте представить себе набор автоматов - мастер-слэйв-слэйв. Отличный паттерн разработки! Спасибо! А не подскажите ли, как лучше по вашему опыту: все автоматы делать в одном блоке always - в разных case (я сейчас так сделал) или "один автомат - один модуль"? Quote Share this post Link to post Share on other sites More sharing options...
iosifk 3 June 13, 2018 Posted June 13, 2018 · Report post как лучше по вашему опыту: все автоматы делать в одном блоке always - в разных case (я сейчас так сделал) или "один автомат - один модуль"? Я Ваш вопрос не понял. А что касается мастер-слэйв, то об этом можно прочитать в "Кратком Курсе", раздел "дополнительный об автоматах"... Quote Share this post Link to post Share on other sites More sharing options...