Brent Kung Adder: krug, rad, prednosti, nedostaci i njegove primjene

Isprobajte Naš Instrument Za Uklanjanje Problema





Brent–Kung zbrajalo predložili su 1982. Hsiang Te Kung i Richard Peirce Brent. To je zbrajalo paralelnog prefiksa ili zbrajalo stabla koje se široko koristi u digitalnom dizajnu zbog svoje fleksibilnosti. Paralelni zbrajači prefiksa mogu se izgraditi na nekoliko načina na temelju broja logičkih razina, logička vrata uključeni, izlaz iz svake kapije i ožičenje između razina. Dostupni su različiti tipovi zbrajalica stabla, temeljni zbrajači stabla su Sklanskym KoggeStone & Brent-Kung, U usporedbi s KSA (Kogge–Stone zbrajačem), ovaj zbrajalac pruža visoku pravilnost strukture zbrajala i ima manje blokiranja ožičenja što dovodi do boljih performansi i manje potrebne površine čipa. Ovaj članak pruža kratke informacije o a Brent Kung Adder .


Što je Brent Kung Adder?

Zbrajalo koje koristi minimalni sklop za dobivanje rezultata poznato je kao Brent Kung zbrajalo, a poznato je i kao zbrajalo male snage ili paralelno zbrajalo. Ovo zbrajalo je namijenjeno za uštedu veličine čipa tako da će proizvodnja ovih zbrajala postati lakša. Simetrija i uobičajena konstrukcijska struktura ovog zbrajala uvelike će smanjiti troškove proizvodnje i dopušteno je koristiti u cjevovodnim topologijama. Korištenje logike komplementarnog prolaznog tranzistora pomaže u poboljšanju izvedbe dizajna s multiplekser pristup u različitim dizajnom ćelija.



Brent Kung Adder Circuit

Dolje je prikazan dijagram brent-kung paralelnog zbrajala prefiksa koji uključuje fazu 1 (fazu pretprocesiranja), faze 2 do 7 su faze generiranja prijenosa, a faza 8 je naknadna obrada. To je napredna arhitektura i vrlo je jednostavna za konstruirati te omogućuje manje zagušenja ožičenja. Dakle, manje ožičenja će smanjiti količinu potrebnog prostora za izvođenje arhitekture. Osim toga, usmjeravanje postaje mnogo lakše zbog križanja (ili) preklapanja manjeg broja žica. Međutim, kazna će se povećati u kašnjenju zbog povećanog broja stupnjeva. Izlaz za ovaj zbrajalo je povećan, a zatim će se kašnjenje povećati.

  Brent Kung Adder
                                                        Brent Kung Adder

Kako radi Brent Kung Adder?

Brent Kung Adder radi tako što izračunava prefikse za dvije grupe bitova koji su korisni u pronalaženju prefiksa grupe od 4 bita. Ovi se prefiksi koriste za izračunavanje prefiksa 8-bitne grupe, itd. Nakon toga, ti će se prefiksi koristiti za izračunavanje provedbe specifične bitne faze. Ti se prijenosi koriste s grupnim širenjem sljedećeg stupnja za izračunavanje bita zbroja tog stupnja. Brent Kung Tree koristi 2log2N – 1 stupanj.



32-bitni Brent Kung Adder

Dolje je prikazan raspored 32-bitnog zbrajala Brent Kung. Na početku ovog rasporeda dizajnirana su osnovna logička vrata kao što su NAND, inverter, XOR, NOR, itd. Nakon toga, potrebne ćelije kao što su crne ćelije, sive ćelije, međuspremnici i PG logika dizajnirane su s logičkim vratima.

  32-bitni Brent Kung Adder
                                  32-bitni Brent Kung Adder

U donjem 32-bitnom Brent Kung zbrajaču, invertirajuća vrata poput AOI i OAI alternativno se koriste uglavnom za sive i crne ćelije. Tako su crne i sive ćelije predstavljene sivim i crnim blokovima, dok su međuspremnici predstavljeni kružićima.

  PCBWay   Osnovne ćelije u Adderu
Osnovne ćelije u Adderu

Ulazi kao što su A & B dani su PG logici koja je prikazana na blok dijagramu. Za 32-bitno zbrajalo potrebna su 32 PG logička bloka, a signali širenja (P) i generiranja (G) su izlazi ovog bloka. Ovi signali se dostavljaju strukturi stabla zbrajalice Brent Kung. Struktura ovog zbrajala uključuje sive i crne ćelije.

Siva ćelija uključuje tri ulaza i jedan izlaz. Širenje i generiranje signala iz sadašnje faze i generiranje signala iz prethodne faze su ulazi, dok je grupno generiranje signala o/p. U bilo kojoj strukturi stabla, svaka će faza završiti sivom ćelijom, a o/p ove ćelije je grupno generiranje signala. Ovaj signal se jednostavno smatra prijenosom te faze. Crna ćelija uključuje četiri ulaza i dva izlaza. Ulazi za ovu ćeliju su P & G signali sadašnjeg stupnja i P, G signali iz prethodnog stupnja.

PG logika uključuje AND & XOR vrata gdje se AND logička vrata koriste za generiranje G signala, a XOR logička vrata osiguravaju P signal. Kako bi se uklonili nepotrebni pretvarači, koriste se dvije vrste sivih i crnih ćelija. Invertirajuća vrata koja se koriste u jednom redu za sivu ćeliju su AOI ili I-ILI-inverter, a invertirajuća vrata za crnu ćeliju unutar sljedećeg retka koriste OAI ili ILI-I-inverter. AOI ćelija koristi normalne ulaze za pružanje invertiranih izlaza, dok OAI koristi invertirane ulaze za pružanje normalnih izlaza.

Operacija Brent Kung Adder

Brent Kung zbrajalo je paralelno zbrajalo prefiksa koje se koristi za operaciju zbrajanja visokih performansi. Ovo zbrajalo izgleda kao struktura stabla koja izvodi aritmetičku operaciju. Ovo zbrajalo uključuje crne i sive ćelije. Svaka crna ćelija ima dva I vrata i jedno ILI vrata, a svaka siva ćelija ima samo jedno I vrata.

Brent-kung guja uključuje dva stupnja; faza predobrade i faza generiranja. U prvoj fazi generiranje i širenje bit će iz svakog para ulaza. Ovdje propagate pruža operaciju 'XOR' za ulazne bitove, dok generira daje operaciju 'AND' za ulazne bitove. Širenje i generiranje poput 'Pi' i 'Gi' dani su u nastavku.

Pi = Ai XOR Bi i Gi = Ai I Bi.

U drugoj fazi, prijenos će se generirati za svaki bit koji je poznat kao generiranje prijenosa 'Cg', a prijenos koji se širi za svaki bit je poznat kao generiranje prijenosa 'Cp'. Za daljnji rad, generirati će se prijenos propagiranja i prijenosa generiranja. Posljednja ćelija dostupna unutar operacije svaki bit osigurava prijenos. Tako će posljednji prijenos bita pomoći u zbroju sljedećeg bita istovremeno do posljednjeg bita. Generiranje prijenosa i širenje dani su kao;

Cp = P1 I P0 i Cg=G1 ILI (P1 I G0)

Uglavnom se koristi za operaciju zbrajanja dva trideset i dva bita i svaki bit prolazi fazu pretprocesiranja i fazu generiranja, a zatim daje konačni zbroj.

Primarni ulazni bitovi idu ispod faze pretprocesiranja i proizvode, šire i generiraju. Dakle, ovi propagiraju kao i generiraju prolazi kroz fazu generiranja generira prijenos generira & nosi propagira i daje konačni zbroj. Dolje je prikazan korak po korak postupak zbrajanja Brent-kung.

  Učinkovit blok dijagram
Učinkovit blok dijagram

Brent-kung raspored zbrajalica izgleda kao struktura stabla i to je zbrajalo velike brzine koje cilja na logiku na razini vrata. Ovaj zbrajalo može biti dizajniran sa smanjenjem broja logičkih vrata. Stoga se smanjuje kašnjenje i memorija koja se koristi unutar ove arhitekture.

Brent Kung Adder Verilog kod

Verilog kod zbrajalice Brent Kung prikazan je u nastavku.

`define INPUTSIZE 64 //postavite veličinu unosa n

`definiraj GROUPSIZE 8 //postavi veličinu grupe = 1, 2, 4 ili 8

 

modul Brent_Kung_Adder(A, B, S);

unos [`INPUTSIZE – 1:0] A;

unos [`INPUTSIZE – 1:0] B;

izlaz [`INPUTSIZE:0] S;

žica [`INPUTSIZE / `GROUPSIZE * 2 – 1:0] r_temp;

žica [`INPUTSIZE / `GROUPSIZE * 2 – 1:0] r;

žica [`INPUTSIZE / `GROUPSIZE:0] cin;

žica [`INPUTSIZE / `GROUPSIZE * 2 – 1:0] q;

dodijeliti cin[0] = 1’b0;

generirati

gdje u;

za (i = 0; i < `INPUTSIZE / `GROUPSIZE; i = i + 1) početak: paralelni_FA_CLA_prefiks

    group_q_generation #(.Groupsize(`GROUPSIZE))

    f(

        .a(A[`VELIČINA GRUPE * (i + 1) – 1:`VELIČINA GRUPE * i]),

        .b(B[`VELIČINA GRUPE * (i + 1) – 1:`VELIČINA GRUPE * i]),

        .cin(cin[i]),

        .s(S[`VELIČINA GRUPE * (i + 1) – 1:`VELIČINA GRUPE * i]),

        .qg(q[i * 2 + 1:i * 2])

    );

kraj

parallel_prefix_tree_first_half #(.Treesize(`INPUTSIZE / `GROUPSIZE))

t1(

    .q(q[`INPUTSIZE / `GROUPSIZE * 2 – 1:0]),

    .r(r_temp[`INPUTSIZE / `GROUPSIZE * 2 – 1:0])

);

parallel_prefix_tree_second_half #(.Treesize(`INPUTSIZE / `GROUPSIZE))

t2(

    .q(r_temp[`INPUTSIZE / `GROUPSIZE * 2 – 1:0]),

    .r(r[`INPUTSIZE / `GROUPSIZE * 2 – 1:0])

);

for (i = 0; i < `INPUTSIZE / `GROUPSIZE; i = i + 1) početak: cin_generacija

    cin_generation_logic f(

        .r(r[2 * i + 1:2 * i]),

        .c0(1'b0),

        .cin(cin[i + 1])

    );

kraj

dodijeli S[`INPUTSIZE] = cin[`INPUTSIZE / `GROUPSIZE];

endgenerirati

krajnji modul

// Prva polovica stabla paralelnog prefiksa

modul parallel_prefix_tree_first_half #(parametar Treesize = `INPUTSIZE / `GROUPSIZE)(q, r);

ulaz [Veličina stabla * 2 – 1:0] q;

izlaz [veličina stabla * 2 – 1:0] r;

generirati

gdje u;

if (Treesize == 2) početak: trivijalni_slučaj

    dodijeli r[1:0] = q[1:0];

    prefiks_logika f(

        .ql(q[1:0]),

        .qh(q[3:2]),

        .r(r[3:2])

    );

end else begin: recursive_case

    žica [veličina stabla * 2 – 1:0] r_temp;

    parallel_prefix_tree_first_half #(.Treesize(Treesize / 2))

    rekurzija_lsbh(

        .q(q[veličina stabla – 1:0]),

        .r(r_temp[veličina stabla – 1:0])

    );

    parallel_prefix_tree_first_half #(.Treesize(Treesize / 2))

    recursion_msbh(

        .q(q[veličina stabla * 2 – 1:veličina stabla]),

        .r(r_temp[veličina stabla * 2 – 1:veličina stabla])

    );

    for (i = 0; i < Treesize * 2; i = i + 2) početak: parallel_stitch_up

        if (i != Veličina stabla * 2 – 2) početak: parallel_stitch_up_pass

            dodijeliti r[i + 1:i] = r_temp[i + 1:i];

        kraj inače početak: paralelno_šivanje_up_proizvodnja

            prefiks_logika f(

                .ql(r_temp[veličina stabla – 1:veličina stabla – 2]),

                .qh(r_temp[veličina stabla * 2 – 1:veličina stabla * 2 – 2]),

                .r(r[Veličina stabla * 2 – 1:Veličina stabla * 2 – 2])

            );

        kraj

    kraj

kraj

endgenerirati

krajnji modul

// Druga polovica stabla paralelnog prefiksa

modul parallel_prefix_tree_second_half #(parametar Treesize = `INPUTSIZE / `GROUPSIZE)(q, r);

ulaz [Veličina stabla * 2 – 1:0] q;

izlaz [veličina stabla * 2 – 1:0] r;

žica [veličina stabla * 2 * ($clog2(veličina stabla) – 1) – 1:0] r_temp;

dodijeli r_temp[veličina stabla * 2 – 1:0] = q[veličina stabla * 2 – 1:0];

generirati

genvar i, j;

za (i = 0; i < $clog2(Treesize) – 2; i = i + 1) početak: druga_polovina_razine

    dodijeli r_temp[veličina stabla * 2 * (i + 1) + ((veličina stabla / (2 ** i)) – 1 – 2 ** ($clog2(veličina stabla / 4) – i)) * 2 – 1:veličina stabla * 2 * (i + 1)] = r_temp[veličina stabla * 2 * i + ((veličina stabla / (2 ** i)) – 1 – 2 ** ($clog2(veličina stabla / 4) – i)) * 2 – 1: Veličina stabla * 2 * i];

    za (j = (veličina stabla / (2 ** i)) – 1 – 2 ** ($clog2(veličina stabla / 4) – i); j < veličina stabla; j = j + 2 ** ($clog2(veličina stabla / 2 ) – i)) početak: druga_polovina_logike_razine

        prefiks_logika f(

            .ql(r_temp[Veličina stabla * 2 * i + (j – 2 ** ($clog2(Veličina stabla / 4) – i)) * 2 + 1:Veličina stabla * 2 * i + (j – 2 ** ($clog2( Veličina stabla / 4) – i)) * 2]),

            .qh(r_temp[Veličina stabla * 2 * i + j * 2 + 1:Veličina stabla * 2 * i + j * 2]),

            .r(r_temp[veličina stabla * 2 * (i + 1) + j * 2 + 1:veličina stabla * 2 * (i + 1) + j * 2])

        );

        if (j != Treesize – 1 – 2 ** ($clog2(Treesize / 4) – i)) početak: second_half_level_direct_connect

            dodijeli r_temp[veličina stabla * 2 * (i + 1) + (j + 2 ** ($clog2(veličina stabla / 2) – i)) * 2 – 1:veličina stabla * 2 * (i + 1) + j * 2 + 2] = r_temp[veličina stabla * 2 * i + (j + 2 ** ($clog2(veličina stabla / 2) – i)) * 2 – 1:veličina stabla * 2 * i + j * 2 + 2];

        kraj

    kraj

    dodijeli r_temp[veličina stabla * 2 * (i + 2) – 1:veličina stabla * 2 * (i + 2) – (2 ** ($clog2(veličina stabla / 4) – i)) * 2] = r_temp[veličina stabla * 2 * (i + 1) – 1:Veličina stabla * 2 * (i + 1) – (2 ** ($clog2(Veličina stabla / 4) – i)) * 2];

kraj

dodijeli r[1:0] = r_temp[veličina stabla * 2 * ($clog2(veličina stabla) – 2) + 1:veličina stabla * 2 * ($clog2(veličina stabla) – 2)];

za (i = 1; i < veličina stabla; i = i + 2) početak: final_r_odd

    dodijeli r[i * 2 + 1:i * 2] = r_temp[veličina stabla * 2 * ($clog2(veličina stabla) – 2) + i * 2 + 1:veličina stabla * 2 * ($clog2(veličina stabla) – 2) + i * 2];

kraj

for (i = 2; i < Veličina stabla; i = i + 2) početak: final_r_even

    prefiks_logika f(

        .ql(r_temp[veličina stabla * 2 * ($clog2(veličina stabla) – 2) + i * 2 – 1:veličina stabla * 2 * ($clog2(veličina stabla) – 2) + i * 2 – 2]),

        .qh(r_temp[veličina stabla * 2 * ($clog2(veličina stabla) – 2) + i * 2 + 1:veličina stabla * 2 * ($clog2(veličina stabla) – 2) + i * 2]),

        .r(r[i * 2 + 1:i * 2])

    );

kraj

endgenerirati

krajnji modul

modul group_q_generation #(parametar Groupsize = `GROUPSIZE)(a, b, cin, s, qg);

unos [veličina grupe – 1:0] a;

unos [veličina grupe – 1:0] b;

unos cin;

izlaz [veličina grupe – 1:0] s;

izlaz [1:0] qg;

žica [2 * Veličina grupe – 1:0] q;

žica [veličina grupe – 1:0] c;

dodijeli c[0] = cin;

generirati

gdje u;

za (i = 0; i < veličina grupe; i = i + 1) početak: paralelni_FA_CLA_prefiks

    FA_CLA_prefiks f(

        .a(a[i]),

        .b(b[i]),

        .cin(c[i]),

        .s(s[i]),

        .q(q[i * 2 + 1:i * 2])

    );

    if (i != Groupsize – 1) početak: poseban_slučaj

        dodijeli c[i + 1] = q[i * 2 + 1] | (q[i * 2] & c[i]);

    kraj

kraj

//generacija grupe q na temelju veličine grupe

if (veličina grupe == 1) početak: case_gs1

    dodijeli qg[1] = q[1];

    dodijeli qg[0] = q[0];

end else if (Groupsize == 2) begin: case_gs2

    dodijeli qg[1] = q[3] | (q[1] & q[2]);

    dodijeli qg[0] = q[2] & q[0];

end else if (Groupsize == 4) begin: case_gs4

    dodijeli qg[1] = q[7] | (q[5] & q[6]) | (q[3] & q[6] & q[4]) | (q[1] & q[6] & q[4] & q[2]);

    dodijeli qg[0] = q[6] & q[4] & q[2] & q[0];

end else if (Groupsize == 8) begin: case_gs8

    dodijeli qg[1] = q[15] | (q[13] & q[14]) | (q[11] & q[14] & q[12]) | (q[9] & q[14] & q[12] & q[10]) | (q[7] & q[14] & q[12] & q[10] & q[8]) | (q[5] & q[14] & q[12] & q[10] & q[8] & q[6]) | (q[3] & q[14] & q[12] & q[10] & q[8] & q[6] & q[4]) | (q[1] & q[14] & q[12] & q[10] & q[8] & q[6] & q[4] & q[2]);

    dodijeli qg[0] = q[14] & q[12] & q[10] & q[8] & q[6] & q[4] & q[2] & q[0];

kraj

endgenerirati

krajnji modul

// Cin generacijska logika

modul cin_generacijska_logika(r, c0, cin);

ulaz [1:0] r;

ulaz c0;

izlaz cin;

dodijeli cin = (r[0] & c0) | r[1];

krajnji modul

// Osnovna logika za prefiksne operacije

modul prefix_logic(ql, qh, r);

unos [1:0] ql;

ulaz [1:0] qh;

izlaz [1:0] r;

dodijeli r[0] = qh[0] & ql[0];

dodijeli r[1] = (qh[0] & ql[1]) | qh[1];

krajnji modul

// Full Adder Cell s Carry Look-Ahead

modul FA_CLA_prefiks(a, b, cin, s, q);

unos a;

ulaz b;

unos cin;

izlaz s;

izlaz [1:0] q;

dodijeli q[0] = a ^ b;

dodijeli s = q[0] ^ cin;

dodijeli q[1] = a & b;

krajnji modul

Prednosti

Prednosti Brent Kung Addera uključuju sljedeće.

  • Ovo je zbrajalo male snage jer koristi minimalni krug za dobivanje rezultata.
  • To je vrlo popularan i naširoko korišten zbrajalo.
  • Ova vrsta zbrajala može se implementirati korištenjem manje modula u usporedbi s Kogge-Stone zbrajačem.
  • Projektiranje Brent-Kung zbrajalice je vrlo jednostavno.
  • Ovaj zbrajač ima manje veza s drugim modulima.
  • Ove su zbrajalice predložene uglavnom za rješavanje nedostataka Kogge-Stoneovih zbrajalica.

Nedostaci

The nedostaci Brenta Kung Addea r uključuju sljedeće.

  • Ovi zbrajači imaju veće kašnjenje i trebaju 2 log2 n − 2 logičke razine za izračunavanje svih prijenosnih bitova.
  • Glavni nedostatak ovog zbrajala je odvod koji može uzrokovati da se struja kroz zbrajalo razdvoji i postane slabija.

Brent Kung Adder aplikacije

Prijave Brenta Kung Addera uključuju sljedeće.

  • Brent–Kung zbrajalo koristi se na cjevovodni način za smanjenje potrošnje energije smanjenjem dubine kombinatorne logike i stabilizacijom kvarova.
  • Brent-Kung zbrajalo pruža izvanredan broj stupnjeva od i/p do svih o/ps ali s asimetričnim opterećenjem međustupnjeva.
  • Ovo zbrajalo može se koristiti unutar množitelja kao i drugi elementi puta podataka.

Dakle, ovo je pregled Brent kung guja , njegov rad, prednosti, nedostaci i njegove primjene. Ovo je vrlo učinkovito zbrajalo i njegova struktura izgleda kao struktura stabla koja se uglavnom koristi za aritmetičke operacije visokih performansi. Ova vrsta zbrajala je vrlo brza i fokusira se uglavnom na logiku na razini vrata. Ovo zbrajalo je dizajnirano korištenjem manjeg broja logičkih vrata. Stoga smanjuje memoriju i odgodu korištenu unutar ove arhitekture. Evo pitanja za vas, Brent kung guja poznata i kao?