Menu
Coddy logo textTech

יציאות קלט ופלט

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

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

לכל יחידה יש:

  • יציאות קלט: אותות שנכנסים אל היחידה
  • יציאות פלט: אותות שיוצאים מהיחידה

יציאות קלט

יציאות קלט מקבלות נתונים מבחוץ. אי אפשר לשנות אותן בתוך המודול: אפשר רק לקרוא מהן.

input clk;        // קלט של ביט יחיד
input [7:0] data; // וקטור קלט של 8 ביטים
input a, b;       // כמה קלטים בשורה אחת

כללים עבור כניסות:

  • אי אפשר להקצות להן ערך בתוך המודול
  • אי אפשר להצהיר עליהן כעל reg
  • תמיד wire (כברירת מחדל)

יציאות פלט

יציאות פלט שולחות נתונים החוצה. אפשר להפעיל אותן באמצעות בלוקים של assign או always.

output out;           // פלט של ביט אחד
output [3:0] result;  // פלט של 4 ביטים
output reg busy;      // הפלט יכול להיות reg
output wire ready;    // הפלט יכול להיות wire

כללים ליציאות:

  • יכול להיות wire (עם assign) או reg (עם always)
  • חייב להיות מונע על ידי משהו בתוך המודול

תחביר הצהרת יציאות

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

  1. כיוון: האם זו כניסה, יציאה או כניסה ויציאה?
  2. גודל: כמה ביטים הרוחב שלו?
  3. שם: איך קוראים לו?
module example (
  input [7:0] data_in,    // וקטור קלט
  input clk,              // קלט יחיד
  input enable,           // קלט יחיד
  output reg [7:0] out,   // reg של פלט
  output busy             // wire של פלט
);

למה כיוון הפורט חשוב

הכיוון אומר ל-Verilog:

  • אילו אותות המודול יכול לקרוא (קלטים)
  • לאילו אותות המודול יכול לכתוב (פלטים)
  • אילו סוגי חיבורים מותרים

שימוש בכיוון שגוי גורם לשגיאות קומפילציה.

דוגמת קוד

module port_demo (
  input [3:0] a,        // ניתן לקריאה בלבד
  input [3:0] b,        // ניתן לקריאה בלבד
  output reg [3:0] sum, // ניתן לכתיבה (reg)
  output [3:0] diff     // ניתן לכתיבה (wire)
);
  always @(*) begin
    sum = a + b;        // כתיבה ליציאה מסוג reg
  end
  
  assign diff = a - b;   // כתיבה ליציאה מסוג wire
endmodule
challenge icon

אתגר

השלימו את הצהרות הפורטים

מה לעשות:

  1. הוסיפו קלט בן 8 סיביות בשם data_in
  2. הוסיפו קלט בן סיבית אחת בשם clk
  3. הוסיפו פלט בן 4 סיביות בשם result (השתמשו ב-reg: הוא יקבל ערך בבלוק always)
  4. הוסיפו פלט בן סיבית אחת בשם valid (השתמשו ב-wire: הוא יקבל ערך באמצעות assign)

נסו בעצמכם

module port_challenge (
  // משימה 1: הוסיפו קלט של 8 ביטים בשם data_in
  
  
  // משימה 2: הוסיפו קלט של ביט אחד בשם clk
  
  
  // משימה 3: הוסיפו פלט של 4 ביטים בשם result (השתמשו ב-reg)
  
  
  // משימה 4: הוסיפו פלט של ביט אחד בשם valid (השתמשו ב-wire)
  
  
);

  reg [3:0] counter;
  
  always @(posedge clk) begin
    counter <= counter + 1;
    result <= counter;
  end
  
  assign valid = (counter > 8);
  
endmodule
quiz iconבחנו את עצמכם

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

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

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