ビットカウンタ
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 87/90。
チャレンジ
この章では、UART送信機を段階的に構築していきます。UARTはUniversal Asynchronous Receiver-Transmitter(汎用非同期受信送信機)の略です。これは、1本のワイヤ(送信用)ともう1本のワイヤ(受信用)だけで2つのデバイスが通信できるようにするシンプルなハードウェアプロトコルです。
これは、2人が電話で話しているようなものだと考えてください。一方が話し(送信)、もう一方が聞き(受信)ます。UARTはデータを一度に1ビットずつ送信し、各バイトの開始と終了を示すスタートビットとストップビットを付加します。
UART送信機は、スタートビット(1)、データビット(8)、ストップビット(1)の計10ビットを送信します。現在どのビットを送信しているかを追跡するために、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: 入力clkと出力cnt(4ビット)を持つモジュールuart_txを作成する
// TODO: initialブロック内で、開始時にcntを0に設定する
// TODO: always @(posedge clk)ブロックを追加する
// TODO: cntをインクリメントする