ステートマシン
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 88/90。
チャレンジ
状態マシンは、複数の状態のいずれかを取ることができる回路です。UARTの場合、各ビットに対して異なる状態があります:アイドル、スタート、データビット0-7、およびストップです。ビットカウンタ(cnt)は、現在どの状態にいるかを示します。cntに基づいて、txラインに送信する値を決定します。
前のレッスンで作成したビットカウンタがあります。これをUART送信機として動作するように修正する必要があります。
送信するビット値(文字 'A' の場合)
| cnt | tx の値 |
|---|---|
| 0 | 1 |
| 1 | 0 |
| 2 | 1 |
| 3 | 0 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
| 8 | 0 |
| 9 | 1 |
| 10 | 1 |
やること
startという名前の入力を追加するtxという名前の出力regを追加するinitialブロック内で、tx = 1(アイドル時はハイ)に設定する- カウンタのロジックを変更する:
cnt == 0かつstart == 1のとき、cnt <= 1に設定する(送信開始)cntが1から9の間にあるとき、インクリメントする:cnt <= cnt + 1cnt == 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