Sunday, October 15, 2017

การออกแบบ วงจรบวกเลขฐานสอง

ในทางดิจิตอลอีเลคโทรนิคส์ ระดับแรงดัน (Voltage) จะมีเพียงสองค่า คือระดับแรงดัน Low กับ High  มันคือการเปลี่ยนสถานะหรือระดับแรงดันของวงจร ไม่มีความเกี่ยวข้องกับตัวเลขแต่อย่างไร แต่เราสามารถประยุกต์ให้มันทำงานในลักษณะเลขฐานสอง หรือแก้ปัญหาในระบบเลขฐานสองได้ โดยเปรียบเทียบเป็นตัวเลขก็คือ  0 และ 1และทางตรรกะ(logic) ก็คือ False และ True หรือ

วงจรบวก (Addition circuit)

ในระบบเลขฐานสอง ถ้าเรานำตัวเลข 1 + 1 จะมีค่า =  102   (ฐาน2)  แต่ถ้าเรานำ output ของวงจรดิจิตอล 2 วงที่มีระดับแรงดัน 1มารวมกันหรือต่อกันตรงๆ 1 + 1 อาจจะเท่ากับพัง  เพราะมันไม่ใช่ตัวเลข แต่ เราสามารถใช้  logic gate มาต่อกันเพื่อให้มันแสดงคำตอบของการบวกเลขฐานสอง เช่น ใช้ วงจร Half adder
รูปที่ 1 วงจรบวกแบบไม่มีตัวทด Half adder
หากเรานำ logic gate มาต่อเป็นวงจร Half adder ตามรูปที่ 1 ค่าที่เป็นไปได้ของมันจะเป็นไปตาม Truth table ซึ่งจะสอดคล้องกับนำเลขฐานสองมาบวก     คือถ้าป้อนแรงดันเป็น 1ที่ input A และ B output ของ XOR Gate จะเป็น 1 หรือ แรงดันเป็น High ที่ AND Gate  จะเป็น 0 หรือระดับ Low

โดยที่  X = A XOR B   Co = A AND B   และผลลัพท์ของการบวกได้จากการนำ Co และ X มาเรียงกัน เช่น
ถ้า A = 1, B =1  แล้ว  X = 0 และ Co = 1 คำต้อบ คือ Co X  หรือ 1 02   =  210  (ในระบบฐาน10)

ย้อนกลับมา การบวกเลขฐานสอง แบบ 1บิท
 A , B = ค่าที่จะนำมาบวก   X =  A + B =  ผลลัพท์ที่ได้จากการบวก
ถ้า  A = 1, B = 1  แล้ว A + B = 1 02   เกิดตัวเลขขนาด 2 บิท  โดยที่ 1 เป็นตัวทดไปยังบิทต่อไป
ค่าที่เป็นไปได้ทั้งหมด ของ X ตามการเปลี่ยนค่า ของ A และ B เป็นไปตาม Truth table ในรูปที่ 1  โดยให้ Co (Carry out) แทนตัวทดไปยังบิทต่อไป  เมื่อเทียบกับ Truth Table ของเกจท์ ต่างๆ ในตอนที่แล้ว….คลิ๊กที่นี่
เราจะเห็นว่า เราสามารถใช้ XOR เกจท์ แทน X  ที่เปลี่ยนไปตามค่าของ A และ Bได้ และ ใช้ AND เกจท์ แทน Co ที่เปลี่ยนไปตามค่าของ A และ Bได้

ที่นี้หากเราต้องการบวกเลขฐานสอง 1 บิทแบบมีตัวทดมาจากบิทก่อนหน้า หรือมี Carry in เราจะเขียนเป็นสมการดังนี้
X = A+B+Ci      โดยที่
Ci = Carry in  หรือตัวทดจากบิทก่อนหน้า และCo = Carry out หรือตัวทดไปยังบิทถัดไป

สมมุติเรากำลังบวกเลขในบิทที่ 2 และมีตัวทดมาจากบิทที่1  โดยที่
A  = 1 B = 0 และตัวทด  Ci= 1  เราจะได้ผลลัพท์
X = 0 ในบิทที่ 2 และมีตัวทด Co = 1ไปยังบิทที่ 3

ถ้าเขียน ค่าที่เป็นไปได้ทั้งหมดของการบวก จะได้ Truth table ตามรูปที่ 2 และสามารถใช้วงจร Full adder ในการแก้คำตอบ
โดยที่   output X = A XOR B XOR Ci   และ  Co =  (A XOR B) .Ci + (A .B)
+ ในที่นี้แทนการ OR และ . แทนการ AND
ผลลัพท์เมื่อเทียบกับการบวกทางคณิตได้จากการนำ Co และ X มาเรียงกัน

หมายเหตุ:
ระวังการใช้เครื่องหมาย “+ “ ในสมการทางคณิตสาตร์ มันคือการบวก  ในทางตรรกะมันคือการ OR
 X = A + B + Ci    ← สมการคนิตศาสตร์ หรือ ตรรกะ บอกไม่ได้ ขึ้นอยู่กับสถานะการณ์ที่ใช้
แต่ในวงจรดิจิตอล มันจะมีแต่สมการทางตรรกะ

รูปที่ 2 วงจรบวกแบบมีตัวทด Full adder
ย้อนกลับมาอีกครั้ง สำหรับการบวกเลขฐานสอง แบบ 1บิท  แบบมีตัวทด
 A , B = ค่าที่จะนำมาบวก  และ Ci = ตัวทดจากบิทก่อนหน้า 
 X =  A + B + Ci =  ผลลัพท์ที่ได้จากการบวก  
เราสามารถแก้สมการนี้ได้ด้วยตัวเอง คื อ เอา A บวกB ก่อน แล้ว เอามาผลลัพท์มาบวก Ci อีกครั้ง
ให้ Y =  A+ B และ X = Y + Ci
Y =   A + B  กลายเป็นการบวกแบบไม่มีตัวทดแล้ว  ส่วน
X =  Y + Ci  ก็กลายเป็นการบวกแบบไม่มีตัวทดแล้ว  

ตรงนี้แสดง ว่า เราสามารถใช้  Half adder 2 ตัว มาแก้ปัญหา  Y = A+ B และ X = Y + Ci ได้
ถ้าต้องการผลลัพท์  X = A + B + Ci  ก็คือการเอาHalf adder ทั้งสองตัวมาต่ออนุกรมกัน
แต่มีความเป็นไปได้ที่
Y = A + B  แล้วเกิดตัวทด  หรือ Carry out ได้ เช่นเดียวกัน 
X =  Y + Ci  แล้วเกิดตัวทด  หรือ Carry out 

เช่น A = 1 , B =1  มีตัวทดจากบิทก่อนหน้าเป็น Ci = 1
Y = A + B   = 1 +1 =  0  และมีตัวทด  = 1
X = Y + Ci  = 0 +1 =  1  และมีตัวทด  = 0  คือไม่มีตัวทด
เราจะต้องนำตัวทดทั้ง 2 มา OR กัน คือ Half Adder ตัวใดๆ ตัวนึงเกิดตัวทด มันจะส่งผลให้เกิดตัวทดในระบบ จะได้สมการตรรกะดังนี้

X =  Y XOR Ci , Co = Y AND Ci
X =  A XOR B XOR Ci   และ  Co =  (A XOR B) .Ci + (A .B) ← Carry out ของวงจรแรก

การบวกเลขหลายบิท โดยทั่วๆ ไป (มีหลายวิธีในทางคณิตศาสตร์) ก็คือการบวกเลขทีละบิทโดยเริ่มจากบิทต่ำสุดไปยังบิทสูงสุด (Least significant bit  to most  significant bit)  เช่น เราจะบวกเลขฐานสอง 2จำนวน  เช่น A = 10102  กับ B =  01112


บิทต่ำสุด คือบิท 0 และสูงสุดคือ บิท 3 กรณี ตัวเลข 4 บิท
  ให้ A[0] = ค่าของ A ในบิท 0  A[n] = ค่าของ A ในบิท n
   ดังนัน   X = A +B +Ci  เขียนเป็นบิทได้ดังนี้
  X[n] =  A[n] + B[n] + Ci[n]  หรือ
   X[n] =  A[n] + B[n] + Co[n-1]   ( Ci[n] = Co[n-1])



ตัวอย่างบวกเลขในบิท2   X[2] = A [2]+ B[2] + Co[1]  =  0 + 1 +1  = 0 และมี Co[2]  หรือ Ci[3] = 1 
 X = 0001 = 110   และมีตัวทดไปยังบิท4  Co = 1  หากนำบิท 0 ถึง 4 มารวมกันจะเท่ากับ 10001  = 1710

เราสามารถแก้ปัญหาการบวกเลขหลายๆ บิทได้โดยการใช้วงจร Full adder แบบ 1 bit มาต่อรวมกันตามรูปที 3 โดยตัวทดในบิทแรก (บิท 0) ไม่มี ให้ป้อนด้วยระดับแรงดัน Low หรือ 0  สะดวกที่สุดก็คือการต่อลง ground ในวงจร


รูปที่ 3 วงจรบวกแบบ 4 bit สร้างจาก 1 bit Full adder
ถ้าพิจราณาดู จะเห็นว่าวงจรดิจิตอล จะทำงานแบบขนาน คือมันจะบวกทุกบิทไปพร้อมๆ กัน ต่างกับการบวกด้วยคนซึ่งโดยมากต้องบวกทีละบิท 


ต่อไปเราจะทดลองวงจร Half adder และ Full Adder ด้วย Logisim

  

008

Author & Editor

กรุณา อย่าเขียนความคิดเห็นที่ไม่เกี่ยวกับบทความ หรือข้อความที่พาดพิงผู้อื่นในลักษณะที่ทำให้เกิดความเสียหายต่อผู้อื่น

0 comments:

Post a Comment

 
biz.