Brent–Kung adder ได้รับการเสนอในปี 1982 โดย Hsiang Te Kung และ Richard Peirce Brent เป็นตัวบวกคำนำหน้าแบบขนานหรือตัวบวกต้นไม้ซึ่งใช้กันอย่างแพร่หลายในการออกแบบดิจิทัลเนื่องจากมีความยืดหยุ่น Parallel Prefix Adders สามารถสร้างได้หลายวิธีขึ้นอยู่กับจำนวนระดับลอจิก ประตูลอจิก รวมถึงการระบายอากาศออกจากประตูทุกบานและสายไฟระหว่างระดับ มีแอดเดอร์ต้นไม้หลายประเภทให้เลือก แอดเดอร์ต้นไม้พื้นฐานคือ Sklanskym KoggeStone & Brent-Kung เมื่อเทียบกับ KSA (Kogge–Stone adder) ตัวเสริมนี้ให้ความสม่ำเสมอสูงกับโครงสร้างของแอดเดอร์ และมีการปิดกั้นการเดินสายน้อยกว่า ซึ่งนำไปสู่ประสิทธิภาพที่ดีขึ้นและพื้นที่ชิปที่ต้องการน้อยลง บทความนี้ให้ข้อมูลโดยย่อเกี่ยวกับก เบรนต์ กุ้ง แอดเดอร์ -
เบรนต์กุ้งแอดเดอร์คืออะไร?
ตัวบวกที่ใช้วงจรขั้นต่ำเพื่อให้ได้ผลลัพธ์เรียกว่า Brent Kung Adder และเรียกอีกอย่างว่าตัวบวกพลังงานต่ำหรือตัวบวกแบบขนาน Adder นี้มีวัตถุประสงค์เพื่อประหยัดขนาดของชิป เพื่อให้การผลิต Adder เหล่านี้จะง่ายขึ้น ความสมมาตรและโครงสร้างการก่อสร้างตามปกติของ adder นี้จะช่วยลดต้นทุนการผลิตได้อย่างมาก และอนุญาตให้ใช้ในโทโพโลยีแบบไปป์ไลน์ได้ การใช้ลอจิกทรานซิสเตอร์ผ่านเสริมช่วยเพิ่มประสิทธิภาพการออกแบบด้วย มัลติเพล็กเซอร์ แนวทางในการออกแบบเซลล์ต่างๆ
วงจรเบรนต์กุ้งแอดเดอร์
แผนภาพตัวบวกคำนำหน้าแบบขนาน brent-kung แสดงอยู่ด้านล่าง ซึ่งรวมถึงระยะที่ 1 (ขั้นตอนก่อนการประมวลผล) ระยะที่ 2 ถึง 7 เป็นขั้นตอนการสร้างแบบดำเนินการ และระยะที่ 8 คือขั้นตอนหลังการประมวลผล เป็นสถาปัตยกรรมขั้นสูงและง่ายต่อการสร้างและช่วยลดความแออัดของสายไฟ ดังนั้นการเดินสายที่น้อยลงจะช่วยลดปริมาณพื้นที่ที่ต้องการในการดำเนินการสถาปัตยกรรม นอกจากนี้ การกำหนดเส้นทางจะง่ายขึ้นมากเนื่องจากการข้าม (หรือ) การทับซ้อนกันของสายไฟจำนวนน้อยลง อย่างไรก็ตาม การลงโทษจะเพิ่มขึ้นตามความล่าช้าเนื่องจากจำนวนด่านที่เพิ่มขึ้น การกระจายพัดลมสำหรับแอดเดอร์นี้เพิ่มขึ้น และจากนั้นความล่าช้าจะเพิ่มขึ้น

Brent Kung Adder ทำงานอย่างไร?
Brent Kung Adder ทำงานโดยการคำนวณคำนำหน้าสำหรับกลุ่มบิตสองกลุ่ม ซึ่งมีประโยชน์ในการค้นหาคำนำหน้ากลุ่ม 4 บิต คำนำหน้าเหล่านี้ใช้สำหรับการคำนวณคำนำหน้าของกลุ่ม 8 บิต ฯลฯ หลังจากนั้น คำนำหน้าเหล่านี้จะใช้สำหรับการคำนวณการดำเนินการของระยะบิตเฉพาะ การพกพาเหล่านี้จะใช้กับ Group Propagate ของสเตจถัดไปเพื่อคำนวณผลรวมบิตของสเตจนั้น Brent Kung Tree ใช้ 2log2N – 1 ด่าน
เบรนต์กุ้งแอดเดอร์ 32 บิต
โครงร่าง adder Brent Kung 32 บิตแสดงอยู่ด้านล่าง ที่จุดเริ่มต้นของโครงร่างนี้ ลอจิกเกตพื้นฐานได้รับการออกแบบ เช่น NAND, อินเวอร์เตอร์, XOR, NOR เป็นต้น หลังจากนั้น เซลล์ที่จำเป็น เช่น เซลล์สีดำ เซลล์สีเทา บัฟเฟอร์ และลอจิก PG จะได้รับการออกแบบพร้อมกับลอจิกเกต

ใน adder Brent Kung แบบ 32 บิตด้านล่าง ประตูกลับด้าน เช่น AOI และ OAI จะถูกใช้สำหรับเซลล์สีเทาและสีดำเป็นหลัก ดังนั้นเซลล์สีดำและสีเทาจึงแสดงด้วยบล็อกสีเทาและสีดำในขณะที่บัฟเฟอร์จะแสดงด้วยวงกลม


อินพุตเช่น A & B ได้รับการจัดเตรียมให้กับตรรกะ PG ซึ่งแสดงในแผนภาพบล็อก สำหรับแอดเดอร์ 32 บิต จำเป็นต้องมีลอจิกบล็อก PG 32 บล็อก และสัญญาณเผยแพร่ (P) และสร้าง (G) เป็นเอาต์พุตของบล็อกนี้ สัญญาณเหล่านี้มีให้กับโครงสร้างต้นไม้บวกของ Brent Kung โครงสร้างของสารบวกนี้ประกอบด้วยเซลล์สีเทาและเซลล์สีดำ
เซลล์สีเทาประกอบด้วยอินพุตสามช่องและเอาต์พุตเดี่ยว การแพร่กระจายและสร้างสัญญาณจากระยะปัจจุบัน & สร้างสัญญาณจากระยะก่อนหน้าเป็นอินพุต ในขณะที่กลุ่มสร้างสัญญาณคือ o/p ในโครงสร้างต้นไม้ใดๆ ทุกขั้นตอนจะลงท้ายด้วยเซลล์สีเทา & o/p ของเซลล์นี้คือกลุ่มที่สร้างสัญญาณ สัญญาณนี้ถือเป็นสัญญาณของขั้นตอนนั้น เซลล์สีดำประกอบด้วยอินพุตสี่ช่องและเอาต์พุตสองช่อง อินพุตสำหรับเซลล์นี้คือสัญญาณ P & G ของระยะปัจจุบัน และสัญญาณ P, G จากระยะก่อนหน้า
ตรรกะ PG รวมถึงเกต AND & XOR โดยที่เกตลอจิก AND ใช้สำหรับสร้างสัญญาณ G และเกตลอจิก XOR จัดเตรียมสัญญาณ P เพื่อกำจัดอินเวอร์เตอร์ที่ไม่จำเป็น จึงมีการใช้เซลล์สีเทาและเซลล์สีดำสองชนิด ประตูกลับด้านที่ใช้ในหนึ่งแถวสำหรับเซลล์สีเทาคือ AOI หรือ AND-OR-Inverter และประตูกลับด้านสำหรับเซลล์สีดำภายในแถวถัดไปใช้ OAI หรือ OR-AND-Inverter เซลล์ AOI ใช้อินพุตปกติเพื่อให้เอาต์พุตแบบกลับด้าน ในขณะที่ OAI ใช้อินพุตแบบกลับด้านเพื่อให้เอาต์พุตปกติ
ปฏิบัติการเบรนท์ กุ้ง แอดเดอร์
Brent Kung adder เป็นตัวเติมคำนำหน้าแบบขนานที่ใช้สำหรับการดำเนินการเติมประสิทธิภาพสูง ตัวบวกนี้ดูเหมือนโครงสร้างต้นไม้ที่ดำเนินการทางคณิตศาสตร์ ตัวบวกนี้ประกอบด้วยเซลล์สีดำและเซลล์สีเทา ทุกเซลล์สีดำมีสองเกต AND และเกตเดียวหรือ และทุกเซลล์สีเทามีเพียงเกต AND เดียว
แอดเดอร์ Brent-kung มีสองขั้นตอน; ขั้นตอนก่อนการประมวลผลและขั้นตอนการสร้าง ในระยะแรก การสร้างและเผยแพร่จะมาจากทุกคู่ของอินพุต ที่นี่การเผยแพร่ให้การดำเนินการ 'XOR' สำหรับบิตอินพุตในขณะที่การสร้างให้การดำเนินการ 'AND' สำหรับบิตอินพุต การแพร่กระจายและสร้างเช่น 'Pi' และ 'Gi' ได้รับด้านล่าง
Pi = ไอ XOR Bi และ Gi = Ai และ Bi
ในขั้นตอนที่สอง การพกพาจะถูกสร้างขึ้นสำหรับทุกบิตซึ่งเรียกว่าการพกพาสร้าง 'Cg' และการพกพาจะเผยแพร่สำหรับทุกบิตเรียกว่าการพกพาสร้าง 'Cp' สำหรับการดำเนินการต่อไป จะมีการสร้างการเผยแพร่การพกพาและการสร้างการพกพา เซลล์สุดท้ายที่มีอยู่ในทุกบิตของการดำเนินการจัดให้มีการพกพา ดังนั้นการพกพาบิตสุดท้ายจะช่วยรวมบิตถัดไปพร้อมกันจนถึงบิตสุดท้าย การพกพาสร้าง & เผยแพร่ได้รับเป็น;
Cp = P1 และ P0 และ Cg=G1 หรือ (P1 และ G0)
ส่วนใหญ่จะใช้สำหรับการดำเนินการบวกของสองสามสิบสองบิต และทุกบิตสัมผัสกับขั้นตอนก่อนการประมวลผลและขั้นตอนการสร้าง จากนั้นจะให้ผลรวมสุดท้าย
บิตอินพุตหลักอยู่ต่ำกว่าขั้นตอนก่อนการประมวลผลและพวกมันจะเผยแพร่และสร้าง ดังนั้นสิ่งเหล่านี้แพร่กระจายและสร้างผ่านขั้นตอนการสร้างสร้างการพกพาสร้าง & ดำเนินการเผยแพร่และให้ผลรวมสุดท้าย กระบวนการแอดเดอร์เบรนต์คุงแบบทีละขั้นตอนแสดงอยู่ด้านล่าง

การจัดเรียงแอดเดอร์ Brent-kung ดูเหมือนโครงสร้างแบบต้นไม้และเป็นแอดเดอร์ความเร็วสูงที่กำหนดเป้าหมายไปที่ลอจิกระดับเกต Adder นี้สามารถออกแบบได้โดยลดจำนวนลอจิกเกตลง ดังนั้นจึงช่วยลดความล่าช้าและหน่วยความจำที่ใช้ภายในสถาปัตยกรรมนี้
รหัส Brent Kung Adder Verilog
รหัส verilog ของ adder Brent Kung แสดงอยู่ด้านล่าง
`กำหนดขนาดอินพุต 64 //กำหนดขนาดอินพุต n
`กำหนดขนาดกลุ่ม 8 // กำหนดขนาดกลุ่ม = 1, 2, 4 หรือ 8
โมดูล Brent_Kung_Adder(A, B, S);
อินพุต [`ขนาดอินพุต – 1:0] A;
อินพุต [`ขนาดอินพุต – 1:0] B;
เอาต์พุต [`ขนาดอินพุต:0] S;
ลวด [`ขนาดอินพุต / `ขนาดกลุ่ม * 2 – 1:0] r_temp;
ลวด [`ขนาดอินพุต / `ขนาดกลุ่ม * 2 – 1:0] r;
ลวด [`INPUTSIZE / `GROUPSIZE:0] cin;
ลวด [`ขนาดอินพุต / `ขนาดกลุ่ม * 2 – 1:0] q;
กำหนด cin[0] = 1'b0;
สร้าง
อยู่ที่ไหน;
สำหรับ (i = 0; i < `INPUTSIZE / `GROUPSIZE; i = i + 1) เริ่มต้น: Parallel_FA_CLA_prefix
group_q_ชั่วอายุคน #(.ขนาดกลุ่ม(`GROUPSIZE))
ฉ(
.a(A[`ขนาดกลุ่ม * (i + 1) – 1:`ขนาดกลุ่ม * i]),
.b(B[`ขนาดกลุ่ม * (i + 1) – 1:`ขนาดกลุ่ม * i]),
.cin(ซิน[i]),
.s(S[`ขนาดกลุ่ม * (i + 1) – 1:`ขนาดกลุ่ม * i]),
.qg(q[i * 2 + 1:i * 2])
-
จบ
Parallel_prefix_tree_first_half #(.Treesize(`INPUTSIZE / `GROUPSIZE))
t1(
.q(q[`ขนาดอินพุต / `ขนาดกลุ่ม * 2 – 1:0]),
.r(r_temp[`ขนาดอินพุต / `ขนาดกลุ่ม * 2 – 1:0])
-
Parallel_prefix_tree_second_half #(.Treesize(`INPUTSIZE / `GROUPSIZE))
ที2(
.q(r_temp[`ขนาดอินพุต / `ขนาดกลุ่ม * 2 – 1:0]),
.r(r[`ขนาดอินพุต / `ขนาดกลุ่ม * 2 – 1:0])
-
สำหรับ (i = 0; i < `INPUTSIZE / `GROUPSIZE; i = i + 1) เริ่มต้น: cin_รุ่น
cin_generation_logic ฉ(
.r(r[2 * i + 1:2 * i]),
.c0(1'b0)
.cin(ซิน[i + 1])
-
จบ
กำหนด S[`INPUTSIZE] = cin[`INPUTSIZE / `GROUPSIZE];
สร้างใหม่
สิ้นสุดโมดูล
// ครึ่งแรกของทรีคำนำหน้าแบบขนาน
โมดูล Parallel_prefix_tree_first_half #(พารามิเตอร์ Treesize = `INPUTSIZE / `GROUPSIZE)(q, r);
อินพุต [ขนาดต้นไม้ * 2 – 1:0] q;
เอาท์พุท [ขนาดต้นไม้ * 2 – 1:0] r;
สร้าง
อยู่ที่ไหน;
ถ้า (Treesize == 2) เริ่มต้น: trivial_case
กำหนด r[1:0] = q[1:0];
prefix_logic ฉ(
.ql(คิว[1:0]),
.qh(คิว[3:2]),
.r(ร[3:2])
-
สิ้นสุดอย่างอื่นเริ่มต้น: recursive_case
ลวด [ขนาดต้นไม้ * 2 – 1:0] r_temp;
Parallel_prefix_tree_first_half #(.Treesize(Treesize / 2))
การเรียกซ้ำ_lsbh(
.q(q[ขนาดต้นไม้ – 1:0]),
.r(r_temp[ขนาดต้นไม้ – 1:0])
-
Parallel_prefix_tree_first_half #(.Treesize(Treesize / 2))
การเรียกซ้ำ_msbh(
.q(q[ขนาดต้นไม้ * 2 – 1:ขนาดต้นไม้]),
.r(r_temp[ขนาดต้นไม้ * 2 – 1:ขนาดต้นไม้])
-
สำหรับ (i = 0; i < Treesize * 2; i = i + 2) เริ่มต้น: Parallel_stitch_up
ถ้า (i != Treesize * 2 – 2) เริ่มต้น: Parallel_stitch_up_pass
กำหนด r[i + 1:i] = r_temp[i + 1:i];
สิ้นสุดอย่างอื่นเริ่มต้น: Parallel_stitch_up_produce
prefix_logic ฉ(
.ql(r_temp[ขนาดต้นไม้ – 1:ขนาดต้นไม้ – 2]),
.qh(r_temp[ขนาดต้นไม้ * 2 – 1:ขนาดต้นไม้ * 2 – 2]),
.r(r[ขนาดต้นไม้ * 2 – 1:ขนาดต้นไม้ * 2 – 2])
-
จบ
จบ
จบ
สร้างใหม่
สิ้นสุดโมดูล
// ครึ่งหลังของทรีคำนำหน้าแบบขนาน
โมดูล Parallel_prefix_tree_second_half #(พารามิเตอร์ Treesize = `INPUTSIZE / `GROUPSIZE)(q, r);
อินพุต [ขนาดต้นไม้ * 2 – 1:0] q;
เอาท์พุท [ขนาดต้นไม้ * 2 – 1:0] r;
ลวด [Treesize * 2 * ($clog2(Treesize) – 1) – 1:0] r_temp;
กำหนด r_temp[Treesize * 2 – 1:0] = q[Treesize * 2 – 1:0];
สร้าง
เจนวาร์ ฉัน, เจ;
สำหรับ (i = 0; i < $clog2(Treesize) – 2; i = i + 1) เริ่มต้น: Second_half_level
กำหนด 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: ขนาดต้นไม้ * 2 * i];
สำหรับ (j = (Treesize / (2 ** i)) – 1 – 2 ** ($clog2(Treesize / 4) – i); j < Treesize; j = j + 2 ** ($clog2(Treesize / 2 ) – i)) เริ่มต้น: Second_half_level_logic
prefix_logic ฉ(
.ql(r_temp[Treesize * 2 * i + (j – 2 ** ($clog2(Treesize / 4) – i)) * 2 + 1:Treesize * 2 * i + (j – 2 ** ($clog2( ขนาดต้นไม้ / 4) – i)) * 2]),
.qh(r_temp[Treesize * 2 * i + j * 2 + 1:Treesize * 2 * i + j * 2]),
.r(r_temp[ขนาดต้นไม้ * 2 * (i + 1) + j * 2 + 1:ขนาดต้นไม้ * 2 * (i + 1) + j * 2])
-
ถ้า (j != Treesize – 1 – 2 ** ($clog2(Treesize / 4) – i)) เริ่มต้น: Second_half_level_direct_connect
กำหนด r_temp[Treesize * 2 * (i + 1) + (j + 2 ** ($clog2(Treesize / 2) – i)) * 2 – 1:Treesize * 2 * (i + 1) + j * 2 + 2] = r_temp[ขนาดต้นไม้ * 2 * i + (j + 2 ** ($clog2(ขนาดต้นไม้ / 2) – i)) * 2 – 1:ขนาดต้นไม้ * 2 * i + j * 2 + 2];
จบ
จบ
กำหนด r_temp[Treesize * 2 * (i + 2) – 1:Treesize * 2 * (i + 2) – (2 ** ($clog2(Treesize / 4) – i)) * 2] = r_temp[Treesize * 2 * (i + 1) – 1:ขนาดต้นไม้ * 2 * (i + 1) – (2 ** ($clog2(ขนาดต้นไม้ / 4) – i)) * 2];
จบ
กำหนด r[1:0] = r_temp[Treesize * 2 * ($clog2(Treesize) – 2) + 1:Treesize * 2 * ($clog2(Treesize) – 2)];
สำหรับ (i = 1; i < Treesize; i = i + 2) เริ่มต้น: Final_r_odd
กำหนด r[i * 2 + 1:i * 2] = r_temp[Treesize * 2 * ($clog2(Treesize) – 2) + i * 2 + 1:Treesize * 2 * ($clog2(Treesize) – 2) + ฉัน * 2];
จบ
สำหรับ (i = 2; i < Treesize; i = i + 2) เริ่มต้น: Final_r_even
prefix_logic ฉ(
.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])
-
จบ
สร้างใหม่
สิ้นสุดโมดูล
โมดูล group_q_รุ่น # (พารามิเตอร์ Groupsize = `GROUPSIZE) (a, b, cin, s, qg);
อินพุต [ขนาดกลุ่ม – 1:0] ก;
อินพุต [ขนาดกลุ่ม – 1:0] b;
อินพุตซิน;
เอาต์พุต [ขนาดกลุ่ม – 1:0] วินาที;
เอาท์พุต [1:0] คิวจี;
ลวด [2 * ขนาดกลุ่ม – 1:0] q;
ลวด [ขนาดกลุ่ม – 1:0] c;
กำหนด c[0] = cin;
สร้าง
อยู่ที่ไหน;
สำหรับ (i = 0; i < Groupsize; i = i + 1) เริ่มต้น: Parallel_FA_CLA_prefix
FA_CLA_คำนำหน้า ฉ(
.a(ก[i])
.b(ข[i])
.cin(c[i])
.s(s[i])
.q(q[i * 2 + 1:i * 2])
-
ถ้า (i != Groupsize – 1) เริ่มต้น: special_case
กำหนด c[i + 1] = q[i * 2 + 1] | (q[i * 2] & c[i]);
จบ
จบ
//สร้างกลุ่ม q ตาม Groupsize
ถ้า (ขนาดกลุ่ม == 1) เริ่มต้น: case_gs1
กำหนด qg[1] = q[1];
กำหนด qg[0] = q[0];
สิ้นสุดอย่างอื่นถ้า (ขนาดกลุ่ม == 2) เริ่มต้น: case_gs2
กำหนด qg[1] = q[3] | (คิว[1] & คิว[2]);
กำหนด qg[0] = q[2] & q[0];
สิ้นสุดอย่างอื่นถ้า (ขนาดกลุ่ม == 4) เริ่มต้น: case_gs4
กำหนด qg[1] = q[7] | (คิว[5] & คิว[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];
สิ้นสุดอย่างอื่นถ้า (Groupsize == 8) เริ่มต้น: case_gs8
กำหนด qg[1] = q[15] | (ค[13] & ค[14]) | (q[11] & q[14] & q[12]) | (คิว[9] & คิว[14] & คิว[12] & คิว[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];
จบ
สร้างใหม่
สิ้นสุดโมดูล
// ตรรกะการสร้าง Cin
โมดูล cin_รุ่น_logic (r, c0, cin);
อินพุต [1:0] r;
อินพุต c0;
เอาท์พุทซิน;
กำหนด cin = (r[0] & c0) | ร[1];
สิ้นสุดโมดูล
// ตรรกะพื้นฐานสำหรับการดำเนินการคำนำหน้า
โมดูล prefix_logic (ql, qh, r);
อินพุต [1:0] ql;
อินพุต [1:0] qh;
เอาท์พุต [1:0] r;
กำหนด r[0] = qh[0] & ql[0];
กำหนด r[1] = (qh[0] & ql[1]) | คิวเอช[1];
สิ้นสุดโมดูล
// เซลล์ Adder แบบเต็มพร้อม Carry Look-Ahead
โมดูล FA_CLA_prefix (a, b, cin, s, q);
อินพุตก;
อินพุตข;
อินพุตซิน;
เอาท์พุท;
เอาต์พุต [1:0] q;
กำหนด q[0] = a ^ b;
กำหนด s = q[0] ^ cin;
กำหนด q[1] = a & b;
สิ้นสุดโมดูล
ข้อดี
ข้อดีของ Brent Kung Adder มีดังต่อไปนี้
- นี่คือตัวบวกที่ใช้พลังงานต่ำเนื่องจากใช้วงจรขั้นต่ำเพื่อให้ได้ผลลัพธ์
- เป็นสารเติมแต่งที่ได้รับความนิยมและใช้กันอย่างแพร่หลาย
- adder ชนิดนี้สามารถใช้งานได้โดยใช้โมดูลน้อยลงเมื่อเทียบกับ adder Kogge-Stone
- การออกแบบแอดเดอร์ Brent-Kung นั้นง่ายมาก
- Adder นี้มีการเชื่อมต่อกับโมดูลอื่นน้อยลง
- สารเติมแต่งเหล่านี้ได้รับการเสนอเพื่อแก้ไขข้อเสียของสารเติมแต่ง Kogge-Stone เป็นหลัก
ข้อเสีย
ที่ ข้อเสียของ เบรนท์ กุ้ง แอดเด r รวมถึงสิ่งต่อไปนี้
- ตัวบวกเหล่านี้มีความล่าช้ามากกว่าและต้องใช้ระดับลอจิก 2 log2 n - 2 เพื่อคำนวณแครี่บิตทั้งหมด
- ข้อเสียเปรียบหลักของ adder นี้คือ fanout ซึ่งอาจทำให้การแพร่กระจายของกระแสทั่วทั้ง adder แยกตัวและอ่อนลง
แอปพลิเคชั่น เบรนต์ กุ้ง แอดเดอร์
การใช้งานของ Brent Kung Adder มีดังต่อไปนี้
- แอดเดอร์เบรนต์–คุงถูกใช้ในลักษณะไปป์ไลน์เพื่อลดการใช้พลังงานโดยการลดความลึกของลอจิกเชิงผสมและความเสถียรของข้อบกพร่อง
- Brent-Kung adder มอบจำนวนสเตจที่โดดเด่นตั้งแต่ i/p ไปจนถึง o/ps ทั้งหมด แต่มีการโหลดสเตจระดับกลางที่ไม่สมมาตร
- ตัวบวกนี้สามารถใช้ได้ภายในตัวคูณและองค์ประกอบเส้นทางข้อมูลอื่นๆ
อย่างนี้นี่เอง ภาพรวมของ เบรนต์ กุ้ง แอดเดอร์ การทำงาน ข้อดี ข้อเสีย และการนำไปใช้งาน นี่คือตัวบวกที่มีประสิทธิภาพมากและโครงสร้างดูเหมือนโครงสร้างต้นไม้ที่ใช้เป็นหลักสำหรับการดำเนินการทางคณิตศาสตร์ที่มีประสิทธิภาพสูง Adder ประเภทนี้ทำงานเร็วมากและเน้นไปที่ตรรกะระดับเกตเป็นหลัก Adder นี้ได้รับการออกแบบโดยใช้ลอจิกเกตจำนวนน้อยลง ดังนั้นจึงช่วยลดหน่วยความจำและความล่าช้าที่ใช้ในสถาปัตยกรรมนี้ นี่คือคำถามสำหรับคุณ Brent kung adder หรือที่รู้จักในชื่อ?