יציאות קלט ופלט
חלק מהיחידה יסודות במסלול ה-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 שלושה דברים על כל יציאה:
- כיוון: האם זה קלט, פלט או קלט-פלט?
- גודל: מה רוחבו בביטים?
- שם: איך קוראים לו?
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אתגר
השלימו את הצהרות הפורטים
מה לעשות:
- הוסיפו קלט של 8 ביטים בשם
data_in - הוסיפו קלט של ביט אחד בשם
clk - הוסיפו פלט של 4 ביטים בשם
result(השתמשו ב-reg: יוקצה לו ערך בבלוק always) - הוסיפו פלט של ביט אחד בשם
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השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
5אופרטורים חלק 2
אופרטורים לוגייםאופרטורי צמצוםאופרטורי הזזהאופרטור שרשוראופרטור תנאיסיכום – אתגר האופרטורים3שיטת המספרים
ייצוג בינארימספרים בעלי גודל מוגדרמספרים ללא גודל מוגדרמספרים שלילייםהערכים המיוחדים X ו־Zסיכום – תבניות מספרים6מודולים
מבנה מודוליציאות קלט ופלטיציאות קלט-פלטיצירת מופע של מודולמיפוי יציאות לפי שםמיפוי יציאות לפי סדרסיכום – בניית מודולתרגלו בעצמכם: קומפיילר Verilog אונליין