D latch เป็นวงจรดิจิทัลประเภทหนึ่งที่สามารถเก็บข้อมูลได้ 1 บิตด้วยอินพุต 1 ตัว (D สำหรับข้อมูล/ความล่าช้า) และสัญญาณเปิดใช้งาน (CLK หรือ EN) เอาต์พุตของแลตช์จะตามหลังอินพุต D เมื่อ CLK สูง และยังคงเท่าเดิมเมื่อ CLK ต่ำ อาจถือได้ว่าเป็นเซลล์หน่วยความจำพื้นฐานที่สามารถตั้งค่าหรือรีเซ็ตได้ด้วยการป้อนข้อมูล
สามารถออกแบบ Delay Latch (D-Latch) ได้โดยใช้กลอนประตู SR พร้อมอินเวอร์เตอร์ (NOT gate) ที่เชื่อมต่อระหว่างอินพุตเปิดใช้งาน ซึ่งทำให้สามารถใช้งานอินพุต D (ข้อมูล) ได้หนึ่งรายการ มันช่วยให้แน่ใจว่าในเวลาเดียวกัน อินพุตทั้งสอง นั่นคือ S และ R จะไม่เท่ากับ 1 เลย ดังนั้นจึงหลีกเลี่ยงสถานะต้องห้ามในแลตช์ SR พิน D เป็นพินที่สำคัญและพบได้ทั่วไปที่สุดในบรรดาพินนาฬิกาอื่นๆ เนื่องจากต้องใช้ชิ้นส่วนน้อยที่สุดและมีหลักการทำงานที่เรียบง่ายมาก
เป็นไปได้ที่จะสร้างพิน D โดยใช้พิน SR ทำได้โดยเชื่อมต่ออินพุต D เข้ากับอินพุต Set (S) ไม่ใช่ D เข้ากับอินพุต Reset (R) และใช้สัญญาณนาฬิกาเพื่อเปิดใช้งานอินพุต Set และ Reset พร้อมกันโดยใช้เกต AND การกำหนดค่านี้จะช่วยให้แน่ใจว่าเมื่อสัญญาณนาฬิกาทำงาน อินพุต D จะถูกส่งไปยังเอาต์พุตของแลตช์ ซึ่งทำให้เกิดแลตช์ D อย่างมีประสิทธิภาพ เมื่ออินพุตนาฬิกาต่ำ แลตช์ SR จะอยู่ในสถานะยึดและรักษาค่าที่โหลดไว้ก่อนหน้านี้
รูปที่ 2: อินเวอร์เตอร์หันเข้าหากันเหมือนหมุด
การสร้าง D-pin จากพิน SR ต้องใช้ชิ้นส่วนเพิ่มเติม ดังนั้นจึงมีอีกวิธีหนึ่งในการสร้าง D-pin ที่ใช้กันอย่างแพร่หลายในอุตสาหกรรมอิเล็กทรอนิกส์
ในรูปที่ 2(a) อินเวอร์เตอร์แบบแบ็คทูแบ็คที่แสดงนี้สามารถจัดเก็บข้อมูลได้ 1 บิต อย่างไรก็ตาม หากไม่มีการแก้ไขใด ๆ ก็ไม่มีทางที่จะเปลี่ยนแปลงข้อมูลได้ เพื่อทำความเข้าใจเรื่องนี้ ให้ถือว่าในรูปที่ 2(b) แลตช์ได้จัดเก็บตรรกะ 1 ไว้ที่เอาต์พุตอย่างใดอย่างหนึ่ง
ในรูปที่ 2(c) เพื่อเปลี่ยนตรรกะ สวิตช์จะถูกใช้กับเกตของอินเวอร์เตอร์ตัวที่สอง เราจะเรียกสวิตช์นี้ว่าสวิตช์ข้อมูล สวิตช์ข้อมูลนี้กำลังพยายามบังคับค่าจาก 0 เป็น 1 ที่พอร์ตอินเวอร์เตอร์ตัวที่สอง อย่างไรก็ตาม อินเวอร์เตอร์ตัวแรกกำลังพยายามรักษาลอจิก 0 ไว้ที่โหนดเดียวกัน และสวิตช์กำลังบังคับให้เป็นลอจิก 1 ดังนั้นจึงมีการโต้แย้งที่ชัดเจน สวิตช์อินเวอร์เตอร์ตัวแรกและ NMOS สร้างเส้นทางความต้านทานต่ำมากจากแหล่งจ่ายไฟไปยังกราวด์ ซึ่งอาจส่งผลให้เกิดกระแสไฟฟ้าขนาดใหญ่
ในรูปที่ 2(d) เพื่อขัดจังหวะเส้นทางกระแสไฟฟ้า สวิตช์จะถูกแทรกระหว่างเอาต์พุตของอินเวอร์เตอร์ตัวแรกและเกตของอินเวอร์เตอร์ตัวที่สอง ดังนั้นจะต้องถอดสวิตช์นี้ออกก่อนแล้วจึงเชื่อมต่อสวิตช์ข้อมูล
รูปที่ 3: การปรับเปลี่ยนสลักแบบอินเวอร์เตอร์แบบแบ็คทูแบ็คให้เป็นสลักแบบ D ที่สามารถใช้งานได้
เราได้เห็นในรูปที่ 2 แล้วว่าข้อมูลสามารถโหลดลงในแลตช์ได้อย่างไรโดยอาศัยอินเวอร์เตอร์แบบแบ็คทูแบ็ค เราจะเพิ่มอินเวอร์เตอร์อีกตัวหนึ่งก่อนสวิตช์ข้อมูลดังแสดงในรูปที่ 3 ในรูปที่ 3 สวิตช์ข้อมูลแสดงโดย TG2 TG ย่อมาจาก Transmission Gate Switch วงจรสมบูรณ์ของแลตช์ D แสดงอยู่ในรูปที่ 3 (ขวา)
D latch ตาม MUX (มัลติเพล็กเซอร์)
รูปที่ 4: D latch ที่ใช้มัลติเพล็กเซอร์
อีกวิธีหนึ่งในการทำความเข้าใจต้นกำเนิดของ D latch คือการคิดว่ามันเป็นมัลติเพล็กเซอร์ เอาท์พุตของมัลติเพล็กเซอร์ 2 x 1 สามารถป้อนกลับไปยังอินพุตตัวใดตัวหนึ่งได้ (CLK=0) อินพุตอื่น (CLK=1) อาจเป็นอินพุต D วงจรภายในจะมีลักษณะคล้ายกับวงจรอินเวอร์เตอร์แบบแบ็คทูแบ็ค
ตารางการกระตุ้นของพิน D ระบุไว้ข้างต้น D คืออินพุต Q คือสถานะปัจจุบัน Qn + 1 คือสถานะเอาต์พุตถัดไป Qn+1 จะเป็น 0 เสมอเมื่อ D เป็น 0 และ Qn+1 จะเป็น 1 เสมอเมื่อ D เป็น 1 โดยไม่คำนึงถึงสถานะปัจจุบันของฟลิปฟล็อป X หมายความว่าไม่สนใจ
แลตช์ D เรียกอีกอย่างหนึ่งว่าแลตช์โปร่งใส เนื่องจากเมื่อ CLK สูง เอาต์พุต Q จะโปร่งใสต่ออินพุต D ซึ่งหมายความว่าการเปลี่ยนแปลงใดๆ ใน D จะสะท้อนไปยัง Q ทันที อย่างไรก็ตาม นั่นยังหมายความอีกด้วยว่าข้อผิดพลาดใดๆ ที่อินพุต D จะปรากฏที่เอาต์พุตระหว่างช่วง CLK สูง ซึ่งอาจทำให้เกิดข้อผิดพลาดหรือความขัดข้องได้
เพื่อหลีกเลี่ยงปัญหาการทำงานผิดปกติของตัวล็อก D ที่ทริกเกอร์ระดับ เราสามารถใช้ฟลิปฟล็อป D อื่นได้ ฟลิปฟล็อป AD เป็นวงจรที่อัปเดตเอาต์พุตเฉพาะที่ขอบ (เพิ่มขึ้นหรือลดลง) ของสัญญาณนาฬิกาเท่านั้น แทนที่จะอัปเดตที่ระดับ (สูงหรือต่ำ) ของสัญญาณนาฬิกา วิธีนี้จะช่วยให้แน่ใจว่าเอาต์พุต Q จะเปลี่ยนแปลงเฉพาะในเวลาที่แยกจากกันและคาดเดาได้เท่านั้น การเปลี่ยนแปลงสัญญาณทั้งหมดเกิดขึ้นในสถานะคงที่ของสัญญาณนาฬิกา ซึ่งอาจเกิดข้อผิดพลาดได้ ดังนั้นขอบนาฬิกาคือเวลาที่ดีที่สุดในการจับและล็อคอินพุตครั้งสุดท้าย
ฟลิปฟล็อป D (หรือดีเลย์) ทำหน้าที่เป็นองค์ประกอบหน่วยความจำอิเล็กทรอนิกส์ เนื่องจากเอาต์พุตจะถูกเก็บรักษาไว้ เว้นแต่จะมีการปรับเปลี่ยนโดยตั้งใจโดยสัญญาณนาฬิกาขอบขาขึ้น ฟลิปฟล็อปนี้ยังใช้ในการหน่วงเวลาการเปลี่ยนแปลงในสัญญาณเอาต์พุต (Q) จนกระทั่งถึงขอบขาขึ้นถัดไปของสัญญาณอินพุตการจับเวลาสัญญาณนาฬิกา
รูปที่ 5: ขอบด้านลบจะกระตุ้น D Flip-Flop
สามารถสร้างฟลิปฟล็อป AD ได้โดยเชื่อมต่อพิน D สองพินแบบอนุกรมโดยมีสัญญาณนาฬิกากลับด้าน (ดังแสดงในรูปที่ 5) พินแรกเรียกว่าพินหลักและพินที่สองเรียกว่าพินสเลฟ พินหลักจะเริ่มต้นที่ D เมื่อ CLK มีค่าสูงและส่งต่อไปยังพินสเลฟ CLK มีค่าต่ำ ตอนนี้ข้อผิดพลาดใดๆ ที่อินพุตจะไม่ส่งผลต่อเอาท์พุตของสเลฟ เนื่องจากแลตช์หลักถูกปิดใช้งาน สิ่งนี้จะเห็นได้เมื่อตัวล็อคกำลังอัปเดตเอาต์พุต Q บนขอบตกของนาฬิกาและยึดไว้จนกระทั่งถึงขอบตกครั้งต่อไปของนาฬิกา
รูปที่ 6: ขอบบวกจะเปิดใช้งาน D Flip-Flop
สามารถสร้างฟลิปฟล็อป D ที่ทริกเกอร์ขอบบวกได้โดยการเชื่อมต่ออินเวอร์เตอร์อื่นหลังจาก CLK หรือโดยการจัดเรียงอินเวอร์เตอร์ที่มีอยู่ใหม่ (แสดงในรูปที่ 6)
สามารถสร้าง D flip-flop ได้โดยใช้ SR Flip-Flop โดยเชื่อมต่อเกต NOT จากพิน SET เข้ากับพิน RESET ตามที่แสดงในรูปด้านบน วิธีนี้ช่วยหลีกเลี่ยงสถานะต้องห้ามในฟลิปฟล็อป SR และช่วยให้แน่ใจว่าอินพุต S และ R จะตรงกันข้ามกันเสมอ แม้ว่านี่จะเป็นวิธีสร้าง D Flip-Flop จาก SR Flip-Flop แต่จำนวนเกตที่จำเป็นจะมากกว่าโครงสร้างมาสเตอร์-สเลฟที่ใช้ MUX
รูปที่ 7: แผนภาพระดับทรานซิสเตอร์ของ D Flip-Flop
ไดอะแกรมระดับทรานซิสเตอร์ของ D Flip-Flop แบบทริกเกอร์ที่ขอบแสดงอยู่ในรูปที่ 7 โดยใช้แลตช์แบบเกต (รูปที่ 4) เพื่อสร้าง D Flip-Flop (รูปที่ 7) นี่เป็นเวอร์ชันยอดนิยมที่สุดของ D flip-flop ที่ผลิตในเชิงพาณิชย์ สามารถเพิ่มอินพุตเพิ่มเติม เช่น PRESET (PRE) และ CLEAR (CLR) สำหรับฟังก์ชันเพิ่มเติมได้
รูปที่ 8: แผนผังภายในของวงจรรวม 74HC74 จาก Texas Instruments (ที่มา - Texas Instruments Inc.)
ไดอะแกรมระดับทรานซิสเตอร์ของวงจรรวม 74HC74 เชิงพาณิชย์จาก Texas Instruments แสดงอยู่ในรูปที่ 8 ไดอะแกรมนี้คล้ายกับไดอะแกรมที่แสดงในรูปที่ 7 โดยมีอินพุตเพิ่มเติม เช่น PRE และ CLR อินพุต PRE ระดับต่ำทำงานอยู่ที่นี่ นั่นคือ เมื่อ PRE = 1 ข้อมูลที่เก็บไว้ในแลตช์จะเป็น 1 ส่งผลให้เอาต์พุต Q = 1 ซึ่งจะใช้ในการตั้งค่าเงื่อนไขเริ่มต้นสำหรับฟลิปฟล็อป หากต้องการให้ PRE ส่งผลต่อสถานะภายใน ไม่จำเป็นต้องรอขอบสัญญาณนาฬิกา CLR จะล้างสถานะภายในและตั้งค่าเอาต์พุตเป็น 0 ซึ่งยังไม่ขึ้นอยู่กับขอบสัญญาณนาฬิกาด้วย