Menu
Coddy logo textTech

מיפוי יציאות לפי שם

חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 34 מתוך 90.

בשיעור הקודם למדת כיצד ליצור מופע של מודול באמצעות העברת אותות באותו סדר שבו הפורטים מופיעים בהגדרת המודול. זה עובד, אבל יש כאן בעיה: לסדר יש חשיבות.

אם תבלבל בטעות את הסדר, האותות יתחברו לפורטים הלא נכונים. קשה לאתר ולתקן את זה.

הבעיה במיפוי לפי סדר

module or_gate (
  input in1,
  input in2,
  output result
);
  assign result = in1 | in2;
endmodule

// מיפוי לפי סדר - הסדר חייב להתאים
or_gate or1 (input_a, input_b, output_y);  // נכון
or_gate or1 (input_b, input_a, output_y);  // שגוי! הכניסות הוחלפו ביניהן

השורה השנייה מחברת את input_b אל in1 ואת input_a אל in2: באג עדין שקל לפספס.

פתרון: מיפוי פורטים לפי שם

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

תחביר:

module_name instance_name (
  .port_name(signal),
  .port_name(signal)
);

הנקודה . שלפני שם היציאה מציינת שאנחנו מתייחסים ליציאה בתוך המודול. האות שבתוך הסוגריים היא מה שאנחנו מחברים אליה.

דוגמה

or_gate or1 (
  .in1(input_a),
  .in2(input_b),
  .result(output_y)
);

הדבר מציין במפורש:

  • הפורט in1 מקבל את האות input_a
  • הפורט in2 מקבל את האות input_b
  • הפורט result מקבל את האות output_y

הסדר לא משנה

במיפוי פורטים לפי שם, אפשר לכתוב את החיבורים בכל סדר:

// שלושתם זהים לחלוטין

or_gate or1 (
  .in1(input_a),
  .in2(input_b),
  .result(output_y)
);

or_gate or1 (
  .result(output_y),
  .in1(input_a),
  .in2(input_b)
);

or_gate or1 (
  .in2(input_b),
  .result(output_y),
  .in1(input_a)
);

כולם עושים בדיוק את אותו הדבר כי כל חיבור מסומן.

challenge icon

אתגר

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

מה לעשות:

  1. חבר את הפורט clk לאות clock_signal
  2. חבר את הפורט data_in לאות input_data
  3. חבר את הפורט data_out לאות output_data

נסו בעצמכם

module register (
  input clk,
  input [7:0] data_in,
  output reg [7:0] data_out
);
  always @(posedge clk) begin
    data_out <= data_in;
  end
endmodule

module top (
  input clock_signal,
  input [7:0] input_data,
  output [7:0] output_data
);
  
  register reg1 (
    // TODO: הוסיפו מיפויי פורטים באמצעות התחביר .port(signal)
  );
  
endmodule
quiz iconבחנו את עצמכם

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

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

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