วันจันทร์ที่ 7 กรกฎาคม พ.ศ. 2557

บทที่ 11 วงจรทางคณิตศาสตร์

บทที่ 11 ::
วงจรทางคณิตศาสตร์
<< 11.1   วงจรบวกไม่คิดตัวทด (Half Adder Circuit)
<< 11.2   วงจรบวกคิดตัวทด (Full Adder Circuit)
<<  11.3   การออกแบบวงจร Adder ด้วย VHDL
<< 11.4   วงจรลบไม่คิดตัวยืม (Half Subtractor Circuit)
<< 11.5   วงจรลบคิดตัวยืม (Full Subtractor Circuit)
<<  1.6  การออกแบบวงจร ด้วย  Subtractor VHDL



<<  กลับหน้าหลัก 






            วงจรลอจิกที่ทำหน้าที่คำนวณในทางคณิตศาสตร์ เช่น วงจรบวก (Adder) วงจรลบ (Subtractor)        ฯลฯ สร้างจากลอจิกเกต
       เป็นส่วนหนึ่งของลอจิกเชิงจัดหมู่ (Combination) ใช้กันอย่างแพร่หลายในเครื่องคำนวณอิเล็กทรอนิกส์        ผู้ที่ศึกษาควรทำความ
       เข้าใจกับการบวก/ลบเลขฐานสองวิธีต่างๆ การสร้างและออกแบบวงจรบวก/ลบ เลขฐานสองที่เหมาะสม        ซึ่งสามารถประยุกต์ใช้งาน
       ร่วมกับส่วนของวงจรเข้ารหัส วงจรถอดรหัส วงจรเลื่อนข้อมูลและการแสดงผล เพื่อออกแบบเป็นเครื่องบวก/ลบเลขฐานสิบได้        
11.1 วงจรบวกไม่คิดตัวทด (Half Adder Circuit)
              วงจรบวกไม่คิดตัวทด คือวงจรที่ใช้ในการบวกเลขฐานสอง 2 บิต เข้าด้วยกัน เราสามารถที่จะสร้างตารางความจริงสำหรับวงจรบวก
       แบบไม่คิดตัวทด โดยมีอินพุตเป็นเลขฐานสอง 2 บิต และเอาต์พุตมี 2 ตัวเช่นเดียวกัน
                เมื่อสร้างวงจรลอจิกที่ทำหน้าที่บวก โดยไม่คิดตัวทด (Carry) จะได้วงจรที่มีอินพุต   2 อินพุต และมีเอาต์พุต 2 เอาต์พุต คือ ผลรวม
       ( ) และตัวทดออก เมื่อเขียนแผนภาพกรอบของวงจรบวกไม่คิดตัวทดได้ดังรูปที่        11.1 
                                               
       
                                                                  รูปที่ 11.1 แผนภาพกรอบวงจรบวกไม่คิดตัวทด
       
                                                                                   
        
                                                          ตารางที่ 11.1 ตารางความจริงวงจรบวกแบบไม่คิดตัวทด
                    ดังนั้นเมื่อนำสมการทั้งสองสมการมาเขียนวงจรลอจิกเพื่อทำการบวกไม่คิดตัวทด        จะได้ดังรูปที่ 11.2 (ก) และ 11.2 (ข)
       ใช้เอกซ์คลูซีฟออร์ และใช้แอนด์เกต มาสร้างแทนวงจรรูปที่ 11.2 (ก) เมื่อป้อนลอจิกที่อินพุตของ   A B ตามตารางที่ 11.1 จะได้ผลลัพธ์ที่ 
        และ     ดังตารางเช่นกัน 
        
            
       
                       (ก) จากสมการที่ 10.1 a และ 10.2                                                   (ข) จากสมการที่ 10.1 b และ 10.2
       
                                                                       รูปที่ 11.2 วงจรบวกแบบไม่คิดตัวทด
                                                                                                                             <<  Go To Top
11.2 วงจรบวกคิดตัวทด (Full Adder Circuit)
                    วงจรบวกคิดตัวทด คือวงจรที่ใช้บวกเลขฐานสอง 2 บิต และตัวทดอีก 1 บิต รวมเป็น 3 บิต เข้าด้วยกัน เราสามารถสร้างตาราง
             ความจริงสำรับวงจรบวกคิดตัวทด โดยมีอินพุตเป็นเลขฐานสอง 2 ตัว และตัวทดเข้า (Carry in : Ci) อีก 1 ตัว ส่วนเอาต์พุต มี 2 ตัว
             คือผลบวก (Sum) และ ตัวทดออก (Carry out :)  ดังนั้นจึงมีอินพุต 3 ตัว คือ A, B และ Cin เมื่อ A = ตัวตั้ง, B = ตัวบวก, 
            C = ตัวทดเข้า ลักษณะของแผนภาพกรอบวงจรบวกคิดตัวทดแสดงในรูปที่ 11.3 และตารางความจริงแสดงผลการบวกเลขฐานสอง
             ด้วยวงจรบวกคิดตัวทดแสดงในตารางที่ 11.2

                                       
                                                                       รูปที่ 11.3 แผนภาพกรอบวงจรบวกคิดตัวทด

                                               
                                                            ตารางที่ 11.2 ตารางความจริงวงจรบวกแบบคิดตัวทด

               เมื่อพิจารณาจากสมการ          และ   จากตารางที่ 11.2  จะได้ว่า

                    
          ดังนั้นวงจรลอจิกเกตของวงจรบวกคิดตัวทดจะแสดงดังรูปที่ 11.4 (ก) และ (ข) เขียนมาจากสมการ   และ  ที่ลดรูปได้ดังกล่าว
  ซึ่งจะเห็นว่าวงจรบวกคิดตัวทดจะมีโครงสร้างลอจิกเกตเหมือนวงจรบวกไม่คิดตัวทด 2 วงจร และนำตัวทดออกทั้ง 2 วงจรต่อผ่านออร์เกต
  1 ตัว เพื่อแสดงตัวทดออกรวมของวงจรบวกคิดตัวทดดังรูปที่ 11.4 (ข)
                            

                                รูปที่ 11.4 จากสมการที่ 10.3 วงจรบวกคิดตัวทด เมื่อยังไม่ได้ทำการลดทอนสมการ

             

                      รูปที่ 10.5 จากสมการที่ 10.4 วงจรบวกคิดตัวทด เมื่อทำการลดทอนสมการแล้ว

                             

              รูปที่ 11.6 วงจรบวกเลขฐานสองขนาด 3 บิต ที่ใช้วงจรบวกคิดตัวทดและไม่คิดตัวทดร่วมกัน

                             

                       รูปที่ 11.7 วงจรบวกเลขฐานสองขนาด 3 บิต ที่ใช้วงจรบวกคิดตัวทด 3 วงจร
                                                                                                                              <<  Go To Top
11.3  การออกแบบวงจร Adder ด้วย VHDL
                       จากวงจร Adder สามารถเขียนเป็นภาษา VHDL ได้ดังนี้
--------------------------------------------------------
-- VHDL code for n-bit adder 
--
-- function of adder:
-- A plus B to get n-bit sum and 1 bit carry 
-- we may use generic statement to set the parameter 
-- n of the adder. 
--------------------------------------------------------
         library ieee;
         Use ieee.std_logic_1164.all;
         Use ieee.std_logic_arith.all;
         Use ieee.std_logic_unsigned.all;          
--------------------------------------------------------
Entity ADDER is
Generic(n: natural :=2);
           Port( A: in std_logic_vector(n-1 downto 0);
                 B: in std_logic_vector(n-1 downto 0);
                 carry: out std_logic;
                 sum: out std_logic_vector(n-1 downto 0));
End ADDER;
--------------------------------------------------------
Architecture behv of ADDER is
-- define a temparary signal to store the result
signal result: std_logic_vector(n downto 0);
           
           Begin 
           
           -- the 3rd bit should be carry
           
                result <= ('0' & A)+('0' & B);
                sum <= result(n-1 downto 0);
                carry <= result(n);
End behv;
--------------------------------------------------------
         

                        รูปที่ 11.8 แสดงการออกแบบวงจร Adder ด้วย VHDL
                                                                                                                             <<  Go To Top
11.4  วงจรลบไม่คิดตัวยืม (Half Subtractor Circuit)
                  วงจรลบไม่คิดตัวยืม คือวงจรลบเลขฐานสอง 2 บิต เราเขียนตารางความจริงของวงจรลบไม่คิดตัวทด โดยมีอินพุตเป็นเลขฐานสอง 
     2 ตัว และเอาต์พุตก็มี 2 ตัว คือ ผลต่าง (Difference)      และ ตัวยืม (Borrow) กฎของการลบเลขฐานสองคล้อยกฎของการลบเลขฐานสิบ
    คือ ถ้าตัวตั้งน้อยกว่าตัวลบ      ต้องยืมหลักที่สูงกว่ามา 1 สำหรับเลขฐานสองเมื่อยืมหลักที่สูงกว่ามา 1 และนำไปใช้ในหลักต่ำกว่าจะมีค่าเป็น 2
       กฎของการลบเลขฐานสองจากที่ได้ศึกษามาแล้วในเรื่องของการลบเลขฐานสอง      จะพบว่ากรณีที่ 0-1 จะมีค่าเป็น 1 และมีการยืม 
     (Borrow) จากบิตสูงกว่ามา 1 ดังนั้น     0-1 = 1 และ Borrow = 1 โดยตัวตั้ง คือ   A   ตัวลบ   คือ B    ผลของการลบเรียกว่าผลต่างคือ   
     (Difference)  ตัวยืมคือ Borrow out = ดังนั้นเมื่อนำมาเขียนตารางความจริงแสดงการลบเลขฐานสองขนาด   1 บิต โดยใช้วงจรลบ
   ไม่คิดตัวยืม เขียนแผนภาพกรอบได้ดังรูปที่ 10.8 สรุปเป็นตารางความจริงได้ดังตารางที่      11.3 และเขียนวงจรจากสมการได้ดังรูปที่ 10.9
                                        
 
                                                                  รูปที่ 10.9 แผนภาพกรอบวงจรลบไม่คิดตัวยืม

                                                                   

                                                            ตารางที่ 11.3 ตารางความจริงวงจรลบแบบไม่คิดตัวยืม

                           เมื่อนำเอาต์พุต  และ  จากตารางที่ 11.3 มาเขียนสมการพีชคณิตบูลีนจะได้ว่า

                              

                                                      

                                                                    รูปที่ 11.10 (ก) จากสมการที่ 11.5 a และ 11.6
             
                                                         

                                                                       รูปที่ 11.10 (ข) จากสมการที่ 11.5 b และ 11.6
                                                                                                                            << Go To Top
11.5 วงจรลบคิดตัวยืม (Full Subtractor Circuit)
               วงจรลบคิดตัวยืม คือ วงจรลบเลขฐานสอง 2 บิต และ ลบด้วยตัวยืมอีก 1 บิต เราสามารถเขียนตารางความจริงของวงจรลบคิดตัวยืม
   โดยมีอินพุตเป็นเลขฐานสอง 2 บิต และตัวยืม (Borrow in : ) ส่วนเอาต์พุตก็มี 2 ตัว คือ ผลต่าง (Difference) และ ตัวยืม (Borrow out
    : ) เมื่อทำการลบเลขมากกว่า 1 บิต นอกจากจะต้องลบตัวตั้ง (A) และตัวลบ (B) แล้ว เมื่อมีการยืมออกมาจากบิตที่สูงกว่า () ข้อมูลที่ถูกยืม
  ออกมาต้องป้อนเข้าเพื่อลบกับ A และ B ในบิตที่ต่ำกว่า ดังนั้นข้อมูลตัวยืมที่ต้องป้อนเข้าวงจรลบดังกล่าวเรียกว่า ตัวยืมเข้า () วงจรลบที่คิดตัวยืม
   (Full Subtractor Circuit) หมายถึงวงจรลบที่นำข้อมูลตัวตั้ง (A) ตัวลบ (B) และตัวยืมเข้า () มาลบกันได้พร้อมกัน จึงมี 3 อินพุต เอาต์พุต
  ของวงจรจะมี 2 เอาต์พุต คือ ผลต่าง () และตัวยืมออก () เมื่อนำการลบด้วยวงจรลบคิดตัวยืม  มาเขียนแผนภาพกรอบได้ดังรูปที่ 
  10.10  ตารางความจริงแสดงการลบ จะได้ดังตารางที่ 11.4  และวงจรที่ได้จากสมการแสดงในรูปที่ 10.11
                                          

                                                           รูปที่ 11.11 แผนภาพกรอบวงจรลบคิดตัวยืม

                                                           

                                                  ตารางที่ 11.4 ตารางความจริงวงจรลบแบบคิดตัวยืม

                   เมื่อนำเอาต์พุต  และ  จากตารางที่ 11.4 มาเขียนสมการพีชคณิตบูลีนจะได้ว่า

                                            


                                           
 
                                                         รูปที่ 11.12 (ก) วงจรลบคิดตัวยืม จากสมการที่ 11.7


             

                                           รูปที่ 11.12 (ข) วงจรลบคิดตัวยืม จากสมการที่ 11.8

                           

                                                         รูปที่ 11.13 วงจรลบเลข 4 บิตแบบขนาน
            
                                                                                                                                                                        << Go To Top
11.6  การออกแบบวงจร ด้วย  Subtractor VHDL
                       จากวงจร Subtractor สามารถเขียนเป็นภาษา VHDL ได้ดังน
--------------------------------------------------
-- SUBTRACTOR
-------------------------------------------------- 
library ieee;
Use ieee.std_logic_1164.all;
--------------------------------------------------
Entity SUBTRACTOR is
  Port( A: in std_logic;
            B: in std_logic;
         Ain: in std_logic; 
           Di: out std_logic;
          Bo: out std_logic);
End SUBTRACTOR;
--------------------------------------------------
Architecture behav1 of SUBTRACTOR is
      Begin
     Process(A,B,Ain)
       Begin
       Di <= A xor (B xor Ain);
       Bo <= ((not A) and B) or (Ain and (not A) xor (not B));
      End Process;
End behav1;
 --------------------------------------------------

1 ความคิดเห็น: