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

 
 
> Подсчет нулей или единиц
Egel
сообщение May 13 2009, 09:52
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 162
Регистрация: 28-07-08
Из: Химки
Пользователь №: 39 244



Подскажите алгоритм подсчета нулей или единиц в 64 разрядном числе за один такт. И что можно почитать поглубже по поводу создания АЛУ


Спасибо огромное заранее
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Egel
сообщение May 13 2009, 10:34
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 162
Регистрация: 28-07-08
Из: Химки
Пользователь №: 39 244



На одном сумматоре вообще абсурдно пытаться сделать??
Go to the top of the page
 
+Quote Post
SM
сообщение May 13 2009, 10:44
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Egel @ May 13 2009, 14:34) *
На одном сумматоре вообще абсурдно пытаться сделать??

Легко. Если он имеет достаточную разрядность (на вскидку - 183 бита). Заводя его выходы на его же входы по приведенной мной выше схеме.

А эффективнее всего это делать на дереве полных сумматоров с использованием их входов переносов, подавая везде на перенос один бит входных данных. Таким образом первый уровень будет принимать 3*N бит данных и состоять из однобитных сумматоров, второй - состоять из двухбитных, и принимать N/2 бит (по кол-ву входов переносов сумматоров), и так далее. Проверено, синтезаторы (Quartus, DC и Synplify) не умеют оптимизировать такую структуру в такое дерево.
Go to the top of the page
 
+Quote Post
Artem_Petrik
сообщение May 13 2009, 18:01
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006



Цитата(SM @ May 13 2009, 13:44) *
А эффективнее всего это делать на дереве полных сумматоров с использованием их входов переносов, подавая везде на перенос один бит входных данных.


Как раз с полными сумматорами здесь не очень-то получается, по крайней мере на Альтере. Похоже, что есть ограничения на то, откуда можно подавать данные на вход переноса в альтеровской LE. Получается, что если туда подается сигнал не с выхода переноса соседней ячейки, то приходится задействовать еще одну LE. А в этом случае уже более оптимальным получается дерево, имеющее полусумматоры на первом сложении (лучше 2 полусумматора, чем один полный).
Go to the top of the page
 
+Quote Post
des00
сообщение May 14 2009, 04:01
Сообщение #5


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Artem_Petrik @ May 13 2009, 13:01) *
Как раз с полными сумматорами здесь не очень-то получается, по крайней мере на Альтере. Похоже, что есть ограничения на то, откуда можно подавать данные на вход переноса в альтеровской LE. Получается, что если туда подается сигнал не с выхода переноса соседней ячейки, то приходится задействовать еще одну LE. А в этом случае уже более оптимальным получается дерево, имеющее полусумматоры на первом сложении (лучше 2 полусумматора, чем один полный).


а можно пример ? для наглядности пусть будет 64-х битный вектор и сравните результат синтеза с http://electronix.ru/forum/index.php?showt...st&p=549588

вопрос возник не просто так. простой оценочный расчет для альетры схемы на полусуматорах 32*1 + 16*2 + 8*3 + 4*4 + 2*5 + 1*6 = 120 ячеек, схемы на "нечестных" полных сумматорах 16*2 + 8*4 + 4*5 + 2*6 + 1*7 = 103 ячейки. Сделал как вы предлагаете (если я вас правильно понял) и квартус со мной согласился smile.gif


--------------------
Go to the top of the page
 
+Quote Post
Artem_Petrik
сообщение May 14 2009, 16:40
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006



Цитата(des00 @ May 14 2009, 07:01) *
вопрос возник не просто так. простой оценочный расчет для альетры схемы на полусуматорах 32*1 + 16*2 + 8*3 + 4*4 + 2*5 + 1*6 = 120 ячеек, схемы на "нечестных" полных сумматорах 16*2 + 8*4 + 4*5 + 2*6 + 1*7 = 103 ячейки.

Да, вы правы, полные сумматоры лучше. Просто показалось что будет лучше на двух LE сложить 4 бита вместо трех, а оказалось, что все не так просто. Виноват, был неправ.

Цитата(des00 @ May 14 2009, 07:01) *
и квартус со мной согласился

Ага, так вы с ним заодно! biggrin.gif
Go to the top of the page
 
+Quote Post
SM
сообщение May 14 2009, 18:06
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Artem_Petrik @ May 14 2009, 20:40) *
двух LE сложить 4 бита

на двух LE сложить 4 бита низзя, так как это три выхода, т.е. 3 LE, а арифметический режим там вряд-ли будет применим из-за особенностей разводки переносов.
Go to the top of the page
 
+Quote Post
Maverick
сообщение May 15 2009, 05:01
Сообщение #8


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

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



В книге Shevkoplias "Microprocessornye Structury" (стр 479) предлагают такой алгоритм. Вырезка этого алгоритма во вложении

Когда-то давно я реализовал на VHDL логический элемент, который считает число единиц во входных данных так
(он реализован на сумматорах)
Описание портов:
data – N разрядный вход
add – N разрядный выход

Код
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Vcnt1s is
    Port ( data : in std_logic_vector(15 downto 0);
           add : out std_logic_vector(4 downto 0));
end Vcnt1s;

architecture Behavioral of Vcnt1s is
begin

process (data)
variable S : std_logic_vector(4 downto 0);
begin
S := "00000";
for i in 0 to 15 loop
if data(i) = '1' then S := S + "00001";
end if;
end loop;
add <= S;
end process;

end Behavioral;

Прикрепленные файлы
Прикрепленный файл  Shevkoplias.MicroprocessornyeStructury.pdf ( 45.13 килобайт ) Кол-во скачиваний: 89
 


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

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

Сообщений в этой теме
- Egel   Подсчет нулей или единиц   May 13 2009, 09:52
- - Oldring   Цитата(Egel @ May 13 2009, 13:52) Подскаж...   May 13 2009, 10:02
- - SM   assign temp_a = (in_data & 64'h55555555555...   May 13 2009, 10:08
|- - des333   Цитата(SM @ May 13 2009, 14:08) assign te...   May 13 2009, 10:51
|- - des00   Цитата(SM @ May 13 2009, 04:44) Проверено...   May 13 2009, 11:09
|- - SM   Цитата(Artem_Petrik @ May 13 2009, 22:01)...   May 13 2009, 21:12
|- - SM   Цитата(Maverick @ May 15 2009, 09:01) Выр...   May 15 2009, 05:41
|- - Oldring   Цитата(SM @ May 15 2009, 09:41) Она, пожа...   May 15 2009, 10:51
||- - SM   Цитата(Oldring @ May 15 2009, 14:51) по т...   May 15 2009, 10:53
|- - sazh   Цитата(SM @ May 15 2009, 09:41) Эту схему...   May 15 2009, 11:20
||- - Maverick   Цитата(SM @ May 15 2009, 08:41) Эту схему...   May 15 2009, 12:49
||- - SM   Цитата(Maverick @ May 15 2009, 16:49) Что...   May 15 2009, 14:13
|- - des333   Цитата(SM @ May 15 2009, 09:41) Эту схему...   May 15 2009, 16:05
|- - SM   Цитата(des333 @ May 15 2009, 20:05) Я дум...   May 15 2009, 16:21
|- - Maverick   Цитата(des333 @ May 15 2009, 19:05) Я дум...   May 16 2009, 15:55
|- - SM   Цитата(Maverick @ May 16 2009, 19:55) реа...   May 17 2009, 14:12
|- - Maverick   Цитата(SM @ May 17 2009, 17:12) Исходя из...   May 17 2009, 15:25
- - PeterD   А так? always @(posedge clk) begin one [7:0] = in...   May 13 2009, 10:52
- - Egel   Но какие частоты будут с 180 разрядным сумматором?...   May 13 2009, 10:56
|- - SM   Цитата(Egel @ May 13 2009, 14:52) Но каки...   May 13 2009, 10:58
|- - SM   Цитата(Egel @ May 13 2009, 14:56) Надо вс...   May 13 2009, 11:03
- - Egel   Всем огромное спасибо. Очень сильно помогли   May 13 2009, 11:01
- - Postoroniy_V   2 Admin ИМХО популярная тема у народа, может того ...   May 13 2009, 13:29
- - Leka   А я поспорю Весь проект написаный в таком стиле,...   May 15 2009, 11:11
- - Oldring   Цитата(Leka @ May 15 2009, 15:11) А я пос...   May 15 2009, 11:18
- - Leka   Цитата(Oldring @ May 15 2009, 15:18) То е...   May 15 2009, 11:39


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

 


RSS Текстовая версия Сейчас: 25th June 2025 - 16:14
Рейтинг@Mail.ru


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