ViKo 1 April 8, 2010 Posted April 8, 2010 · Report post Ну, вот, к примеру. module CountDownReload #(parameter PERIOD = 50000) ( input Reset_n, Clock, Enable, output reg [WIDTH:0] Count ); localparam WIDTH = NumBits(PERIOD-2); always @(negedge Reset_n, posedge Clock) if (!Reset_n) Count = 0; else if (Enable) if (Count[WIDTH]) Count = Count - 1; else Count = (1 << WIDTH) | (PERIOD-2); endmodule Для ACEX получился в виде, как на картинке. Да, сумматор использует переносы, но триггеры черт знает где, выходы берутся с других мест. А вот тот же код, разложенный в Cyclone III, 18 ЛЭ Что сказать: Quartus + Cyclone = Сила! Предыдущие семейства - в топку! Quote Share this post Link to post Share on other sites More sharing options...
sazh 9 April 8, 2010 Posted April 8, 2010 · Report post Что сказать: Quartus + Cyclone = Сила! Предыдущие семейства - в топку! Добавлю, все на квартус 9.0. Ибо только он творит чудеса. Quote Share this post Link to post Share on other sites More sharing options...
ViKo 1 April 8, 2010 Posted April 8, 2010 · Report post Добавлю, все на квартус 9.0. Ибо только он творит чудеса. Неужто 9.1 хуже? Или, снова... шутка? Смайлик поставьте. Quote Share this post Link to post Share on other sites More sharing options...
dxp 112 April 8, 2010 Posted April 8, 2010 · Report post теперь еще добавить alcr, clk_ena, sload, cnt_en как в сабжевом примере и посмотреть. очень занятные вещи видятся для разных семейств (причины уже обсуждали на этом форуме) %) //------------------------------------------------------------------------------ module slon ( input clk, input rst, input cnt_en, input [63:0] data, input load, output bit [63:0] cnt ); always_ff @(posedge clk, posedge rst) begin if(rst) begin cnt <= 0; end else begin if(cnt_en) begin if(load) begin cnt <= data; end else begin cnt <= cnt + 1; end end end end endmodule //------------------------------------------------------------------------------ P.S. EP2C8F256I8 @ Quartus II 9.0 Build 235 06/17/2009 SJ Full Version, Service Pack Installed: 2 Quote Share this post Link to post Share on other sites More sharing options...
ViKo 1 April 8, 2010 Posted April 8, 2010 · Report post to dxp Для ACEX попробуйте то же. Сам попробовал :) Все ровненько, только я длину счетчика уменьшил до 32. Значит, ваш пример недостаточно сложный. Quote Share this post Link to post Share on other sites More sharing options...
des00 26 April 8, 2010 Posted April 8, 2010 · Report post P.S. EP2C8F256I8 @ Quartus II 9.0 Build 235 06/17/2009 SJ Full Version, Service Pack Installed: 2 я не зря перечислил нужные сигналы, посмотрите для начала на таблицу истинности lpm_counter потом сравните со своим кодом %) Quote Share this post Link to post Share on other sites More sharing options...
sazh 9 April 8, 2010 Posted April 8, 2010 · Report post Неужто 9.1 хуже? Или, снова... шутка? Смайлик поставьте. Error (10207): Verilog HDL error at CountDownReload.v(7): can't resolve reference to object "NumBits" Где он описан? Да и приоритетность нарушаете: The signal order is the same for all Altera device families, although as noted previously, not all device families provide every signal. The following priority order is observed: 1. Asynchronous Clear, aclr—highest priority 2. Preset, pre 3. Asynchronous Load, aload 4. Enable, ena 5. Synchronous Clear, sclr 6. Synchronous Load, sload 7. Data In, data—lowest priority Quote Share this post Link to post Share on other sites More sharing options...
ViKo 1 April 8, 2010 Posted April 8, 2010 · Report post Error (10207): Verilog HDL error at CountDownReload.v(7): can't resolve reference to object "NumBits" Где он описан? Да и приоритетность нарушаете: ... Это - функция, в другом месте была /*! *********************************************************************** * @brief Calculate Number-of-Bits for Number * @details Вычисляет количество разрядов для представления числа * @param Number - число * @return NumBits - количество двоичных разрядов ***********************************************************************/ function integer NumBits (input integer Number); begin NumBits = 0; while (Number) begin NumBits++; Number >>= 1; end end endfunction Приоритетность нарушаю? :unsure: Quote Share this post Link to post Share on other sites More sharing options...
dxp 112 April 8, 2010 Posted April 8, 2010 · Report post я не зря перечислил нужные сигналы, теперь еще добавить alcr, clk_ena, sload, cnt_en module slon ( input clk, input rst, input clk_en, input cnt_en, input [63:0] data, input load, output bit [63:0] cnt ); always_ff @(posedge clk, posedge rst) begin if(rst) begin cnt <= 0; end else begin if(clk_en) begin if(load) begin cnt <= data; end else begin if(cnt_en) begin cnt <= cnt + 1; end end end end end endmodule Так? Результат в смысле выстраивания счетчика в сгруппированном виде не изменился (скриншоты делать и слать лень). посмотрите для начала на таблицу истинности lpm_counter потом сравните со своим кодом %) lpm_counter может быть сконфигурирован очень разнообразно, начиная от первого моего примера и включая этот. Какую именно конфигурацию вы имеете в виду? И что в ней мешает синтезатору слепить счетчик в сгруппированных ячейках и с использованием быстрых переносов? Quote Share this post Link to post Share on other sites More sharing options...
ViKo 1 April 8, 2010 Posted April 8, 2010 · Report post Какую именно конфигурацию вы имеете в виду? И что в ней мешает синтезатору слепить счетчик в сгруппированных ячейках и с использованием быстрых переносов? Если задействовать всё, что можно, в счетчике, то, может быть, "красивенько" уже не уложится. FUNCTION lpm_counter ( -- INPUTS data[LPM_WIDTH-1..0], clock, clk_en, cnt_en, updown, cin, aclr, aset, aconst, aload, sclr, sset, sconst, sload ) WITH ( -- PARAMETERS LPM_WIDTH, LPM_DIRECTION, LPM_MODULUS, LPM_AVALUE, LPM_SVALUE, LPM_PORT_UPDOWN, CARRY_CNT_EN, LABWIDE_SCLR, USE_NEW_VERSION ) RETURNS ( -- OUPUTS q[LPM_WIDTH-1..0], cout, eq[15..0]%, debug_out[6..0]% ); Правда, я уже не совсем понимаю, зачем... Quote Share this post Link to post Share on other sites More sharing options...
des00 26 April 8, 2010 Posted April 8, 2010 · Report post Результат в смысле выстраивания счетчика в сгруппированном виде не изменился (скриншоты делать и слать лень). пример Viko MWLPM_Counter в посте №25 дает 26 плиток для третьего сыклона, ваш пример slon подрихтованный по разрядности + выход cout дает 50 плиток для того же сыклона. Quote Share this post Link to post Share on other sites More sharing options...
dxp 112 April 8, 2010 Posted April 8, 2010 · Report post Правда, я уже не совсем понимаю, зачем... Тоже не представляю реальной задачи, где нужен такой счетчик. Quote Share this post Link to post Share on other sites More sharing options...
ViKo 1 April 8, 2010 Posted April 8, 2010 · Report post пример Viko MWLPM_Counter в посте №25 дает 26 плиток для третьего сыклона, ваш пример slon подрихтованный по разрядности + выход cout дает 50 плиток для того же сыклона. Видимо, дело, в cout (которого нет у dxp). Потому что последний slon на 24 разряда дает те же 26 "плиток". Приведите свой модуль. Ой, нет - 24 "плитки", 26 было для ACEX. Quote Share this post Link to post Share on other sites More sharing options...
des00 26 April 8, 2010 Posted April 8, 2010 · Report post Приведите свой модуль. как разберусь откуда берутся лишние плитки приведу %) Quote Share this post Link to post Share on other sites More sharing options...
bogaev_roman 0 April 8, 2010 Posted April 8, 2010 (edited) · Report post Загнал следующий код в квартус 9.1 под stratix iv с установками по умолчанию. module test_counter ( input clk, input rst, output reg [15:0] cnt_out ); always @(posedge clk or posedge rst) if (rst) cnt_out<=16'd0; else cnt_out<=cnt_out+16'd1; endmodule Проект размазался на флурплане по трем лабам и занял 20 лог ячеек, при этом раскидался в произвольном порядке. К сожалению, вставить картинку так и не смог :smile3046: При использовании мегафункции все получилось ровно и красиво. Поменял далее на циклон второй - красивая картиночка - все как положено. Непонятно... :cranky: Edited April 8, 2010 by bogaev_roman Quote Share this post Link to post Share on other sites More sharing options...