วันอังคารที่ 8 กรกฎาคม พ.ศ. 2557

บทที่ 15 ฟลิปฟลอป (Flip - Flop)

ฟลิปฟลอป (Flip - Flop)
:: บทที่ 15 ::
<<    15.1 R-S    Flop – Flop (Reset – Set Flop - Flop)
<<    15.2 JK Flip Flop
<<    15.3 D Flip - Flop (Data Flip - Flop)
<<    15.4 T Flip Flop (Toggle Flip-Flop)
<<    15.5 Master / Slave Flip - Flop (M/S Flip - Flop)
<<    15.6 การแทนฟลิปฟลอปด้วย VHDL  







        ฟลิปฟลอบ เป็นอุปกรณ์ที่ทำหน้าที่เก็บข้อมูลเหมือนกับแลตซ์ ต่างกันที่แลตซ์อาจจะมีขาควบคุมหรือไม่มีก็ได้ ถ้ามีขาควบคุม (Enable) ก็จะ
ทำงานที่ระดับสัญญาณ (Level - Triggered) ส่วนฟลิปฟลอปจะทำงานที่ขอบสัญญาณ อาจจะเป็นขอบขึ้น  (Positive Edge - Triggered) 
  ขอบลง(Negative Edge - Triggered) หรือทั้งสองกรณีรวมกันเป็นแบบพัลส์ (Pulse - Triggered) โดยเรียกสัญญาณควบคุมนี้ว่า
สัญญาณนาฬิกาหรือ Clock (CK, CLK, CP)อินพุตอื่นๆ จะมีผลกับฟลิบฟลอบก็ต่อเมื่อมีสัญญาณนาฬิกาเข้ามาเท่านั้น     เรียกอินพุตเหล่านี้ว่า
 Synchronous Input    ลักษณะของฟลิบฟลอบแสดงดังรูปที่ 15.1
                        

                                                                  รูปที่ 15.1 แสดงลักษณะขา Clock ของฟลิบฟลอบ
          เครื่องหมายสามเหลี่ยมที่ขานาฬิกา หมายถึงฟลิบฟลอบทำงานที่ขอบของสัญญาณนาฬิกาส่วนแบบพัลส์ (Pulse - Triggered) จะทำงานก็
ต่อเมื่อมีทั้งขอบขาขึ้นและขอบขาลงของสัญญาณนาฬิกาเข้ามา 1 พัลส์ นั่นเอง บางครั้งเรียกฟลิบฟลอบชนิดนี้ว่า Master/Slave Flip-Flop
15.1 R-S Flop – Flop (Reset – Set Flop - Flop)
            R-S Flop – Flop หรือบางครั้งเรียกว่า C-S Flop – Flop (Clear – Set Flop - Flop) ประกอบด้วย Synchronous Input 
2 อินพุต  คือ Reset (R) หรือ Clear (C) และ Set (S)
                       Reset (R) หมายถึงทำให้เป็น 0 ถ้าขา R active ทำให้เอาต์พุต Q เป็น 0
                       Set (S) หมายถึงทำให้เป็น 1 ถ้าขา S active ทำให้เอาต์พุต Q เป็น 1
                       โครงสร้างภายในของ R-S Flop – Flop แสดงดังรูปที่ 15.2   
          
                                                

                                                รูปที่ 15.2 แสดงโครงสร้างของ R-S Flop – Flop
           วงจร Edge Detector เป็นวงจรสร้างสัญญาณพัลส์ แคบๆ เมื่อสัญญาณนาฬิกา มีการเปลี่ยนระดับลอจิก โดยแบ่งเป็น 2 ชนิดคือ สร้างพัลส์ที่
ขอบขึ้นของสัญญาณนาฬิกา (สัญญาณนาฬิกาเปลี่ยนจาก 0 เป็น 1) และสร้างพัลส์ที่ขอบลงของสัญญาณนาฬิกา (สัญญาณนาฬิกาเปลี่ยนจาก 1 เป็น 0)

                            

                                                      รูปที่ 15.3 แสดงวงจร Edge Detector
              ความกว้างของพัลส์ของ CK ที่เกิดขึ้นมีค่าเท่ากับช่วงเวลาประวิงของ Inverter
                         วงจรสร้างพัลส์ที่ขอบขึ้นของสัญญาณนาฬิกาจะใช้กับฟลิปฟลอปแบบ Positive Edge - Triggered
                          วงจรสร้างพัลส์ที่ขอบลงของสัญญาณนาฬิกาจะใช้กับฟลิปฟลอปแบบ Negative Edge - Triggered
            จากวงจรรูปที่ 15.2 ถ้า Set (S) = Reset (R) = เอาต์พุต   ยังคงเหมือนเดิม
                           ถ้า Set (S) = 0, Reset (R) = 1 ทำให้เอาต์พุต   เป็น 0    เป็น 1
                             ถ้า Set (S) = 1, Reset (R) = 0 ทำให้เอาต์พุต    เป็น 1   เป็น 0
                           กรณี Set (S) = Reset (R) = 1 เป็นกรณีที่ไม่มีการใช้งาน
  จากคุณสมบัติการทำงานของวงจรรูปที่ 15.2 นำไปเขียนแทนด้วยสัญลักษณ์และตารางความจริงได้ดังรูปที่ 15.4 โดยใช้วงจร Edge Detector
 แบบสร้างพัลส์ที่ขอบขึ้นของสัญญาณนาฬิกา ดังนั้น ฟลิบฟลอบจึงทำงานที่ขอบขึ้นของสัญญาณนาฬิกา (Positive Edge - Triggered)

                            

                                        รูปที่ 15.4 แสดงสัญลักษณ์และคุณสมบัติของ R-S Flip - Flop
     15.1.1 Clock pulse
                    Flip Flop ที่ได้กล่าวมาแล้วทั้งสองแบบ เป็น Flip Flop ที่เปลี่ยนสภาวะโดยระดับสัญญาณ Logic ที่ป้อนโดยตรง ในกรณีที่จะใช้
            Flip Flop ต่อร่วมกันหลายๆ ภาค จะใช้วิธีการเช่นนี้จะทำให้ไม่สะดวกเพราะไม่สามารถจะทำให้เกิดการเปลี่ยนสกาวะพร้อมๆ กันได้วิธีการ
            ที่จะทำให้Flip Flop แต่ละตัวเปลี่ยนสภาวะพร้อมๆ กันนั้น ต้องมีการให้สัญญาณการเปลี่ยนสภาวะ สัญญาณดังกล่าวเรียกว่า Clock pulse
           (CK) ซึ่งมีรูปคลื่นและส่วนประกอบดังรูป

                                                                       

                                                                รูปที่ 15.5 Clock pulse

                                           

                                                                           รูปที่ 15.5 (ต่อ)
            รูปที่ 15.5  เป็นรูปคลื่นของ Clock pulse (CK) ซึ่งเขียนให้เห็นความชันทางด้านที่คลื่นเปลี่ยนสภาพจาก 0V เป็น + 5V หรือที่ เรียกว่า
   ขอบขาขึ้น (Leading edge) กับส่วนที่เปลี่ยนจาก +5V เป็น 0V หรือที่เรียกว่าขอบขาลง (Trailing edge) แต่ในทางเป็นจริงแล้ว ทั้งขอบ
   ขาขึ้น และขอบขาลงใช้เวลาสั้นมากเมื่อเทียบกับความกว้างของ pulse ดังนั้นเรามักเห็นเป็นเส้นตั้งฉาก 
      15.1.2 R-S Flip Flop ใช้ Clock pulse
                     R-S Flip Flop ทั้งสองชนิดสามารถใช้ Clock pulse เป็นตัวควบคุมได้โดยต่อแอนด์เกตไปในวงจรดังแสดงตามรูปที่ 15.6

                     

                                              รูปที่ 15.6 R-S Flip Flop with Clock pulse

                               ตารางที่ 15.1 Truth table ของ R-S Flip Flop เมื่อมี Clock pulse

                                                             
             จากรูปที่ 15.6 ปกติที่ขา CK เป็น Logic 0 Output ของ AND gate    ทั้งสองตัวจะเป็น Logic 0ทั้งคู่ และทำให้ไม่เกิดการเปลี่ยน
 สภาวะตามคุณสมบัติเดิมแต่ถ้า CK เปลี่ยนสภาวะจาก Logic 0 เป็น Logic 1 ในช่วงขอบขาขึ้นของ pulse ทำให้ Output ของ AND gate
 เป็นไปตามข้อมูลของ R และ S นั่นคือ Output   และ    ก็จะเป็นไปตามเงื่อนไขที่ได้กล่าวมาแล้ว สำหรับในขณะขอบขาลงของ  CK จน
กระทั่ง CKเป็น Logic 0 นั้น  Output   ของ AND gate   ทั้งสองเป็น Logic 0 นั่นคือไม่มีการเปลี่ยนสภาวะ โดยสภาวะเติมก่อนขอบขาลง
เป็นสภาวะใดเมื่อพ้นขอบขาลงของ CK แล้ว ก็จะเป็นไปตามนั้น (เครื่องหมายลูกศรชี้ขึ้นของช่วง CK ตามตารางที่ 15.1 หมายความว่า Active 
ที่ขอบขาขึ้นของ CK)
           เนื่องจาก Output    และ    จะเปลี่ยนแปลงสภาวะตามเงื่อนไขของ Input R และ S ก็ต่อ เมื่อ CK อยู่ที่สภาวะเป็น Logic เท่านั้น 
หรือที่ เราเรียกว่า Active high ถ้าหาก CK อยู่ในสภาวะเป็น Logic 0 เราไม่สามารถเปลี่ยนแปลงสภาวะของ Output   และ   ให้เลย 
แต่ในบางครั้ง เราจำเป็น ต้องให้ Output   เป็น Logic 0 หรือ 1โดยไม่ต้องการรอจังหวะจาก CK ดังนั้นเราต้องเพิ่มขา Clear (CLK) และ
 Preset (PR) เข้าไป ปกติขา Clear และ Preset เราให้ Logic 0 ไว้ ถ้าต้องการให้   เป็นLogic 1 ในช่วงที่ CK ยังเป็น Logic 0 อยู่
 เราก็เปลี่ยน Logic  ที่ขา Preset จาก Logic 0  เป็น  Logic 1 Output   ก็จะเป็น Logic 1 โดยไม่สนใจว่า   สภาวะเดิมเป็น Logic 0
 หรือ Logic 1 ในทางกลับ กัน ถ้าต้องการให้   เป็น Logic 0   โดยไม่สนใจว่าสภาวะเดิมเป็นอะไร ก็ให้ขา Clear เป็น Logic 1ในบางกรณี 
ถ้าเราต้องการให้ CK หรือ Preset หรือ Clear ทำงานแบบ Active Low เราก็สามารถทำได้โดยการใส่ Inverter เข้าไปที่ขานั้น

                                                                                                                                                                                         << Go To Top
     15.2 JK Flip Flop
                      R-S Flip Flop ที่กล่าวมาแล้ว มีข้อเสียที่ไม่สามารถนำไปใช้งานกรณี S = R = 1 จึงมีการดัดแปลงไปเป็น J-K Flip Flop 
              ขา J   มีคุณสมบัติเหมือนกับขา S และขา K มีคุณสมบัติเหมือนกับ ขา R กรณี J = K = 1 เอาต์พุตของฟลิปฟลอป (   และ  ) 
             จะมีลอจิกตรงข้ามกับ ค่าเดิม ส่วนกรณีอื่นๆ มีคุณสมบัติเหมือนกับ R-S Flip Flop โครงสร้างภายในของ J-K Flip Flop แสดงดัง
             รูปที่ 15.7

                                          

                                                   รูปที่ 15.7 แสดงโครงสร้างของ J-K Flip Flop
           จากวงจรกรณี J = K = 1 เมื่อมีสัญญาณนาฬิกาเข้ามา ถ้าเดิม Q เป็น 0 ก็จะเปลี่ยนเป็น 1 ถ้าเดิม Q เป็น 1 ก็จะเปลี่ยนเป็น 0 เรียกการทำงาน
   กรณีนี้ว่า Toggle
          ถ้าวงจร Edge Detector เป็นแบบสร้างพัลส์ที่ขอบขึ้นของนาฬิกา จะได้ J-K Flip Flop แบบ Positive Edge – Triggered ซึ่งมี
  สัญลักษณ์และตารางความจริงแสดงดังรูปที่ 15.8


                                         

                                                รูปที่ 15.8 แสดงสัญลักษณ์และคุณสมบัติของ J-K Flip Flop
     จากตารางความจริงนำไปเขียนความสัมพันธ์ระหว่าง  กับ  เขียน KM เป็นสมการลอจิกและแผนภาพสเตจของ J-K Flip Flop ได้ดังนี้

                         

                                                รูปที่ 15.9 แสดงการนำตารางความจริงไปเขียนความสัมพันธ์
          จากตารางความจริงของ J-K Flip Flop ในรูปที่ 15.8 เป็นตารางแสดงคุณสมบัติที่มองจากอินพุต ไปหาเอาต์พุตเป็นกรณีที่รู้ค่าอินพุตแล้วจึง
หาค่าเอาต์พุต ซึ่งจะใช้ในการวิเคราะห์วงจร แต่ในกรณีการออกแบบวงจรจะต้องพิจารณาในทางตรงกันข้าม กล่าวคือรู้ผลของเอาต์พุตก่อนแล้วจึงไป
หาอินพุตที่ทำให้เกิดเอาต์พุตตามต้องการ เรียกตารางคุณสมบัติที่มองจากเอาต์พุต ไปหาอินพุตนี้ว่า Input Table ของฟลิปฟลอบ โดยแปลงมาจาก
แผนภาพสเตจดังนี้

                                               ตารางที่ 15.2 แสดง Input Table ของ J-K Flip Flop

                                                                     

                                                                                                                                          << Go To Top
    15.3 D Flip - Flop (Data Flip - Flop)
              D Flip Flop เป็นฟลิปฟลอปที่ทำหน้าที่ส่งข้อมูลจากอินพุตไปยังเอาต์พุต โดยการควบคุมของสัญญาณนาฬิกา ขา Synchronous 
        Input ของ D Flip Flop มีเพียง 1 ขา คือขา Data (D)
              จากตารางความจริงของ J-K Flip Flop ในรูปที่ 15.8 ในกรณีที่ขา J และ K ได้รับลอจิกตรงกันข้าม เมื่อมีสัญญาณนาฬิกาเข้ามา 
         เอาต์พุต Q จะเหมือนกับลอจิกขา J และ K ให้ทำงานที่สถานะลอจิกตรงกันข้าม (เพิ่ม Inverter ที่ขา K) ดังรูปที่ 15.10 (ก) ซึ่งเป็นฟลิปฟลอบ
        แบบ Positive Edge - Triggered 

                                   

                                            รูปที่ 15.10 แสดงโครงสร้างและคุณสมบัติของ D Flip Flop
     จากตารางความจริงนำไปเขียนความสัมพันธ์ระหว่าง  กับ   เขียน KM เขียนสมการลอจิกและแผนภาพสเตจของ D Flip Flop ได้ดังนี้

                                     

                                           รูปที่ 15.11 แสดงการนำตารางความจริงไปเขียนความสัมพันธ์
จากแผนภาพสเตจนำไปเขียน Input Table ได้ดังตารางที่ 15.3      
                                                               
                                               ตารางที่ 15.3 แสดง Input Table ของ D Flip Flop

                                                                        

                                                                                                                                                                                     << Go To Top
       
 15.4 T Flip Flop (Toggle Flip-Flop)
                 T Flip Flop เป็นฟลิปฟลอปที่ดัดแปลงมาจาก J-K Flip Flop โดยการออกแบบให้ทำงานเฉพาะช่วง  Toggle   เท่านั้น   (J = K =1)    
         ลักษณะของ T Flip Flop   แสดงดังรูปที่ 15.12    ซึ่งเป็นฟลิบฟลอบแบบ Negative Edge - Triggered

                                          

                                           รูปที่ 15.12 แสดงโครงสร้างและคุณสมบัติของ T Flip Flop
           T Flip Flop ในรูปที่ 15.12 เป็นแบบไม่มีขา Clock จึงไม่สามารถนำไปใช้ในวงจรแบบซิงโครนัสได้ถ้าต้องการใช้งานแบบมี Clock
 ก็สามารถ ต่อวงจรได้ดังรูปที่ 15.13 ซึ่งเรียกว่า Clocked T Flip Flop

                            

                                        รูปที่ 15.13 แสดงโครงสร้างและคุณสมบัติของ  Clocked T Flip Flop
          จากตารางความจริงนำไปเขียนความสัมพันธ์ระหว่าง  กับ  เขียน KM เขียนสมการลอจิก และ Input Table ได้ดังนี้

                    

                                           รูปที่ 15.14 แสดงการนำตารางความจริงไปเขียนความสัมพันธ์

                                                                                                                                   << Go To Top
15.5 Master / Slave Flip - Flop (M/S Flip - Flop)
              ฟลิปฟลอบที่เคยกล่าวถึงในตอนแรก จะทำงานที่ตำแหน่งขอบขึ้นหรือขอบลงของสัญญาณนาฬิกา เรียกว่าแบบ Edge – Triggered ยังมี
        ฟลิปฟลอบอีกชนิดหนึ่งที่ทำงานเมื่อสัญญาณนาฬิกาเข้ามา 1 พัลส์ เรียกฟลิบฟลอบชนิดนี้ว่าเป็นแบบ Master / Slave Flip – Flop หรือแบบ 
         Pulse-Triggered

                        

                                     รูปที่ 15.15 แสดงลักษณะของ J-K Flip Flop แบบ Master / Slave
          จากรูปที่ 15.15 เป็น    J-K Flip-Flop    แบบ    Master/Slave   โครงสร้างภายในประกอบด้วยฟลิปฟลอป 2 ตัวคือ Master 
จะทำงานช่วงที่สัญญาณนาฬิกาเป็น 1 และ Slaveจะทำงานเมื่อสัญญาณ นาฬิกาเปลี่ยนไปเป็น   0   เนื่องจากฟลิปฟลอปชนิดนี้   ไม่ได้ทำงาน
ที่ขอบสัญญาณนาฬิกา ดังนั้นสัญลักษณ์ของฟลิปฟลอบในรูปที่ 15.15 (ข)   จึงไม่มีเครื่องหมายสามเหลี่ยม  (>)  ที่ขา Clock แต่จะ
เขียนรูปพัลส์ (   ) หรืออาจจะไม่เขียนเครื่องหมายใดๆ ที่ขา Clock ก็ได้
            เนื่องจากเอาต์พุตเปลี่ยนสถานะ ขณะที่สัญญาณนาฬิกาเปลี่ยนไปเป็น  0  จึงเขียนเครื่องหมาย  กำกับไว้ที่เอาต์พุต   และ  
            ข้อเสียของ M/S Flip-Flop ก็คือขา J และ K จะมีผลกับ Master ตลอดเวลาขณะที่สัญญาณนาฬิกาเป็น 1ดังนั้นในช่วงนี้  สัญญาณ
ที่ขา J และ K ต้องคงที่     ถ้าสัญญาณที่ขา J และ K เกิดการเปลี่ยนแปลงขณะที่สัญญาณนาฬิกาเป็น  1 จะทำให้ฟลิปฟลอปทำงานผิดพลาดได้
เพื่อแก้ไขปัญหานี้จึงได้มีการดัดแปลงเป็นฟลิปฟลอปแบบ Master/Slave with Data Lockout ซึ่งฟลิปฟลอปชนิดนี้ จะออกแบบให้ขา J
 และ K มีผลกับ Master ในช่วงเวลาสั้นๆ เท่านั้น (ประมาณ 20-30 ns) นอกจาก นั้นเอาต์พุตของ    Master   จะไม่มีการเปลี่ยนแปลงอีก       
  ถึงแม้สัญญาณนาฬิกาจะเป็น  1  ก็ตาม สัญลักษณ์ของฟลิปฟลอปชนิดนี้ แสดงดังรูปที่ 15.16


                                                                                         

                                              รูปที่ 15.16 แสดงสัญลักษณ์ของ M/s with Data Lockout
          ในรูปที่ 15.17 เป็นการเปรียบเทียบคุณสมบัติการทำงานของ    D Flip-Flop    แต่ละแบบดังนี้ D Latch ข้อมูลจากขา D จะส่งไปยัง Q
 เมื่อขา G ได้รับลอจิก 1 เท่านั้น ถ้าขา G ได้รีบลอจิก 0เอาต์พุต Q จะไม่มีการเปลี่ยนแปลง
    Positive Edge - Triggered D Flip-Flop   ข้อมลจากขา D   ส่งไปยังเอาต์พุต  Q  ที่ขอบขึ้นของสัญญาณนาฬิกาเท่านั้น ส่วนที่
ตำแหน่งอื่นเอาต์พุต Q ไม่มีการเปลี่ยนแปลง
    Negative  Edge -Triggered  D Flip-Flop   ข้อมูลจากขา D   จะส่งไปยังเอาต์พุต  Q  ที่ขอบลงของสัญญาณนาฬิกาเท่านั้น 
ส่วนที่ตำแหน่งอื่นเอาต์พุต Q ไม่มีการเปลี่ยนแปลง
    M/S D Flip-Flop ขณะ CK เป็น 1 ข้อมูลจากขา D จะถูกนำไปเก็บไว้ใน Master ถ้าข้อมูล

                  

                                                      รูปที่ 15.17 แสดงคุณสมบัติของ D Flip-Flop แต่ละแบบ
                                                                                                                                  << Go To Top

                                                                                                                                                                                      
15.6 การแทนฟลิปฟลอปด้วย VHDL  
             เราสามารถที่จะแทนวงจรของฟลิปฟลอบด้วยภาษา VHDL ได้โดยสามารถออกแบบได้จากสมการหรือโครงสร้างการทำงานของตัว
       ฟลิปฟลอปก็ได้ ตัวอย่างการแทนตัวฟลิบฟลอปด้วยภาษา VHDL แสดงดังรูปที่ 15.18 และ 15.19

---------------------------------------------
-- D Flip-Flop 
--
-- Flip-flop is the basic component in 
-- sequential logic design
-- we assign input signal to the output 
-- at the clock rising edge 
---------------------------------------------             
library ieee ;
Use ieee.std_logic_1164.all;
Use work.all;
---------------------------------------------
Entity dff is
        Port( data_in: in std_logic;
              clock: in std_logic;
              data_out: out std_logic
               );
         End dff;
----------------------------------------------
Architecture behv of dff is
       Begin
 Process(data_in, clock)
       Begin
 -- clock rising edge
If (clock='1' and clock'event) then
         data_out <= data_in;
End if;
End Process;
End behv;
----------------------------------------------
             
                                                  รูปที่ 15.18 การแทน D Flip-Flop ด้วย ภาษา VHDL

----------------------------------------------
-- JK Flip-Flop with reset 
-- the description of JK Flip-Flop is based 
-- on functional truth table
-- concurrent statement and signal assignment
-- are using in this example 
----------------------------------------------
library ieee;
Use ieee.std_logic_1164.all;
----------------------------------------------
Entity JK_FF is
             Port ( clock: in std_logic;
             J, K: in std_logic;
             reset: in std_logic;
             Q, Qbar: out std_logic );
End JK_FF;
-----------------------------------------------
Architecture behv of JK_FF is
-- define the useful signals here
           signal state: std_logic;
           signal input: std_logic_vector(1 downto 0);
Begin
-- combine inputs into vector
             input <= J & K;              
 p: Process(clock, reset) is
     Begin
               
If (reset='1') then
          state <= '0';
Elsif (rising_edge(clock)) then
 -- compare to the truth table
 Case (input) is
           when "11" =>
                    state <= not state;
           when "10" =>
                    state <= '1';
           when "01" =>
                    state <= '0';
           when others =>null;
End case;
End if;
End Process;
-- concurrent statements
              Q <= state;
              Qbar <= not state;
End behv;
-------------------------------------------------
             

ไม่มีความคิดเห็น:

แสดงความคิดเห็น