brag 0 8 ноября, 2010 Опубликовано 8 ноября, 2010 · Жалоба Написал простую фсм, отсинтезил, посмотрел на схему и немного офигел :) вот ее код module transmitter(input clk16,tx,reset,input [3:0] pn31,output reg txo); reg [3:0] sr; reg st; reg [5:0] ct; reg txreg; wire ct61,ct14; assign ct61=(ct==6'd61); assign ct14=(ct==6'd14); always @(posedge clk16 or negedge reset)begin if(!reset)begin txo<=0; sr<=pn31; txreg<=0; ct<=0; st<=0; end else begin sr[3:1]<=sr[2:0];sr[0]<=sr[3]; txo<=sr[3]^txreg; ct<=ct+1'b1; case(st) 1'b0:if(ct61)begin ct<=0; txreg<=tx; st<=1'b1; end 1'b1:if(ct14)begin ct<=0; txreg<=tx; st<=1'b1; end endcase end end endmodule и вот что насинтезировало(в плисине заняло 26 элементов) потом сделал то же самое, только через if и жесткую логику. привожу только фрагмент,которым заменил весь case, остальное осталось таким же if(~st&ct61|st&ct14)begin ct<=0; txreg<=tx; st<=1; end И заняло 25 элементов. И схема гораздо проще,правильнее и понятнее, а главное заняла меньше элементов: Это я что-то туплю или через case так и будет получатся. этот код то и так нормальный, но если FSM по больше,то жесткую логику явно напряжнее будет прописывать... Или мож в квартусе где-то оптимизация не довключена? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexus.mephi 0 9 ноября, 2010 Опубликовано 9 ноября, 2010 · Жалоба Это я что-то туплю или через case так и будет получатся. этот код то и так нормальный, но если FSM по больше,то жесткую логику явно напряжнее будет прописывать... Или мож в квартусе где-то оптимизация не довключена? Для вашего случая if предпочтительнее. От описания многое зависит. У меня студенты один и тот же пример написанный по-разному на квартусе синтезят и разброс зачастую существенный. Не старайтесь запихнуть все в один always-блок: module transmitter( input clk16,tx,reset, input [3:0] pn31, output reg txo ); reg [3:0] sr; reg st; reg [5:0] ct; reg txreg; always @(posedge clk16 or negedge reset) if(!reset) begin txo<=0; sr<=pn31; end else begin txo<=sr[3]^txreg; sr[3:1]<=sr[2:0]; sr[0]<=sr[3]; end always @(posedge clk16 or negedge reset) if(!reset) ct<=0; else if (!st && (ct==6'd61) || st && (ct==6'd14)) ct<=0; else ct<=ct+1'b1; always @(posedge clk16 or negedge reset) if(!reset) begin txreg<=0; st<=0; end else if (!st && (ct==6'd61) || st && (ct==6'd14)) begin txreg<=tx; st<=1'b1; end endmodule Если будет время, то просинтезите этот код и скажите результаты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DevL 0 9 ноября, 2010 Опубликовано 9 ноября, 2010 (изменено) · Жалоба если с case но для проверки "убрать" if получается Total combinational functions 13 Dedicated logic registers 6 Total logic elements 14 Total registers 6 изначально было Total combinational functions 25 Dedicated logic registers 13 Total logic elements 25 Total registers 13 Quartus II 64-Bit Version 10.0 Build 262 08/18/2010 SP 1 SJ Web Edition IMHO надо над if думать, с case - не все так печально и накладно был бы testbench для проверки оптимизации if :) PS: разные always дают: Total combinational functions 22 Dedicated logic registers 13 Total logic elements 24 Total registers 13 PS2: интересный случай... Изменено 9 ноября, 2010 пользователем DevL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Intekus 0 10 ноября, 2010 Опубликовано 10 ноября, 2010 · Жалоба Приведённые отчёты ("Total combinational functions ... " и т. д.) под сомнение не ставлю, а вот на RTL-схемы порекомендовал бы не особо ориентироваться - всё равно в ПЛИС попадает то, что отображается в TechMap. Не видел, как корректно работающие и синтезировавшиеся в довольно аккуратные небольшие фрагменты TechMap модули отображались в RTL довольно запутано и ненаглядно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
brag 0 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба спасибо, в РТЛ смотреть привычка заставляет :) попробую поигратся.... а весь проект тоже обвесился кучей муксов, хотя они там не нужны techmap na 10.1web ne работает, поставлю 9.2, попробую Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться