ビットカウンタ
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 87/90。
チャレンジ
この章では、UART送信機をステップ・バイ・ステップで構築していきます。UARTはUniversal Asynchronous Receiver-Transmitter(汎用非同期受信機・送信機)の略です。これは、一方の線(送信)ともう一方の線(受信)という2本の線だけで、2つのデバイスが通信できるようにするシンプルなハードウェアプロトコルです。
電話で話している2人の人間をイメージしてください。一方が話し(送信し)、もう一方が聞きます(受信します)。UARTはデータを1ビットずつ送信し、各バイトの始まりと終わりを示すスタートビットとストップビットを付加します。
UART送信機は合計10ビットを送信します:スタートビット(1ビット)、データビット(8ビット)、ストップビット(1ビット)。現在どのビットを送信しているかを追跡するには、0から10までカウントするビットカウンターが必要です。
ビットカウンターの仕組み
- 0から開始
- クロックサイクルごとに1を加算
- 10に達したら0に戻る
- これを永久に繰り返す
このタスクでは、まだリセット処理は行わず、増加させる処理のみを行います。
手順:
- 以下を持つ
uart_txというモジュールを作成します:- 1つの入力:
clk - 1つの出力:
cnt(4ビット,reg型)
- 1つの入力:
- モジュールの内部で:
- initial ブロック内で開始時に
cntを 0 に設定します always @(posedge clk)ブロックを追加します- 各クロックエッジで
cntが 1 ずつ増加するようにします
- initial ブロック内で開始時に
自分で試してみよう
// TODO: モジュール uart_tx を作成し、入力 clk と出力 cnt(4ビット)を持つ
// TODO: initial ブロック内で開始時に cnt を 0 に設定する
// TODO: always @(posedge clk) ブロックを追加する
// TODO: cnt をインクリメントする