R
R
R
הטכניון
מכון טכנולוגי לישראל
מרכז מחקר למערכות VLSI
הפקולטות להנדסת חשמל ומדעי המחשב
R
R
R
R
המעבדה ל – VLSI
R
R
R
מעבדה 3 ,2
R
R
ניסוי בארכיטקטורות וסינתזה של
מעגלי VLSI
R
R
R
R
R
מהדורה חדשה -הערות נא לשלוח לgoel@ee-
R
כל הערה תתקבל בברכה!
עדכון אחרון 13:04 07/10/2015 -
R
R
UTH
http://www.ee.technion.ac.il/vlsi/
HTU
מסמך זה כתוב בלשון זכר ע"מ להקל על הכתיבה אך מתייחס לנשים ולגברים כאחד .עמכם הסליחה.
1
R
הטכניון -מכון טכנולוגי לישראל
R
הפקולטה להנדסת חשמל
R
R
מעבדות ההוראה
R
R
R
הנחיות בטיחות לסטודנטים במעבדות לאלקטרוניקה
R
R
כללי:
תמצית הנחיות בטיחות מובאת לידיעת הסטודנטים כאמצעי למניעת תאונות בעת
R
ביצוע ניסויים ופעילות במעבדות לאלקטרוניקה של הפקולטה להנדסת חשמל.
R
מטרתן להפנות תשומת לב לסיכונים הכרוכים בפעילויות המעבדה ,כדי למנוע סבל
לאדם ונזק לציוד.
R
אנא קיראו הנחיות אלו בעיון ופעלו בהתאם להן.
מסגרת הבטיחות במעבדה :
RR
UR
R
R
אין לקיים ניסויים במעבדה ללא קבלת ציון עובר בקורס הבטיחות.
R
לפני התחלת הניסויים יש להתייצב בפני מדריך הניסוי לקבלת הנחיות בטיחות
ותדריך ראשוני.
R
R
RU
R
אין לקיים ניסויים במעבדה ללא השגחת מדריך.
R
מדריך הניסוי אחראי להסדרים בתחום פעילותכם במעבדה; הטו אוזן קשבת
להוראותיו ונהגו על פיהן.
R
UR
עשו ואל תעשו :
RR
R
RU
יש לידע את המדריך על מצב מסוכן וליקויים במעבדה או בסביבתה הקרובה.
R
R
לא תיעשה במזיד ובלי סיבה סבירה פעולה העלולה לסכן את הנוכחים
במעבדה.
R
R
אסור להשתמש לרעה בכל אמצעי או התקן שסופק או הותקן במעבדה.
2
R
R
היאבקות ,קטטה והשתטות אסורים .מעשי קונדס מעוררים לפעמים צחוק
אך הם עלולים לגרום לתאונה.
R
R
אין להשתמש בתוך המעבדה בסמים או במשקאות אלכוהוליים ,או להיות
תחת השפעתם.
R
R
R
R
אין לעשן במעבדה ואין להכניס דברי מאכל או משקה.
יש לכבות מכשירי טלפון ניידים לפני הכניסה למעבדה.
בסיום הפעולות יש להשאיר את השולחן נקי ומסודר.
R
R
R
בטיחות חשמל:
R
R
מדריך הניסוי עבר הכשרה בבטיחות חשמל והינו בעל תעודת חשמלאי בדרגה
הנדרשת .היעזרו בו ובגורמים מקצועיים אחרים במעבדה ,בעת חירום.
R
בשולחנות המעבדה מותקנים בתי תקע ("שקעים") אשר ציוד המעבדה מוזן
מהם .אין להפעיל ציוד המוזן מבית תקע פגום.
R
R
אין להשתמש בציוד המוזן דרך פתילים ("כבלים גמישים") אשר הבידוד שלהם
פגום או אשר התקע שלהם אינו מחוזק כראוי.
R
R
R
אסור לתקן או לפרק ציוד חשמלי כולל החלפת נתיכים המותקנים בתוך
הציוד; יש להשאיר זאת לטפול הגורם המוסמך.
R
R
אין לגעת בלוח החשמל המרכזי ,אלא בעת חירום וזאת לצורך ניתוק המפסק
הראשי.
R
UR
בטיחות אש ,החייאה ועזרה ראשונה:
R
R
מדריך הניסוי עבר הכשרה בבטיחות אש ,החייאה ועזרה ראשונה .העזרו בו
ובגורמים מקצועיים אחרים במעבדה ,בעת חירום.
R
R
במעבדה ממוקם מטף כיבוי אש ותיק עזרה ראשונה ,זהו את מקומו.
R
3
R
אין להפעיל את המטפים ואין להשתמש בציוד העזרה הראשונה ,אלא בעת
חירום ובמידה והמדריך וגורמים מקצועיים אחרים במעבדה אינם יכולים
לפעול.
UR
R
יציאות חירום :
RR
R
RU
במעבדה ישנה פתח יציאה אחת והיא משמשת כפתח היציאה גם בשעת חירום.
R
UR
R
בארוע חירום הדורש פינוי ,כגון שריפה ,יש להתפנות מיד מהמעבדה.
דיווח בעת אירוע חירום :
RR
R
R
R
RU
יש לדווח מידית למדריך ולצוות המעבדה.
R
המדריך או איש מצוות המעבדה ידווחו מיידית לקצין הביטחון בטלפון; ,2740
,2222נייד; .050-544575במידה ואין הם יכולים לעשות כך ,ידווח אחד
הסטודנטים לקצין הביטחון.
R
R
לפי הוראת קצין הביטחון ,או כאשר אין יכולת לדווח לקצין הביטחון ,יש
לדווח ,לפי הצורך; משטרה ,7-100מגן דוד אדום ,7-101מכבי אש 7-102
וגורמי בטיחות ו/או ביטחון אחרים .בנוסף לכך יש לדווח ליחידת סגן המנמ"פ
לעניני בטיחות; .2146/7 ,3033
R
R
R
בהמשך ,יש לדווח לאחראי משק ותחזוקה; .052-419917 , 4776
R
לסיום ,יש לדווח לאחראי האקדמי; , 4661לעוזר למנהל; ,4678לאחראי
ההנדסי; 4668,4671ולאחראי האדמיניסטרטיבי; .3276
4
תוכן עניינים
כללי2 ................................................................................................................. :
פרק - 1הקדמה 6 .....................................................................................................
פרק - 2מבוא 7 .......................................................................................................
2.1הקדמה -שפת 7 ..................................................................................... VHDL
2.2מושגים בארכיטקטורות ,סינתזה ותזמון 11 ..............................................................
2.2.1ארכיטקטורות11 ......................................................................................................
א .מימוש מקבילי 12 .........................................................................................................
ב .מימוש טורי 12 ..............................................................................................................
ג .מימוש מצונר – 12 ......................................................................................... :pipeline
2.2.2סינתזה 14 ................................................................................................................
2.2.3תזמון ודרישות תזמון 15 ...........................................................................................
2.2.4שיפור הבדיקתיות של תכנון 16 ................................. Design For Testability (DFT) :
2.3כלי סינתזה – 17 ........................................................................... Design Vision
2.3.1ספרית ה18 ........................................................................................ DesignWare -
2.4רקע בסיסי למערכת ההפעלה 19 .................................................................. Linux
הדפסות Error! Bookmark not defined........................................................................
הנחיות כלליות22 .................................................................................................. :
פרק – 3דוחות הכנה 22 ............................................................................................
הכנה ניסוי מספר 23 ..............................................................................................1
.1ארכיטקטורות של מסכמים 23 ........................................................................................
.2אופטימיזציה של התזמון 23 ...........................................................................................
.3השוואה בין ארכיטקטורה מקבילית ומצונרת 23 ...............................................................
הכנה ניסוי מספר 23 ..............................................................................................2
.1אנליזה של setup timeו23 ........................................................................... hold time -
.2בעיית ה23 ................................................................................................. False Path -
.3שימוש ב multicycle path/operator -ב23 ............................................................ ALU -
.4שיפור הבדיקתיות 23 ................................................... Design For Testability (DFT) :
פרק – 4ביצוע הניסויים 23 .......................................................................................
ביצוע ניסוי מס' 23 ................................................................................................ 1
.1ארכיטקטורות של מסכמים 23 ........................................................................................
.2אופטימיזציה של התזמון 23 ...........................................................................................
.3השוואה בין ארכיטקטורה מקבילית ומצונרת 23 ...............................................................
ביצוע ניסוי מס' 23 ................................................................................................ 2
.1אנליזה של setup timeו23 ........................................................................... hold time -
.2בעיית ה23 ................................................................................................. False Path -
.3שימוש ב multicycle path/operator -ב23 ............................................................ ALU -
.4שיפור הבדיקתיות 23 ................................................... Design For Testability (DFT) :
5
פרק - 1הקדמה
חוברת זו מהווה תדריך והכנה לניסוי בארכיטקטורות וסינתזה של מעגלי VLSIבמעבדה ל-
.VLSIהניסוי מתבצע על גבי תחנות Linuxותוכנת Synopsysלתכנון מעגלי .VHDL
מטרת הניסוי:
.1הכרה בסיסית של כלי סינתזה ועזרים נלווים.
.2הכרה בסיסית של מבנים מסוימים בשפת .VHDL
.3לימוד תכנון של ארכיטקטורות מקביליות ,טוריות ומצונרות.
.4התנסות בסינתזה עם ה Design Compiler -של חברת Synopsysושימוש ביכולות המתקדמות
שלי הכלי.
מבנה הניסוי:
הניסוי מורכב מ 2 -פגישות .כל פגישה אורכה ארבע שעות .לפני כל ניסוי יש להכין דו"ח מכין
ולהגישו למנחה עם תחילת הניסוי.
חלק א' :
.1לימוד ארכיטקטורות שונות למסכמים בינריים והשוואת ביצועים של הארכיטקטורות
השונות.
.2אופטימיזציה של התזמון בשיטות שונות ב.design_vision -
.3סינתזה וחקירה של ארכיטקטורות שונות של יחידת מכפל +מסכם.
חלק ב' :
.1
.2
.3
.4
אנליזה של setup timeו( hold time -עם (min/max delayכולל פתרון הבעיות.
הבנת בעיית ה false path -בבדיקות תזמון.
לימוד נושא ה multi-cycle path -בעזרת מימוש של .ALU
הבנת בעיית הבדיקתיות של מעגל ויישום שיטות לשפרה.
דרישות הניסוי:
קריאת חוברת הניסוי בעיון רב (אפילו יותר מפעם אחת).
הגשת דו"ח הכנה לניסוי לפי שאלות מפרק דו"ח הכנה.
בוחן הכנה לניסוי.
ביצוע הניסוי על תחנת עבודה.
הגשת דו"ח סיכום שבועיים לאחר ביצוע חלק ב' של הניסוי.
דרישות דו"ח סיכום:
הגשת:
דו"ח מכין לשני חלקי הניסוי.
דו"ח סופי לשני החלקים עם תשובות לכל השאלות שנשאלות במהלך הניסוי.
"הסטודנט מתבקש למלא את טופס המשוב האלקטרוני הנמצא בקישור
" ," / http://www2.ee.technion.ac.il/Labs/EELabsהטופס ממולא באופן אנונימי .אנו
זקוקים לתגובותיכם על מנת לתקן ולשפר כמו גם לשבח" .
T
HTTU
UTHT
T
6
פרק - 2מבוא
תהליך תכנון טיפוסי של מעגל VLSIמורכב מהשלבים הבאים :
.1
.2
.3
.4
.5
הגדרת המערכת ותכנון הארכיטקטורה
מימוש המערכת בשפה עלית כגון VHDLאו .verilog
סימולציות
סינתזה
בנית הLayout -
מטרת הניסוי היא הכרה והפעלה של כלי סינתזה בסיסים ומתקדמים על מנת לקבל את המעגל
היעיל ביותר .למרות שברור כי חובה לסמלץ כל תכנון שנכתב לפני שלב הסינתזה ,לא נבצע זאת
במסגרת הניסוי מחוסר זמן ,כאמור הדגש של הניסוי הוא סינתזה .בנוסף לכך ,כל המעגלים
המופיעים במהלך הניסוי יהיו כאלה שניתן לוודא את נכונותם פשוט ע"י הסתכלות.
2.1הקדמה -שפת VHDL
VHDLהיא שפה לתיאור חומרה , 1המהווה תקן רשמי בתעשייה ) .(IEEE 1076בעזרת VHDL
אפשר לתכנן לתאר ולבצע סימולציה על מערכות מורכבות .ניתן לתאר מערכת בכל רמת הפשטה
רצויה מרמת הטרנזיסטור עד לרמת המערכת .במגבלות מסוימות ניתן להפוך תיאור VHDLשל
מערכת למעגל חשמלי באמצעות כלי סינתזה.
בעת כתיבת קוד ,VHDLחשוב לבחון את דרכי המימוש האפשריות בחומרה ,על מנת לוודא שהקוד
שנכתב הגיוני .לפני שמתחלים לכתוב ב VHDL -מומלץ להכין דיאגרמת בלוקים מפורטת של
התכנון עם הגדרה מדויקת של כל הכניסות והיציאות של כל בלוק .בנוסף לכך ,רצוי לצייר סכמה
של כל בלוק .אין צורך להעמיק מדי בפירוט התכנון ,יש להגיע עד לרמת פירוט של מונים ,רגיסטרים,
יחידות אריתמטיות ,מכונות מצבים וכדומה .עבור כל מכונת מצבים יש להכין דיאגרמת מצבים
מפורטת.
PF
FP
המרכיבים הבסיסיים של השפה
לשפה מילות מפתח המתחלקות למספר קבוצות :מילות מפתח פונקציונאליות בדומה למילות
המפתח בשפה פונקציונאלית ( ;)...,IF ,BEGIN ,FORמילות מפתח תיאוריות ,המתארות מרכיבים
ותכונות של מערכות (כגון ;)ARCHITECTURE ,PROCESS :אופרטורים מסוגים שונים;
וספריה תקנית של סוגי נתונים ופונקציות .השפה חופשית מרישיּות ( ,)Case-Insensitiveאולם
מדיניות המעבדה היא לרשום את מילות המפתח השונות באותיות גדולות ,ואילו את השמות
הניתנים על-ידי התוכניתן באותיות קטנות .מניסיוננו ,זה מקל על האבחנה בין מילות המפתח לשאר
המזהים.
מילות המפתח:
יישות ( :)ENTITYהיא אבן הבניין הבסיסית בתכן כל מערכת .רמת התכן העליונה מכונה
,top-level entityובתכנון היררכי היא תכיל ישויות נוספות המתארות רמות נמוכות יותר .ישות
VHDLמקבילה ל Symbol-בתיאור סכמטי .לכל ישות מוגדר מנשק מול שאר חלקי המערכת,
המאופיין בכניסות ויציאות ,או באופן כללי יותר "פתחים" ( .)PORTsניתן להגדיר את הפתחים כ-
OUT ,INאו .INOUT
ארכיטקטורה ( :)ARCHITECTUREמתארת את התנהגותה של יישות ,כלומר ,כיצד משפיעים
הנתונים המתקבלים בכניסות והמצב הנוכחי של המערכת ,על המצב העתידי והנתונים המועברים
1השם VHDLמהווה ראשי תיבות של . VHSIC Hardware Description Languageהשם VHSICמהווה
ראשי תיבות של . Very High Scale Integrated Circuitבמקום VHSICאפשר גם , VLSIכלומר Very
.Large Scale Integration
PTR
TP
R
R
R
R
R
R
R
7
R
R
R
R
R
R
R
ביציאות .ליישות בודדת ניתן להגדיר מספר ארכיטקטורות (למשל :ארכיטקטורה מבנית ,המגדירה
את היישות כהרכבה של מספר ישויות בסיסיות יותר או ארכיטקטורה התנהגותית ,המתארת את
הקשר הלוגי בין כניסות ,יציאות ,משתנים ואותות .ארכיטקטורת VHDLמקבילה לסכמה בתיאור
הסכמטי.
תהליך ( :)PROCESSיחידת ביצוע בסיסית בשפה ,המאפשרת תיאור תפקודי של פעילות רכיב או
מערכת ,באופן סדרתי-אלגוריתמי .כל פעולות הסימולציה מחולקות לתהליך אחד או יותר.
רכיב ( :)COMPONENTאבן בניין ,המאפשרת תיאור מבני של פעילות התקן מורכב יותר .רכיב
מגדיר מנשק בין ההתקן הנבנה ,לבין ישות בה מעוניינים להשתמש עבורו.
תצורה ( :)CONFIGURATIONמגדירה באיזו ארכיטקטורה להשתמש במקרה מסוים ,מבין
הקיימות עבור ישות נתונה .חובה להגדיר תצורות מתאימות לכל הישויות המשתתפות ,לפני ביצוע
סימולציה.
ערכה ( :)PACKAGEמגדירה בצורה מרוכזת ,אוסף של סוגי נתונים ( )Data Typesופונקציות
פרטיות ,לצורך שימוש ביתר חלקי המערכת המתוכננת .קיימות גם ערכות תקניות בהן ניתן
להשתמש ,לדוגמא:
;Library IEEE
;USE IEEE.std_logic_1164.ALL
שתי ההצהרות שלעיל מאפשרות למערכת המתוכננת להשתמש בערכה המכונה ,std_logic_1164
הנמצאת בספריה .IEEEערכה זו כוללת בין היתר ,את הגדרת סוג הנתונים ,STD_LOGICוכל
הפונקציות המטפלות בו .בהמשך מופיעה דוגמא לדרך הגדרת ערכה.
סוגי נתונים ()Data Types
השפה כוללת סוגי נתונים רבים .במסגרת הניסוי נשתמש במספר מצומצם של סוגים:
:INTEGERמספר שלם שערכו בתחום ( ±2147483647סימטרי סביב אפס).
:STD_LOGICסוג נתונים שיכול לקבל 9ערכים שונים ,ביניהם:
' :'0אפס לוגי.
' :'1אחד לוגי.
' :'Xלא ידוע.
' :'Uלא מאותחל.
' :'Zעכבה גבוהה ( High Impedanceאו .)HIGHZ
' :'-חסר משמעות (.)Don't Care
:STD_LOGIC_VECTORוקטור של .STD_LOGICדוגמאות לשימוש בסוג זה:
)vec : STD_LOGIC_VECTOR(7 downto 0
)vec2 : STD_LOGIC_VECTOR(0 to 15
אופרטורים :
מוגדרים בשפה אוסף של אופרטורים תקניים .חלק מהאופרטורים משמשים לשימושים שונים
בהתאם להקשר .להלן הנפוצים שביניהם:
NOT XOR NOR NAND
OR AND
אופרטורים לוגיים :
=>
>
=<
<
=/
=
אופרטורי יחס :
/
*
+
אופרטורים אריתמטיים:
אופרטור שירשור & :
=( :למשתנה ( <= )Variable -לאות Signal -או פתח )Port -
אופרטורי השמה:
>=
אופרטור הפעלה:
8
הערות תיעוד (:)Comments
הערות תיעוד פנימי בקבצי שפת VHDLרושמים אחרי זוג מקפים ( .)--כל מה שמופיע אחרי שני
המקפים ועד סוף השורה נחשב כתיעוד ואינו נבדק על-ידי המהדר .סיום השורה מסיים המחרוזת
שאינה נבדקת ,ואין צורך בסימנים מיוחדים נוספים .שיטה זו זהה לשיטת התיעוד הפנימי של C++
(שם התווים הפותחים הם .)//
תיאור לוגי התנהגותי
נתאר כאן דוגמא של מימוש לוגי התנהגותי.
דוגמא א :הגדרת ישות המייצגת )Reset-Set Flip-Flop( RSFF
בהגדרת הישות של רכיב מופיעים שם הרכיב ,הכניסות והיציאות שלו כדלקמן:
ENTITY rsff IS
;PORT (set, reset: IN STD_LOGIC
;)q, qb: INOUT STD_LOGIC
;END rsff
הגדרת הארכיטקטורה של ה RSFF -בתיאור התנהגותי:
ARCHITECTURE arc_rsff OF rsff IS
BEGIN
;)q<= NOT (qb AND set
;)qb<= NOT (q AND reset
;END arc_rsff
ארכיטקטורה התנהגותית זו מממשת ,RSFFעל-ידי הגדרת ערכי היציאות שלו ,בהתאם לערכי
הכניסות .ארכיטקטורה ממומשת בעזרת משפטי השמה מקביליים ואין חשיבות לסדר ההשמות.
השמות אלו מופעלות כאשר אחד מהאותות בצד ימין של ההשמה משתנה ,ללא קשר לסדר כלשהו.
למשל ,אם q = 1והערך resetהופך מ '0'-ל ,'1'-אזי qbמקבל ערך ' ,'0בהתאם להשמה השנייה.
כעת ,עשויה להיכנס לפעולה ההשמה הראשונה.
כאן ראינו דוגמא של משפטים מקביליים ( .)Concurrent Statementsכל ההשמות המופיעות
בבלוק הארכיטקטורה (בין ה BEGIN-ל )END-מתבצעות במקביל.
הגדרת הארכיטקטורה של ה RSFF -בתיאור מבני:
ARCHITECTURE arc2_rsff OF rsff IS
COMPONENT nand2
;PORT (a,b :IN STD_LOGIC
;)c :OUT STD_LOGIC
;END COMPONENT
BEGIN
U1: nand2
;)PORT MAP (set, qb, q
U2: nand2
;)PORT MAP (reset, q, qb
;END arc2_rsff
ארכיטקטורה מבנית זו מממשת RSFFבעזרת שערי .nand2ההנחה היא ששערים אלו הוגדרו
מראש כישויות בעלות ארכיטקטורה ותצורה מתאימה .כאן ,הבלוק COMPONENTמגדיר את
המנשק לשערי ,nand2ואילו בבלוק הראשי מציבים את הרכיבים השונים השותפים במבנה ,rsff
9
בארכיטקטורה זו .הרכיבים מוגדרים על-ידי מיפוי ה Ports -השונים של ,rsffל Ports -המתאימים
בכל אחד מרכיבי nand2השותפים במבנה .חשוב לציין שמותר לערבב תיאור מקבילי ותיאור מבני.
הוספת רגיסטרים :
הוספת רגיסטרים לתכנון תתבצע ע"י הצבה של היחידה reg16רגיסטר בעל 16סיביות (או reg32
בהתאם לצורך) .ניתן לשלב אותה בתכנון בעזרת משפט מהסוג :
U1: reg16
;)PORT MAP (reg_in, clk, reg_out
ה component -של הרגיסטר מוגדר ע"י:
COMPONENT reg16
( PORT
;)din : IN STD_LOGIC_VECTOR(15 downto 0
;clk : IN STD_LOGIC
;))dout : OUT STD_LOGIC_VECTOR (15 downto 0
;END COMPONENT
מימוש : multiplexor
ניתן לממש multiplexorבקלות בעזרת משפט מקבילי מהסוג :
;tmp_a <= tmp_b when sel = '0' else tmp_c
המשפט מגדיר ש tmp_a -יקבל את הערך tmp_bכאשר .sel=0אם ,sel=1אזי tmp_aיקבל
.tmp_c
Processes
מאוד נפוץ להשתמש במשפטי processבתיאור ההתנהגות הלוגית .ה process -מתואר על-ידי
משפטיים סדרתיים ) (Sequential Statementהמתבצעים זה אחר זה לפי סדרם ,באופן זהה
רעיונית לדרך ביצוען של תוכניות אלגוריתמיות בשפות נוהליות ) .(Procedural Languagesמשפט
processמכיל משפטיים סדרתיים ,כגון FOR ,IF ,CASE :ו .LOOP -לא נשתמש בתיאור בעזרת
processבמהלך ניסוי זה.
בשפת VHDLניתן להגדיר משתנים ( ,)Variablesאותות ( )Signalsופתחים ( .)Portsהגדרות
המשתנים מופיעות בתוך בלוק ;processורק ה process -שבו מוגדר המשתנה ,מכיר אותו .משפטי
השמה של משתנים (מהצורה )num := 1מתבצעים מיד .לא נשתמש במשתנים במהלך ניסוי זה.
משתנים אותות ופתחים
אותות ב VHDL -שקולים לרוב לחוטים בסכמה .כאשר רוצים לחבר שני רכיבים בהתקן נעזרים
ב ' בהמשך) .הגדרת האותות מופיעה אחרי כותרת הבלוק
באותות (ראה דוגמא
" ,"ARCHITECTUREוהם מוּכרים בארכיטקטורה כולה .כל משפטי השמה של אותות (מהצורה
’ )sig <= ’1מתבצעים בו זמנית כאשר התהליך עוצר.
התנהגות הפתחים דומה מאוד להתנהגות אותות ,כלומר ערכם מתעדכן בסוף התהליך ,ונשאר קבוע
לאורך ביצועו; ההשמה מבוצעת בעזרת אותו אופרטור; וההשמה האחרונה היא הקובעת .אולם,
פתחים מוגדרים גם ככניסה ( ,)INיציאה ( )OUTאו שילוב ( .)INOUTפתח המוגדר ככניסה ,ניתן
רק לקרוא ממנו ,ולא לכתוב לתוכו; בדומה ,ליציאה ניתן רק לכתוב ,ולא ניתן לקרוא ממנה.
X
X
דוגמא ב :חיבור שני מהפכים בעזרת אותות
להבהרה buf_in :ו buf_out -הן כניסות המעגל (מוגדרות בהגדרת הישות של inv_in_out .)buf
הוא אות המחבר בין הרכיבים U1ו U2-של ( .bufלא מובא כאן תיאור ה – .)entity
ARCHITECTURE arc_buf OF buf IS
10
;inv_in_out : STD_LOGIC
SIGNAL
COMPONENT inv
;PORT (inv_in :IN STD_LOGIC
;)inv_out :OUT STD_LOGIC
;END COMPONENT
BEGIN
U1: inv
;)PORT MAP (buf_in, inv_in_out
U2: inv
;)PORT MAP (inv_in_out, buf_out
;END arc_buf
יחידות סינכרוניות
במסגרת תהליך ,ניתן לבנות יחידות סינכרוניות כגון Flip-Flopבעזרת משפט מהסוג :
IF clock'EVENT AND clock = 1 THEN
משמעות המשפט הוא :אם השעון השתנה וכעת הוא שווה ל( '1' -כלומר הייתה עליית שעון) .משפט
זה יכול להופיע רק במשפט processולכן השימוש ביחידות סינכרוניות בניסוי זה יעשה הצבה של
רגיסטרים מוכנים שמסופקים במהלך הניסוי.
ספריות דרושות בסביבת Synopsys
כדי שהכלים יוכלו למצו א את כל היחידות הדרושות יש לציין באיזה ספריות להשתמש .זה נעשה
ע"י הוספת השורות הבאות בתחילת קובץ ה: VHDL -
;library IEEE,DWARE,DW01,DW02,DW03
;use IEEE.std_logic_1164.all
;use ieee.std_logic_arith.all
;use DW01.DW01_components.all
;use DW02.DW02_components.all
;use DW03.DW03_components.all
2.2מושגים בארכיטקטורות ,סינתזה ותזמון
2.2.1ארכיטקטורות
נניח שברצוננו לחשב ) .(a+b) – (c+dקימות אפשרויות שונות לבניית חומרה שמסוגלת לבצע את
החישוב .להלן תיאור קצר של מספר מימושים אפשריים :
11
א .מימוש מקבילי
+/-
+/-
TC
B
B
+/-
reg
איור מס' : 1מימוש מקבילי
החישוב מבוצע מההתחלה עד הסוף ברציפות .המסלול בעל ההשהיה ) (T Cהארוכה ביותר בין כ"א
מהכניסות לכ"א מהיציאות נקרא המסלול הקריטי.
B
B
ב .מימוש טורי
+/-
reg
איור מס' : 2מימוש טורי
במימוש זה ,ראשית מחשבים את a+bושומרים את הסכום ברגיסטר אחד .לאחר מכן מחסירים
cושומרים את הסכום באותו רגיסטר ,ולבסוף מוסיפים לתוצאה את .dעל מנת לבצע את החישוב,
יש צורך בשלושה מחזורי שעון .סביר מאד שזמן המחזור (שנקבע ע"י המסלול הקריטי) קטן
מזמן המחזור של החישוב המקבילי .במימוש זה ,כל פעולות הסיכום וחיסור מבוצעות ע"י אותה
יחידה.
- resource sharingשיתוף בלוקים פנויים בשלבים שונים של החישוב.
ג .מימוש מצונר – :pipeline
ארכיטקטורה שבה פעולת החישוב מחולקת לשלבים .תוצאת הביניים נשמרת ברגיסטר .כל שלב
מתחיל לבצע את החישוב על נתונים חדשים ברגע שסיים לטפל בנתונים של החישוב הקודם.
12
+/-
+/-
reg
reg
+/-
reg
איור מס' : 3מימוש מקבילי
במחזור הראשון ,מחושבים את ) (a+bואת ) (c+dושומרים את התוצאה ברגיסטרים .במחזור
השני מבצעים את פעולת החיסור .בזמן הזה ,המסכמים פנויים ולכן ניתן להזין אותם במידע חדש.
– latencyמספר המחזורים הדרוש על מנת לקבל את התוצאה המלאה הראשונה.
במימוש זה ,דרושים שני מחזורים לקבלת התוצאה הראשונה ,כלומר ה ,2 = latency -אבל לאחר
מכן ניתן לקבל תוצאה חדשה בכל מחזור.
- balanced pipelineצינור שבו ההשהיה של כל השלבים שווה פחות או יותר.
מסכמים מסוג parallel prefix -
הסבר זה מובא כרקע לסעיף הראשון של הניסוי .קיימת משפחה של מסכמים המכונה parallel
.prefix addersמעגל מסוג parallel prefixהוא מעגל אשר :
-
מקבל כקלט סדרה בעלת nכניסות x1,x2,….xn :ומוציא כפלט סדרה בעלת nיציאות :
))f(x1), f(x2,x1), f(x3,x2,x1),……f(xn,xn-1,…x1
fהיא פונקציה אסוציאטיבית (במקרה זה – חיבור)
הפלט ה n -תלוי בכניסות 1עד .nמותר שתהיה יותר מסדרה אחת של כניסות או יציאות.
במסכם מסוג carry-lookaheadמחשבים את piואת giשל כל דרגה על מנת להאיץ את החישוב
(במקרה הזה הקלט הוא לא רק xiאלא גם :)yi
gi = xiyi
pi = xi + yi
ci+1 = gi + pici
נגדיר :
Pi = pi.Pi-1
Gi = gi + pi.Gi-1
כאשר :
G0 = x0y0
P0 = x0 + y0
כעת ניתן לרשום :
ci+1 = Gi + Pic0
חשוב לשים לב ש:
13
Pi:0 = Pi:m.Pm-1:0
Gi = Gi:m + Pi:m.Gm-1:0
כאשר Pi:mו Gi:m -מסמנים חישוב הפונקציות Giו Pi -מסיבית ה m -עד לסיבית ה.i -
תכונה זאת מאפשרת חישוב מקבילי של הפונקציות שניתנות למימוש במגוון רחב של
ארכיטקטורות .דוגמא אחת היא המימוש לפי Sklanskyהמופיע באיור מס' :4
איור מס' :4מסכם Sklansky
התרשים מציג את הסדר לחישוב הפונקציות Giו Pi -שבעזרתם ניתן לחשב את ה .ci+1 -יתרון
המימוש הוא העומק המינימלי של העץ אבל החיסרון הוא ה fanout -הגבוה של המספר צמתים.
מתמקדים רק ב – carryכי חישוב זה מהווה את המסלול הקריטי.
2.2.2סינתזה
זהו התהליך שבו מתורגם מעגל המתואר בשפה כגון VHDLלמימושו באמצעות שערים לוגיים.
כלי סינתזה מקבל כקלט תיאור VHDLשל התכנון ,ספרית התאים שעומדת לרשותו ואילוצי
המשתמש .הפלט הוא מימוש המעגל באמצעות תאי הספרייה .להלן איור של תהליך הסינתזה :
Technology
Library
VHDL
Description
Gate Level
Netlist
Synthesis
Constraints
איור מס' : 5מערכת סינתזה
14
במהלך הניסוי הזה אנו משתמשים בספריות של חברת Tower Semiconductorsבטכנולוגית
.CMOS 0.18u
2.2.3תזמון ודרישות תזמון
בסעיף זה ,מופיע הסבר על מושגים שונים בנושא התזמון ובהמשך יובא הסבר על הפקודות
הרלוונטיות בכלי הסינתזה.
כלי שמנתח מעגל מבחינת התזמון שלו נקרא .(TV) timing verifierבבדיקה טיפוסית של מעגל
סינכרוני ,יש לבדוק את כל המסלולים הבאים :
א .מסלולים בין הכניסות של המעגל לכניסות של רגיסטרים שבמעגל.
ב .מסלולים מיציאות של רגיסטרים שבמעגל ליציאות המעגל.
ג .מסלולים מיציאות של רגיסטרים שבמעגל אל הכניסות של רגיסטרים אחרים במעגל.
critical pathהמסלול בעל ההשהיה הארוכה ביותר.
איור מס' 6
Slack
אם במהלך העבודה עם TVמגדירים שעון בעל מחזור Tלמערכת ,הכלי יבדוק האם המעגל יכול
לעבוד בקצב זה ,כלומר האם ההשהיה של המסלול הקריטי T cקצר ממחזור השעון ? אם הוא קצר
יותר אז אומרים שלמסלול הקריטי slack ,חיובי אחרת ה slack -שלילי!!.
B
B
Slack = T - T c
ברור שתמיד צריך להגיע למצב שבו ה slack -יהיה חיובי .כמובן שתיאור פשטני זה מזניח נתונים
חשובים כגון setuptimeו( holdtime -ראה המשך).
B
Max delay requirement
Longest_path_delay + Tclock_to_q < Tcycle - Tsetup + Tskew
קיום דרישה זאת מבטיח שהמידע מגיע לפני שהשעון עלה.
Min delay requirement
Shortest_path_delay + Tclock_to_q > Thold + Tskew
קיום דרישה זאת מבטיח שהמידע לא מגיע מהר מידי .אסור שיקרה מצב שבו המידע בכניסה של
ה FF -השני משתנה לפני שהשעון מגיע ובכך ננעל המידע החדש ולא הישן כפי שהיה צריך .קיימים
שני פתרונות לבעיה זאת :
.1להוסיף השהייה מסלול הנתונים
.2לעקב את השעון שמגיע ל FF -הראשון
False paths
במעגל הבא ברור שלא יתכן שמידע יעבור דרך delay1ו delay3 -או דרך delay2ו.delay4 -
מסלולים אלה הם .false pathsבמקרים מסוימים כלי הסינתזה מזהה שקיימים מסלולים לוגיים
לא אפשריים ומסלק אותם בשלב האופטימיזציה.
15
איור מס' False Path : 7
אם נשנה את המעגל הנ"ל כך שאותות הבקרה של הבוררים Xו Y -יהיו כניסות למערכת בלתי
תלויות (ללא מהפך ביניהם) אזי כל המסלולים הלוגיים אפשריים .יתכן מצב שבו המשתמש יודע
מראש ש X -ו Y -לעולם לא יקבלו את הערכים 0=Xו 0=Y -ביחד .במקרה זה כלי הסינתזה לא
יסלק אף מסלול מצד אחד ,אבל עדיין קיימים false pathsמצד שני (בגלל האילוצים על ערכי
הכניסות) .הפתרון הוא לדווח לכלי התזמון על כל ה false paths -הידועים.
Multicycle Path
בדרך כלל ,כל החישובים במעגל מתבצעים במחזור שעון אחד .T cנניח שקיים מעגל בו כל
המסלולים בעלי השהיה קטנה מ T c -חוץ ממספר מסלולים העוברים דרך יחידה איטית בהם
ההשהיה גדולה מ T c -אבל קטנה מ . 2T c -פתרון אחד הוא להגדיל את מחזור השעון של כל המעגל
ל 2T c -למשל .ישנם מקרים שבהם התוצאה של היחידה האיטית אינה נחוצה כל מחזור אלא כל
שני מחזורים או יותר .במקרים אלה ניתן להמשיך לעבוד במחזור שעון T cולהשתמש בתוצאה
של היחידה האיטית (כלומר ,לנעול אותה ברגיסטר) כל שני מחזורים.
B
B
B
B
B
B
B
B
B
B
B
B
2.2.4שיפור הבדיקתיות של תכנון Design For Testability (DFT) :
לאחר יצור נדרש לבדוק את השבב בצורה מקיפה .באחת הבדיקות מנסים לוודא שאף צומת אינו
מקוצר להספקה או אדמה בטעות .על מנת לבצע בדיקה זאת ,יש לספק לשבב כניסות שיגרמו לכל
אחד מהצמתים לשנות מצב וגם שאפשר יהיה להבחין בשינוי ביציאות השבב .פעולה זאת קשה
ביותר עבור שבבים גדולים בעיקר עבור צמתים הנמצאים עמוק בתכנון.
הדרך המקובלת לפתרון הבעיה היא הוספת חומרה לתכנון שמטרתה היא לשפר את הבדיקתיות
שלו Internal Scan .היא אחת הטכניקות הנפוצות ל .DFT -בשיטה זאת ,מחליפים כל הFF -
בתכנון ב Scan FF -כפי שמתואר באיור מס' .8בעבודה רגילה ה Scan FF -מקבל את הכניסה
הרגילה וב test mode -הוא מקבל כניסה מה .scan_in: port-פורט זה מחובר ליציאה של Scan
FFאחר .בצורה זאת ב test mode -ניתן לצור shift registerארוך ) (Scan Chainהמורכב מכל ה-
FFשבתכנון .ע"י הפעלה נכונה של המעגל ,ניתן להכניס ל FF -כל ערך רצוי ע"י רצף של פעולות
הזזה .אחרי הכנסת ערך רצוי לכל ה FF -מפעילים את השבב במוד רגיל של עבודה במשך מחזור
אחד שבסיומו ננעלות התוצאות באותם ה .Scan FF -כעת ניתן להוציא את התוצאות החוצה ע"י
סידרה נוספת של פעולות הזזה .ברור ששינוים אלה מגדילים את שטח המעגל ויכולים לפגוע
בביצועים ,אבל הם חיוניים לשיפור הבדיקתיות.
ניתן לבצע הוספת ה scan chain -בשלב הסינתזה בתצורות שונות באופן אוטומטי.
איור מס' Scan FlipFlop :8
16
2.3כלי סינתזה – Design Vision
ה( (dc) design compiler -או design visionבגרסתו הגרפית) הוא כלי הסינתזה של חברת
.Synopsysהכלי מקבל כקלט תיאור ( VHDLאו )Verilogויוצר כפלט מעגל ברמת השערים
המממש את ה .VHDL -הכלי מופעל באמצעות הפקודה design_visionשגורם לפתיחה של חלון
גרפי המאפשר הרצת פקודות מתוך תפריטים.
כל פקודה שנריץ בעזרת הממשק הגרפי תופיע גם בחלון ה terminal -ממנו הרצנו את הכלי.
נוכל להריץ גם פקודות על ידי כתיבתם בחלון ה.terminal-
נוכל גם לרשום את כל הפקודות בקובץ אחד (כל פקודה בשורה נפרדת) ולהריץ את כל הקובץ בבת
אחת על ידי file->execute script...
ניתן לקבל את קובץ כל הפקודות שהרצנו ע"י file->save info->design setup
תהליך של סינתזה מתחלק ל 3 -שלבים:
:syntax
לשגיאות
ובדיקתם
vhdl/verilog
ה-
קבצי
)1קריאת
לחץ על .file->read
)2אופטימיזציה ומיפוי לשערי ספרייה (סינתזה תלויית טכנולוגייה) :
לפני התחלת שלב זה יש להגדיר את אילוצי התכנון (אופציונאלי – ראה בהמשך) ע"י
האפשרויות השונות שבתפריט ה attributes -או ע"י קריאת קובץ אילוצים בעזרת
.file->execute script )3בדוק שבחלון הקטן למעלה מופיע שם היחידה העליונה .לחץ על
.design->compileבחלון שנפתח ניתן לבחור את כמות העבודה שהכלי ישקיע בכל שלב
ע"י שינוי הבחירה באפשרויות ה .effort -בסיום יש ללחוץ .OKניתן לראות את הסכמה
של המעגל המסונתז ע"י בחירת השם (בחלון הקטן למעלה) ולחיצה על ה icon -של שער
ה.and -
U
U
U
U
אילוצים שניתן להגדיר לכלי :
-
U
:create_clockפקודה להגדרת שעון ,דוגמא :
create_clock -name "CLK" -period 50 -waveform {0 25} clock
מגדירה אות שעון על ההדק CLKבעל מחזור ,50nsהמתחיל ב 0 -ועולה ל 1 -בזמן .25nsבדר"כ
נבצע את הפקודה באמצעות התפריט .אם שעון מוגדר DC ,ינסה לסנתז מעגל העומד בתדר השעון.
ניתן להגדיר שעון גם בעזרת התפריט ע"י בחירת הדק השעון ולחיצה על
.attributes->specify clockלמציאת הדק השעון יש ללחוץ על הרכיב הרצוי ולשנות את הבחירה
) cells (hierarchalל . pins/ports
: set_max_delayקובע אילוץ של השהיה המרבית בין צמתים שונים במעגל .דוגמא :]*[set_max_delay 10 –to D
ה dc -ינסה לבנות מעגל כך שההשהיה בין כל צומת במעגל לצמתים ששמם מתאים לD[*] -
לא תעלה על .10nsאין ודאות שה -dcיצליח לבנות מעגל כזה.
: set_max_areaקובע אילוץ לגבי השטח הכולל של המעגל. : set_input_delayמאפשר למשתמש להגדיר מתי (ביחס לעליית השעון) אותות הכניסהמוכנים.
: set_output_delayמאפשר למשתמש להגדיר מתי (ביחס לעליית השעון) אותות היציאהצריכים להיות מוכנים.
: set_dont_touch block_nameמורה לכלי לא לסנתז בלוק מסוים. : balance_registersמאזן את ההשהיות בכל דרגות הצינור .האיזון מתקבל ע"י הזזהאוטומטית של לוגיקה קומבינטורית משלבים עמוסים של ה pipe -לשלבים פחות עמוסים תוך
כדי שמירה על הנכונות הלוגית.
17
קבלת נתונים על הביצועים של המעגל :
שטח :ע"י design->report area צריכת הספק :ע"י design->report power תזמון :ע"י timing->report timingU
שמירת התוצאות :
לחץ על file->saveובחר את הפורמט הרצוי :
- ddcפורמט אותו design visionקורא – dbהפורמט הישן של synopsysU
Multicycle Path
עבור מקרים של Multicycle Pathחשוב לציין לכלי שקיימים מסלולים בהם החישוב דורשיותר ממחזור אחד ,אחרת הם ידווחו כמסלולים בעיתיים .ניתן לעשות זאת בעזרת הפקודה:
[*]set_multicycle_path 2 -end -to U1/din
False Paths
אם קיימים false pathsידועים בתכנון ,חשוב לספק את המידע לכלי .ניתן לעשות זאת בעזרתפקודה מסוג :
[*]set_false_path -from a[*] -through tmp_a[*] -to z
-
-
הפקודה set_false_pathפעולת רק על מסלולים שעליהם מוגדרים אילוצי זמן .לדוגמא אם
רק נגדיר שעון אזי יוגדר אילוץ זמן רק על מסלולים בין הרגיסטרים .במקרה זה אין אילוץ זמן
על המסלולים בין הכניסות לרגיסטרים ועל המסלולים בין הרגיסטרים ליציאות ,ולכן אם קיים
מסלול קריטי מבין מסלולים אלה הכלי ידווח עליו אפילו אם הוא מוגדר כ .false path -כדי
למנוע את הבעיה הזאת נגדיר על המסלולים שתחילתם בכניסות המעגל ומסלולים שסופם
ביציאות המעגל בעזרת פקודות מהסוג :
set_input_delay 0 -clock clk a
set_output_delay 0 -clock clk z
הפקודה הראשונה מגדירה שההשהיה של הכניסות aיחסית לשעון clkהוא ,0כלומר הכניסה
מופיעה בתחילת מחזור השעון.
הפקודה השנייה מגדירה שהשהיה של יציאות zיחסית לשעון clkהוא ,0כלומר היציאה תהיה
מוכנה לתחילת מחזור השעון.
2.3.1ספרית הDesignWare -
כאמור ה design compiler -הוא כלי הסינתזה של חברת DesignWare (DW) .Synopsys
מאפשר למשתמש לשלב בתהליך הסינתזה מימושים מיוחדים עבור אופרטורים שונים ( למשל
שימוש ב carry lookahead -עבור פעולת סיכום מסוימת) .ניתן להשתמש ב DW -במספר שיטות:
אinference .
בדרך זאת קוראים לפונקציה שברצוננו להשתמש כגון כפל כפי שמופיע בדוגמא הבאה:
;library IEEE,DWARE,DW01,DW02
;use IEEE.std_logic_1164.all
;use IEEE.std_logic_arith.all
;use IEEE.std_logic_unsigned.all
;use DW02.DW02_components.all
entity mult is
( port
a, b
;): in std_logic_vector(15 downto 0
18
CLK : in std_logic;
product : out std_logic_vector(31 downto 0));
end mult;
architecture arc_mult of mult is
begin
product <= a * b ;
end arc_mult;
Instantiation .ב
דוגמא.DW -בשיטה זאת משתמשים בתיאור מבני של ארכיטקטורה ופשוט מציבים בלוקים של ה
:
library IEEE,DWARE,DW01;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
use DW02.DW02_components.all;
entity adder32 is
port (
a, b : in std_logic_vector(31 downto 0);
cin : in std_logic;
sum : out std_logic_vector(31 downto 0);
cout : out std_logic);
end adder32;
architecture arc_adder32 of adder32 is
begin
U1 : DW01_add
generic map ( width => 32 )
port map (a , b , cin , sum , cout ) ;
end arc_adder32;
. בקוד הנ"ל מאפשר למשתמש לקבוע את רוחב המסכםgeneric map - משפט ה: הערה
set_implementation .ג
בעזרת הפקודהdv -משתמשים בדרך זאת מתוך כלי הסינתזה כלומר מתוך ה
: לדוגמא,set_implementation
set_implementation type U1
. מציין עבור איזה יחידה בסכמהU1 - למשל עבור מסכם) וcla ( מציין את סוג המעגל הדרוש- type
Linux רקע בסיסי למערכת ההפעלה2.4
.)carry lookahead - cla(
]. יכולים לפסוח על חלק זהLinux [סטודנטים בעלי ניסיון במערכת ההפעלה
19
מנשק המשתמש של Linux
במעבדה מחשבי PCעליהם מותקנת מערכת ההפעלה .RedHat Linuxזו מערכת בעלת ממשק גרפי
המאפשר ביצוע של מרבית הפעולות הנדרשות הן מתוך שורת פקודה כמקובל ב Linux-והן דרך
תפריטים וצלמיות ( )Iconsכמקובל במערכות מסוג זה.
עם הכניסה למערכת ,מופיע על המסך שולחן עבודה ( )Desktopובתחתיתו לוח הפעלה .לוח ההפעלה
מאפשר הפעלת תוכניות נפוצות רבות ,מעבר בין 4שולחנות עבודה שונים ,קבלת מידע בסיסי על
מצב המערכת ועוד .אולם ,במעבדה זו כמעט אין צורך בו .זאת ,כיוון שאת כל הפעולות הבסיסיות
הנדרשות לנו ,ניתן להפעיל מתפריט מהיר ( ,)Workspace Menuהנפתח בלחיצת עכבר ימני על
שטח ריק בשולחן העבודה .כדי להשלים ההכרות עם שולחן העבודה ,נוסיף כי על משטח זה נפתחים
חלונות כבכל מערכת חלונאית ,ומיזעורם ( )Minimizeמביא להצגתם כצלמיות בעמודה המתחילה
בפינה השמאלית העליונה של המסך.
מערכת הקבצים
להלן מספר פקודות בסיסיות לניהול מערכת הקבצים ב ,Unix-דרך שורת פקודה
(פעולות דומות ניתן לבצע גם ממנהל הקבצים :)File Manager -
U
פירוש
U
U
שם הספריה הנוכחית
פקודה
U
pwd
שינוי הספריה הנוכחית
]שם ספריה[ cd
מעבר לספרית האב של ההנוכחית
cd ..
העתקת קובץ
]קובץ יעד[ ]קובץ מקור[ cp
העתקת קובץ לספרית בת של הנוכחית
]שם ספריה[ ]שם קובץ[ cp
העתקת קובץ לספרית האב
] ..שם קובץ[ cp
העברת קובץ לספרית בת של הנוכחית
]שם ספריה[ ]שם קובץ[ mv
שינוי שם קובץ
]שם חדש[ ]שם ישן[ mv
העברת קובץ לספרית האב
] ..שם קובץ[ mv
מחיקת קובץ
]שם קובץ[ rm
יצירת ספרית בת לספריה הנוכחית
]שם ספריה[ mkdir
מחיקת ספרית בת של הנוכחית
]שם ספריה[ rmdir
רשימת שמות הקבצים הגלויים בספריה הנוכחית
רשימת פרטי כל הקבצים בספריה הנוכחית
ls
ls -la
כפי שניתן לראות ,שם ספרית האב של הנוכחית הוא תמיד "( "..נקודה-
נקודה).
כשברצוננו להתייחס לספריה אחות (הנמצאת תחת אותו אב) ,ניתן לרשום:
20
]שם ספריה[../
עורכי טקסט
במהלך הניסויים נדרש להשתמש בעורך טקסט ) ,(Text Editorכדי ליצור הקבצים .קיימים מספר
עורכים שונים במערכת ,כגון xemacs ,textedit ,nedit ,vim ,vi :ועוד .ניתן להשתמש בכל עורך
לפי שיקול המשתתפים בניסוי .העורכים nedit ,xemacsו" vim-מכירים" שפת .VHDL
למי שאינו מכיר היטב עורכי טקסט ב Unix-ורגיל דווקא לסביבת חלונות ,מומלץ על ,Text Editor
המופעל מתוך תת-התפריט Applicationsשל התפריט המהיר .עורך זה עובד באופן דומה מאוד ל-
Notepadשל חלונות.
עורך חלונאי דומה ,אך חזק מעט יותר הוא ,NEditהמופעל בעזרת הפקודה (בשורת פקודה):
nedit filename.vhd
עורך זה גם מראה בהדגשה את המלים השמורות של השפה.
עורך חלונאי נוסף ,חזק ומורכב יותר ,הוא xemacsמופעל בעזרת הפקודה:
xemacs filename.vhd
עורך זה מסוגל להשלים את הקטעים הנפוצים בקוד ,VHDLעל-ידי לחיצה על .TAB
ברוב עורכי הטקסט והחלונות בהם נעשה שימוש ,ניתן להדפיס בדומה למערכת חלונות ,בעזרת
,File → Printולחיצה על < >Enterללא שום שינויים או תוספות.
כמו-כן ,ניתן להדפיס קובץ המוכר על-ידי המדפסת (טקסט או )PostScriptבעזרת הפקודה:
lpr -Pbp filename
21
פרק – 3דוחות הכנה
הנחיות כלליות:
במהלך שאלות ההכנה תתבקשו לרשום קוד VHDLעבור מעגלים שונים .ברור שקיימים מימושים
שונים ומשונים עבור כל מעגל .בניסוי זה אתם נדרשים לממש את כל המעגלים בעזרת :
משפטי השמה פשוטים (אין להשתמש במשפטי )process משפטי השמה הכוללים "( "whenאם יש צורך ב)multiplexor - הצבה של רגיסטרים ( 16או 32סיביות) .אין צורך לממש את הרגיסטרים בעצמם ,הם יסופקולכם במהלך הניסוי.
משפטי instantiationאו referenceעבור אופרטורים של .Designwareלפני רישום הקוד עליך לצייר סכמה פשוטה של מעגל .רשום שם (מסוג ) ... tmp_b ,tmp_aעל כל
כניסה ויציאה של כל יחידת חישוב (מסכם ,מכפל )... ,או לרגיסטר .יש להגדיר שם זה כסיגנל בקוד.
המימוש יכלול אוסף של משפטי השמה לסיגנלים אלה ו/או חיבור הסיגנלים מהפתחים ( )Portsשל
הרגיסטרים.
דוגמא :
;library IEEE
;use IEEE.std_logic_1164.all
;use IEEE.std_logic_unsigned.all
entity example is
( port
;)a, b : in std_logic_vector(7 downto 0
;)c : in std_logic_vector(15 downto 0
;clk : in std_logic
;))z : out std_logic_vector(15 downto 0
;end example
architecture example_arc of example is
component reg16 is
( port
;)din : in std_logic_vector(15 downto 0
;clk : in std_logic
;))dout : out std_logic_vector(15 downto 0
;end component
;)signal tmp_a, tmp_b, tmp_c,: std_logic_vector(15 down to 0
begin
; tmp_a <= a * b
U1 : reg16
; )port map(tmp_a,clk, z
;end example_arc
המעגל שבדוגמא מחשב ב tmp_a -את מכפלת הכניסות aו tmp_a .b -נכנס לרגיסטר עם עלית
השעון .יציאת הרגיסטר מחובר ליציאת המעגל .zכאמור ,אין צורך לממש את הרגיסטרים .הם
ניתנים לסטודנט במהלך הניסוי.
22
הפגישה הראשונה תתמקד בלימוד בסיסי של כלי הסינתזה design_visionוספרית ה-
,DesignWareכיצד מבצעים סינתזה וכיצד מורים לכלי לנצל מימושים יעילים שקיימים בספריות.
בנוסף נכיר את האמצעים שהכלי מספק לשיפור הביצועים בהתאם לדרישות המתכנן.
בפגישה השנייה נכיר יכולות נוספות לכלי הסינתזה .כיצד ניתן לתקן בעיות תזמון באופן
אוטומטית ,כיצד הכלי יכול לשפר את הבדיקתיות של המעגל ,וכיצד הוא מנצל ידע על המעגל על
נמת לשפר את הביצועים ועוד.
בסעיפים השונים נממש מעגלים בעלי ארכיטקטורות שונות ובכך נכיר את היתרונות והחסרונות
של ארכיטקטורות סדרתיות ,מקביליות ומצונרות.
הכנה ניסוי מספר 1
.1ארכיטקטורות של מסכמים
קיימות דרכים רבות למימוש מסכמים .לרוב ניתן לומר מימוש מהיר צורך הרבה שטח ולהיפך.
בסעיף זה נלמד את השיטות שונות ליצור מסכם בעזרת כלי הסינתזה והספריות ונשווה בין שישה
מימושים שונים.
לקבלת רקע מסוים בנושא זה ,הינך מתבקש להכין סרטוטים של מספר מימושים( .ניתן למצוא
חומר רב על המימושים המבוקשים באינטרנט).
א .שרטט סכמה המממשת מסכם בעל 4סיביות בשיטת .ripple carry
ב .שרטט סכמה המממשת מסכם בעל 4סיביות בשיטת .carry lookaheadמהם היתרונות
והחסרונות של מימוש זה לעומת המימוש הקודם.
ג .שרטט סכמה המממשת מסכם בעל 4סיביות בשיטת .carry select
ד .צייר מימוש של מסכם בעל 8סיביות מסוג .Brent-Kung Adder :מה היתרונות והחסרונות
של מסכם זה לעומת המסכם של ?Slansky -
ה .רשום מימוש ב VHDL -של יחידה המקבלת כניסה ) (aמילה בת 64סיביות המהוות 8מילים
בנות 8סיביות כ"א .על הרכיב לסכם את 8המילים ולהוציא את הסכום כפלט ) (zבעל 8
סיביות .השתמש בשיטת ה .inference -קרא ל entity -בשם .adder64
שים לב :
ניתן לחלק את הכניסה לבתים בעלי 8סיביות באמצעות משפטים מסוג :; )tmp_a <= a(15 downto 8
.2אופטימיזציה של התזמון
המטרה בסעיף זה היא להכיר דרכים שונות לשיפור תדר העבודה של המעגל .לשם כך נשתמש
במעגל המסוגל לחשב את כ"א מהפעולות :
(cos(cosx) , )cos x)**2 , (x+1)**2 , cos (x+1
)Cos(x
x*x
z
a
x+1
)Cos(x
sela
selb
איור מס' :9מעגל למימוש הפונקציות של סעיף 2
23
עליך לרשום מימוש ב VHDL -של הסכמה באיור מס 9לפי ההנחיות שהוסברו לעיל.
בתחילת הקובץ יש להוסיף הפניות לספריות בעזרת המשפטים :;library IEEE,DW02
;use IEEE.std_logic_1164.all
;use IEEE.std_logic_arith.all
;use IEEE.std_logic_unsigned.all
;use DW02.DW02_components.all
עליך להניח ש sela -ו selb -הן כניסות למעגל ואין צורך לצור אותן במימוש עצמו. ממש את פעולת ה cos -בשיטת ה inference -עם משפט מסוג :)tmp_a <= DWF_cos(a, 8
כאשר 8מציין את רוחב היציאה. שים לב שהיציאה של יחידת ה cos -הראשונה ויחידת ה x+1 -היא בעלת 8סיביות והיציאה שליחידת ה cos -השנייה ויחידת ה x*x -היא בעלת 16סיביות.
כניסת המעגל aהיא מסוג ) signed(7 downto 0ולא .std_logic_vectorיציאת המעגל zהיאמסוג ) ,signed(15 downto 0כלומר ממשק המעגל יראה כך:
entity cos_unit is
(port
;)a : in signed(7 downto 0
;sela, selb : in std_logic
)z : out signed(15 downto 0
;)
;end cos_unit
כאשר cos_unitיכול להיות שם כלשהו.
.3השוואה בין ארכיטקטורה מקבילית ומצונרת
המטרה כאן היא להשוות בין ארכיטקטורות שונות ולהכיר דרכים שונות למימוש מעגל מצונר
בעזרת כלי הסינתזה.
א .רשום בצורה מפורטת כיצד מבצעים את החישוב .1101 * 1011 :
ב .צייר מעגל המבצע את פעולת הכפל של סעיף א' באופן מקבילי .השתמש בשערים פשוטים,
מסכמים ורגיסטרים.
ג .צייר מעגל המבצע את פעולת הכפל של סעיף א' באופן סדרתי .השתמש בשערים פשוטים,
מסכמים ורגיסטרים( .אין צורך לצייר את הבקר של המעגל).
ד .רשום (בקובץ בשם )macpa.vhdמימוש מקבילי (בשיטת ה (inference -ב VHDL -המממש
את הפעולה ) (a*b+cכאשר aו b -הן כניסות בעלות 16סיביות כ"א c ,כניסה בעלת 32סיביות
ו z -יציאה בעלת 32סיביות.
ה .רשום (בקובץ בשם )macpi.vhdמימוש נוסף לפעולה ) .(a*b+cהפעם יש לממש את המכפל
כמכפל מצונר בעל שתי דרגות .יש לממש את המכפל בשיטת ה .instantiation -דוגמא למימוש
מכפל מצונר ( 4דרגות) בשיטת ה:instantiation -
U1 : DW02_mult_4_stage
)generic map (A_width=>16, B_width=>16
;)port map(A=>a, B=>b, tc=>tc, clk => clk, product => temp
הערות:
בתחילת הקובץ יש להוסיף הפניות לספריות כמו בסעיף הקודם. עליך להוסיף אות שעון clkו tc -לרשימת הכניסות( .כניסות המכפל הן A,B, clk, tc :יציאתהרכיב היא tc .)PRODUCTקובע האם המכפל עובד עם .2’s-Complement
ניתן להניח שהאות cמגיע למסכם בזמן הנכון ואין צורך ברגיסטר שישמור את ערכו עדשמשתמשים בו.
מהם היתרונות והחסרונות של מימוש זה לעומת המכפל מהסעיף הקודם ?ו .למימוש של סעיף ד' הוסף 3רגיסטרים (ברוחב היציאה כלומר 32סיביות) שדרכם תעבור
התוצאה אל היציאה .שים לב שיש צורך להוסיף אות שעון למעגל כולו.
24
הכנה ניסוי מספר 2
.1אנליזה של setup timeוhold time -
סעיף זה יעסוק בהעמקת הבנה בנושא setup timeו .hold time -חשוב להבין שזמני השהיה של
שערים נעים בין ערך מינימלי לערך ומקסימלי .חיוני לבצע את האנליזה עם ההשהיות הנכונות (ולא
רק עם זמני ה .)typical -נתון המעגל הבא :
Min = 5ns
Max = 7ns
Data
CLK
Setup = 2ns
Hold = 1ns
Min = 1ns
Max = 2ns
איור מס' : 10מעגל סינכרוני טיפוסי
המעגל מכיל שני FlipFlopsולוגיקה קומבינטורית ביניהם .עבור סעיף זה ,נזניח את ההשהיות
הפנימיות של ה FlipFlops -וההשהיות של החוטים.
א .הסבר מה זה setup timeומה זה ? hold time
ב .מהו מחזור השעון המינימלי שעדיין מאפשר למעגל לעבוד בצורה תקינה ? הסבר.
ג .מהו הפתרון פשוט למעגל שאינו מקיים את דרישת ה? setup time -
ד .האם המעגל מקיים את דרישת ה “hold” -של ה ? FlipFlop -הסבר.
ה .מהו הפתרון למסלול שאינו מקיים את דרישת ה? hold time -
.2בעיית הFalse Path -
המטרה בסעיף זה היא להכיר את בעיית ה .false path -בסעיף זה נשתמש במעגל המסוגל לחשב
את כ"א מהפעולות )cos x)**2 , (x+1)**2 , cos (x+1( :
כלומר מעגל המממש אותן הפונקציות כמו המעגל של סעיף 2של החלק הראשון (איור מס' )9פרט
לפונקציה של ) .cos(cosxנשתמש באותו מימוש – .VHDL
מהו לדעתך המסלול הקריטי של המעגל ? הסבר. .3שימוש ב multicycle path/operator -בALU -
בסעיף זה ,נלמד את נושא ה multicycle path/operator -בעזרת יחידת חישוב אריתמטית ).(ALU
ברכיב זה ,קיימת דרישה שכל הפעולות חוץ פעולת הכפל תתבצענה בקצב של 500MHzכלומר ,זמן
מחזור של .2nsמערכים שההשהיה המינימלית של המכפל יהיה כ 4ns -ולכן דרושים שני מחזורי
שעון לביצוע פעולה זאת .נשתמש ביחידת ALUהמתוארת להלן:
כניסות :
Aו 32 :B -סיביות -האופרנדים של הפעולה
3 : opcodeסיביות -הגדרה של סוג הפעולה
יציאות :
32 : C1סיביות – הסיביות ה lsb -של התוצאה
32 : C2סיביות – הסיביות ה msb -של התוצאה
הערה :תוצאת הכפל היא בעלת 64סיביות .כל יתר התוצאות הן בעלות 32סיביות.
25
: תיאור פונקציונלי
opcode
000
001
010
011
100
101
110
111
C1
LSB(A*B)
A+B
A-B
not A
A and B
A xor B
ShiftL(A)
ShiftR(A)
C2
MSB(A*B)
-
ALU -להלן סכמת בלוקים של ה
*
A
B
A
B
+
not
-
an
d
shl
xor
shr
product(31 downto 0)
product(63 downto 32)
opcode
C2
C1
C2
C1
ALU - סכמת בלוקים של ה: 11 'איור מס
26
הערה :הבלוקים C1,B,Aו C2 -הם רגיסטרים בעלי 32סיביות .נתאר שני פתרונות אפשריים
למימוש ALUהעומד בדרישות הנ"ל:
מימוש המכפל כ multicycle operator -כלומר כיחידה שמקצים לה שני מחזורי שעון. מימוש המכפל בעל שתי דרגות צינורבסעיף זה הנך נדרש לרשום שני מימושים של ה ALU -על מנת שנוכל להשוואות בין שני הפתרונות.
א .ראשית ,רשום קוד VHDLהמממש את ה ALU -הנ"ל בהתאם להנחיות הבאות .עליך לשלב
במימוש את ארבעת הרגיסטרים בשיטה ה( instantiation -המימוש עצמו של הרגיסטרים
יינתן במהלך הניסוי) .עליך לממש את ה multiplexor -בעזרת משפט מהסוג :
muxout <= x + y WHEN opcode="000" ELSE
x - y WHEN opcode="001" ELSE…..
..
)'0' & A(31 downto 1) WHEN opcode="110"; (ShiftR
פעולות הזזה מתבצעות על האופרנד .A
muxoutהוא שם הסיגנל ביציאת ה.multiplexor -
יש לממש את המכפל בצורה מקבילית פשוט ע"י שימוש באופרטור "*" .
את פעולת הזזה ניתן לממש עם אופרטור השרשור "&" ,לדוגמא x(7 downto 1) & ‘0’ :
הערה :בתחילת הקובץ יש להוסיף הפניות לספריות כמו בסעיפים הקודמים.
ב .רשום מימוש נוסף ב VHDL -עבור ה ALU -דומה למימוש הקודם אבל הפעם עליך לממש
את המכפל כמכפל מצונר בעל שתי דרגות צינור (ראה את סעיף 3של החלק הראשון של
הניסוי).
.4שיפור הבדיקתיות Design For Testability (DFT) :
המטרה בסעיף זה היא להכיר את היכולת של הכלי לשפר באופן אוטומטי את הבדיקתיות של
התכנון.
רשום מימוש (בשיטת ה (inference -ב VHDL -המממש את הפעולה ) (a*b+cכאשר aו b -הן
כניסות בעלות 8סיביות כ"א c ,כניסה בעלת 16סיביות ו z -יציאה בעלת 16סיביות .עליך לקלוט
את תוצאת הכפל של aו b -ברגיסטר .כמו כן עליך לקלוט גם את תוצאת הסיכום גם ברגיסטר לפני
הוצאתה דרך .z
הערה :בתחילת הקובץ יש להוסיף הפניות לספריות כמו בסעיפים הקודמים.
27
פרק – 4ביצוע הניסויים
הערות :
-
כתיבת דוח הניסוי תתבצע במהלך הניסוי באופן ממוחשב בעזרת תבנית שברשותכם .כל
הגרפים והסכמות ישולבו בדו"ח זה ללא הצורך בהדפסות.
לעריכת הדו"ח רשום :
- oowrite name1_name2.odt
כשאר name1ו name2 -הם שמות הסטודנטים .שים לב ש name1_name2.odt -אינו קובץ
ריק אלה תבנית עליה מתבסס הדו"ח.
עריכת הדוח הממוחשב תעשה ע"י מעבד תמלילים של .Open Officeיתכן ויפתח חלון
ההערה הבא:
לחץ על Yesבכדי להמשיך .בדוק שנפתח קובץ לפי שמות הסטודנטים שלכם.צירוף תמונות/סכמות לדו"ח :
ראשית יש צורך לצור קובץ .jpg הפעל את תוכנת xvבחלון .terminalיפתח החלון השמאלי .כאשר הסמן נמצא מעלחלון זה לחץ על הכפתור הימני של העכבר .יפתח החלון הימני .לחץ על " ."Grabלחץ על
" "Grabגם בחלון שנפתח .כעת הזמן לסמן את התמונה שברצונך לשמור.
הכפתור השמאלי של העכבר מאפשר לך לבחור חלון שלם. הכפתור האמצעי מאפשר לך לסמן איזור של המסך שברצונך לשמור כתמונה. אחרי שבחרת את התמונה לחץ על saveבחלון הימני ,בחר בפורמט jpgוהכנס שםלתמונה עם סיומת . .jpg
הכנס את הסכמה לדו"ח ב openoffice -עם .Insert->Picture->From File
שינוי שפה יעשה ע"י Alt+Shiftושינוי כיוון כתיבה ע"י .Ctrl+Shift
28
ביצוע ניסוי מס' 1
.1ארכיטקטורות של מסכמים
מטרת סעיף זה היא ללמוד כיצד ניתן לצור ארכיטקטורות שונות של מסכמים בעזרת כלי הסינתזה
ולהשוואות ביניהם.
א .מימוש פשוט
רשום את מימוש המסכם שהכנת בקבצים בשם .adder64.vhd הפעל את ה design vision -בעזרת הפקודה .dv קרא את הקובץ adder64.vhdבעזרת הפקודה ,File->Readבחר את הקובץ ולחץ על Openבחלון שנפתח.
בחלון ה Logical Hierarchy -בחר ביחידת ה.adder64- בצע Design->Compile Designולחץ על .O.K. כעת בחלון ה Logical Hierarchy -יופיעו מספר יחידות ,יש לבחור את היחידה העליונהוללחוץ על ה icon-של שער ה and -למעלה .בסכמה המתקבלת מופיעים .8bit adders 7
בחר באחד מהם וללחוץ על ↓ . :Q11באיזו ארכיטקטורה ממומש המסכם? :Q12צרף את הסכמה לדו"ח. חזור לרמת העליונה בעזרת ↑. להערכת הביצועים בחר את ה adder64 -ולחץ על ,Timing -> Report Timing Pathבחלוןשנפתח לחץ על . OK
כדי לקבל הערכה של השטח וההספק לחץ על Design-Report Areaו.Design-Report Power -
רשום את שטח המעגל ,צריכת ההספק והשהיית המסלול הקריטי בטבלה בסעיף הבא. נציג כעת את המסלול הקריטי על הסכמה .פתח Timing->Timing Analysis Driver בחלון select pathsלחץ על .OKבחלון TimingAnalysisDriverיופיעו כל המסלולים.בחר בעליון.
ב .כעת נבחן עוד מספר ארכיטקטורות אפשריות המסופקות ע"י ה .DW -ראשית מלא את
הנתונים מהסעיף הקודם בטבלה הבאה:
Power
Area
Arch/Constraint Critical Path
ripple
adder64
1
cla
adder64
2
pparch
adder64
3
max_delay=2
adder64
4
default
sum
5
max_delay=2
sum
6
מימוש Carry Lookahead :2
כאמור ,ה designware -מאפשר למשתמש לשלב בתהליך הסינתזה מימושים מיוחדים עבור
אופרטורים שונים (למשל שימוש ב carry lookahead -עבור פעולת סיכום מסוימת).
חזור לרמה העליונה של הסכמה של ה .adder64 -בחר ביחידה אחת .בחלון הLogical Hierarchy -
יבחר ה ,instance_name -לדוגמא . add_1_root_add_48 :
בחלון הפקודות רשום :
*set_implementation cla add
29
הכלי מחזיר " "1אם הפקודה נקלטת בהצלחה .הקפד על אותיות גדולות/קטנות עבור השמות!. פעולה זאת מאלצת את ה dv -לממש את כל המסכים בארכיטקטורת add*( claמציין את כלהמסכמים ששמם מתחיל ב – add-זה פשוט חוסך כתיבה).
בצע Design->Compile Designולחץ על .O.K. פתח את הסכמה .בחר אחת היחידות המתקבלות ולחץ על ↓ ,ולחץ על ה icon -של שער ה- .andכעת תופיע הסכמה של ה adder64 -הנבחר .שים לב לשינוי במימוש.
סכם בטבלה את הביצועים (השהיה ,שטח והספק) כפי שעשית עבור התכנון הקודם.מימוש Parallel Prefix Architecture :3
חזור על הסעיף הקודם אבל הפעם עם :
*set_implementation pparch add
סכם בטבלה את הביצועים של המימוש. הערה :קיימים מימושים שונים של ,pparchהכלי בוחר את המימוש הטוב ביותר ,בהתאםלאילוצים ,עובר המעגל הזה.
מימוש :4
ברצוננו לבנות את המסכם המהיר ביותר .כיצד ניתן לעשות זאת עם הפקודה ?set_max_delay
רשום אילוץ set_max_delayמתאים בחלון הפקודות של ה .dv -הראה את הפקודה למנחה(רשום את הפקודה גם הדו"ח).
סנתז את המסכם מצא את ההשהיה שלו ,שטח והספק. סכם בטבלה את הביצועים כפי שעשית עבור התכנון הקודם.שאלות:
:Q13האם למימושים עם )2( claוה )3( pparch -היתרונות והחסרונות לעומת ה )1( ripple-כפי
שציפית? הסבר.
:Q14מה הוא מחיר השיפור במהירות שהתקבל במימוש ?4
האם ניתן למצוא מימוש טוב יותר ? ננסה לחפש ב.designware -
פתח את ה manual -עם הפקודה .sold : בחר Designware Building Block IP עבור לעמוד 7ולחץ על DW02_sumלקבלת התיאור של רכיב זה. סגור את הmanual - DW02_sumהוא רכיב המקבל וקטור ככניסה ופרמטר המציין כמה מילים הוקטור מייצג .הרכיב
מבצע חיבור של מילים אלה sum.vhd .מממש רכיב מסוג זה עבור כניסה בעלת 64סיביות המהווה
8מילים בעלות 8סיביות כ"א.
מימוש :5
הפעל את ה design vision -בעזרת הפקודה .dv קרא את הקובץ sum.vhdבעזרת הפקודה ,File->Readלחץ על OKבחלון שנפתח בצע Design->Compile Designולחץ על .O.K. סכם בטבלה את הביצועים (השהיה ,שטח והספק) כפי שעשית עבור התכנון הקודם.מימוש :6
בחלון command windowרשום את האילוץ set_max_delay –to z 2 :ואז .compileכאשר zהוא שם היציאה.
סכם בטבלה את הביצועים (השהיה ,שטח והספק) כפי שעשית עבור התכנון הקודם.שאלות :
:Q15למה לדעתך רכיב זה הצליח לתת מימושים הרבה יותר יעילים (כלומר גם מהירים יותר וגם
בעלי שטח קטן יותר) ?
30
.2אופטימיזציה של התזמון
בסעיף זה נכיר מספר דרכים שונות לשיפור התזמון של מעגל .בתרגיל זה נשתמש במעגל המחשב
את הפעולות :
(cos(cosx) , )cos x)**2 , (x+1)**2 , cos (x+1
רשום את המימוש שהכנת בבית בקובץ בשם .cos.vhdדרכים שונות לשיפור התזמון בכלי design_visionשנפעיל במהלך הניסוי:
.1
.2
.3
.4
.5
שבירת ההיררכיה לשיפור האופטימיזציה :אם "שוברים" את המבנה הלוגי ,ניתן לעתים
קרובות לבצע אופטימיזציה טובה יותר
– Compile Ultraכלי סינתזה עם יכולת אופטימיזציה טובה יותר
– set_max_delayמגדיר את ההשהיה המרבית שהמשתמש דורש עבור מסלול מסוים.
– set_max_capacitanceמגביל את הקיבול המירבי של כל הצמיתים שבמעגל
- set_max_fanoutמגביל את ה fanout -המירבי של כל שער שבמעגל
הפעל את ה design vision -בעזרת הפקודה .dv קרא את הקובץ cos.vhdבעזרת הפקודה ,File->Readלחץ על OKבחלון שנפתח. על מנת לקבל מימוש מהיר הגדר אילוץ זמן :- set_max_delay –to z_* 2
כאשר *_ zהן היציאות ו 2 -מציין .2nsאילוץ הדוק זה גורם לכלי לבצע אופטימיזציה של זמןעל חשבון שטח.
בצע סינתזה של המעגל ע"י בחירת .Design->Compile design בעזרת Timing -> Report Timing Pathמצא את ההשהיה של המסלול הקריטי. בעזרת Design->Report Areaמצא את השטח של הלוגיקה הקומבינטורית. :Q21האם המעגל עומד בתזמון שהוגדר ? הסבר .רשום את התזמון והשטח בטבלה.
בצע סינתזה של המעגל מחדש עם Design->Compile designאבל הפעם הפעל את האופציה.Ungroup
:Q22מצא ורשום בטבלה את התזמון והשטח של המימוש שהתקבל .האם יש שיפור בתזמון ?
הסבר.
בצע סינתזה של המעגל מחדש אבל הפעם עם Design->Compile Ultra :Q23מצא ורשום בטבלה את התזמון והשטח של המימוש שהתקבל .האם יש שיפור בתזמון ?
הפקודה set_max_capacitanceמנסה להגביל את הקיבול המקסימלי של הצמתים שלהמעגל .לדוגמא ,הפקודה הבאה מגבילה את הקיבול בכל צומת של היחידה designל:0.05pf -
- set_max_capacitance 0.05 design
זכור להשתמש בשם היחידה שלך במקום .design על מנת לראות את ההיסטוגרמה של הקיבולים במעגל ,לחץ על timing->net capacitanceולחץ על OKבחלון שנפתח.
הפקודה set_max_fanoutמנסה להגביל את מספר השערים שיכולים להיות מחובריםליציאה מסוימת .לדוגמא ,על מנת להגביל את ה fanout -של הכניסות * aל ,10-ניתן לרשום :
*- set_max_fanout 10 a
בעזרת Design->Report Netsניתן לראות את ה fanout -של כל הצמתים. :Q24בעזרת set_max_capacitanceנסה לקבל מעגל מהיר יותר .עליך להריץ שתי סינתזות עם
.Design->Compile Ultraעבור כל ריצה ,קבע ערך מירבי לקיבול שונה .העזר בהיסטוגרמה של
הקיבולים על מנת לבחור ערך הגיוני .האם הצלחת לשפר את התזמון ? מצא ורשום בטבלה את
התזמון והשטח של המימוש שהתקבל .רשום עבור איזה קיבול התקבלו תוצאות אלה .בדוק את
ההיסטוגרמה של הקיבולים .האם הכלי מקיים את האילוץ של קיבול מיריבי ?
31
:Q25בעזרת set_max_fanoutנסה לקבל מעגל מהיר יותר .עליך להריץ שתי סינתזות עם
.Design->Compile Ultraעבור כל ריצה ,קבע ערך שונה ל .fanout -העזר Design->Report
Cellsעל מנת לבחור ערך הגיוני ל .fanout -האם הצלחת לשפר את התזמון ? מצא ורשום בטבלה
את התזמון והשטח של המימוש שהתקבל .רשום עבור איזה fanoutהתקבלו תוצאות אלה.
Delay
Area
DC
DC+ UngroupAll
Compile Ultra
set_max_cap
= Cap
set_max_fanout
= Fanout
:Q26אילו מסקנות ניתן להעסיק מהריצות הנ"ל ?
.3השוואה בין ארכיטקטורה מקבילית ומצונרת
בסעיף זה ,נשווה בין מימושים שונים ונכיר שיטות שונות למימוש מעגל מצונר .נדרש לממש מעגל
לחישוב ) (a*b+cבעל throughputמכסימלי .ראשית נממש את המעגל כמעגל צירופי
בארכיטקטורה מקבילית .לאחר מכן נממש את המעגל בעזרת מכפל מצונר ולבסוף נלמד כיצד ניתן
לממש את המעגל כולו בארכיטקטורת ( pipelineולא רק את המכפל) .הדרישה העיקרית בסעיף
זה היא להגיע למחזור שעון מינימלי.
א .מימוש מקבילי :
רשום בקובץ macpa.vhdאת המימוש של הפעולה ) (a*b+cהמקבילי שהכנת בשיטת ה-.inference
הפעל את ה design vision -בעזרת הפקודה .dv קרא את הקובץ macpa.vhdבעזרת הפקודה ,File->Readלחץ על OKבחלון שנפתח. בחלון הפקודות רשום :- set_max_delay –to z 1
אילוץ זה יגרום לכלי לצור את המימוש המהיר ביותר. בצע סינתזה של המעגל ע"י בחירת .Design->Compile design :Q31בעזרת Timing -> Report Timing Pathמצא את ההשהיה של המסלול הקריטי ורשום
את הנתון בטבלה.
סגור את ה dv -עם .File->Closeב .מימוש עם מכפל מצונר :
בקובץ macpi.vhdרשום את המימוש של הפעולה ) (a*b+cעם מכפל מצונר (בעל 2דרגותצינור) שהכנת .זכור להשתמש בשיטת ה instantiation -עבור המכפל .פתח את ה.dv -
קרא את הקובץ macpi.vhdבעזרת הפקודה ,File->Readלחץ על OKבחלון שנפתח. בצע סינתזה של המעגל ע"י בחירת .Design->Compile design נבחר כעת מימוש מהיר יותר עבור המסכם ועבור המכפל. נוסיף מספר אילוצי תזמון לקבלת מימוש מהיר .בחלון הפקודות רשום :- set_max_delay 1 –to z
- set_max_delay 1 –to */PRODUCT
כאשר zמהווה את יציאת המסכם ו – */PRODUCT -יציאת המכפל. סנתז את המעגל שוב עם .Design->Compile design :Q32בעזרת Timing -> Report Timing Pathמצא את ההשהיה של המסלול הקריטי ורשום
את הנתון בטבלה.
שים לב שניתן לשנות את מספר דרגות הצינור של המכפל מ 2-ל 6-בקובץ .macpi.vhd32
ג .מימוש אוטומטי של pipelineעם רגיסטרים מוגדרים מראש
העתק את הקובץ macpa.vhdלקובץ בשם macpi2.vhdבעזרת הפקודה :- cp macpa.vhd macpi2.vhd
והוסף שלושת הרגיסטרים לפני היציאה כפי שהכנת (הוסף גם סיגנלי tmpלפי הצורך ,וגםכניסת .)clkצייר סכמה פשוטה של המעגל.
הפעל את ה dv -וקרא את הקובץ reg32.vhdבעזרת הפקודה ,File->Readלחץ על OKבחלוןשנפתח.
הערה :בכל פעם שתכנון מסוים משתמש ב reg16 -או ב reg32 -הנכם נדרשים לקרוא אתהקובץ עם הגדרת הרגיסטר בנוסף לקובץ עם התכנון .למעשה לאחר שהרגיסטר נקרא פעם
אחת ,אין צורך לקרוא אותו שוב בסעיפים בהמשך כי הרגיסטר כבר קומפל וכלי מסוגל לזהות
אותו בספרית ה.)WORK -
קרא את הקובץ – macpi2.vhdבעזרת .File->Read בחלון הפקודות רשום :- source macpi2.con
קובץ זה מגדיר לכלי להתייחס גם למסלולים מכל הכניסות ואל כל היציאות בזמן חישובהתזמון ,וגם מגדיר את השעון כפי שמופיע בשורה הבאה :
}- create_clock -name "clk" -period 1 -waveform { 0 0.5 } {clk
בצע סינתזה של המעגל ע"י בחירת .Design->Compile design :Q33בעזרת Timing -> Report Timing Pathמצא את ההשהיה של המסלול הקריטי .הסבר !!
בחלון ה CW -הכנס את הפקודה .balance_registers( Q33המשך) :מצא את ההשהיה של המסלול הקריטי .הסבר !!
סגור את ה dv -עם .File->CloseCritical Path
Arch
Parallel
1
DWF_mult_2_s
2
balance_reg
3a
balance_reg
3b
:EX1תרגיל:
בעזרת אחת השיטות הנ"ל (כולל גם , )Compile Ultraממש מעגל לחישוב ) (a*b+cבעל תדר
שעון של .1nsעליך לקרוא למדריך ,להסביר לו את השיטה שבחרת ולהציג לו את ההשהיה של
המסלול הקריטי .עליך גם לרשום את ההסברים והתוצאות בדו"ח.
סיום חלק ראשון !
33
ביצוע ניסוי מס' 2
.1אנליזה של setup timeוhold time -
כאמור בהכנה ,חשוב לשים לב שלשערים השונים יש זמני השהיה מינימליים ומקסימליים .חיוני
לבצע את האנליזה עם ההשהיות הנכונות (ולא רק עם זמני ה .)typical -בסעיף זה נשווה בין זמני
ה typical -ולבין זמני max-minולאחר מכן נכיר דרך אוטומטית לתיקון בעיות .holdעבור סעיף
זה נשתמש במימוש cos.vhdשהכרנו בחלק הראשון אבל נוסיף לתכנון שני רגיסטרים כפי שמופיע
באיור מס' :12
)Cos(x
x*x
z
a
x+1
)Cos(x
sela
selb
clk
איור מס' :12מעגל לאנליזה של setup timeוhold time -
מימוש לתכנון הנ"ל מופיע בקובץ בשם cos2.vhd הפעל את ה design vision -בעזרת הפקודה .dv קרא את הקבצים reg8s.vhdואת cos2.vhdבעזרת הפקודה .File->Read בחלון הפקודות רשום :- source cos2.con
קובץ זה מכיל את הפקודות:}- create_clock -name "CLK" -period 20 -waveform {0 10
בצע סינתזה של המעגל ע"י בחירת .Design->Compile Design בעזרת . Timing -> Report Timing Pathמצא את ה slack -עבור אנליזת ה( setup -שים לבשה Delay Type -הוא .)max
בעזרת ) Timing -> Report Timing Pathאבל הפעם בשדה Delay Typeבחר ב min -במקום (maxמצא את ה slack -עבור אנליזת ה.hold -
:Q11רשום את ה slack -עבור שני המקרים בטבלה בסוף הסעיף.
שים לב שהאנליזות הנ"ל בוצעו עבור השהיות מסוג typicalבשני המקרים.כעת נחזור על שתי הבדיקות ונשתמש ב max delay -עבור אנליזת setupוב min delay -עבור
אנליזת .holdכדי לעשות זאת ,יש לבצע את הפקודות הבאות :
- set_min_lib tsl18fs120_max.db -min_version tsl18fs120_min.db
set_operating_conditions -max tsl18fs120_max -max_library tsl18fs120_max -min
(הכל בשורה אחת) tsl18fs120_min -min_library tsl18fs120_min
-
ניתן לעשות זאת בדרך פשוטה על הרצת הקובץ minmax.tclבאופן הבא :
- source minmax.tcl
בעזרת . Timing -> Report Timing Pathמצא את ה slack -עבור אנליזת ה.setup - בעזרת ) Timing -> Report Timing Pathאבל הפעם בשדה Delay Typeבחר ב min -במקום (maxמצא את ה slack -עבור אנליזת ה.hold -
:Q12רשום את ה slack -עבור שני המקרים בטבלה בסוף הסעיף.
א .רשום בכמה אחוזים השתנו הזמנים לעומת זמני ה? typical -
34
ב .האם יש בעיה של ?(hold time) min delayהסבר את התשובה למדריך ורשום אותה
בדו"ח.
קובץ בשם cos2_syn.vמכיל אותו תכנון אבל הפעם הוא כולל את ההשהיה של השעון שנגרמת
ע"י החיווט .נחזור על כל בדיקות התזמון עם המעגל הזה.
לאיפוס הכלי רשום :- remove_design -designs
קרא את הקובץ cos2_syn.vhdבעזרת הפקודה ,File->Readלחץ על OKבחלון שנפתח. הפעם ,אין לצורך לבצע .Design->Compile design בצע :- current_design cos2
- source cos2.con
]* - set_propagated_clock [get_clock
פקודה זאת גורמת לכלי לחשב את ה skew -על קווי השעון הנגרם מההשהיה עליהם .נגדיר גם את
הספריות הנכונות :
- source minmax.tcl
בעזרת . Timing -> Report Timing Pathמצא את ה slack -עבור אנליזת ה.setup - בעזרת ) Timing -> Report Timing Pathאבל הפעם בשדה Delay Typeבחר ב min -במקום (maxמצא את ה slack -עבור אנליזת ה.hold -
:Q13רשום בטבלה את ה slack -עבור שני המקרים בסוף הסעיף הקודם.
:Q14הוסף סכמת של המימוש לדו"ח .לחיצה על ה icon -של שער ה and -בחלון design_vision
תיצור סכמה.
:Q15האם יש בעיה של ? min delayהסבר.
:Q16כיצד ניתן לתקן את בעיית ה ? min delay -הסבר למדריך פתרונות אפשריים.
:Q17לאחר התייעצות עם המדריך בצע את התיקון .רשום מה עשית בדו"ח.
:Q18הוסף סכמת של המימוש לאחר התיקון לדו"ח .מה ההבדל לעומת הסכמה הקודמת ?
:Q19חזור על הבדיקה .holdהאם הבעיה נפתרה ?
Hold slack
Setup slack
)cos2(typ
)cos2(min/max
)cos2_syn(min/max
After fix hold
.2בעיית הFalse Path -
המטרה בסעיף זה היא להכיר את בעיית ה .false path -כזכור ,בחלק הראשון הכנת מעגל בקובץ
בשם cos.vhdהמחשב את הפעולות :
(cos(cosx) , )cos x)**2 , (x+1)**2 , cos (x+1
נשתמש במימוש זה במהלך תרגיל זה .נניח כעת שאנו מעוניינים רק בפעולות :
()cos x)**2 , (x+1)**2 , cos(x+1
כלומר ,קיימים מסלולים לוגיים במעגל שאינם רלוונטיים ואינם מופעלים וחשוב ליידע לכלי על
קיום כל המסלולים מסוג זה.
הפעל את ה design vision -בעזרת הפקודה .dv קרא את הקובץ cos.vhdבעזרת הפקודה ,File->Readלחץ על OKבחלון שנפתח. בצע סינתזה של המעגל ע"י בחירת .Design->Compile design :Q21בעזרת Timing -> Report Timing Pathמצא את ההשהיה של המסלול הקריטי.
בדוק את המסלול קריטי של המימוש .האם הוא עבור דרך שתי יחידות ה? cos -35
נציג כעת את המסלול הקריטי על הסכמה .פתח Timing->Timing Analysis Driver בחלון select pathsלחץ על .OKבחלון TimingAnalysisDriverיופיעו כל המסלולים .בחרבעליון.
:Q22האם זה באמת המסלול הקריטי של התכנון ? הסבר.
בחלון הפקודות רשום הפקודה ) (set_false_pathהמציינת לכלי שהמסלול שעובר דרך שתייחידת ה cos -מסלול אמיתי .העזר ב man set_false_path -כדי לראות את המבנה המדויק
של הפקודה .הכלי מחזיר " "1אם הפקודה נקלטת בהצלחה .הקפד על אותיות גדולות/קטנות
עבור השמות!)
:Q23מצא שוב את המסלול הקריטי .האם זה שונה מהסעיף הקודם ? איזו הודעה מתקבלת
מהכלי ? הסבר.
בחלון הפקודות רשום :- source cos.con
קובץ זה מכיל את הפקודות:*_- set_max_delay 10 -to z
כלומר אילוצים על ההשהיה המרבית עד ליציאה. :Q24למה לדעתך אנו מספקים אילוצים אלה לכלי ?
:Q25מצא שוב את המסלול הקריטי .האם זה שונה מהסעיף הקודם ?
עליך להראות את הפקודה שרשמת ואת ולהסביר את התוצאות למדריך! סגור את ה dv -עם .File->Close .3שימוש ב multicycle path/operator -בALU -
המטרה של סעיף זה היא להכיר את הנושא של multicycle path/operator
Power
Area
Slack
Arch
Parallel
1
Parallel + MCO (no
)recompile
2
Parallel + MCO (with
)recompile
3
Using a 2 stage
pipelined mult
4
multicycle operator =MCO
א .מימוש מקבילי עבור המכפל
רשום את המימוש שהכנת עבור ה ALU-בקובץ בשם .alu.vhdהעזר בקובץ הקיים ספריתהעבודה.
הפעל את ה design vision -בעזרת הפקודה .dv קרא את הקובץ alu.vhdבעזרת הפקודה ,File->Readלחץ על OKבחלון שנפתח. נגדיר שעון בעל מחזור של 2nsבעזרת את הפקודה :} create_clock -name "clk" -period 2 -waveform { 0 1 } { clk
בצע סינתזה של המעגל ע"י בחירת .Design->Compile Design : Q31מצא את ה slack -של המסלול הקריטי ,צריכת ההספק והשטח של המימוש .שים לב שהכלי
מדווח על המסלול דרך המכפל כמסלול הקריטי .רשום את הנתונים בטבלה.
36
ב .מימוש מקבילי עבור המכפל ושימוש בmulticycle path -
נדגים בסעיף זה שימוש ב.multicycle operator -
כעת נודיע לכלי שהמכפל רשאי לבצע את חישוב בשני מחזורים שעון .נעשה זאת בעזרתהפקודות :
*_set_multicycle_path 2 –through mul*/product
בסכמה של המעגל ,ניתן לראות שקיים מכפל בשם *_ .multהפקודה הנ"ל מגדירה את כלהמסלולים שעוברים דרך יציאת productשל המכפל כמסלולי multicycleהמתבצעים בשני
מחזורי שעון.
:Q32בדוק שוב את המסלול הקריטי ? האם גם הפעם המסלול הקריטי עובר דרך מכפל? הסבר.
רשום בטבלה מהו שטח המעגל ,צריכת ההספק שלו וה slack -של המסלול הקריטי?
נבצע שוב סינתזה של המעגל ע"י בחירת Design->Compile Designעל מנת לבדוק האם הכלי
מסוגל לשפר את המימוש.
:Q33רשום בטבלה מהו שטח המעגל ,צריכת ההספק שלו וה slack -של המסלול הקריטי?
:Q34הסבר מדוע לדעתך המעגל עומד בדרישות התזמון אחרי Design->Compile Designולא
עמד בדרישות התזמון לפני כן.
ג .מימוש מצונר עבור המכפל
דרך נוספת לפתור את בעיית התזמון עבור המקרה הזה היא לבצע את החישוב ב.pipeline -
המטרה היא להשוואת את הפתרון הזה עם הקודם מחינת תוספת השטח הדרושה.
רשום את המימוש שהכנת עבור ה ALU-בקובץ בשם .alu2.vhdהעזר בקובץ הקיים ספריתהעבודה.
הפעל את ה design vision -בעזרת הפקודה .dv קרא את הקובץ alu2.vhdבעזרת הפקודה ,File->Readלחץ על OKבחלון שנפתח. נגדיר שעון בעל מחזור של 2nsבעזרת את הפקודה :} create_clock -name "clk" -period 2 -waveform { 0 1 } { clk
בצע סינתזה של המעגל ע"י בחירת .Design->Compile Design מצא את ה slack -של המסלול הקריטי ,צריכת ההספק והשטח של המימוש .רשום את הנתוניםבטבלה.
:Q35האם המסלול הקריטי עובר דרך המכפל ? הסבר.
:Q36איזו ארכיטקטורה היא הטובה ביותר ? הסבר.
.4שיפור הבדיקתיות Design For Testability (DFT) :
המטרה בסעיף זה היא להכיר את היכולת של הכלי לשפר באופן אוטומטי את הבדיקתיות של
התכנון.
בקובץ dft.vhdרשום את המימוש של המעגל שמחשב ) (a*b+cעם רגיסטרים שהכנת. הפעל את ה design vision -בעזרת הפקודה .dv קרא את הקובץ reg16.vhdבעזרת הפקודה ,File->Readלחץ על OKבחלון שנפתח. קרא את הקובץ dft.vhdבעזרת הפקודה ,File->Readלחץ על OKבחלון שנפתח.}create_clock –name “clk” –period 2 –waveform {0 1} {clk
בצע סינתזה של המעגל ע"י בחירת .Design->Compile Design :Q41רשום בטבלה מהו שטח המעגל ,צריכת ההספק והשהיית המסלול הקריטי?
בחר באחד הרגיסטרים .כדי לראות את הסכמה יש ללחוץ על ↓. :Q42צרף לדו"ח את הסכמה של הרגיסטר.
37
-
-
חזור לרמה העליונה של הסכמה.
בחלון הפקודות רשום :
-
ב dft.src -רשומות שתי פקודות עם הגדרות עבור ה.scan insertion -
בחלון הפקודות רשום :
source dft.src
insert_dft
:Q43רשום בטבלה מהו שטח המעגל ,צריכת ההספק והשהיית המסלול הקריטי?
Power
Max
Delay
-
-
Area
Before DFT
After DFT
:Q44רשום כיצד insert_dftהשפיע על ערכים אלה.
:Q45רשום את כל השינויים שהוכנסו למעגל כתוצאה של הפקודה .insert_dft
:Q46צרף לדו"ח את הסכמה של הרגיסטרים החדשים שהפעולה יצרה.
סגור את ה dv -עם .File->Close הפעל את ה design vision -מחדש בעזרת הפקודה .dv קרא את הקובץ reg16.vhdבעזרת הפקודה ,File->Readלחץ על OKבחלון שנפתח. קרא את הקובץ dft.vhdבעזרת הפקודה ,File->Readלחץ על OKבחלון שנפתח. בצע סינתזה של המעגל ע"י בחירת .Design->Compile design אם ברצוננו לשנות את שיטת הפעולה של הפקודה insert_dftיש להשתמש בפקודה set_scan_configurationלפני ביצוע .insert_dft
ניתן לקבל הסבר מפורט על set_scan_configurationעל ידי רישום :- man set_scan_configuration
בחלון הפקודות.
הרץ שוב :- source dft.src
:Q47בעזרת ההסבר רשום פקודה שיגרום ל insert_dft -להכניס scan_chains 3
- insert_dft
:Q48צרף לדו"ח את הסכמה של הרמה העליונה של התכנון ואת הסכמה של הרגיסטר המציג את
3ה.scan_chains -
בצע את הפקודה :
- write_scan_def -output scandef
פקודה זאת יוצרת קובץ בשם scandefהמכיל את כל הנתונים של ה .scan chains -פתח את
הקובץ ובחן את התוכנו.
:Q49רשום את שמות הכניסה והיציאה של כל .scan chain
-סגור את ה dv -עם .File->Close
סיום חלק שני !
38
© Copyright 2025