ViKo 1 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба Ну, вот, к примеру. 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 = Сила! Предыдущие семейства - в топку! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба Что сказать: Quartus + Cyclone = Сила! Предыдущие семейства - в топку! Добавлю, все на квартус 9.0. Ибо только он творит чудеса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба Добавлю, все на квартус 9.0. Ибо только он творит чудеса. Неужто 9.1 хуже? Или, снова... шутка? Смайлик поставьте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 68 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба теперь еще добавить 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба to dxp Для ACEX попробуйте то же. Сам попробовал :) Все ровненько, только я длину счетчика уменьшил до 32. Значит, ваш пример недостаточно сложный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба P.S. EP2C8F256I8 @ Quartus II 9.0 Build 235 06/17/2009 SJ Full Version, Service Pack Installed: 2 я не зря перечислил нужные сигналы, посмотрите для начала на таблицу истинности lpm_counter потом сравните со своим кодом %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба Неужто 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба 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: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 68 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба я не зря перечислил нужные сигналы, теперь еще добавить 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 может быть сконфигурирован очень разнообразно, начиная от первого моего примера и включая этот. Какую именно конфигурацию вы имеете в виду? И что в ней мешает синтезатору слепить счетчик в сгруппированных ячейках и с использованием быстрых переносов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба Какую именно конфигурацию вы имеете в виду? И что в ней мешает синтезатору слепить счетчик в сгруппированных ячейках и с использованием быстрых переносов? Если задействовать всё, что можно, в счетчике, то, может быть, "красивенько" уже не уложится. 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]% ); Правда, я уже не совсем понимаю, зачем... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба Результат в смысле выстраивания счетчика в сгруппированном виде не изменился (скриншоты делать и слать лень). пример Viko MWLPM_Counter в посте №25 дает 26 плиток для третьего сыклона, ваш пример slon подрихтованный по разрядности + выход cout дает 50 плиток для того же сыклона. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 68 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба Правда, я уже не совсем понимаю, зачем... Тоже не представляю реальной задачи, где нужен такой счетчик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба пример Viko MWLPM_Counter в посте №25 дает 26 плиток для третьего сыклона, ваш пример slon подрихтованный по разрядности + выход cout дает 50 плиток для того же сыклона. Видимо, дело, в cout (которого нет у dxp). Потому что последний slon на 24 разряда дает те же 26 "плиток". Приведите свой модуль. Ой, нет - 24 "плитки", 26 было для ACEX. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба Приведите свой модуль. как разберусь откуда берутся лишние плитки приведу %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 8 апреля, 2010 Опубликовано 8 апреля, 2010 (изменено) · Жалоба Загнал следующий код в квартус 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: Изменено 8 апреля, 2010 пользователем bogaev_roman Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться