Перейти к содержанию
    

[Verilog] - Посчитать количество установленных бит в 32'b переменной

Как можно посчитать количество установленных бит в 32 битной переменной используя минимум блоков в ПЛИС (Spartan-6)?

Может кто-то сталкивался и поделиться примером?

Изменено пользователем BloomJack

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

48 минут назад, BloomJack сказал:

Как можно посчитать количество установленных бит в 32 битной переменной используя минимум блоков в ПЛИС (Spartan-6)?

Может кто-то сталкивался и поделиться примером?

 

Если это синтезируемое, то вот так.

Регистр с 32 битовым числом сдвигать, выход сдвига подать на вход разрешения счетчика, который и посчитает число единиц.. Вторым счетчиком считать 32 раза и по достижению запретить сдвиг..

А если не синтезируемое, то написать функцию, которая все то-же самое делает в цикле от 0 до 32...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если в лоб, то я бы попробовал воспользоваться функцией. Но как по ресурсам оптимизирует синтезатор - мне неизвестно. Это вариант использования за один такт.

function [4:0] count_ones;
    input [31:0] vector;
    integer i;
    begin
        count_ones = 0;
        for (i = 0; i < 32; i=i+1) begin
            count_ones = count_ones + vector[i];
        end
    end
endfunction
          
wire [31:0] a;
wire [4:0] result_a;


assign a = ... ;
assign result_a = count_ones(a);

 

Изменено пользователем Darky777
Дополнить ответ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

41 minutes ago, Darky777 said:

Если в лоб, то я бы попробовал воспользоваться функцией. Но как по ресурсам оптимизирует синтезатор - мне неизвестно. Это вариант использования за один такт.

ему наверное помочь можно, руками сделав 16 однобитных сумматоров -> 8 двух битных -> 4 трех битных ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно вот такой логической схемкой.

By Шевкопляс Б.В., Микропроцессорные структуры инженерные решения. 1986 год.:good3:

Ну и под LUT 6 или 4х входовой оптимизировать.

Хотя Synplify и сам .........

ones.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Коллеги благодарю! переберу все варианты! Последний особенно шикарен. Классика!))

Изменено пользователем BloomJack

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

счетчик реализовал, все работает.

Но, интересна концепция из Шевкопляс Б.В., Микропроцессорные структуры инженерные решения. 1986 год Рис. 11.12

Кто-то реализовывал такую для 64бит? Идея интересная...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что-то мне кажется что для большого количества бит сумматоры: 32 однобитных -> 16 двухбитных -> 8 трехбитных -> ... по количеству логики покомпактней получатся. NlogN вместо N^2, да ещё и приоритетный энкодер нужен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть книга Hacker's delight https://doc.lagout.org/security/Hackers Delight.pdf

Вот там есть глава по подсчету бит - посмотрите, вдруг что найдете

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...