SR Latch
SR Latch
ต้องรอ negative edge เพื่อให้ Q = D Y = D Q = Y
ที่ positive edge Q = D ทันที
D D รักษาค่า Q, Q’ ไว้ 1 D’ D 1 D’ 1 D D’ D’
ตัวอย่างว่าทำไมใช้ Latch ไม่ได้ ต้องใช้ Flip-flop Tdelay (CLK) ในเอกสารผมเรียกขานี้ว่า write enable วงจรนี้จะทำงานถูกต้อง คือนับ +1 ทุกๆ clock cycle ถ้า Tclock < Tdelay (เพื่อปิด D latch ให้ทัน ก่อนที่ Q จะวนกลับมา) ต้องใช้ clock ความถี่สูงๆ เพื่อให้ Tclock น้อยๆ แต่ถ้าใช้ Flip-flip จะใช้ความถี่ต่ำเท่าใดก็ได้ ไม่จำเป็นต้องใช้ความถี่สูงมาก Tclock
Odd function
หา 0 ตัวแรก ที่ตามหลัง 1+ Figure 5.16 Input เปลี่ยนที่ inactive edge State เปลี่ยนที่ active edge หา 0 ตัวแรก ที่ตามหลัง 1+ Asynchronous reset (ไม่รอ clock) Input ไม่ stable, input ที่ stable คือ ก่อน active edge เล็กน้อย Input เปลี่ยนที่ inactive edge ให้ input ก่อนนานๆ Figure 5.16 Input มันก็ผ่านวงจรที่สร้าง input มา (สร้างตอน inactive edge) อาจจะมี delay กว่า input จะ stable
ไม่มี glitch Figure 5.19 ยังไง?
สร้างวงจร Mealy ได้ 2 แบบ 1
ในเอกสารภาษาไทย ผมให้ input เปลี่ยน positive edge คือใช้สัญญาณ positive edge ไปทำให้เกิด input (เวลาออกแบบวงจรผมทำแบบนี้) ดังนั้น input จะมาหลังจาก positive edge เล็กน้อยเนื่องจาก delay ก็เหมือนใน textbook ที่ให้ input เปลี่ยนที่ negative edge (ให้นักเรียนดูง่าย) เวลาวาด ผมไม่ชอบแสดง delay ผมว่ามันทำให้ดูยาก คำนวณ Next state ไว้ล่วงหน้า เปลี่ยน State ตาม Clock, เปลี่ยน Output ตาม Input ทันที (ต้อง hold Input ไว้ตลอดเวลาที่จะใช้ Output)
2
1 1 คำนวณ Next state, Next output ไว้ล่วงหน้า เปลี่ยน State, Output ตาม Clock (ไม่ต้อง hold input, input มาก่อน positive edge นิดเดียวก็ได้)
ปั๊มน้ำ: ลองเขียน FSM แบบ Moore และ Merely เพื่อควบคุมการทำงานของปั๊มน้ำ ให้ปั๊มทำงานต่อเนื่อง ไม่ติดๆ ดับๆ มีน้ำ sensor = 1 ไม่มีน้ำ sensor = 0 1 ปั๊มทำงาน 0 ปั๊มหยุดทำงาน ดูเฉลยในเอกสารคำสอน
เช็คว่ามี subsequence 111 ใน input หรือไม่? IN 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 1 1 0 1 0 1 OUT 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0
State assignment แบบ Binary
ถ้าไม่ใช้ D flip-flip ? JK และ T ทำได้แค่ set, reset, ฟังก์ชันที่ relative กับ previous state ไม่เหมือน D ที่เราสร้างฟังก์ชัน next state ได้ตามใจ