verilog~UART通信受信機(RX)編~

初めに

お久しぶりです、Keymaleです。先週はUARTの送信機について紹介しました。結構検索して見ていただいたみたいなので、今回は受信機のほうを紹介していきます。受信機のコード内に分周器が出てきますが、詳細は過去記事を見てください。

UART規格

規格についても詳細はこちらを見てください。

通信レート(ボーレート)は9600, 19200, 38400, 76800, 115200 bpsなどがあります。今回は前回の送信機の レートと合わせて 9600 bpsとします。メインクロックは50 MHzとして、9600 bpsにするには5208で分周しますが、受信機側は送信側クロックの4倍のクロックで受信データをたたきます。4回たたいて、3回以上HIGHなら1、LOWなら0と多数決論理にて、受信ビットを決定していきます。そのため、4倍のクロックになるように、50 MHzで1302で分周します。

UART_RX module

それでは早速UARTのRXモジュールを見ていきましょう。以下にコードを記載しました。

以上になります。CASE文で書く方法もあるのですが、重複が多くなり無駄に行数が多くなってしまうので、多少深くなってしまいますが、IF文でごり押しで書いてみました。

ModelSimでの検証結果

一応modelsimで動作を確認しましたので、以下に結果を載せておきます。

00111011のデータを前回作った送信機から送信して、今回作った受信機側で同じで00111011を受信できていることが確認できるかと思います。

最後まで見てくださってありがとうございます。最近は育児ブログも書いているのでそちらのほうもよかったら見てください。verilog記事はいろいろ書いてきましたが、次はsystem-verilogで実装されたenumlateの使い方について説明していこうかと思います。後はwordpressでのTeX,LaTexの使い方とか、pythonでのグラフ描画(Pyplot)などを掲載してく予定です。

お手すきでしたらコメントもよろしくお願いします。

それでは次回も見てくださいね。