Menu
Coddy logo textTech

תכנון משדר

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

challenge icon

אתגר

בשיעור הזה תשלים את משדר ה-UART על ידי הוספת אוגר הזזה כדי לשלוח כל בית, ולא רק את האות הקבועה 'A'.

אוגר ההזזה טוען את המסגרת המלאה (סיבית עצירה + 8 סיביות נתונים + סיבית התחלה) ומוציא אותה סיבית אחת בכל פעם.

מבנה המסגרת

עצירה (1)נתונים (8 סיביות)התחלה (0)
1data_in0

לדוגמה, אם data_in = 8'b01000001 (האות 'A'), אוגר ההזזה הופך ל: 1 01000001 0

המשימה שלך

ניתנת לך מכונת המצבים מהשיעור הקודם (שמשדרת בית קבוע). עליך לשנות אותה כך שתשלח כל בית מהקלט data_in.

מה לעשות:

  1. הוסף input [7:0] בשם data_in לרשימת הפורטים (בתוך הסוגריים)
  2. הוסף reg בן 10 סיביות בשם shift_reg מחוץ לסוגריים (בתוך גוף המודול, כי זהו אות פנימי)
  3. כאשר cnt == 0 וגם start == 1:
    1. טען את shift_reg בערך {1'b1, data_in, 1'b0}
  4. כאשר cnt נמצא בין 1 ל-8:
    1. שלח tx <= shift_reg[0]
    2. הזז ימינה: shift_reg <= shift_reg >> 1
  5. כאשר cnt == 9:
    1. שלח tx <= shift_reg[0]
    2. הזז ימינה: 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

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

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