Menu
Coddy logo textTech

מיפוי יציאות לפי סדר

חלק מהיחידה יסודות במסלול ה-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)
  • סדר הפורטים ברור ולא צפוי להשתנות
  • אתה כותב סביבות בדיקה מהירות

ברוב התכנונים, עדיף למפות פורטים לפי שם, כי כך הדבר ברור יותר ופחות חשוף לשגיאות.

challenge icon

אתגר

השלימו את יצירת המופע על ידי ציון האותות בסדר הנכון באמצעות מיפוי פורטים לפי הסדר.

מה לעשות:

פורטי המודול (בסדר הזה):

  1. input en (הפעלה)
  2. input [7:0] d (קלט נתונים)
  3. output [7:0] q (פלט נתונים)

אותות לחיבור:

  • enable_signal → חברו אל en
  • data_input → חברו אל d
  • data_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
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: קומפיילר Verilog אונליין