מיפוי יציאות לפי סדר
חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 35 מתוך 90.
בשיעור הקודם למדת על מיפוי יציאות לפי שם, שבו מציינים במפורש כל חיבור באמצעות .port(signal). כעת נעסוק בשיטה החלופית: מיפוי יציאות לפי סדר.
הוא מחבר אותות לפורטים של מודול על סמך הסדר שבו הם מופיעים בהגדרת המודול. פשוט רושמים את האותות בסוגריים, ו-Verilog מתאימה ביניהם אחד־לאחד.
תחביר:
module_name instance_name (signal1, signal2, signal3);האות הראשון מתחבר לפורט הראשון, השני לשני, וכן הלאה.
דוגמה
הגדרת מודול:
module or_gate (
input in1, // הפורט הראשון
input in2, // הפורט השני
output result // הפורט השלישי
);
assign result = in1 | in2;
endmoduleיצירת מופע עם מיפוי פורטים לפי סדר:
or_gate or1 (input_a, input_b, output_y);זה מחבר:
- האות הראשון
input_a→ היציאה הראשונהin1 - האות השני
input_b→ היציאה השנייהin2 - האות השלישי
output_y→ היציאה השלישיתresult
לסדר יש חשיבות
במיפוי פורטים לפי סדר, הרצף קריטי:
// סדר נכון
or_gate or1 (input_a, input_b, output_y);
// סדר שגוי - האותות מחוברים ליציאות הלא נכונות!
or_gate or1 (input_b, input_a, output_y);
or_gate or1 (output_y, input_a, input_b);אם תבלבל את הסדר, החיבורים יתחברו ליציאות הלא נכונות. קשה לאתר כך את הבאג, כי במבט ראשון הקוד נראה תקין.
מיפוי פורטים לפי שם לעומת לפי סדר
| תכונה | לפי שם | לפי סדר |
|---|---|---|
| תחביר | .port(signal) | signal1, signal2 |
| האם הסדר חשוב? | לא | כן |
| האם התיעוד מובן מאליו? | כן | לא |
| סיכון לטעויות | נמוך | גבוה |
| מומלץ עבור | רוב התכנונים | מקרים פשוטים בלבד |
מתי להשתמש במיפוי פורטים לפי סדר
מיפוי פורטים לפי סדר מתאים כאשר:
- למודול יש מעט מאוד פורטים (2-3)
- סדר הפורטים ברור ולא צפוי להשתנות
- אתה כותב סביבות בדיקה מהירות
ברוב התכנונים, עדיף למפות פורטים לפי שם, כי כך הדבר ברור יותר ופחות חשוף לשגיאות.
אתגר
השלימו את יצירת המופע על ידי ציון האותות בסדר הנכון באמצעות מיפוי פורטים לפי הסדר.
מה לעשות:
פורטי המודול (בסדר הזה):
input en(הפעלה)input [7:0] d(קלט נתונים)output [7:0] q(פלט נתונים)
אותות לחיבור:
enable_signal→ חברו אלendata_input→ חברו אלddata_output→ חברו אלq
נסו בעצמכם
module register (
input en,
input [7:0] d,
output [7:0] q
);
assign q = en ? d : q;
endmodule
module top (
input enable_signal,
input [7:0] data_input,
output [7:0] data_output
);
// TODO: בצעו אינסטנציאציה של register בשם reg1 באמצעות מיפוי ORDER
// רשמו את האותות בסדר הנכון: enable_signal, data_input, data_output
// אל תשתמשו בתחביר .port(signal)
endmoduleהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
5אופרטורים חלק 2
אופרטורים לוגייםאופרטורי צמצוםאופרטורי הזזהאופרטור שרשוראופרטור תנאיסיכום – אתגר האופרטורים3שיטת המספרים
ייצוג בינארימספרים בעלי גודל מוגדרמספרים ללא גודל מוגדרמספרים שלילייםהערכים המיוחדים X ו־Zסיכום – תבניות מספרים6מודולים
מבנה מודוליציאות קלט ופלטיציאות קלט-פלטיצירת מופע של מודולמיפוי יציאות לפי שםמיפוי יציאות לפי סדרסיכום – בניית מודולתרגלו בעצמכם: קומפיילר Verilog אונליין