วงจรบวกหลายบิตและหลักการการทด ของ วงจรบวก

วงจรบวกหลายบิต(Multiple-bit Adder) คือการสร้างวงจรบวกให้สามารถรับอินพุตได้มากขึ้น กล่าวคือบวกเลขได้หลายบิตนั้นเอง หลักการสร้างก็ง่ายๆคือการนำ Full-Adder หลายๆตัวมาต่อรวมๆกันเป็นวงจรใหญ่ๆ เพื่อที่จะได้คำนวณให้ได้หลายบิตมากขึ้นโดยเมื่อมีการต่อวงจรแบบนี้แล้วจะมีการคำนวณการทด ได้หลายแบบดังเช่นการทดแบบริปเปอร์ หรือ การทดแบบดูตัวทดล่วงหน้า เป็นต้น

การทดแบบริปเปอร์

การทดแบบริปเปอร์(Ripple Carry Adder) คือการทดโดย เมื่อมีการต่อวงจรบวกหลายๆตัวจะต้องมีการส่งตัวทด(Carry) ไปให้กับวงจรบวกตัวต่อไปเพื่อคำนวณด้วย (โดยคำว่า Ripple นั้นแปลว่า ระลอก) เพราะฉะนั้น Ripple Carry Adder คือวงจรบวกที่มีการส่งตัวทดเป็นระลอกนั้นเอง ลักษณะวงจรคือ

การต่อวงจรลักษณะนี้มีข้อเสียคือ จะทำให้วงจรมีการทำงานที่ช้าลงเมื่อมีการต่อลอจิกเกตมากขึ้นเพราะว่าจากสมการ Carry ของ Full-Adder จะเห็นได้ว่าจำเป็นต้องมีการรอ Carry-in ก่อนที่จะคำนวณต่อไปได้

การทดแบบดูตัวทดล่วงหน้า

การทดแบบดูตัวทดล่วงหน้า(Carry-look-Ahead)คือการทดโดยให้วงจรบวกสามารถคาดเดาก่อนได้ว่าจะมีตัวทดมาหรือไม่ โดยดูบิตการบวกคู่หลัง เพราะถ้ามีตัวทดอย่างแน่นอน(บิตหลังเป็น 1 กับ 1) หรือไม่มีตัวทดอย่างแน่นอน(บิตหลังเป็น 0 กับ 0)ก็จะได้คำตอบทันทีไม่ต้องรอตัวทดเข้า เช่นนี้ก็ไม่ต้องรอการส่งผ่านแบบ Ripple-Carry-Adder โดยในวิธีนี้จะช่วยเพิ่มความเร็วให้กับวงจรขนาดใหญ่ได้เพราะไม่จำเป็นต้องรอ Carry-in จาก Full-Adder ตัวข้างหลัง สามารถคำนวณ Carry ออกมาได้พร้อมกับการคำนวณ Sum ได้เลยลักษณะของสูตร Carry-look-Ahead คือ

C a r r y o u t = C g + C p ⋅ C i n {\displaystyle Carry_{out}=C_{g}+C_{p}\cdot C_{in}} C p = A + B {\displaystyle C_{p}=A+B} C g = A ⋅ B {\displaystyle C_{g}=A\cdot B}

ลัษณะการนำไปใช้งาน

ในกรณี Full-Adder แบบ 1 บิต C a r r y o u t 1 = C g 1 + C p 1 ⋅ C i n {\displaystyle Carry_{out1}=C_{g1}+C_{p1}\cdot C_{in}}

ในกรณี Full-Adder แบบ 2 บิต C a r r y o u t 2 = C g 2 + C p 2 ⋅ C o u t 1 {\displaystyle Carry_{out2}=C_{g2}+C_{p2}\cdot C_{out1}}

ในกรณี Full-Adder แบบ 3 บิต C a r r y o u t 3 = C g 3 + C p 3 ⋅ C o u t 2 {\displaystyle Carry_{out3}=C_{g3}+C_{p3}\cdot C_{out2}}

จะเห็นได้ว่าจะสมการสามารถนำสมการข้างบนลงไปแทนได้เรื่อยๆ จึงไม่มีข้อจำกัดของจำนวนบิตที่ต้องการ แต่ในกรณีที่จำนวนบิตมีมากเกินไปอาจจะทำให้วงจรยุ่งยากซับซ้อนได้

BitsRipple-CarryCarry-look-Ahead
122
486
81610
122410
163210
204014
244814
326414
6412814

ตารางแสดงค่า Delay ระหว่าง Ripple-Carry และ Carry-look-Ahead

ส่วนการดูตัวทดล่วงหน้า

ส่วนการดูตัวทดล่วงหน้า(Lookahead Carry Unit) เป็นวิธีการหนึ่งที่ลดปัญหาการคำนวณซ้ำๆของ Carry-look-Ahead เมื่อสร้างวงจรบวกบิตมากๆ โดยจะสร้างส่วนมาพิจารณาตัวทดโดยเฉพาะ โดยแบ่งเป็นบิตย่อยๆ เรียกส่วนนี้ว่า ส่วนการดูตัวทดล่วงหน้า