|
|
  |
Подсчет нулей или единиц |
|
|
|
May 14 2009, 04:01
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 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 ячейки. Сделал как вы предлагаете (если я вас правильно понял) и квартус со мной согласился
--------------------
|
|
|
|
|
May 14 2009, 16:40
|
Местный
  
Группа: Свой
Сообщений: 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)  и квартус со мной согласился Ага, так вы с ним заодно!
|
|
|
|
|
May 15 2009, 05:01
|

я только учусь...
     
Группа: Модераторы
Сообщений: 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;
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
May 15 2009, 11:18
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(Leka @ May 15 2009, 15:11)  А я поспорю Весь проект написаный в таком стиле, окажется неконкурентноспособным, и пойдет в корзину --> эффективность "по таким ресурсам, как мыслительные усилия и время, затрачиваемые разработчиком" ,окажется равной нулю. Проекты могут пойти в корзину по самым разным причинам. Например, из-за опоздания с выходом на рынок. Поэтому отмеченная Вами зависимость, будучи сильно нелинейным критерием, безусловно, верным в ряде экстремальныхз случаев, требует применения более тонких методов оптимизации ресурсов. То есть проект "может оказаться неконкурентоспособен" но утверждение что "окажется неконкурентоспособен" - неверно.
--------------------
Пишите в личку.
|
|
|
|
|
May 15 2009, 16:05
|
Профессионал
    
Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079

|
Цитата(SM @ May 15 2009, 09:41)  Эту схему давал уже des333 где-то в самом начале. Она, пожалуй, самая неэффективная по ресурсам. Я думаю, Maverick писал про схему, указанную в pdf, а не про тот код, который написан в его посте. Насчет неэффективности согласен, я ее синтезировал именно с целью выявить, насколько "плохую" схему синтезирует Quartus по ресурсоемкости и быстродействию (до анализа в TQA руки никак не дойдут)
--------------------
|
|
|
|
|
May 15 2009, 16:21
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(des333 @ May 15 2009, 20:05)  Я думаю, Maverick писал про схему, указанную в pdf, а не про тот код, который написан в его посте. А, если так, то тогда да, на этой основе никто алгоритма подсчета не предлагал. Я имел в виду именно схему, представленную кодом из поста. Однако в этом алгоритме понадобится на выходе кодер экспоненты (вычисление положения старшей 1), что тоже не сказать, что ресурсов не занимает. Да и эти вот блочки на пересечениях - в лучшем случае 1 блок 1 LUT в арифметическом режиме (или в режиме CASCADE, который был в свое время в ацексах), в худшем - 1 блок 2 LUT, и кол-во блоков пропорционально квадрату разрядности, что не выглядит эффективным.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|