วงจรคูณ (Multiplication circuit)
การคูณเลขฐานสอง ก็เหมือนกับการคูณเลขฐานสิบทั่วไป คือ มีลักษณะดังข้างล่างให้ A = 10102 B = 1012 และ X = AxB จงหาค่า X
มีจุดที่ต้องสนใจ ตรงที่
1.ถ้าเรา เอาเลขฐานสอง สองจำนวนมาคูณกัน จำนวนบิทสูงสุดที่อาจจะเกิดขึ้น เท่ากับผลรวมของจำนวนบิตจากตัวตั้งและตัวคูณ เช่น A มีขนาด 4 บิท B มีขนาด 3 บิท AxB มีโอกาศทำให้เกิดผลลัพท์ขนาด 7 บิท (4+3)
ให้ A = 11102 B = 1112 และ X = AxB = 110 00102 (มีขนาด 7 บิท)
ดังนั้น ถ้าเราจะทำวงจร คูณเลขฐานสองขนาด8 บิท เราจะต้องมีที่เก็บข้อมูลแบบ 16 บิท
2. วงจรดิจิตอล มันไม่รู้จักค่าลบ ถ้าเอาจำนวนที่เป็นลบมาคูณ เช่นจำนวนที่อยู่ในรูป 2’s complement ผลลัพท์ที่ได้จะอยู่ในรูป 2’s complement และบิทสูงสุดของตัวตั้งและตัวคูณจะถือเป็น Sign bit
เช่น 11102 ถ้าเป็น ตัวเลขที่ไม่คิดเครื่องหมาย( unsigned number) มันมีค่าเท่ากับ 14 และ ถ้าเป็นตัวเลขที่มีเครื่องหมาย (Sign number) มันคือ -2
การคูณเลขฐานสองขนาด1 บิท
รูปที่ 9 วงจรคูณเลขฐานสองขนาด 1 บิท |
การคูณเลขฐานสองขนาด2 บิท
ให้ A0 และ A1 แทนค่าของ A ในบิท0 และบิท 1 , B0 และB1 แทนค่าของ B ในบิท0 และบิท 1
รูปที่ 10 การคูณเลขฐานสอง แบบ 2 บิท |
ตัวอย่าง A = 1 12 และ B = 1 12 จงหาค่า AxB
A1 = 1 , A0 = 1 และ B1 = 1 , B0 =1
X0 = A0xB0 = 1
X1 = A1xB0+A0xB1 = 1x1+1x1 = 0 และมีตัวทดไปยังบิท2 = 1
X2 = A1xB1 = 1 + ตัวทดจากบิท 1 = 1 +1 = 0 และทดไปบิท3 = 1
X3 = ตัวทดจากบิท 2 = 1
ได้ X = 1 0 0 1 2
จากวิธีการนี้ทำให้เราสามารถ ใช้วงจรคูณ 1 บิท ซึ่งก็คือ AND gate และวงจรบวก Half Adder หรือ Full Adder ในการแก้คำตอบของการคูณเลขฐานสองขนาด 2 บิทได้ตามรูปข้างล่าง
รูปที่ 11 วงจรคูณเลขฐานสอง แบบ 2 บิท |
การคูณเลขฐานสองขนาด 4 บิท
รูปที่ 12 การคูณเลขฐานสอง แบบ 4 บิท |
เพื่อที่จะเขียนสูตรการคูณเลขแบบ n bit เราจะมาดูการคูณแบบ 4 บิทก่อน จำนวนบิทสูงสุดที่มีโอกาศเกิดขั้น เท่ากับ 8 บิท คือ บิท 0 ถึง บิท 7
จากรูปที่ 12 ให้ Z0 ถึง Z7 แทนผลบวกของค่าที่เกิดจากการคูณในแต่ละบิท เช่น
Z0 = A0B0
Z1 = A0B1 + A1B0
Z3 = A0B(3-0) + A1B(3-1) + A2(B3-2) + A3(B3-3) + Co of Z2
Z3 = A0B3 + A1B2 + A2B1 + A3B0 ลองเปรียบเทียบกับตารางข้างบน
Z6 = A0B6 + A1B5 + A2B4 + A3B3 + A4B2 + A5B1 + A6B0 B4 ถึง B6 และ A4 ถึง A6 เท่ากับ 0
= A3B3 + Co of Z5
Z7 = 0 + Co of Z6
ถ้า A มีขนาด m bit และ B มีขนาด n bit แล้ว
1. จำนวน bit สูงสุดที่มีโอกาศขึ้น เท่ากับ m + n
2.จำนวนวงจรคูณแบบ 1 บิท ที่ต้องใช้ทั้งหมดเท่ากับ m x n
3. จำนวนวงจรบวกที่ต้องใช้ เท่ากับ (m-1)x(n-1) + 1 เช่น กรณี A และ B มีขนาด 4 bit ต้องใช้วงบวกอย่างน้อยเท่ากับ 10 วงจร กรณีใช้วงจรบวกแบบ 1 บิท
4. ไม่มีการคูณเลขเกินกว่า 1 บิท
5. การคูณเลขฐานสอง สามารถทำได้ด้วยการบวกแบบขนาน
เอารูปที่ 12 มาวิเคราะห์อีกครั้ง บริเวณพี้นที่สีเหลือง มันสามารถแทนได้ด้วยวงจรบวก 4 บิท ตามรูปที่ 13 ข้างล่าง เพราะมันมีจำนวนบิทเท่ากับ 4 บิทคือเริ่มจากบิท 1 ถึง บิท 4
รูปที่ 13 ใช้วงจร 4 bit full adder ในการบวกพื้นที่บางส่วนของผลคูณ |
ดูในบิท2 บริเวณพื้นที่สีเหลือง คือผลบวกของ A2B0 + A1B1 และอยู่ในพื้นที่เส้นประสีแดงเท่ากับ A0B2 ซึ่งเป็นบริเวณไม่ทับซ้อน
ดังนั้นผลรวมในบิท 2 มีค่าเท่ากับ A2B0 + A1B1 + A0B2 เท่ากับผลลัพท์ที่ต้องการในบิท2 (X2 ล่างสุด ในรูปที่ 14)
เปรียบเทียบกับวงจรคูณเลขแบบ 4 บิท รูปที่ 14ข้างล่าง ที่ Full Adder 4 บิท ตัวบนคือการบวกพื้นที่สีเหลือง ตัวที่สองคือการบวกพื้นที่สีแดง และตัวที่สามคือการบวกพื้นที่สีเขียว มันจะเหลื่อมกัน 1 บิทแบบตารางข้างบน
รูปที่ 14 4 bit multiplier โดยการใช้ 4 bit full adder และ 1 bit multiplier |
1. วงจรในรูปสร้างโดยใช้ โปรแกรม Logisim
2. 4 bit full adder ในรูปเป็นการใช้ subcircuit ในวงจร Logisim เพื่อจะได้ไม่ต้องแสดงรายละเอียดข้างในของ 4 bit full adder ตามรูปที่ 13
3. Ci หรือ Carry in ไม่จำเป็นต้องใช้ เพราะเราใช้ ขา A3 ของ 4 bit full adder ทำงานแทน ดังนั้น ควรจะต่อ Ci ทั้งหมดลง Ground
ดูวิดีโอการสร้างและทดลอง ได้ที่นี่
สมมุติ เราเขียนโปรแกรมด้วย ภาษาชั้นสูง เช่น C, C++, Python และอื่นๆ ที่รองรับคำสั่งการ loop เราอาจเขียนโปรแกรมประมาณนี้
Read A; #อ่านค่า A ตัวตั้ง
Read B ; #อ่านค่า B ตัวคูณ
X = 0; #ให้ X มีค่าเท่ากับ 0 ในตอนเริ่มต้น , X เป็นผลลัพท์ของ AxB
For I = 1 to B # ทำวน loop
{ I = I +1; # เพิ่มค่า I ทีละหนึ่ง
X = X +A; # เพิ่มค่า X ด้วย A
}
END
แล้ว Compiler ของภาษาที่ใช้เขียนโปรแกรมจะแปลเป็นรหัสที่ CPU เข้าใจได้
เมื่อลงลึกไปถึงวงจรภายใน การวนลูปในลักษณะนี้ ต้องอาศัย การ Shift register , การเปรียบเทียบบิท และการบวก ซึ่งจะไม่มีการใช้วงจรคูณแต่จะอาศัยวงจร Shift register หรือวิธีการ Shift register , การเปรียบเทียบ บิท , Register เป็นต้น ยังจะไม่กล่าววิธีการเหล่านี้ในตอนนี้
0 comments:
Post a Comment