Menu
CoddyTech

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

חלק מהיחידה יסודות במסלול ה-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,   // רגיסטר פלט
  output busy             // חוט פלט
);

למה כיוון היציאה חשוב

הכיוון אומר ל-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 אונליין