|
Подсчет числа одинаковых разрядов двоичного числа, ищется комбинаторная реализация |
|
|
|
Apr 28 2006, 06:41
|

Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 3-09-04
Пользователь №: 586

|
Задача следующая: имеется 32-х разрядное число. Нужно вычислить, сколько у этого числа последовательных нулей или единиц, начиная со старшего разряда. Поясню на примере 8-разрядного числа: 0001xxxx или 1110xxxx дают результат 2 (3 одинаковых соседних бита в старших разрядах) 10xxxxxx или 01xxxxxx дают результат 0 (одинаковых соседних битов нет) 0000001x или 1111110x дают результат 5 (6 одинаковых соседних битов в старших разрядах) x означает, что значение этих битов уже не имеет значения. Задача тривиальна, если вычисления завязать на клок и строить внутри процесса (код пишется на Верилоге). Однако ищется возможность реализации на комбинационной логике (вопрос быстродействия стоит остро). Буду благодарен за любые конструктивные идеи.
|
|
|
|
|
 |
Ответов
|
Apr 30 2006, 18:02
|
Частый гость
 
Группа: Свой
Сообщений: 197
Регистрация: 31-03-06
Пользователь №: 15 676

|
Я тоже, почитав ответы, пришёл к выводу об использовании XOR. Можно каскадированием, как предложил DS_, но при этом, имхо, это будет последовательное сравнение, т.е. тратим время. Я бы, возможно, сделал примерно так: Код if (!(^data[31:0])) cnt = 31; else if (!(^data[31:1])) cnt = 30; else if (!(^data[31:2])) cnt = 29; ... else if (!(^data[31:30])) cnt = 1; else cnt=0 или, если хочется короче: Код for(i=0; i<32; i=i+1) if(!(^data[31:i]) begin cnt = 31 - i; break; end всё это, естественно, под always @(data)
Сообщение отредактировал Chudik - Apr 30 2006, 18:05
|
|
|
|
|
Apr 30 2006, 18:24
|
Знающий
   
Группа: Свой
Сообщений: 859
Регистрация: 7-04-05
Из: Санкт-Петербург
Пользователь №: 3 943

|
Цитата(Chudik @ Apr 30 2006, 22:02)  Я тоже, почитав ответы, пришёл к выводу об использовании XOR. Можно каскадированием, как предложил DS_, но при этом, имхо, это будет последовательное сравнение, т.е. тратим время. Я бы, возможно, сделал примерно так: Код if (!(^data[31:0])) cnt = 31; else if (!(^data[31:1])) cnt = 30; else if (!(^data[31:2])) cnt = 29; ... else if (!(^data[31:30])) cnt = 1; else cnt=0 или, если хочется короче: Код for(i=0; i<32; i=i+1) if(!(^data[31:i]) begin cnt = 31 - i; break; end всё это, естественно, под always @(data) Код неверен, т.к. поразрядный ксор будет выдавать парити.
--------------------
"Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается." (с) С.Лем
|
|
|
|
Сообщений в этой теме
glock17 Подсчет числа одинаковых разрядов двоичного числа Apr 28 2006, 06:41 sazh А можно посмотреть на этот код? Apr 28 2006, 07:15 glock17 ЦитатаА можно посмотреть на этот код?
Какой код? ... Apr 28 2006, 07:55 Postoroniy_V Цитата(glock17 @ Apr 28 2006, 10:41)
За... Apr 28 2006, 07:28 glock17 Цитатаесли всё упирается в быстродействие, тогда д... Apr 28 2006, 08:10  glock17 Всем откликнувшимся - большое спасибо!
Проблем... May 1 2006, 00:58 lelik Если данные идут последовательно, то можно использ... Apr 28 2006, 08:14 des00 Цитата(glock17 @ Apr 28 2006, 01:41)
За... Apr 28 2006, 08:26 RobFPGA Приветствую!
У меня вот этот вариант работает... Apr 28 2006, 09:10 sazh module comp32
(
input [31:0] in,
output [4:0] out... Apr 28 2006, 09:33 Gate glock17,
любые верилоговские конструкции, не стоящ... Apr 28 2006, 09:34 sazh To Gate
В вашем примере неправильно будет интерпит... Apr 28 2006, 10:01 Gate Цитата(sazh @ Apr 28 2006, 14:01) To Gate... Apr 28 2006, 10:37 id_gene Цитата(sazh @ Apr 28 2006, 14:01) To Gate... Apr 29 2006, 10:08 Magnum To Gate:
Это последовательный путь.. А надо паралл... Apr 28 2006, 10:08 sazh Причем тут последовательный или параллельный. И то... Apr 28 2006, 10:20 sazh Уважаемый id_gene. Дело в том, что я не программис... Apr 29 2006, 19:31 DS_ По моему делается из 31 элемента XOR, который свод... Apr 29 2006, 20:27 DS_ А как Вы думаете, что построится по Вашим IF ? Это... Apr 30 2006, 18:24 Chudik Цитата(DS_ @ Apr 30 2006, 11:24) А как Вы... May 1 2006, 01:10 sazh А разве мой первый вариант это разве не XOR в связ... May 2 2006, 06:48
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|