Brent Kung Adder: Krets, fungerande, fördelar, nackdelar och dess tillämpningar

Prova Vårt Instrument För Att Eliminera Problem





Brent-Kung huggorm föreslogs 1982 av Hsiang Te Kung & Richard Peirce Brent. Det är en parallellprefixadderare eller trädadderare som används flitigt inom digital design på grund av sin flexibilitet. Parallella prefix adders kan byggas på flera sätt baserat på antalet logiska nivåer, logiska grindar inblandade, fan-out från varje grind & kablarna mellan nivåerna. Det finns olika typer av trädaddare tillgängliga, de grundläggande trädaddare är Sklanskym KoggeStone & Brent-Kung. Jämfört med KSA (Kogge–Stone adder) ger denna adder hög regelbundenhet till strukturen av adderaren och den har mindre ledningsblockering vilket leder till bättre prestanda & mindre erforderlig chiparea. Den här artikeln ger kort information om a Brent Kung Adder .


Vad är Brent Kung Adder?

En adderare som använder minimala kretsar för att få resultatet är känd som Brent Kung Adder och den är också känd som en lågeffektadderare eller parallelladderare. Denna adderare är avsedd att spara storleken på chippet så att tillverkningen av dessa adderare blir enklare. Denna huggorms symmetri och vanliga konstruktionsstruktur kommer att minska produktionskostnaderna avsevärt och är tillåtna att använda i pipelinetopologier. Användningen av komplementär passtransistorlogik hjälper till att förbättra designprestandan med multiplexor tillvägagångssätt i olika celldesigner.



Brent Kung Adder Circuit

Brent-kungs parallella prefix adderdiagram visas nedan som inkluderar steg 1 (förbehandlingssteg), steg 2 till 7 är överföringsgenereringssteg och steg 8 är efterbearbetning. Det är en avancerad arkitektur och är mycket enkel att konstruera och ger mindre ledningsstockning. Så de mindre ledningarna kommer att minska mängden utrymme som krävs för att utföra arkitekturen. Dessutom blir routing mycket lättare på grund av korsning (eller) överlappning av färre ledningar. Straffet kommer dock att öka i fördröjning på grund av det ökade antalet steg. Fläkten ut för denna adderare ökar, och sedan kommer fördröjningen att öka.

  Brent Kung Adder
                                                        Brent Kung Adder

Hur fungerar Brent Kung Adder?

Brent Kung Adder fungerar genom att beräkna prefixen för två bitgrupper som är användbara för att hitta 4 bitars gruppprefix. Dessa prefix används för att beräkna 8-bitarsgruppens prefix etc. Därefter kommer dessa prefix att användas för att beräkna utförandet av det specifika bitsteget. Dessa bärare används med nästa stegs Group Propagate för att beräkna det stegets Sum-bit. Brent Kung Tree använder 2log2N – 1 steg.



32-bitars Brent Kung Adder

32-bitars Brent Kung adderlayout visas nedan. I början av denna layout är grundläggande logiska grindar utformade som NAND, inverter, XOR, NOR, etc. Därefter designas de nödvändiga cellerna som svarta celler, grå celler, buffertar och PG-logik med de logiska grindarna.

  32-bitars Brent Kung Adder
                                  32-bitars Brent Kung Adder

I nedanstående 32-bitars Brent Kung-adderare används de inverterande grindarna som AOI och OAI alternativt för huvudsakligen grå och svarta celler. Så de svarta och grå cellerna representeras med gråa och svarta block medan buffertarna representeras med cirklar.

  PCBWay   Grundläggande celler i Adder
Grundläggande celler i Adder

Ingångar som A & B tillhandahålls till PG-logik som visas i blockschemat. För en 32-bitars adderare krävs 32 PG-logikblock och signalerna för utbredning (P) och generering (G) är utgångarna från detta block. Dessa signaler tillhandahålls till Brent Kung-adderarträdstrukturen. Strukturen för denna adderare inkluderar grå celler och svarta celler.

En grå cell innehåller tre ingångar och en enda utgång. Spridnings- och genereringssignalerna från det aktuella steget och genereringssignalerna från det föregående steget är ingångar medan gruppen som genererar signaler är o/p. I vilken trädstruktur som helst kommer varje steg att sluta med en grå cell och o/p för denna cell är gruppgenereringssignalen. Denna signal betraktas helt enkelt som överföringen av det steget. Den svarta cellen innehåller fyra ingångar och två utgångar. Ingångarna för denna cell är nuvarande stegs P & G-signaler & P, G-signaler från föregående steg.

En PG-logik inkluderar AND & XOR-grindar där AND-logikgrinden används för att generera G-signalen & XOR-logikgrinden tillhandahåller P-signalen. För att eliminera onödiga växelriktare används två typer av grå celler och svarta celler. De inverterande grindarna som används i en rad för den grå cellen är AOI eller AND-OR-Inverter och de inverterande grindarna för den svarta cellen inom nästa rad använder OAI eller OR-AND-Inverter. AOI-cellen använder de normala ingångarna för att ge inverterade utgångar medan OAI använder inverterade ingångar för att tillhandahålla normala utgångar.

Brent Kung Adder Operation

Brent Kung adderare är en parallell prefixadderare som används för drift av högpresterande addering. Denna adderare ser ut som en trädstruktur som utför den aritmetiska operationen. Denna adderare inkluderar svarta celler och grå celler. Varje svart cell har två AND-grindar och en ELLER-grind och varje grå cell har bara en OCH-grind.

Brent-kung huggorm inkluderar två steg; förbearbetningsstadiet & generationsstadiet. I det första steget kommer generera och spridas från varje par av ingångar. Här tillhandahåller propagatet en 'XOR'-operation för inmatningsbitar medan genererar tillhandahåller en 'AND'-operation för inmatningsbitar. Spridning och generering av 'Pi' och 'Gi' ges nedan.

Pi = Ai XOR Bi och Gi = Ai OCH Bi.

I det andra steget kommer överföringen att genereras för varje bit som är känd som bär generera 'Cg' och bär generera för varje bit är känd som bär generera 'Cp'. För vidare operation kommer carry propagate & carry generera att genereras. Den sista cellen tillgänglig inom varje bit fungerar ger bära. Så den sista bitöverföringen hjälper till att summera nästa bit samtidigt till den sista biten. Bär generera & propagate ges som;

Cp = P1 OCH P0 och Cg=G1 ELLER (P1 OCH G0)

Den används huvudsakligen för additionsoperationen av två trettiotvå bitar och varje bit upplever förbearbetningssteget och genereringssteget och ger sedan den slutliga summan.

De primära inmatningsbitarna går under förbehandlingssteget och de producerar fortplantning och genererar. Så dessa sprider sig såväl som genererar genomgår generationsstadiet genererar bär genererar & bär sprider och ger slutsumma. Brent-kung-adderaren steg-för-steg-processen visas nedan.

  Effektivt blockdiagram
Effektivt blockdiagram

Brent-kung-adderarrangemanget ser ut som en trädstruktur och det är höghastighetsadderaren som riktar sig mot logik på grindnivå. Denna adderare kan utformas med en minskning av antalet logiska grindar. Således minskar det fördröjningen och minnet som används inom denna arkitektur.

Brent Kung Adder Verilog-kod

Verilogkoden för Brent Kung adder visas nedan.

`definiera INPUTSIZE 64 //ställ in ingångsstorleken n

`definiera GROUPSIZE 8 //ställ in gruppstorleken = 1, 2, 4 eller 8

 

modul Brent_Kung_Adder(A, B, S);

in [`INPUTSIZE – 1:0] A;

in [`INPUTSIZE – 1:0] B;

utgång [`INPUTSIZE:0] S;

tråd [`INPUTSIZE / `GROUPSIZE * 2 – 1:0] r_temp;

tråd [`INPUTSIZE / `GROUPSIZE * 2 – 1:0] r;

tråd [`INPUTSIZE / `GROUPSIZE:0] cin;

tråd [`INPUTSIZE / `GROUPSIZE * 2 – 1:0] q;

tilldela cin[0] = 1'b0;

generera

genvar i;

för (i = 0; i < `INPUTSIZE / `GROUPSIZE; i = i + 1) börjar: parallell_FA_CLA_prefix

    group_q_generation #(.Groupsize(`GROUPSIZE))

    f(

        .a(A[`GROUPSIZE * (i + 1) – 1:`GROUPSIZE * i]),

        .b(B[`GROUPSIZE * (i + 1) – 1:`GROUPSIZE * i]),

        .cin(cin[i]),

        .s(S[`GROUPSIZE * (i + 1) – 1:`GROUPSIZE * i]),

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

    );

slutet

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

t1(

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

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

);

parallell_prefix_träd_andra_halvan #(.Treesize(`INPUTSIZE / `GROUPSIZE))

t2(

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

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

);

för (i = 0; i < `INPUTSIZE / `GROUPSIZE; i = i + 1) börjar: cin_generation

    cin_generation_logic f(

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

        .c0(1'b0),

        .cin(cin[i + 1])

    );

slutet

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

slutgenerera

slutmodul

// Första halvan av parallellt prefixträd

modul parallell_prefix_träd_första_halvan #(parameter Treesize = `INPUTSIZE / `GROUPSIZE)(q, r);

input [Trästorlek * 2 – 1:0] q;

utgång [Trästorlek * 2 – 1:0] r;

generera

genvar i;

if (Trästorlek == 2) börjar: trivial_case

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

    prefix_logic f(

        .ql(q[1:0]),

        .qh(q[3:2]),

        .r(r[3:2])

    );

slut annat börja: rekursivt_fall

    tråd [Trästorlek * 2 – 1:0] r_temp;

    parallell_prefix_träd_första_halvan #(.Treesize(Treesize / 2))

    rekursion_lsbh(

        .q(q[Trädstorlek – 1:0]),

        .r(r_temp[Treesize – 1:0])

    );

    parallell_prefix_träd_första_halvan #(.Treesize(Treesize / 2))

    rekursion_msbh(

        .q(q[Treesize * 2 – 1:Treesize]),

        .r(r_temp[Treesize * 2 – 1:Treesize])

    );

    för (i = 0; i < Trädstorlek * 2; i = i + 2) börjar: parallellstygn_upp

        om (i != Trädstorlek * 2 – 2) börjar: parallell_stitch_up_pass

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

        end else start: parallell_söm_upp_producera

            prefix_logic f(

                .ql(r_temp[Treesize – 1:Treesize – 2]),

                .qh(r_temp[Treesize * 2 – 1:Treesize * 2 – 2]),

                .r(r[Treesize * 2 – 1:Treesize * 2 – 2])

            );

        slutet

    slutet

slutet

slutgenerera

slutmodul

// Andra halvan av parallellt prefixträd

modulen parallell_prefix_träd_andra_halvan #(parameter Trädstorlek = `INPUTSIZE / `GROUPSIZE)(q, r);

input [Trästorlek * 2 – 1:0] q;

utgång [Trästorlek * 2 – 1:0] r;

tråd [Treesize * 2 * ($clog2(Treesize) – 1) – 1:0] r_temp;

tilldela r_temp[Treesize * 2 – 1:0] = q[Treesize * 2 – 1:0];

generera

genvar i, j;

för (i = 0; i < $clog2(Treesize) – 2; i = i + 1) start: second_half_level

    tilldela r_temp[Treesize * 2 * (i + 1) + ((Treesize / (2 ** i)) – 1 – 2 ** ($clog2(Treesize / 4) – i)) * 2 – 1:Treesize * 2 * (i + 1)] = r_temp[Treesize * 2 * i + ((Treesize / (2 ** i)) – 1 – 2 ** ($clog2(Treesize / 4) – i)) * 2 – 1: Trädstorlek * 2 * i];

    för (j = (Treesize / (2 ** i)) – 1 – 2 ** ($clog2(Treesize / 4) – i); j < Treesize; j = j + 2 ** ($clog2(Treesize / 2) ) – i)) börjar: andra_halvan_nivå_logik

        prefix_logic f(

            .ql(r_temp[Treesize * 2 * i + (j – 2 ** ($clog2(Treesize / 4) – i)) * 2 + 1:Treesize * 2 * i + (j – 2 ** ($clog2( Trädstorlek / 4) – i)) * 2]),

            .qh(r_temp[Trädstorlek * 2 * i + j * 2 + 1:Trädstorlek * 2 * i + j * 2]),

            .r(r_temp[Trädstorlek * 2 * (i + 1) + j * 2 + 1:Trädstorlek * 2 * (i + 1) + j * 2])

        );

        if (j != Treesize – 1 – 2 ** ($clog2(Treesize / 4) – i)) börjar: second_half_level_direct_connect

            tilldela r_temp[Treesize * 2 * (i + 1) + (j + 2 ** ($clog2(Treesize / 2) – i)) * 2 – 1:Treesize * 2 * (i + 1) + j * 2 + 2] = r_temp[Treesize * 2 * i + (j + 2 ** ($clog2(Treesize / 2) – i)) * 2 – 1:Treesize * 2 * i + j * 2 + 2];

        slutet

    slutet

    tilldela r_temp[Treesize * 2 * (i + 2) – 1:Treesize * 2 * (i + 2) – (2 ** ($clog2(Treesize / 4) – i)) * 2] = r_temp[Treesize * 2 * (i + 1) – 1:Treesize * 2 * (i + 1) – (2 ** ($clog2(Treesize / 4) – i)) * 2];

slutet

tilldela r[1:0] = r_temp[Treesize * 2 * ($clog2(Treesize) – 2) + 1:Treesize * 2 * ($clog2(Treesize) – 2)];

för (i = 1; i < Trädstorlek; i = i + 2) börjar: final_r_odd

    tilldela r[i * 2 + 1:i * 2] = r_temp[Treesize * 2 * ($clog2(Treesize) – 2) + i * 2 + 1:Treesize * 2 * ($clog2(Treesize) – 2) + i * 2];

slutet

för (i = 2; i < Trädstorlek; i = i + 2) börjar: final_r_even

    prefix_logic f(

        .ql(r_temp[Treesize * 2 * ($clog2(Treesize) – 2) + i * 2 – 1:Treesize * 2 * ($clog2(Treesize) – 2) + i * 2 – 2]),

        .qh(r_temp[Treesize * 2 * ($clog2(Treesize) – 2) + i * 2 + 1:Treesize * 2 * ($clog2(Treesize) – 2) + i * 2]),

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

    );

slutet

slutgenerera

slutmodul

module group_q_generation #(parameter Groupsize = `GROUPSIZE)(a, b, cin, s, qg);

input [Gruppstorlek – 1:0] a;

input [Gruppstorlek – 1:0] b;

ingång cin;

output [Gruppstorlek – 1:0] s;

output [1:0] qg;

tråd [2 * Gruppstorlek – 1:0] q;

tråd [Gruppstorlek – 1:0] c;

tilldela c[0] = cin;

generera

genvar i;

för (i = 0; i < Gruppstorlek; i = i + 1) börjar: parallell_FA_CLA_prefix

    FA_CLA_prefix f(

        .a(a[i]),

        .b(b[i]),

        .cin(c[i]),

        .s(s[i]),

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

    );

    if (i != Gruppstorlek – 1) börjar: special_case

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

    slutet

slutet

//grupp q generation baserad på gruppstorleken

if (Gruppstorlek == 1) börjar: case_gs1

    tilldela qg[1] = q[1];

    tilldela qg[0] = q[0];

end else if (Gruppstorlek == 2) börjar: case_gs2

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

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

end else if (Gruppstorlek == 4) börjar: case_gs4

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

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

end else if (Gruppstorlek == 8) börjar: case_gs8

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

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

slutet

slutgenerera

slutmodul

// Cin generation logik

modul cin_generation_logic(r, c0, cin);

ingång [1:0] r;

ingång c0;

utgång cin;

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

slutmodul

// Grundläggande logik för prefixoperationer

modulprefix_logic(ql, qh, r);

input [1:0] ql;

inmatning [1:0] qh;

utsignal [1:0] r;

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

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

slutmodul

// Full Adder Cell med Carry Look-Ahead

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

mata in a;

ingång b;

ingång cin;

utgång s;

utsignal [1:0] q;

tilldela q[0] = a ^ b;

tilldela s = q[0] ^ cin;

tilldela q[1] = a & b;

slutmodul

Fördelar

Fördelarna med Brent Kung Adder inkluderar följande.

  • Detta är en lågeffekt adderare eftersom den använder en minimal krets för att få resultatet.
  • Det är en mycket populär och flitigt använd huggorm.
  • Denna typ av adderare kan implementeras genom att använda färre moduler jämfört med en Kogge-Stone adderare.
  • Brent-Kung huggormdesign är mycket lätt.
  • Denna adderare har färre anslutningar till andra moduler.
  • Dessa huggormar föreslogs främst för att lösa nackdelarna med Kogge-Stone huggormar.

Nackdelar

De nackdelar med Brent Kung Adde r inkludera följande.

  • Dessa adderare har större fördröjning och de behöver 2 log2 n − 2 logiska nivåer för att beräkna alla bärbitar.
  • Den största nackdelen med denna adderare är fanout som kan orsaka att strömmen sprids genom adderaren att delas upp och blir svagare.

Brent Kung Adder-applikationer

Tillämpningarna av Brent Kung Adder inkluderar följande.

  • En Brent-Kung-adderare används på ett pipeline-sätt för att minska energiförbrukningen genom att minska det kombinatoriska logiska djupet och stabilisering av fel.
  • Brent-Kung adder ger ett enastående antal steg från i/p till alla o/ps men med asymmetrisk mellanstadsbelastning.
  • Denna adderare kan användas inom multiplikatorn såväl som andra datavägelement.

Detta är alltså en översikt över Brent kung huggorm , dess funktion, fördelar, nackdelar och dess tillämpningar. Detta är en mycket effektiv adderare och dess struktur ser ut som en trädstruktur som huvudsakligen används för högpresterande aritmetiska operationer. Denna typ av adderare är mycket snabb och fokuserar främst på gate-nivå logiken. Denna adderare är designad genom att använda mindre antal logiska grindar. Således minskar det minnet och fördröjningen som används inom denna arkitektur. Här är en fråga till dig, Brent kung huggorm även känd som?