Brent Kung Adder: Devre, Çalışma, Avantajlar, Dezavantajlar ve Uygulamaları

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Brent-Kung toplayıcısı 1982'de Hsiang Te Kung ve Richard Peirce Brent tarafından önerildi. Esnekliği nedeniyle Dijital Tasarımda yaygın olarak kullanılan bir Paralel Önek toplayıcı veya ağaç toplayıcıdır. Paralel Önek Toplayıcılar, mantık düzeylerinin sayısına bağlı olarak çeşitli şekillerde oluşturulabilir. mantık kapıları her kapıdan çıkış ve katlar arasındaki kablolama dahil. Farklı türde ağaç toplayıcılar mevcuttur; temel Ağaç toplayıcılar Sklanskym KoggeStone ve Brent-Kung'dur. KSA (Kogge-Stone toplayıcı) ile karşılaştırıldığında, bu toplayıcı, toplayıcının yapısına yüksek düzeyde düzenlilik sağlar ve daha az kablo engellemeye sahiptir. bu da daha iyi performansa ve daha az gerekli talaş alanına yol açar. Bu makale bir konu hakkında kısa bilgi sağlar. Brent Kung Toplayıcı .


Brent Kung Adder nedir?

Sonucu elde etmek için minimum devreyi kullanan toplayıcı, Brent Kung Toplayıcı olarak bilinir ve aynı zamanda düşük güçlü toplayıcı veya paralel toplayıcı olarak da bilinir. Bu toplayıcının amacı çipin boyutundan tasarruf etmektir, böylece bu toplayıcıların üretimi daha kolay olacaktır. Bu toplayıcının simetrisi ve olağan yapı yapısı, üretim maliyetlerini büyük ölçüde azaltacak ve ardışık düzen topolojilerinde kullanılmasına izin verecektir. Tamamlayıcı geçiş transistör mantığının kullanılması, tasarım performansının arttırılmasına yardımcı olur. çoklayıcı Çeşitli hücre tasarımlarında yaklaşım.



Brent Kung Toplayıcı Devresi

Aşama 1'i (ön işleme aşaması), aşama 2'den 7'ye kadar olan aşamaları taşıma oluşturma aşamalarını ve aşama 8'i işlem sonrası içeren brent-kung paralel önek toplayıcı diyagramı aşağıda gösterilmiştir. Gelişmiş bir mimaridir ve inşa edilmesi çok basittir ve daha az kablo tıkanıklığı sağlar. Dolayısıyla daha az kablolama, mimariyi yürütmek için gereken alan miktarını azaltacaktır. Ek olarak, daha az sayıda kablonun kesişmesi (veya) üst üste gelmesi nedeniyle yönlendirme çok daha kolay hale gelir. Ancak aşama sayısının artması nedeniyle gecikme cezası artacak, Bu toplayıcının fan çıkışı artırılacak ve daha sonra gecikme artırılacaktır.

  Brent Kung Toplayıcı
                                                        Brent Kung Toplayıcı

Brent Kung Adder Nasıl Çalışır?

Brent Kung Adder, 4 bitlik grup öneklerini bulmada yararlı olan iki bit grubu için önekleri hesaplayarak çalışır. Bu önekler, 8 bitlik grubun öneklerini vb. hesaplamak için kullanılır. Bundan sonra bu önekler, belirli bit aşamasının gerçekleştirilmesini hesaplamak için kullanılacaktır. Bu taşımalar, bir sonraki aşamanın Grup Yayılımı ile o aşamanın Toplam bitini hesaplamak için kullanılır. Brent Kung Ağacı 2log2N – 1 aşamasını kullanıyor.



32-bit Brent Kung Toplayıcı

32 bit Brent Kung toplayıcı düzeni aşağıda gösterilmiştir. Bu düzenin başlangıcında NAND, invertör, XOR, NOR vb. gibi temel mantık kapıları tasarlanmaktadır. Daha sonra mantık kapıları ile siyah hücreler, gri hücreler, tamponlar ve PG mantığı gibi gerekli hücreler tasarlanmaktadır.

  32-bit Brent Kung Toplayıcı
                                  32-bit Brent Kung Toplayıcı

Aşağıdaki 32 bitlik Brent Kung toplayıcıda, AOI ve OAI gibi evirici kapılar alternatif olarak çoğunlukla gri ve siyah hücreler için kullanılır. Yani siyah ve gri hücreler gri ve siyah bloklarla temsil edilirken tamponlar dairelerle temsil edilir.

  PCB Yolu   Toplayıcıdaki Temel Hücreler
Toplayıcıdaki Temel Hücreler

A ve B gibi girişler blok diyagramda gösterilen PG mantığına sağlanmaktadır. 32 bitlik bir toplayıcı için 32 PG mantık bloğu gereklidir ve yayma (P) ve üretme (G) sinyalleri bu bloğun çıkışlarıdır. Bu sinyaller Brent Kung toplayıcı ağaç yapısına sağlanır. Bu toplayıcının yapısı gri hücreleri ve siyah hücreleri içerir.

Gri hücrede üç giriş ve tek çıkış bulunur. Mevcut aşamadan sinyallerin yayılması ve üretilmesi ve önceki aşamadan sinyallerin üretilmesi girdilerdir, oysa grup sinyal üretme işlemi o/p'dir. Herhangi bir ağaç yapısında, her aşama bir gri hücre ile bitecektir ve bu hücrenin o/p'si grup üreten sinyaldir. Bu sinyal basitçe o aşamanın taşınması olarak kabul edilir. Siyah hücre dört giriş ve iki çıkış içerir. Bu hücrenin girdileri mevcut aşamanın P & G sinyalleri ve önceki aşamadan gelen P, G sinyalleridir.

Bir PG mantığı, AND mantık kapısının G sinyalini oluşturmak için kullanıldığı ve XOR mantık kapısının P sinyalini sağladığı AND ve XOR geçitlerini içerir. Gereksiz invertörleri ortadan kaldırmak için iki tür gri hücre ve siyah hücre kullanılır. Gri hücre için bir satırda kullanılan evirici kapılar AOI veya AND-OR-Çeviricidir ve bir sonraki sıradaki siyah hücrenin evirici kapıları OAI veya OR-AND-Çeviriciyi kullanır. AOI hücresi ters çevrilmiş çıktılar sağlamak için normal girişleri kullanırken, OAI normal çıktılar sağlamak için ters çevrilmiş girişleri kullanır.

Brent Kung Toplayıcı Operasyonu

Brent Kung toplayıcı, yüksek performanslı toplama işlemi için kullanılan bir paralel önek toplayıcıdır. Bu toplayıcı aritmetik işlemi gerçekleştiren bir ağaç yapısına benzemektedir. Bu toplayıcı siyah hücreleri ve gri hücreleri içerir. Her siyah hücrenin iki AND kapısı ve bir tek OR kapısı vardır ve her gri hücrenin yalnızca tek bir AND kapısı vardır.

Brent-kung toplayıcı iki aşamadan oluşur; ön işleme aşaması ve üretim aşaması. İlk aşamada, her girdi çiftinden oluştur ve yay. Burada yayılma, giriş bitleri için bir 'XOR' işlemi sağlarken, oluşturma, giriş bitleri için bir 'VE' işlemi sağlar. 'Pi' ve 'Gi' gibi yayma ve üretme aşağıda verilmiştir.

Pi = Ai XOR Bi ve Gi = Ai VE Bi.

İkinci aşamada, taşıma üret 'Cg' olarak bilinen her bit için taşıma üretilecek ve taşıma, taşıma üretme 'Cp' olarak bilinen her bit için yayılacaktır. Daha sonraki işlem için taşıma yayma ve taşıma oluşturma oluşturulacaktır. Her bir işlemde mevcut olan son hücre, taşımayı sağlar. Böylece son bit taşıma, bir sonraki bitin son bit'e kadar eşzamanlı olarak toplanmasına yardımcı olacaktır. Taşıma oluşturma ve yayma şu şekilde verilmiştir;

Cp = P1 VE P0 ve Cg=G1 VEYA (P1 VE G0)

Esas olarak iki otuz iki bitin toplama işlemi için kullanılır ve her bit, ön işleme aşamasını ve oluşturma aşamasını deneyimler ve ardından nihai toplamı sağlar.

Birincil giriş bitleri ön işleme aşamasının altına gider ve yayma ve üretmeyi üretirler. Yani bunlar çoğalır ve üretilir, üretim aşamasına geçer, üretir, üretir ve taşır, yayılır ve nihai toplamı sağlar. Brent-kung toplayıcının adım adım işlemi aşağıda gösterilmiştir.

  Verimli Blok Diyagramı
Verimli Blok Diyagramı

Brent-kung toplayıcı düzenlemesi bir ağaç yapısına benzer ve kapı seviyesi mantığını hedefleyen yüksek hızlı toplayıcıdır. Bu toplayıcı, mantık kapısı sayısı azaltılarak tasarlanabilmektedir. Böylece bu mimaride kullanılan gecikmeyi ve belleği azaltır.

Brent Kung Toplayıcı Verilog Kodu

Brent Kung toplayıcı verilog kodu aşağıda gösterilmiştir.

'INPUTSIZE 64'ü tanımla //giriş boyutunu ayarla n

`GROUPSIZE 8'i tanımla //grup boyutunu ayarla = 1, 2, 4 veya 8

 

modül Brent_Kung_Adder(A, B, S);

giriş [`GİRİŞ BOYUTU – 1:0] A;

giriş [`GİRİŞ BOYUTU – 1:0] B;

çıkış [`INPUTSIZE:0] S;

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

tel [`GİRİŞ BOYUTU / `GRUP BOYUTU * 2 – 1:0] r;

tel [`INPUTSIZE / `GROUPSIZE:0] cin;

tel [`GİRİŞ BOYUTU / `GRUP BOYUTU * 2 – 1:0] q;

cin[0] = 1'b0'ı atayın;

oluşturmak

nerede;

for (i = 0; i < `INPUTSIZE / `GROUPSIZE; i = i + 1) begin: paralel_FA_CLA_prefix

    group_q_jenerasyon #(.Groupsize(`GROUPSIZE))

    F(

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

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

        .cin(cin[i]),

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

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

    );

son

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

t1(

    .q(q[`GİRİŞ BOYUTU / `GRUP BOYUTU * 2 – 1:0]),

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

);

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

t2(

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

    .r(r[`GİRİŞ BOYUTU / `GRUP BOYUTU * 2 – 1:0])

);

for (i = 0; i < `INPUTSIZE / `GROUPSIZE; i = i + 1) begin: cin_jenerasyon

    cin_jenerasyon_logic f(

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

        .c0(1'b0),

        .cin(cin[i + 1])

    );

son

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

son nesil

son modül

// Paralel önek ağacının ilk yarısı

modül paralel_prefix_tree_first_half #(parametre Ağaçboyutu = `INPUTSIZE / `GROUPSIZE)(q, r);

giriş [Ağaç Boyutu * 2 – 1:0] q;

çıkış [Ağaç Boyutu * 2 – 1:0] r;

oluşturmak

nerede;

if (Ağaç Boyutu == 2) begin: trivial_case

    r[1:0] = q[1:0]'ı atayın;

    prefix_logic f(

        .ql(q[1:0]),

        .qh(q[3:2]),

        .r(r[3:2])

    );

son başka başlangıç: recursive_case

    tel [Ağaç Boyutu * 2 – 1:0] r_temp;

    paralel_prefix_tree_first_half #(.Ağaçboyutu(Ağaçboyutu / 2))

    recursion_lsbh(

        .q(q[Ağaç Boyutu – 1:0]),

        .r(r_temp[Ağaçboyutu – 1:0])

    );

    paralel_prefix_tree_first_half #(.Ağaçboyutu(Ağaçboyutu / 2))

    recursion_msbh(

        .q(q[Ağaç Boyutu * 2 – 1:Ağaç Boyutu]),

        .r(r_temp[Ağaç Boyutu * 2 – 1:Ağaç Boyutu])

    );

    for (i = 0; i < Treesize * 2; i = i + 2) begin: paralel_stitch_up

        if (i != Treesize * 2 – 2) begin: paralel_stitch_up_pass

            r[i + 1:i] = r_temp[i + 1:i]'yi atayın;

        son başka başla: paralel_stitch_up_produce

            prefix_logic f(

                .ql(r_temp[Ağaçboyutu – 1:Ağaçboyutu – 2]),

                .qh(r_temp[Ağaç Boyutu * 2 – 1:Ağaç Boyutu * 2 – 2]),

                .r(r[Ağaç Boyutu * 2 – 1:Ağaç Boyutu * 2 – 2])

            );

        son

    son

son

son nesil

son modül

// Paralel önek ağacının ikinci yarısı

modül paralel_prefix_tree_second_half #(parametre Ağaçboyutu = `INPUTSIZE / `GROUPSIZE)(q, r);

giriş [Ağaç Boyutu * 2 – 1:0] q;

çıkış [Ağaç Boyutu * 2 – 1:0] r;

wire [Ağaç Boyutu * 2 * ($clog2(Ağaç Boyutu) – 1) – 1:0] r_temp;

atama r_temp[Ağaç Boyutu * 2 – 1:0] = q[Ağaç Boyutu * 2 – 1:0];

oluşturmak

genel i, j;

for (i = 0; i < $clog2(Ağaçboyutu) – 2; i = i + 1) begin: Second_half_level

    atama r_temp[Ağaç Boyutu * 2 * (i + 1) + ((Ağaç Boyutu / (2 ** i)) – 1 – 2 ** ($clog2(Ağaç Boyutu / 4) – i)) * 2 – 1:Ağaç Boyutu * 2 * (i + 1)] = r_temp[Ağaç Boyutu * 2 * i + ((Ağaç Boyutu / (2 ** i)) – 1 – 2 ** ($clog2(Ağaç Boyutu / 4) – i)) * 2 – 1: Ağaçboyutu * 2 * i];

    for (j = (Ağaçboyutu / (2 ** i)) – 1 – 2 ** ($clog2(Ağaçboyutu / 4) – i); j < Ağaçboyutu; j = j + 2 ** ($clog2(Ağaçboyutu / 2) ) – i)) başlangıç: Second_half_level_logic

        prefix_logic f(

            .ql(r_temp[Ağaç Boyutu * 2 * i + (j – 2 ** ($clog2(Ağaç Boyutu / 4) – i)) * 2 + 1:Ağaç Boyutu * 2 * i + (j – 2 ** ($clog2( Ağaçboyu / 4) – i)) * 2]),

            .qh(r_temp[Ağaç Boyutu * 2 * i + j * 2 + 1:Ağaç Boyutu * 2 * i + j * 2]),

            .r(r_temp[Ağaç Boyutu * 2 * (i + 1) + j * 2 + 1:Ağaç Boyutu * 2 * (i + 1) + j * 2])

        );

        if (j != Ağaçboyutu – 1 – 2 ** ($clog2(Ağaçboyutu / 4) – i)) begin: Second_half_level_direct_connect

            r_temp[Ağaç Boyutu * 2 * (i + 1) + (j + 2 ** ($clog2(Ağaç Boyutu / 2) – i)) * 2 – 1:Ağaç Boyutu * 2 * (i + 1) + j * 2 + 2] = r_temp[Ağaç Boyutu * 2 * i + (j + 2 ** ($clog2(Ağaç Boyutu / 2) – i)) * 2 – 1:Ağaç Boyutu * 2 * i + j * 2 + 2];

        son

    son

    atama r_temp[Ağaç Boyutu * 2 * (i + 2) – 1:Ağaç Boyutu * 2 * (i + 2) – (2 ** ($clog2(Ağaç Boyutu / 4) – i)) * 2] = r_temp[Ağaç Boyutu * 2 * (i + 1) – 1:Ağaç Boyutu * 2 * (i + 1) – (2 ** ($tıkanıklık2(Ağaç Boyutu / 4) – i)) * 2];

son

atama r[1:0] = r_temp[Ağaç Boyutu * 2 * ($clog2(Ağaç Boyutu) – 2) + 1:Ağaç Boyutu * 2 * ($clog2(Ağaç Boyutu) – 2)];

for (i = 1; i < Ağaçboyutu; i = i + 2) begin: final_r_odd

    atama r[i * 2 + 1:i * 2] = r_temp[Ağaç Boyutu * 2 * ($clog2(Ağaç Boyutu) – 2) + i * 2 + 1:Ağaç Boyutu * 2 * ($clog2(Ağaç Boyutu) – 2) + i*2];

son

for (i = 2; i < Ağaçboyutu; i = i + 2) begin: final_r_even

    prefix_logic f(

        .ql(r_temp[Ağaç Boyutu * 2 * ($clog2(Ağaç Boyutu) – 2) + i * 2 – 1:Ağaç Boyutu * 2 * ($clog2(Ağaç Boyutu) – 2) + i * 2 – 2]),

        .qh(r_temp[Ağaç Boyutu * 2 * ($clog2(Ağaç Boyutu) – 2) + i * 2 + 1:Ağaç Boyutu * 2 * ($clog2(Ağaç Boyutu) – 2) + i * 2]),

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

    );

son

son nesil

son modül

modül grup_q_jenerasyonu #(parametre Grupboyutu = `GROUPSIZE)(a, b, cin, s, qg);

giriş [Grup boyutu – 1:0] a;

giriş [Grup boyutu – 1:0] b;

giriş cin;

çıkış [Grup boyutu – 1:0] sn;

çıkış [1:0] qg;

tel [2 * Grup boyutu – 1:0] q;

tel [Grup boyutu – 1:0] c;

c[0] = cin'i atayın;

oluşturmak

nerede;

for (i = 0; i < Grupboyutu; i = i + 1) begin: paralel_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 != Grupboyutu – 1) begin: özel_durum

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

    son

son

//Grup boyutuna göre grup q üretimi

if (Grup Boyutu == 1) begin: case_gs1

    qg[1] = q[1]'i atayın;

    qg[0] = q[0]'u atayın;

end else if (Grup Boyutu == 2) begin: case_gs2

    qg[1] = q[3]'ü ata | (q[1] & q[2]);

    qg[0] = q[2] ve q[0]'u atayın;

end else if (Grup Boyutu == 4) begin: case_gs4

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

    qg[0] = q[6] & q[4] & q[2] & q[0]'ı atayın;

end else if (Grup Boyutu == 8) begin: case_gs8

    qg[1] = q[15] ata | (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]);

    qg[0] = q[14] & q[12] & q[10] & q[8] & q[6] & q[4] & q[2] & q[0]'ı atayın;

son

son nesil

son modül

// Cin oluşturma mantığı

modül cin_jenerasyon_logic(r, c0, cin);

giriş [1:0] r;

c0 girişi;

çıkış cin;

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

son modül

// Önek işlemlerinin temel mantığı

modül prefix_logic(ql, qh, r);

giriş [1:0] ql;

giriş [1:0] qh;

çıkış [1:0] r;

r[0] = qh[0] & ql[0]'ı ata;

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

son modül

// İleriye Yönlendirmeli Tam Toplayıcı Hücre

modül FA_CLA_prefix(a, b, cin, s, q);

giriş a;

giriş b;

giriş cin;

çıktılar;

çıkış [1:0] q;

q[0] = a ^ b'yi atayın;

s = q[0] ^ cin'i ata;

q[1] = a & b'yi ata;

son modül

Avantajları

Brent Kung Adder'ın avantajları arasında aşağıdakiler yer almaktadır.

  • Bu düşük güçlü bir toplayıcıdır çünkü sonucu elde etmek için minimum devre kullanır.
  • Çok popüler ve yaygın olarak kullanılan bir toplayıcıdır.
  • Bu tür toplayıcı, Kogge-Stone toplayıcıya kıyasla daha az modül kullanılarak uygulanabilir.
  • Brent-Kung toplayıcı tasarımı çok kolaydır.
  • Bu toplayıcının diğer modüllerle daha az bağlantısı var.
  • Bu toplayıcılar esas olarak Kogge-Stone toplayıcıların dezavantajlarını çözmek için önerildi.

Dezavantajları

Brent Kung Adde'nin dezavantajları aşağıdakileri içerir.

  • Bu toplayıcılar daha büyük gecikmeye sahiptir ve tüm taşıma bitlerini hesaplamak için 2 log2 n – 2 mantık seviyesine ihtiyaç duyar.
  • Bu toplayıcının ana dezavantajı, akımın toplayıcı boyunca yayılmasının bölünmesine ve zayıflamasına neden olabilecek yayılımdır.

Brent Kung Toplayıcı Uygulamaları

Brent Kung Adder'ın uygulamaları aşağıdakileri içerir.

  • Bir Brent-Kung toplayıcı, kombinatoryal mantık derinliğini ve aksaklık stabilizasyonunu azaltarak güç tüketimini azaltmak için boru hattı tarzında kullanılır.
  • Brent-Kung toplayıcı, asimetrik Ara aşama yüklemesiyle, i/p'den tüm o/ps'ye kadar olağanüstü sayıda aşama sağlar.
  • Bu toplayıcı, çarpanın yanı sıra diğer veri yolu öğelerinde de kullanılabilir.

Böylece bu Brent kung toplayıcıya genel bakış , çalışması, avantajları, dezavantajları ve uygulamaları. Bu çok verimli bir toplayıcıdır ve yapısı, esas olarak yüksek performanslı aritmetik işlemler için kullanılan bir ağaç yapısına benzemektedir. Bu tip toplayıcı çok hızlıdır ve esas olarak kapı seviyesi mantığına odaklanır. Bu toplayıcı daha az sayıda mantık kapısı kullanılarak tasarlanmıştır. Böylece bu mimaride kullanılan hafızayı ve gecikmeyi azaltır. İşte size bir soru, Brent kung toplayıcı olarak da bilinir?