отримати індекс першого входження '1 'в vactor?

O

omara007

Guest
Привіт люди

Я хочу здійснити синтезованого коду Verilog або функція, яка повертає індекс першого входження цифру '1 '(або цифра 0 ") у векторі.Наприклад, якщо це вектор:

REG [7:0] X;

X = 8'b0100_1111

executioin функція повинна повернути '6 ', якщо ми будемо виходити з MSB і повинна повернути '0', якщо ми будемо виходити з LSB.

 
Наступні функції можуть бути реалізовані для перевірки першого 1 з боку MSB:

Функція func_first1 (введення [7:0] X);
починати
для (i = 0; i <8; I = I 1)
починати
якщо (X [0])
func_first1 = I;
ще
X = X>> 1;
кінець
кінець

Відповідно, ми можемо написати функцію для першого LSB однієї із сторін і в першу 0 з обох сторін теж ...
Поправте мене, якщо ніяких помилок.

 
muni123 пише:

Наступні функції можуть бути реалізовані для перевірки першого 1 з боку MSB:Функція func_first1 (введення [7:0] X);

починати

для (i = 0; i <8; I = I 1)

починати

якщо (X [0])

func_first1 = I;

ще

X = X>> 1;

кінець

кінецьВідповідно, ми можемо написати функцію для першого LSB однієї із сторін і в першу 0 з обох сторін теж ...

Поправте мене, якщо ніяких помилок.
 
вхід [7:0] bit_in;
введення check_bit;
введення msb_lsb;

дріт [7:0] bit_reverse;
дріт [7:0] bit_use;

REG [3:0] fir_loc / / Якщо біт [3] == 1'b1, не знайти check_bit.

призначити bit_reverse = (bit_in [0], bit_in [1], bit_in [2], bit_in [3],
bit_in [4], bit_in [5], bit_in [6], bit_in [7]);

призначити bit_use = (msb_lsb) bit_in: bit_reverse?

Завжди @ (bit_use або check_bit)
якщо (bit_use [7] == check_bit)
fir_loc = 4'h7;
Else If (bit_use [6] == check_bit)
fir_loc = 4'h6;
Else If (bit_use [5] == check_bit)
fir_loc = 4'h5;
Else If (bit_use [4] == check_bit)
fir_loc = 4'h4;
Else If (bit_use [3] == check_bit)
fir_loc = 4'h3;
Else If (bit_use [2] == check_bit)
fir_loc = 4'h2;
Else If (bit_use [1] == check_bit)
fir_loc = 4'h1;
Else If (bit_use [0] == check_bit)
fir_loc = 4'h0;
ще
fir_loc = 4'h8;

 
Те, що ви просите за це просто пріоритетом Encoder ...
Цей код легко є в багатьох підручниках і
І yx.yang дали код ...

 
lordsathish пише:

Те, що ви просите за це просто пріоритетом Encoder ...

Цей код легко є в багатьох підручниках і

І yx.yang дали код ...
 
omara007 пише:

Чи можете ви запропонувати код для вектора загальної ширини?
 
Варіанти використання цикл в основному відповідним чином визначити пріоритетні Encoder як настроюються функції.

Але щоб завершити вище приклади, ви повинні визначити, що перші призначені для виходу всіх нульового вектора.

 
МКО пише:

Але щоб завершити вище приклади, ви повинні визначити, що перший

призначені для виходу всіх нульового вектора.
 
МКО пише:

Варіанти використання цикл в основному відповідним чином визначити пріоритетні Encoder як настроюються функції.Але щоб завершити вище приклади, ви повинні визначити, що перші призначені для виходу всіх нульового вектора.
 
Цитата:

але це здається цілком природним, що якщо вхідний вектор містить всі '0 'нічого не вибрано так, ніякі дії викликали
 
МКО пише:Цитата:

але це здається цілком природним, що якщо вхідний вектор містить всі '0 'нічого не вибрано так, ніякі дії викликали
 
МКО пише:

/.../ Якщо ви не визначити вихідне значення для функції,

компілятор вільний призначити довільний (неправильне) значення
 
Цитата:

У моєму прикладі компілятор не має вільний вибір "Все '0 '" вхід; нуль дає нуль Out;
 
може бути нижче код повинен додати деяке значення у вашій роботі,
є X розміром 8, то poscnt і finalpos мають 3 біт ширини,
то й може змінити розмір цих змінних на основі ур вхід (Х) розміруМодуль positioncnt (CLK);

введення CLK;

REG [3:0] poscnt = 4'b0 / / лічильник Ширина грунтується на даних, ширину
REG [3:0] finalpos / / лічильник Ширина грунтується на даних, ширину
REG [7:0] = X 8'b0100_1100;Дріт MSB = 1'b0;
Завжди @ (posedge CLK)
починати
якщо (MSB)
починати
якщо (X [7])
починати
finalpos <= 4'd7 - poscnt / / ширина - poscnt
X <= X;
кінець
ще
починати
poscnt <= poscnt 1;
X <= (X [6:0], 1'b0);
кінець
кінець
ще
починати
якщо (X [0])
починати
finalpos <= poscnt / / ширина - poscnt
X <= X;
кінець
ще
починати
poscnt <= poscnt 1;
X <= (1'b0 х [7:1]);
кінець
кінець

кінець

ENDMODULE

 

Welcome to EDABoard.com

Sponsor

Back
Top