Jump to content

    

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

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

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

Edited by BloomJack

Share this post


Link to post
Share on other sites
48 минут назад, BloomJack сказал:

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

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

 

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

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

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

Share this post


Link to post
Share on other sites

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

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);

 

Edited by Darky777
Дополнить ответ

Share this post


Link to post
Share on other sites
41 minutes ago, Darky777 said:

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

ones.jpg

Share this post


Link to post
Share on other sites

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

Edited by BloomJack

Share this post


Link to post
Share on other sites

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

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

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now