реклама на сайте
подробности

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Счетчик на примитивах CARRY_SUM и DFFE
ViKo
сообщение Apr 6 2010, 12:09
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



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

Но не получаю желаемого (см. картинку). Где-то промахнулся. Поможите, люди добрые!
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Maverick
сообщение Apr 6 2010, 12:35
Сообщение #2


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(ViKo @ Apr 6 2010, 15:09) *
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;


готового счетчика?


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 6 2010, 12:45
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Maverick @ Apr 6 2010, 15:35) *
чем Вас не устраивает такое описание
...
готового счетчика?

Не устраивает тем, что Quartus не объединяет в одном логическом элементе сумматор и триггер, а раскидывает, как захочет. На MAX+II на AHDL у меня счетчики выстраивались в линейку, с цепями переноса длиной в 24 элемента.
Go to the top of the page
 
+Quote Post
Builder
сообщение Apr 6 2010, 12:52
Сообщение #4


iBuilder©
****

Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322



Цитата(ViKo @ Apr 6 2010, 15:45) *
Не устраивает тем, что Quartus не объединяет в одном логическом элементе сумматор и триггер, а раскидывает, как захочет. На MAX+II на AHDL у меня счетчики выстраивались в линейку, с цепями переноса длиной в 24 элемента.
Какую версию квартуса используете? Квартус достаточно умный для того, что-б использовать мегафункции, если только там код не сильно хитрый и не завязано на что-то ещё. Если что-то не получается, по моему проще использовать LPM функцию сложения, врятли получится написать оптимальнее чем в ней, особенно для общего случая.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Apr 6 2010, 12:54
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Цитата(ViKo @ Apr 6 2010, 15:45) *
..раскидывает, как захочет...

Если во времянку вложились - вам не всё равно где и почему он их так расставил ??
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 6 2010, 12:57
Сообщение #6


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Kuzmi4 @ Apr 6 2010, 15:54) *
Если во времянку вложились - вам не всё равно где и почему он их так расставил ??

Предпочитаю идеальное решение. Жалко напрасно потраченных логических элементов.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 6 2010, 13:02
Сообщение #7


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(ViKo @ Apr 6 2010, 19:45) *
Не устраивает тем, что Quartus не объединяет в одном логическом элементе сумматор и триггер, а раскидывает, как захочет. На MAX+II на AHDL у меня счетчики выстраивались в линейку, с цепями переноса длиной в 24 элемента.

У вас счетчик по скорости не укладывается или вам просто хочется, чтобы фиттер размещал ячейки рядом и обязательно переносы делал через carry chain'ы?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 6 2010, 13:06
Сообщение #8


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(dxp @ Apr 6 2010, 16:02) *
У вас счетчик по скорости не укладывается или вам просто хочется, чтобы фиттер размещал ячейки рядом и обязательно переносы делал через carry chain'ы?

...Просто хочется smile.gif...
Просто счетчиков будет некоторое количество... остальное уже сказал.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 6 2010, 13:08
Сообщение #9


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(ViKo @ Apr 6 2010, 19:57) *
Предпочитаю идеальное решение. Жалко напрасно потраченных логических элементов.

Перфекционизмом занимаетесь. smile.gif Просинтезируйте счетчик, который вам описали, и загляните в директорию db - с ненулевой вероятностью увидите там файл lpm_counter.tdf. smile.gif Который как раз весь из себя низкоуровневый и использует переносы "вручную".


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
iosifk
сообщение Apr 6 2010, 13:09
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(ViKo @ Apr 6 2010, 17:06) *
Просто счетчиков будет некоторое количество... остальное уже сказал.

Самый главный вопрос: все счетчики считают одновременно и на максимальной для чипа частоте?
Т.е решение "в лоб"???
Или можно сделать один счетчик и успевать им считать в нескольких каналах?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Apr 6 2010, 13:09
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 ViKo
пройдитесь по форуму - помнится des00 и SM поднимали такой вопрос (только там есчё модуль был числа, а потом "плюс"). Не совсем то, что вам нужно, но сумматор там как раз таким вот хитроумным методом и был организован, и даже вроде бы через generate-ы.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 6 2010, 13:10
Сообщение #12


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(ViKo @ Apr 6 2010, 20:06) *
...Просто хочется smile.gif...
Просто счетчиков будет некоторое количество... остальное уже сказал.

Констрейнами зададите требования, синтезатор будет стараться выжимать скорость и/или размер.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 6 2010, 13:20
Сообщение #13


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Счетчики разные, счетчиков - несколько (5-6), длинные.
Я могу написать Count = Count + 1, и все будет нормально.
Но хотелось бы получить конкретный ответ на свой вопрос. Что-то я напутал в CARRY_SUM.

Цитата(Kuzmi4 @ Apr 6 2010, 16:09) *
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
Go to the top of the page
 
+Quote Post
Костян
сообщение Apr 6 2010, 13:45
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



Цитата(ViKo @ Apr 6 2010, 11:57) *
Предпочитаю идеальное решение. Жалко напрасно потраченных логических элементов.

а почему не берете в расчет зря потраченное время на это решение?

Цитата(ViKo @ Apr 6 2010, 12:20) *
Я понимаю так, что таблица истинности у него следующая:
Код
CI SI SO CO
0  0  0  0
0  1  1  0
1  0  1  0
1  1  0  1

похоже на правду, если хотите удостовериться - сделайте тестбенч и подайте на вход CI SI (всего лишь четыре варианта)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 6 2010, 13:54
Сообщение #15


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Костян @ Apr 6 2010, 16:45) *
а почему не берете в расчет зря потраченное время на это решение?

похоже на правду, если хотите удостовериться - сделайте тестбенч и подайте на вход CI SI (всего лишь четыре варианта)

По первому - один раз набив шишек, можно потом клепать счетчики сколь угодно раз. У меня есть нечто подобное на AHDL, мне нравится. Сразу видно на Floorplan - вот они, мои счетчики smile.gif
По второму - попробую.
Go to the top of the page
 
+Quote Post

5 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 13:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01521 секунд с 7
ELECTRONIX ©2004-2016