Ako sa dostať na index prvého výskytu '1 'v vactor?

O

omara007

Guest
Ahoj lidičky

Chcem implementovať synthesizable Verilog kódu alebo funkciu, ktorá vráti index prvého výskytu číslica "1 '(alebo číslica '0'), vo vektora.Napríklad, ak je to vektor:

reg [7:0] x;

x = 8'b0100_1111

executioin funkcie by mal vrátiť '6 ', ak by sme začať od MSB a mal by vrátiť '0', ak začneme od LSB.

 
Nasledujúce funkcie môžu byť vykonané na kontrolu zo strany 1 prvej MSB:

Funkcia func_first1 (vstup [7:0] x);
začať
for (i = 0; i <8; i = i 1)
začať
if (x [0])
func_first1 = i;
iné
x = x>> 1;
koniec
koniec

Preto môžeme napísať funkciu pre prvý z boku a prvý LSB 0 z oboch strán príliš ...
Opravte ma, či sa akejkoľvek chyby.

 
muni123 Napísal:

Nasledujúce funkcie môžu byť vykonané na kontrolu zo strany 1 prvej MSB:Funkcia func_first1 (vstup [7:0] x);

začať

for (i = 0; i <8; i = i 1)

začať

if (x [0])

func_first1 = i;

iné

x = x>> 1;

koniec

koniecPreto môžeme napísať funkciu pre prvý z boku a prvý LSB 0 z oboch strán príliš ...

Opravte ma, či sa akejkoľvek chyby.
 
príkon [7:0] bit_in;
vstup check_bit;
vstup msb_lsb;

drôtu [7:0] bit_reverse;
drôtu [7:0] bit_use;

reg [3:0] fir_loc, / / ak trochu [3] == 1'b1, nenašli check_bit.

priradiť 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]);

prideliť bit_use = (msb_lsb) bit_in: bit_reverse?

Vždy @ (bit_use alebo check_bit)
if (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;
iné
fir_loc = 4'h8;

 
Čo žiadate je iba prioritné enkodér ...
Tento kód je ľahko dostupný v mnohých učebniciach a
A yx.yang dal kód ...

 
lordsathish Napísal:

Čo žiadate je iba prioritné enkodér ...

Tento kód je ľahko dostupný v mnohých učebniciach a

A yx.yang dal kód ...
 
omara007 Napísal:

Môžete mi odporučiť kód pre vektor generické šírke?
 
Varianty využitia cyklu for je v podstate vhodný spôsob, ako definovať prioritné enkodér ako parametrizovateľné funkcie.

Ale na dokončenie vyššie uvedených príkladoch, musíte najprv definovať, čo je určené pre všetky výstup nulový vektor.

 
FVM Napísal:

Ale na dokončenie vyššie uvedených príkladoch, musíte najprv definovať, čo je

určený výstup pre všetky nulový vektor.
 
FVM Napísal:

Varianty využitia cyklu for je v podstate vhodný spôsob, ako definovať prioritné enkodér ako parametrizovateľné funkcie.Ale na dokončenie vyššie uvedených príkladoch, musíte najprv definovať, čo je určené pre všetky výstup nulový vektor.
 
Citácia:

ale zdá sa úplne prirodzené, že v prípade, že vstupný vektor obsahuje všetky '0 'nic nie je zvolená tak, žiadna akcia vyvolaná
 
FVM Napísal:Citácia:

ale zdá sa úplne prirodzené, že v prípade, že vstupný vektor obsahuje všetky '0 'nic nie je zvolená tak, žiadna akcia vyvolaná
 
FVM Napísal:

/.../- Li definovať žiadne výstupné hodnoty pre funkciu

kompilátor je zadarmo priradiť ľubovoľné (chybné) hodnoty
 
Citácia:

v mojom príklade prekladač nemá žiadne slobodné voľby pre "všetky '0 '" vstup, nula nula dáva na výstup;
 
môže byť pod kód by mal pridať nejakú hodnotu vašej práce,
x je veľkosť je 8, potom poscnt a finalpos sú 3 bitovú šírku,
potom u môže zmeniť veľkosť týchto premenných na základe ur vstup (X) veľkosťModul positioncnt (CLK);

vstup clk;

reg [3:0] poscnt = 4'b0; / / counter šírka je založená na údajoch šírka
reg [3:0] finalpos; / / counter šírka je založená na údajoch šírka
reg [7:0] x = 8'b0100_1100;drôt MSB = 1'b0;
Vždy @ (posedge CLK)
začať
if (MSB)
začať
if (x [7])
začať
finalpos <= 4'd7 - poscnt, / / šírka - poscnt
x <= x;
koniec
iné
začať
poscnt <= poscnt 1;
x <= (x [6:0], 1'b0);
koniec
koniec
iné
začať
if (x [0])
začať
finalpos <= poscnt, / / šírka - poscnt
x <= x;
koniec
iné
začať
poscnt <= poscnt 1;
x <= (1'b0, x [7:1]);
koniec
koniec

koniec

endmodule

 

Welcome to EDABoard.com

Sponsor

Back
Top