תכנון משדר
חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 89 מתוך 90.
אתגר
בשיעור הזה תשלים את משדר ה-UART על ידי הוספת אוגר הזזה כדי לשלוח כל בית, ולא רק את האות הקבועה 'A'.
אוגר ההזזה טוען את המסגרת המלאה (סיבית עצירה + 8 סיביות נתונים + סיבית התחלה) ומוציא אותה סיבית אחת בכל פעם.
מבנה המסגרת
| עצירה (1) | נתונים (8 סיביות) | התחלה (0) |
|---|---|---|
| 1 | data_in | 0 |
לדוגמה, אם data_in = 8'b01000001 (האות 'A'), אוגר ההזזה הופך ל: 1 01000001 0
המשימה שלך
ניתנת לך מכונת המצבים מהשיעור הקודם (שמשדרת בית קבוע). עליך לשנות אותה כך שתשלח כל בית מהקלט data_in.
מה לעשות:
- הוסף
input [7:0]בשםdata_inלרשימת הפורטים (בתוך הסוגריים) - הוסף
regבן 10 סיביות בשםshift_regמחוץ לסוגריים (בתוך גוף המודול, כי זהו אות פנימי) - כאשר
cnt == 0וגםstart == 1:- טען את
shift_regבערך{1'b1, data_in, 1'b0}
- טען את
- כאשר
cntנמצא בין 1 ל-8:- שלח
tx <= shift_reg[0] - הזז ימינה:
shift_reg <= shift_reg >> 1
- שלח
- כאשר
cnt == 9:- שלח
tx <= shift_reg[0] - הזז ימינה:
shift_reg <= shift_reg >> 1
- שלח
נסו בעצמכם
module uart_tx (
input clk,
input start, // NEW: אות התחלה לתחילת השידור
output reg tx, // NEW: קו פלט טורי
output reg [3:0] cnt // יש להשאיר כפלט לצורך בדיקה
);
initial begin
cnt = 0;
tx = 1; // NEW: הגדר את tx ל-HIGH (מצב סרק)
end
always @(posedge clk) begin
// NEW: לוגיקת מונה עם תנאי התחלה
if (cnt == 0 && start) begin // NEW: התחל לשדר
cnt <= 1;
end
else if (cnt > 0 && cnt < 9) begin // NEW: ספור במהלך השידור
cnt <= cnt + 1;
end
else if (cnt == 9) begin // NEW: אפס לאחר הביט האחרון
cnt <= 0;
end
end
endmoduleכל השיעורים ביחידה יסודות
5אופרטורים חלק 2
אופרטורים לוגייםאופרטורי צמצוםאופרטורי הזזהאופרטור שרשוראופרטור תנאיסיכום – אתגר האופרטורים3שיטת המספרים
ייצוג בינארימספרים בעלי גודל מוגדרמספרים ללא גודל מוגדרמספרים שלילייםהערכים המיוחדים X ו־Zסיכום – תבניות מספרים6מודולים
מבנה מודוליציאות קלט ופלטיציאות קלט-פלטיצירת מופע של מודולמיפוי יציאות לפי שםמיפוי יציאות לפי סדרסיכום – בניית מודולתרגלו בעצמכם: קומפיילר Verilog אונליין