Sčítačku Brent-Kung navrhli v roku 1982 Hsiang Te Kung a Richard Peirce Brent. Je to sčítačka paralelnej predpony alebo stromová sčítačka, ktorá sa vďaka svojej flexibilite široko používa v digitálnom dizajne. Paralelné sčítačky prefixov môžu byť zostavené niekoľkými spôsobmi na základe počtu logických úrovní, logické brány zapojený, ventilátorový výstup z každej brány a vedenie medzi úrovňami. K dispozícii sú rôzne typy stromových zmijí, základné zmije sú Sklanskym KoggeStone & Brent-Kung, V porovnaní s KSA (Kogge–Stone adder), táto zmija poskytuje vysokú pravidelnosť štruktúry zmije a menej blokuje vedenie. čo vedie k lepšiemu výkonu a menšej potrebnej ploche čipu. Tento článok poskytuje stručné informácie o a Brent Kung Adder .
Čo je Brent Kung Adder?
Sčítačka, ktorá na získanie výsledku používa minimálny obvod, je známa ako Brent Kung Adder a je tiež známa ako sčítačka s nízkym výkonom alebo paralelná sčítačka. Táto sčítačka je určená na úsporu veľkosti čipu, takže výroba týchto sčítačiek bude jednoduchšia. Symetria a zvyčajná konštrukčná štruktúra tohto sčítača výrazne znížia výrobné náklady a je možné ich použiť v potrubných topológiách. Využitie komplementárnej priepustnej tranzistorovej logiky pomáha pri zvyšovaní konštrukčného výkonu s multiplexer prístup v rôznych dizajnoch buniek.
Obvod Brent Kung Adder
Schéma sčítačky paralelných predpôn Brent-kung je znázornená nižšie, ktorá zahŕňa fázu 1 (štádium predbežného spracovania), fázy 2 až 7 sú štádiá generovania prenosu a štádium 8 je následné spracovanie. Ide o pokročilú architektúru a je veľmi jednoduchá na konštrukciu a poskytuje menšie preťaženie elektroinštalácie. Menej zapojenia teda zníži množstvo požadovaného priestoru na realizáciu architektúry. Okrem toho je smerovanie oveľa jednoduchšie vďaka kríženiu (alebo) prekrývaniu menšieho počtu vodičov. Postih sa však zvýši za meškanie z dôvodu zvýšeného počtu etáp. Zväčší sa výstup ventilátora pre túto sčítačku a potom sa predĺži oneskorenie.

Ako funguje Brent Kung Adder?
Brent Kung Adder funguje tak, že vypočítava predpony pre dve skupiny bitov, ktoré sú užitočné pri hľadaní predpôn 4 bitových skupín. Tieto prefixy sa používajú na výpočet prefixov 8-bitovej skupiny atď. Potom sa tieto prefixy použijú na výpočet vykonania konkrétnej bitovej fázy. Tieto prenosy sa používajú s funkciou Group Propagate ďalšej fázy na výpočet súčtu bitu tejto fázy. Brent Kung Tree používa 2log2N – 1 stupeň.
32-bitový Brent Kung Adder
Rozloženie 32-bitovej sčítačky Brent Kung je zobrazené nižšie. Na začiatku tohto rozloženia sú navrhnuté základné logické hradla ako NAND, invertor, XOR, NOR atď. Potom sú potrebné bunky ako čierne bunky, sivé bunky, vyrovnávacie pamäte a PG logika navrhnuté s logickými hradlami.

V nižšie uvedenej 32-bitovej sčítačke Brent Kung sa invertujúce hradla ako AOI a OAI alternatívne používajú hlavne pre sivé a čierne bunky. Takže čierne a sivé bunky sú znázornené sivými a čiernymi blokmi, zatiaľ čo vyrovnávacie pamäte sú znázornené krúžkami.

Vstupy ako A a B sú poskytované logike PG, ktorá je znázornená v blokovej schéme. Pre 32-bitovú sčítačku je potrebných 32 logických blokov PG a výstupmi tohto bloku sú signály šírenia (P) a generovania (G). Tieto signály sú poskytované stromovej štruktúre Brent Kung. Štruktúra tejto sčítačky zahŕňa sivé bunky a čierne bunky.
Sivá bunka obsahuje tri vstupy a jeden výstup. Šírenie a generovanie signálov zo súčasnej fázy a generovanie signálov z predchádzajúcej fázy sú vstupy, zatiaľ čo signály generované skupinou sú o/p. V akejkoľvek stromovej štruktúre bude každá fáza ukončená sivou bunkou a o/p tejto bunky je signál generovaný skupinou. Tento signál sa považuje jednoducho za prenos tohto štádia. Čierna bunka obsahuje štyri vstupy a dva výstupy. Vstupy pre túto bunku sú signály P & G súčasnej fázy a signály P, G z predchádzajúcej fázy.
Logika PG obsahuje hradla AND & XOR, kde sa logické hradlo AND používa na generovanie signálu G a logické hradlo XOR poskytuje signál P. Na odstránenie zbytočných invertorov sa používajú dva druhy šedých buniek a čiernych buniek. Invertujúce hradlá použité v jednom rade pre šedú bunku sú AOI alebo AND-OR-Inverter a invertujúce brány pre čiernu bunku v ďalšom riadku využívajú OAI alebo OR-AND-Invertor. Bunka AOI používa normálne vstupy na poskytovanie invertovaných výstupov, zatiaľ čo OAI používa invertované vstupy na poskytovanie normálnych výstupov.
Operácia Brent Kung Adder
Sčítačka Brent Kung je paralelná sčítačka prefixov používaná na operáciu vysokovýkonného sčítania. Táto sčítačka vyzerá ako stromová štruktúra, ktorá vykonáva aritmetickú operáciu. Táto sčítačka obsahuje čierne bunky a sivé bunky. Každá čierna bunka má dve hradlá AND a jedno hradlo OR a každá šedá bunka má iba jedno hradlo AND.
Sčítačka Brent-kung zahŕňa dva stupne; štádium predspracovania a štádium generovania. V prvej fáze bude generovanie a šírenie z každého páru vstupov. Tu propagate poskytuje operáciu „XOR“ pre vstupné bity, zatiaľ čo generovanie poskytuje operáciu „AND“ pre vstupné bity. Propagovať a generovať ako „Pí“ a „Gi“ sú uvedené nižšie.
Pi = Ai XOR Bi a Gi = Ai AND Bi.
V druhej fáze sa prenos vygeneruje pre každý bit, ktorý je známy ako generovanie prenosu „Cg“ a prenos sa šíri pre každý bit, ktorý je známy ako generovanie prenosu „Cp“. Pre ďalšiu operáciu sa vygeneruje carry propagate & carry. Konečná bunka dostupná v rámci operácie s každým bitom poskytuje prenos. Takže prenos posledného bitu pomôže súčtu nasledujúceho bitu súbežne až po posledný bit. Generovanie a šírenie prenášania sú uvedené ako;
Cp = P1 A P0 a Cg = G1 ALEBO (P1 A G0)
Používa sa hlavne na operáciu sčítania dvoch tridsaťdva bitov a každý bit prechádza fázou predspracovania a fázy generovania, potom poskytuje konečný súčet.
Primárne vstupné bity idú pod fázu predbežného spracovania a produkujú sa šíriť a generovať. Takže tieto sa šíria, rovnako ako generujú, prechádza generačnou fázou generuje generuje generuje a prenáša sa šíri a poskytuje konečný súčet. Postupný proces sčítačky Brent-kung je uvedený nižšie.

Usporiadanie sčítačky Brent-kung vyzerá ako stromová štruktúra a je to vysokorýchlostná sčítačka, ktorá sa zameriava na logiku na úrovni brány. Táto sčítačka môže byť navrhnutá so znížením počtu logických obvodov. Znižuje teda oneskorenie a pamäť využívanú v rámci tejto architektúry.
Brent Kung Adder Verilog Code
Verilog kód sčítačky Brent Kung je uvedený nižšie.
`definovať INPUTSIZE 64 //nastaviť veľkosť vstupu n
`definovať GROUPSIZE 8 //nastaviť veľkosť skupiny = 1, 2, 4 alebo 8
modul Brent_Kung_Adder(A, B, S);
vstup [`INPUTSIZE – 1:0] A;
vstup [`INPUTSIZE – 1:0] B;
výstup [`INPUTSIZE:0] S;
drôt [`INPUTSIZE / `GROUPSIZE * 2 – 1:0] r_temp;
drôt [`INPUTSIZE / `GROUPSIZE * 2 – 1:0] r;
drôt [`INPUTSIZE / `GROUPSIZE:0] cin;
drôt [`INPUTSIZE / `GROUPSIZE * 2 – 1:0] q;
priradiť cin[0] = 1’b0;
generovať
kde v;
for (i = 0; i < `INPUTSIZE / `GROUPSIZE; i = i + 1) begin: parallel_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])
);
koniec
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) begin: cin_generation
cin_generation_logic f(
.r(r[2 * i + 1:2 * i]),
.c0(1’b0),
.cin(cin[i + 1])
);
koniec
priradiť S[`INPUTSIZE] = cin[`INPUTSIZE / `GROUPSIZE];
endgenerate
koncový modul
// Prvá polovica stromu paralelných predpôn
module parallel_prefix_tree_first_half #(parameter Treesize = `INPUTSIZE / `GROUPSIZE)(q, r);
vstup [veľkosť stromu * 2 – 1:0] q;
výstup [veľkosť stromu * 2 – 1:0] r;
generovať
kde v;
if (veľkosť stromu == 2) begin: trivial_case
priradiť r[1:0] = q[1:0];
prefix_logic f(
.ql(q[1:0]),
.qh(q[3:2]),
.r(r[3:2])
);
end else begin: recursive_case
drôt [veľkosť stromu * 2 – 1:0] r_temp;
parallel_prefix_tree_first_half #(.veľkosť stromu(veľkosť stromu / 2))
recursion_lsbh(
.q(q[veľkosť stromu – 1:0]),
.r(r_temp[veľkosť stromu – 1:0])
);
parallel_prefix_tree_first_half #(.veľkosť stromu(veľkosť stromu / 2))
recursion_msbh(
.q(q[veľkosť stromu * 2 – 1:veľkosť stromu]),
.r(r_temp[veľkosť stromu * 2 – 1:veľkosť stromu])
);
for (i = 0; i < Trees Size * 2; i = i + 2) begin: parallel_stitch_up
if (i != Treesize * 2 – 2) begin: parallel_stitch_up_pass
priradiť r[i + 1:i] = r_temp[i + 1:i];
end else begin: parallel_stitch_up_produce
prefix_logic f(
.ql(r_temp[veľkosť stromu – 1:veľkosť stromu – 2]),
.qh(r_temp[veľkosť stromu * 2 – 1:veľkosť stromu * 2 – 2]),
.r(r[veľkosť stromu * 2 – 1:veľkosť stromu * 2 – 2])
);
koniec
koniec
koniec
endgenerate
koncový modul
// Druhá polovica stromu paralelných predpôn
module parallel_prefix_tree_second_half #(parameter Treesize = `INPUTSIZE / `GROUPSIZE)(q, r);
vstup [veľkosť stromu * 2 – 1:0] q;
výstup [veľkosť stromu * 2 – 1:0] r;
drôt [veľkosť stromu * 2 * ($clog2(veľkosť stromu) – 1) – 1:0] r_temp;
priradiť r_temp[veľkosť stromu * 2 – 1:0] = q[veľkosť stromu * 2 – 1:0];
generovať
genvar i, j;
for (i = 0; i < $clog2(veľkosť stromu) – 2; i = i + 1) begin: second_half_level
priradiť r_temp[veľkosť stromu * 2 * (i + 1) + ((veľkosť stromu / (2 ** i)) – 1 – 2 ** ($clog2(veľkosť stromu / 4) – i)) * 2 – 1:veľkosť stromu * 2 * (i + 1)] = r_temp[veľkosť stromu * 2 * i + ((veľkosť stromu / (2 ** i)) – 1 – 2 ** ($clog2(veľkosť stromu / 4) – i)) * 2 – 1: Veľkosť stromu * 2 * i];
for (j = (veľkosť stromu / (2 ** i)) – 1 – 2 ** ($clog2(veľkosť stromu / 4) – i); j
prefix_logic f(
.ql(r_temp[veľkosť stromu * 2 * i + (j – 2 ** ($clog2(veľkosť stromu / 4) – i)) * 2 + 1:veľkosť stromu * 2 * i + (j – 2 ** ($clog2( Veľkosť stromu / 4) – i)) * 2]),
.qh(r_temp[veľkosť stromu * 2 * i + j * 2 + 1:veľkosť stromu * 2 * i + j * 2]),
.r(r_temp[veľkosť stromu * 2 * (i + 1) + j * 2 + 1:veľkosť stromu * 2 * (i + 1) + j * 2])
);
if (j != Stromová veľkosť – 1 – 2 ** ($clog2(veľkosť stromu / 4) – i)) begin: second_half_level_direct_connect
priradiť r_temp[veľkosť stromu * 2 * (i + 1) + (j + 2 ** ($clog2(veľkosť stromu / 2) – i)) * 2 – 1:veľkosť stromu * 2 * (i + 1) + j * 2 + 2] = r_temp[Veľkosť stromu * 2 * i + (j + 2 ** ($clog2(Veľkosť stromu / 2) – i)) * 2 – 1:Veľkosť stromu * 2 * i + j * 2 + 2];
koniec
koniec
priradiť r_temp[veľkosť stromu * 2 * (i + 2) – 1:veľkosť stromu * 2 * (i + 2) – (2 ** ($clog2(veľkosť stromu / 4) – i)) * 2] = r_temp[veľkosť stromu * 2 * (i + 1) – 1:Veľkosť stromu * 2 * (i + 1) – (2 ** ($clog2(veľkosť stromu / 4) – i)) * 2];
koniec
priradiť r[1:0] = r_temp[veľkosť stromu * 2 * ($clog2(veľkosť stromu) – 2) + 1:veľkosť stromu * 2 * ($clog2(veľkosť stromu) – 2)];
for (i = 1; i < Treesize; i = i + 2) begin: final_r_odd
priradiť r[i * 2 + 1:i * 2] = r_temp[veľkosť stromu * 2 * ($clog2(veľkosť stromu) – 2) + i * 2 + 1:veľkosť stromu * 2 * ($clog2(veľkosť stromu) – 2) + i*2];
koniec
for (i = 2; i < Treesize; i = i + 2) begin: final_r_even
prefix_logic f(
.ql(r_temp[veľkosť stromu * 2 * ($clog2(veľkosť stromu) – 2) + i * 2 – 1:veľkosť stromu * 2 * ($clog2(veľkosť stromu) – 2) + i * 2 – 2]),
.qh(r_temp[veľkosť stromu * 2 * ($clog2(veľkosť stromu) – 2) + i * 2 + 1:veľkosť stromu * 2 * ($clog2(veľkosť stromu) – 2) + i * 2]),
.r(r[i * 2 + 1:i * 2])
);
koniec
endgenerate
koncový modul
modul group_q_generation #(parameter Groupsize = `GROUPSIZE)(a, b, cin, s, qg);
vstup [Veľkosť skupiny – 1:0] a;
vstup [Veľkosť skupiny – 1:0] b;
vstup cin;
výstup [Veľkosť skupiny – 1:0] s;
výstup [1:0] qg;
drôt [2 * Veľkosť skupiny – 1:0] q;
drôt [veľkosť skupiny – 1:0] c;
priradiť c[0] = cin;
generovať
kde v;
for (i = 0; i < Groupsize; i = i + 1) begin: parallel_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 != Groupsize – 1) begin: special_case
priradiť c[i + 1] = q[i * 2 + 1] | (q[i*2] & c[i]);
koniec
koniec
//generovanie q skupiny na základe veľkosti skupiny
if (veľkosť skupiny == 1) begin: case_gs1
priradiť qg[1] = q[1];
priradiť qg[0] = q[0];
end else if (Groupsize == 2) begin: case_gs2
priradiť qg[1] = q[3] | (q[1] & q[2]);
priradiť qg[0] = q[2] & q[0];
end else if (Groupsize == 4) begin: case_gs4
priradiť qg[1] = q[7] | (q[5] & q[6]) | (q[3] & q[6] & q[4]) | (q[1] & q[6] & q[4] & q[2]);
priraďte qg[0] = q[6] & q[4] & q[2] & q[0];
end else if (veľkosť skupiny == 8) begin: case_gs8
priradiť 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]);
priraďte qg[0] = q[14] & q[12] & q[10] & q[8] & q[6] & q[4] & q[2] & q[0];
koniec
endgenerate
koncový modul
// Logika generovania Cin
modul cin_generation_logic(r, c0, cin);
vstup [1:0] r;
vstup c0;
výstup cin;
priradiť cin = (r[0] & c0) | r[1];
koncový modul
// Základná logika pre operácie s predponami
modul prefix_logic(ql, qh, r);
vstup [1:0] ql;
vstup [1:0] qh;
výstup [1:0] r;
priradiť r[0] = qh[0] & ql[0];
priradiť r[1] = (qh[0] & ql[1]) | qh[1];
koncový modul
// Úplná sčítacia bunka s funkciou Carry Look-Ahead
modul FA_CLA_prefix(a, b, cin, s, q);
vstup a;
vstup b;
vstup cin;
výstup s;
výstup [1:0] q;
priradiť q[0] = a ^ b;
priradiť s = q[0] ^ cin;
priradiť q[1] = a & b;
koncový modul
Výhody
Výhody Brent Kung Adder zahŕňajú nasledujúce.
- Toto je sčítačka s nízkym výkonom, pretože na získanie výsledku používa minimálny obvod.
- Je to veľmi populárna a široko používaná sčítačka.
- Tento druh sčítačky môže byť implementovaný použitím menšieho počtu modulov v porovnaní s Kogge-Stone sčítačkou.
- Navrhovanie sčítačky Brent-Kung je veľmi jednoduché.
- Táto sčítačka má menej spojení s inými modulmi.
- Tieto sčítačky boli navrhnuté hlavne na vyriešenie nedostatkov sčítačiek Kogge-Stone.
Nevýhody
The nevýhody Brent Kung Adde r zahŕňajú nasledujúce.
- Tieto sčítačky majú väčšie oneskorenie a potrebujú 2 log2 n − 2 logické úrovne na výpočet všetkých prenosových bitov.
- Hlavnou nevýhodou tejto sčítačky je fanout, ktorý môže spôsobiť, že šírenie prúdu cez sčítačku sa rozdelí a zoslabne.
Aplikácie Brent Kung Adder
Aplikácie Brent Kung Adder zahŕňajú nasledujúce.
- Sčítačka Brent-Kung sa používa v potrubí na zníženie spotreby energie znížením hĺbky kombinatorickej logiky a stabilizáciou porúch.
- Sčítačka Brent-Kung poskytuje vynikajúci počet stupňov od i/p po všetky o/ps, ale s asymetrickým zaťažením medzistupňov.
- Túto sčítačku možno použiť v rámci multiplikátora, ako aj iných prvkov dátovej cesty.
Teda toto je prehľad Brent kung zmije , jeho fungovanie, výhody, nevýhody a jeho aplikácie. Ide o veľmi efektívnu sčítačku a jej štruktúra vyzerá ako stromová štruktúra používaná hlavne na výkonné aritmetické operácie. Tento typ sčítačky je veľmi rýchly a zameriava sa hlavne na logiku na úrovni brány. Táto sčítačka je navrhnutá s použitím menšieho počtu logických brán. Znižuje teda pamäť a oneskorenie využívané v rámci tejto architektúry. Tu je otázka pre vás, Brent kung adder tiež známy ako?