Menu
Coddy logo textTech

מכונת מצבים

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

challenge icon

אתגר

מכונת מצבים היא מעגל שיכול להיות באחד מכמה מצבים. עבור UART, יש לנו מצבים שונים עבור כל סיבית: המתנה, התחלה, סיביות הנתונים 0-7 ועצירה. מונה הסיביות (cnt) אומר לנו באיזה מצב אנחנו נמצאים. לפי cnt, אנחנו מחליטים איזה ערך לשלוח בקו tx.

יש לך את מונה הסיביות מהשיעור הקודם. עליך לשנות אותו כך שיפעל כמשדר UART.

ערכי הסיביות לשליחה (עבור האות 'A')

cntערך tx
01
10
21
30
40
50
60
70
81
90
101

מה לעשות

  1. הוסף קלט בשם start
  2. הוסף פלט מסוג reg בשם tx
  3. בבלוק initial, הגדר tx = 1 (רמה גבוהה במצב המתנה)
  4. שנה את לוגיקת המונה:
    • כאשר cnt == 0 וגם start == 1, הגדר cnt <= 1 (התחל בשידור)
    • כאשר cnt בין 1 ל-9, הגדל אותו: cnt <= cnt + 1
    • כאשר cnt == 10, אפס ל-0

נסו בעצמכם

module uart_tx (
  input clk,
  output reg [3:0] cnt
);

  initial begin
    cnt = 0;
  end

  always @(posedge clk) begin
      cnt <= cnt + 1;
  end

endmodule

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

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