Pipeleine
הגדרה 1 (השהייה (
Latency))
הזמן החולף מרגע התייצבות הכניסות למערכת עד לסיום ביצוע החישוב.
הגדרה 2 (ספיקה (
Throughput))
מספר התפוקות שהמערכת מייצרת ביחידת זמן.
בכל המקרים שראינו עד כה Throughput=Latency1 והיום נראה כיצד ניתן לשפר את הספיקה מבלי לשפר את השהייה.
נניח ויש לנו מכבסה. במכבסה יש מכונת כסיבה, מייבש ועובד אשר מקפל את הכביסה.
נניח ולמכונה לוקח 30 דק', למייבש 40 דק' ולאיש לקפל לוקח 20 דק'.
אם לקוח יוכל להיכנס רק כשהקודם סיים, היינו מאוד לא יעילים ⟸ היינו צריכים 18 שעות כדי להכניס 4 אנשים.
אבל מה קורה עם המכונת כביסה לאחר שהוציאו את הכביסה מהמכונה? היא פשוט עומדת שם 60 דק'.
נוכל ברגע שלקוח מסיים עם מכונת הכביסה להכניס את ההבא אחריו ⟸ כך, אמנם כל לקוח עדיין יבלה שעה במכבסה, אבל נוכל להכניס 4 לקוחות ב-3.5 שעות במקום 18 שעות שזה נהדר.
בהקשר שלנו, יש לנו כמה לוגיקות צירופיות אשר ברגע שחלק אחד מהלוגיקה מסיים את תפקידו, נוכל לשמור את הערך ולהכניס את ערכי הכניסה הבאים כדי שהלוגיקה לא תשב ולא תעשה כלום. זה ישפר לנו את הספיקה.
הגדרה 3 (צינור מדרגה
K)
זהו מעגל ללא חוגים הבנוי מלוגיקה צירופית ורגיסטרים כך שכל מסלול מכניסה ליציאה עובר דרך K רגיסטרים בדיוק.
יש למקם רגיסטר בכניסת המערכת או ביציאתה לצורך סנכרון עם מערכות אחרות.
⟸ נהוג למקם את הרגיסטר ביציאה מהמערכת.
נחשב כעת ביצועים עבור מערכת מצונררת:
- נזהה את היחידה בעלת ה-tpd המקסימלי (כי לכל ה-FF-ים אותו מחזור שעון)
- נקבע את זמן המחזור המינימלי tmin כך שמתקיים: tmin=tpCQ(FF)+tpd(CL)+tsetup(FF).
- נקבע את דרגת הצינור K.
- נקבל:
Latency=K⋅tminThroughput=tmin1
נדרש לבנות את המערכת המחשבת את הפונקציה:
f(x)=243x=35x
לצורך כך יש להשתמש ברכיב הצירופי הבא:

א. ממשו את הפונקציה כמערכת צירופית.
ב. נתון FF עם המאפיינים: tsetup=20ns,thold=5ns,tpCQ(FF)=40ns בנו מערכת מצונררת המבצעת את אותו החישוב.
ג. מצאו מימוש חסכוני ברכיבים.
פתרון א':
פשוט נמקם 5 רכיבים כאלו אחד אחרי השני.
Latecny=5tpd=5⋅50ns=250ns
Throughput=250ns1=4Msecresults
פתרון ב':
פה כל ה-tpd-ים זהים ולכן זה לא משנה איזה נבחר.
אנחנו נשים פלופ לאחר כל יציאה מרכיב. לא צריך לשים בכניסה כי שמנו ביציאה.
tmin=tsetup+tpCQ(FF)+tpd(CL)=110ns
לכן:
Latency=5tmin=550nsThroughput=tmin1=9.09Msecresults
פתרון ג':

במחזור הראשון, S=0 והערך x נבחר.
בארבעת המחזורים הבאים S=1 וערך התוצאה הקודמת מועבר.
לאחר חמישה מחזורי שעון הערך במוצא ה-FF הוא 243x.
ע"י קביעת S=0 מוכנס ערך x הבא.
במעגל אמיתי נדרש גם לאיזשהו controler אשר ישלוט במתי ה-mux 0 ומתי הוא 1.
ככל הנראה יהיו לו פחות מחמישה רכיבים ואז זה עדיין יעבוד.
tmin=tpCQ(FF)+tpd(sel)+tpd(x3)+tsetup(FF)=125ns
Latency=5tmin=625nsThroughput=Latency1=1.6Msecresults
Latecny250550625Throughput4M9.09M1.6Mמספר הרגיסטרים051מספר הרכיבים הצירופיים551:x31:SELמערכת לא מצונררתמערכת מצונרתמערכת עקיבה
נתונים שני רכיבים לוגיים צירופיים A ו-B.

לרכיב A יש N1 כניסות ו-N2 יציאות. לרכיב B יש N2 כניסות ו-N1 יציאות.
רכיב AB מוגדר כשרשור של רכיב A לרכיב B כך שיציאה yi של A מחוברת לכניסה xi של B עבור כל 1≤i≤N2.
א. מדוע יש צורך להציב רגיסטר ביציאה של כל דרגה?
ב. כמה רגיסטרים נדרשים לצינור רכיב AB על מנת להשיג ספיקה מקסימלית?
ג. מהו מספר דרגות הצינור האופטימלי(מקסימום ספיקה עם מינימום רגיסטריפ) עבור רכיב AB יחיד בהנחת רגיסטרים אידיאליים?
ד. 20 רכיבי AB משורשרים זה לזה, מהו מספר דרגות הצינור האופטימלי כעת?
ה. הניחו כי tpd(A)=3 ו-tpd(B)=2. מה יהיו הספיקה וההשהייה של המערכת עם צינור אופטימלי וללא צינור. (בהנחת רגיסטרים אידיאלים)
ו. כעת נניח כי הרגיסטרים לא אידאליים tpCQ=1,tsetup=1 ותנאי hold מתקיים. מהו זמן המחזור המינימלי, ההשהייה והספיקה כעת?
פתרון א':
כדי לשמור על זמן מחזור בשרשור מערכות וכדי להבטיח התייצבות של הכניסות לזמן קצר לאחר עליית השעון.
פתרון ב':
N2 - עבור על החיבורים בין המוצא של A לכניסה של B.
N1 - עבור כל המוצאים של B.
סה"כ N1+N2 רגיסטרים.
פתרון ג':
צינור בעל 2 דרגות.
פתרון ד':
2 דרגות צינור כפול 20 רכיבים ⟸ דרגת הצינור האופטימלי היא 40.
פתרון ה':
ללא צינור:
Latency=20(tpdA+tpdB)=100ns
Throughput=1001
עם הצינור:
הרכיב הגרוע יקבע את זמן המחזור ולכן tmin=3.
Latency=20(3⋅2)=120ns
Throughput=31
פתרון ו':
tmin=tpCQ(FF)+max(tpdA+tpdB)+tsetup(FF)=5
Latency=40tmin=200ns
Throughput=tmin1=51
שיטה לצינור
נעביר קוים כאשר אנו חוצים כל חץ באותו הכיוון ורק באותו הכיוון.

נשים לב כי הכחול אינו הכרחי שכן אין סיבה סתם לפגוע ב-Latency.
בצעו pipelining למערכת באמצעות רגיסטרים אידיאליים להשגת Throughput מקסימלי.
tpdA=10ns,tpdC=25ns

נשים לב כי נוכל לשער את הספיקה המקסימלית:
Thptmax≤max{tpdA,tpdC}1=40Msecres
אם הגענו למספר הזה ניצחנו.
תחילה נשים רגיסטר ביציאה של C ולאחר מכן נחסום אותו. נרצה שכל זמן מחזור יהיה בדיוק tpdC ולכן נדרש לדאוג לכך שכל מערך רגיסטרים שאנו מוסיפים לא יהיה רחוק מידי מהקודם.
בנוסף, אנו תמיד צריכים לוודא שהכל מסונכרן לזמני מחזור.

זה עובד ונבדק בתרגול(אני לא ממש יכול לכתוב את הבדיקה הזו)
לכן, נדרש 17 רגיסטרים.
בצעו צנרור למערכת הבאה עם רגיסטרים אידיאליים להשגת ספיקה מקסימלית(דרישה משנית, השהייה מינימלית).
מהי דרגת הצינור? מה הספיקה מתקבלת?
המספרים בתוך העיגולים הם tpd ביחידות ns.

איך דואגים לזה שהכל מאוזן כל הזמן? נקח שתי נקודות שהן יהיו העוגנים שלנו וכל קו שאנו שמים כדי לצנרר את המערכת יתחיל בנקודה אחת ויסתיים בנקודה השנייה.
נתחיל להעביר קווים: נעביר דרך המוצא תחילה, לאחר מכן נחסום את ה-10 באמצעות קו ביציאה שלו וקו בכניסה שלו וזה הכל כי 5+2+2=9 שזה פחות מ-10 ולכן לא נדרש שם לעוד קו שיגרע לנו מההשהייה.

לכן, יש לנו 3 שלבי צינור עם ספיקה של 10ns1=100Msecres.
שאלות חזרה
תרגיל (מועד א' אביב 2025 - שאלה 6)
נתונה המערכת הבאה:

נתונים התזמונים:
tpd(NOT)=150nstcd(NOT)=20nstpd(AND)=80nstcd(AND)=15ns
עבור פולס ברוחב 475 ננו-שניות בכניסה A, מהו הרוחב המינימלי של הפולס ביציאה Z?
נרצה לדעת כמה tcd יש לנו במסלול הכי קצר, שכן השער AND משתנה עם הראשון שמשתנה מ-1 ל-0.
tcdAND=15=15
במשך זמן זה בוודאות הערך נשאר זהה. (יכול להיות קצת יותר)
נבדוק כעת מה הזמן שלוקח עד שהערך החדש מתייצב בכניסה:
2tpdNOT+tpdAND=300+80=380
לוקח את משך זמן זה כדי שהערך במוצא יתייצב בוודאות. (יכול להיות קצת פחות)
לכן, הזמן שהאות ביציאה יהיה יציב הינו:
475−380+15=490−380=110ns
זהו רוחב הפולס המינימלי של Z. כלומר, זה כמות הזמן המינימלית ב-Z יהיה 1.
תרגיל (מועד ב' חורף 25-26 שאלה 6)
נתון המעגל הבא:

נתוני הרכיבים הינם:

הניחו כי הכניסות x,y מקיימות תנאי setup/hold. עבור אילו ערכים של tclock ו-tdelay מובטחת עבודה תקינה של המעגל?
א. tclock=19ns,tdelay=0ns
ב. tclock=19ns,tdelay=3ns.
ג. tclock=20ns,tdelay=2ns.
ד. tclock=23ns,tdelay=5ns.
ה. tclock=18ns,tdelay=1ns.
נדרש ששני התנאים ייתקימו:
tpdFF1+tpdLogic+tsetupFF2≤tclock+tdelaytcdFF1+tcdLogic≥tholdFF2+tdelay
עבור החלק הראשון נדרוש:
2+6≥5+tdelay⟹tdelay≤320=4+9+7≤tclock+tdelay⟹20−tdelay≤tclock
עבור החלק השני של המעגל נדרוש:
19=4+8+7≤tclock4+4≥5✓
כעת, נבדוק את החלק האחרון, הסיבוב:
tdelay≥thold−tcdFF−2tcdOR=117=4+6+7≤tclock−tdelay⟹17+tdelay≤tclock
לכן, tclock≥19 ולכן, התשובה הנכונה היא tclock=20ns,tdelay=2ns.
(כי כאשר אנו מציבים tdelay=3 במשוואה 17+tdelay≤tclock נקבל כי 20≤tclock שזה לא תואם ל-ב')
תרגיל (מועד א' חורף 25-26 שאלה 2)
נתון הקוד הבא אשר משמש לקידוד מילים:
קידוד00000001111100111100מילהאירנהלות’רכרמלהראובן
שאולי טוען שניתן לזהות עד שתי שגיאות ללא שינוי בקוד.
הקטור טוען שהוספת סיבית זוגיות לקוד הנתון תאפשר לתקן עד שגיאה אחת.
אמציה טוען שהפעלת קוד חזרות עם r=3 על הקוד המקורי, יאפשר לתקן עד שתי שגיאות.
האם מישהו מהם צודק? אם כן, אילו אנשים צודקים?
עבור קוד במרחק k ניתן לגלות k−1 שגיאות ולתקן ⌊2k−1⌋.
נמצא את אורך הקוד אשר הינו המרחק בין המילים 11100 ו-11001 אשר הינו 2.
לכן, כמות השגיאות שניתן לגלות הינן 2−1=1. כלומר, שאולי טועה.
סיבית זוגיות עוזרת רק אם מרחק הקוד הוא אי זוגי, מרחק הקוד הוא זוגי ולכן זה לא יעזור. לכן, הקטור טועה.
עבור קוד חזרות עם r=3 נקבל מרחק קוד חדש של 6 ולכן ניתן לתקן 2 שגיאות ולכן, אמציה צודק.