אם המחשב היה כולו מעגל צירופי אחד גדול, היינו צריכים לחכות נצח בין פעולה לפעולה.
אנו רוצים לחלק לפעולות קטנות שיקרו אחת אחרי השנייה, כמו פס ייצור, בשביל זה צריך לבנות D−FF.
רכיבי זכרון
אנו נחזור לבסיס ביותר. זהו SR−Latch.

הוא מורכב משני שערי NOR והוא מאפשר 4 פעולות:
- הכנסת S=1,R=0 היא פעולת SET אשר משימה את Q ל-1 אשר נשמר במערכת.
- הכנסת S=0,R=1 היא פעולת RESET אשר משימה את Q ל-0 אשר נשמר במערכת.
- הכנסת S=0,R=0 היא פעולת שמירה אשר פשוט שומרת את הערך הקודם שהוכנס.
- הכנסת S=1,R=1 יצור מצב שהוא לא נכון לוגית ולכן לא עושים את זה.
כדי למנוע מצב אסור אנו נרצה למנוע מצב בו שניהם 0. לשם כך, נוכל להוסיף שער NOT אשר דואג ששניהם לא יכולים להיות 1 באותו הזמן ושערי AND אשר דואגים שנוכל להכניס 0,0.

נסתכל כעת על מצב בו יש לנו שני D−Latchים המחוברים אחד לשני - הלוגיקה לפני הראשון פשוטה והלוגיקה אחרי השני מאוד מורכבת ולוקחת זמן.
אז החישוב של הראשון מסתיים מהר מאוד ורכיב הזכרון יתעדן מה שיגרום לכך שרכיב הזכרון השני יתעדכן לפני שלוגיקה בו תוכל לסיים לפעול ובכך, לא נקבל את הערך של החישוב המסובך שכן הערך החדש יהרוס אותו.
לשם כך נשתמש בשעון שהוא פשוט חוט אשר משתנה במחזור קבוע והוא מחובר ל-G-ים. על מנת שנוכל לשמור מידע מבלי לדאוג לזמנים יותר מדי, נשתמש בשני Latch-ים כאלו מחוברים אחד אחרי השני כך שהחלק הצירופי נמצא לפניהם כך:

זה בדיוק D−FF שהוא רכיב הזכרון הבסיסי. עקרון הפעולה שלו הינו:

Q זוכר תמיד מה היה קודם ב-D.
אילוצי זמנים
הערה (תזכורת -
tcd,tpd)
tcd אומר הכניסה השתנתה אך המוצא עוד לא התחיל להשתנות(כמה זמן יקח לו להתחיל להשתנות)
tpd הוא הזמן מהשינוי בכניסה עד שהיציאה מתייצבת(לא מדוייק ב-100% אבל מספיק טוב לקורס)
הגדרה 1 (
tsetup)
משך הזמן לפני עלית השעון שבו המידע חייב להיות יציב יקרא tsetup.
setup תמיד הולך עם tpd שכן זה הזמן בו אנו רוצים שהכל יתייצב.
הגדרה 2 (
thold)
משך הזמן לאחר עליית השעון שבו המידע חייב להמשיך להיות יציב יקרא thold
hold תמיד הולך עם tcd שכן זה הזמן עד שבו דברים מתחילים להשתנות.
אם לא נקפיד על הדברים האלו, התנהגות המערכת תהא בלתי צפוייה.
למה? כי גם בתוך ה-D−FF יש זמני tpd,tcd שלוקח לדברים להשתנות ולהתעדכן.
אם במיידי בירידת שעון נשנה את ה-Data יכול להיות שה-Data החדשה תשמר במקום הישנה.

המצב שאנו יכולים לראות פה קורה לאור מה שדיברנו עליו קודם בהערה, והוא הסיבה מדוע אסור לנו לשנות את הערך D עם עליית/ירידת השעון.
נשים לב כי גם ל-DFF יש tcd ו-tpd רק שב-DFF קוראים ל-tpd בשם המפוצץ tpc−q.
חיבור בטור
משפט (תנאי הכרחי לחיבור בטור)
אם אין לוגיקה צירופית בין הדלגדגים:
tcd(FF1)≥thold(FF2)
אם יש לוגיקה צירופית בין הדלגדגים:
tcd(FF1)+tcd(logic)≥thold(FF2)
משפט (תנאי הכרחי 2 לחיבור בטור)
אם אין לוגיקה צירופית בין הדלגדגים:
tpd(FF1)+tsetup(FF2)<tclock
אם יש לוגיקה צירופית בין הדלגדגים:
tpd(FF1)+tpd(logic)+tsetup(FF2)<tclock
הערה (שימוש נפוץ ב-
DFF הוא מחלק תדר)
מחלק תדר לוקח תדר מסויים ונותן לו מחזור של שני מחזורי שעון ובכך מחלקים את התדר.

תרגול

נתונים:
tpd(XOR)=10tcd(XOR)=1tpdC−Q(FF)=15tcdC−Q(FF)=2tsetup(FF)=5
א. מהו זמן המחזור המינימלי?
ב. מהו ה-thold המקסימלי שיאפשר עבודה תקינה של המעגל?
פתרון א':
יש לנו פה שני מסלולים, מכיוון שהם סימטריים נוכל לחשב רק את המקרה הגרוע באחד מהם, אך אם הם לא היו, אז היינו צריכים לבדוק את שניהם.
tpdC−Q(FF)+tpd(XOR)+tsetup(FF)≤tclock
30=15+10+5≤tclock
לכן, tclockmin=30.
פתרון ב':
tcdC−Q(FF)+tcd(XOR)≥thold
thold≤2+1=3
לכן, tholdmax=3.

ANDNOTFFtcd665tpd/CQ10810tsetup20thold10
חשבו את:
thold_newtsetup_newtpd_new
נתחיל מהקל: tpd_new.
ברגע שיש לנו flop הדבר הזה יעבוד כמו flop. אם יש לנו כניסה, כבר דאגו שהיא תהיה יציבה ותעבוד עם הזמן hold ולכן ה-tpd החדש יהיה:
tpd_new=tpd(NOT)+tpdC−Q(FF)=18
כעת נחשב את tsetup_new. החלק שבפועל דוגם הוא ה-FF ונדרש ש-setup לפני עליית שעון היציאה של ה-AND תהיה יציבה.
tsetup_new=tsetup(FF)+tpd(AND)=30
לבסוף, נחשב את thold_new. כעת, יש לנו דילי מובנה בכניסה לאור ה-AND ולכן זמן ה-hold יכול להיות קטן יותר.
thold_new=thold(FF)−tcd(AND)=4

נתון כי:
FFOFF1/FF2A/B/Ctpd121tsetup22
חשבו את Tmin בהנחה שתנאי hold מתקיים והכניסות מקיימות תנאי hold ו-setup.
כל מה שעשינו עכשיו בזה שהוספנו את ה-FF-ים למערכת הצירופית הזו הוא שיצרנו שלבים למערכת הזו אשר יכולים להתעדכן אחד אחרי השני.
ניתן לחשוב על FF-ים מחיצות ולכן לא צריך לחשב את כל המסלול הארוך, שכן כבר ברגע שהערך הקודם הגיע ל-FF הבא ניתן להכניס ערך חדש.
לכן, נדרש לחשב את התנאים לכל מקטע ונקח את ההכי גרוע שכן הוא יכתיב את הקצב של המערכת.
FF0→FF1:
T≥tpC−Q(FF0)+tpd(B)+tsetup(FF1)=4
FF1→FF2:
T≥tpC−Q(FF1)+tpd(C)+tsetup(FF2)=5
FF2→FF0:
T≥tpC−Q(FF2)+tpd(A)+tsetup(FF0)=5
לכן, Tmin=5.
שיטה לזכור
ציירו את הציור הבא:

ואז נסביר במילים ונקבל:
tsetup(FF2)+tpd(FF1)+tpd(CL)≤T+tskew
tskew+thold≤tcd(FF1)+tcd(CL)