ViKo 1 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба Quartus 9.0, Altera ACEX 1K. Пытаюсь создать счетчик, чтобы укладывался компактно в логические элементы. Для начала - фиксированного размера (с generate - свои проблемы). Как-то так: module CountPrim #(parameter WIDTH = 4) ( input Reset_n, Clock, Enable, output [WIDTH-1:0] Count, output POut ); wire [WIDTH-1:0] Fb; // feedback wire [WIDTH-1:0] Lt; // look table wire [WIDTH-1:0] Cr; // carry out CARRY_SUM Cy0 (.sin(Fb[0]), .cin(1), .sout(Lt[0]), .cout(Cr[0])); DFFE Ff0 (.d(Lt[0]), .clk(Clock), .clrn(Reset_n), .prn(1), .ena(Enable), .q(Fb[0])); CARRY_SUM Cy1 (.sin(Fb[1]), .cin(Cr[0]), .sout(Lt[1]), .cout(Cr[1])); DFFE Ff1 (.d(Lt[1]), .clk(Clock), .clrn(Reset_n), .prn(1), .ena(Enable), .q(Fb[1])); CARRY_SUM Cy2 (.sin(Fb[2]), .cin(Cr[1]), .sout(Lt[2]), .cout(Cr[2])); DFFE Ff2 (.d(Lt[2]), .clk(Clock), .clrn(Reset_n), .prn(1), .ena(Enable), .q(Fb[2])); CARRY_SUM Cy3 (.sin(Fb[3]), .cin(Cr[2]), .sout(Lt[3]), .cout(Cr[3])); DFFE Ff3 (.d(Lt[3]), .clk(Clock), .clrn(Reset_n), .prn(1), .ena(Enable), .q(Fb[3])); assign Count = Fb; assign POut = Cr[3]; endmodule Но не получаю желаемого (см. картинку). Где-то промахнулся. Поможите, люди добрые! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба Quartus 9.0, Altera ACEX 1K. Пытаюсь создать счетчик, чтобы укладывался компактно в логические элементы. Для начала - фиксированного размера (с generate - свои проблемы). Но не получаю желаемого (см. картинку). Где-то промахнулся. Поможите, люди добрые! чем Вас не устраивает такое описание reg [<upper>:0] <reg_name>; always @(posedge <clock> or posedge <reset>) if (<reset>) <reg_name> <= 0; else if (<clock_enable>) <reg_name> <= <reg_name> + 1; готового счетчика? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба чем Вас не устраивает такое описание ... готового счетчика? Не устраивает тем, что Quartus не объединяет в одном логическом элементе сумматор и триггер, а раскидывает, как захочет. На MAX+II на AHDL у меня счетчики выстраивались в линейку, с цепями переноса длиной в 24 элемента. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Builder 1 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба Не устраивает тем, что Quartus не объединяет в одном логическом элементе сумматор и триггер, а раскидывает, как захочет. На MAX+II на AHDL у меня счетчики выстраивались в линейку, с цепями переноса длиной в 24 элемента.Какую версию квартуса используете? Квартус достаточно умный для того, что-б использовать мегафункции, если только там код не сильно хитрый и не завязано на что-то ещё. Если что-то не получается, по моему проще использовать LPM функцию сложения, врятли получится написать оптимальнее чем в ней, особенно для общего случая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба ..раскидывает, как захочет... Если во времянку вложились - вам не всё равно где и почему он их так расставил ?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба Если во времянку вложились - вам не всё равно где и почему он их так расставил ?? Предпочитаю идеальное решение. Жалко напрасно потраченных логических элементов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба Не устраивает тем, что Quartus не объединяет в одном логическом элементе сумматор и триггер, а раскидывает, как захочет. На MAX+II на AHDL у меня счетчики выстраивались в линейку, с цепями переноса длиной в 24 элемента. У вас счетчик по скорости не укладывается или вам просто хочется, чтобы фиттер размещал ячейки рядом и обязательно переносы делал через carry chain'ы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба У вас счетчик по скорости не укладывается или вам просто хочется, чтобы фиттер размещал ячейки рядом и обязательно переносы делал через carry chain'ы? ...Просто хочется :)... Просто счетчиков будет некоторое количество... остальное уже сказал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба Предпочитаю идеальное решение. Жалко напрасно потраченных логических элементов. Перфекционизмом занимаетесь. :) Просинтезируйте счетчик, который вам описали, и загляните в директорию db - с ненулевой вероятностью увидите там файл lpm_counter.tdf. :) Который как раз весь из себя низкоуровневый и использует переносы "вручную". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба Просто счетчиков будет некоторое количество... остальное уже сказал. Самый главный вопрос: все счетчики считают одновременно и на максимальной для чипа частоте? Т.е решение "в лоб"??? Или можно сделать один счетчик и успевать им считать в нескольких каналах? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба 2 ViKo пройдитесь по форуму - помнится des00 и SM поднимали такой вопрос (только там есчё модуль был числа, а потом "плюс"). Не совсем то, что вам нужно, но сумматор там как раз таким вот хитроумным методом и был организован, и даже вроде бы через generate-ы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба ...Просто хочется :)... Просто счетчиков будет некоторое количество... остальное уже сказал. Констрейнами зададите требования, синтезатор будет стараться выжимать скорость и/или размер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба Счетчики разные, счетчиков - несколько (5-6), длинные. Я могу написать Count = Count + 1, и все будет нормально. Но хотелось бы получить конкретный ответ на свой вопрос. Что-то я напутал в CARRY_SUM. 2 ViKo пройдитесь по форуму - помнится des00 и SM поднимали такой вопрос (только там есчё модуль был числа, а потом "плюс"). Не совсем то, что вам нужно, но сумматор там как раз таким вот хитроумным методом и был организован, и даже вроде бы через generate-ы. Смотрел, что-то видел. Но там не было CARRY_SUM. Я понимаю так, что таблица истинности у него следующая: CI SI SO CO 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Костян 0 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба Предпочитаю идеальное решение. Жалко напрасно потраченных логических элементов. а почему не берете в расчет зря потраченное время на это решение? Я понимаю так, что таблица истинности у него следующая: CI SI SO CO 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 похоже на правду, если хотите удостовериться - сделайте тестбенч и подайте на вход CI SI (всего лишь четыре варианта) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 6 апреля, 2010 Опубликовано 6 апреля, 2010 · Жалоба а почему не берете в расчет зря потраченное время на это решение? похоже на правду, если хотите удостовериться - сделайте тестбенч и подайте на вход CI SI (всего лишь четыре варианта) По первому - один раз набив шишек, можно потом клепать счетчики сколь угодно раз. У меня есть нечто подобное на AHDL, мне нравится. Сразу видно на Floorplan - вот они, мои счетчики :) По второму - попробую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться