Icarus-Verilog が使えそうなので、色々設計をしてみたくなりました。まずは UART を設計してみたいと思います。

UARTとは

UART (Universal Asynchronous Receiver/Transmitter) というのは、1線で通信するために作られた通信方式で、とても初歩的な通信方式の一つです。

下の図がデータを格納するフレームです。

UART_frame1

Highレベルを送信側と受信側で合わせる必要がないように、UARTではデバイス間を Pull-Up と オープン・ドレイン でつなぐことになっています。なので何も通信していない時は、Highレベルとなります。

Start ビット:
フレームの先頭に Baud Rate の 1bit分の Lowレベルを出して通信の開始を知らせます。

データ:
startビットに続けてデータを送ります。通常は 8ビット長ですが、通信相手と決めた長さに変えることができます。ただし、クロックを伴わない1線式の非同期通信なので、長いビット長は無理です。

Parity ビット:
データの H の数に合わせて Parity ビットを付けます。これで受け取ったデータに誤りがないか確認します。偶然 Parity か 奇数 Parity かを選ぶことが出来て、偶数 Parity ならデータと Parity ビットを合わせて H の数が偶数個に、奇数 Parity ならデータと Parity ビットを合わせて H の数が奇数個になるように作ります。

Stop ビット:
通信の終わりに High レベルを出力します。 Baud Rate の 1bit分 もしくは 2bit分を出力します。 Pull-Up では Highレベルになるのに時間がかかるので、通信の速度が速い場合は 2bit分にするか、送信側があえて Highレベルを出力すると Pull-Up の Highレベルになる時間を短縮できます。ただし、基本はオープン・ドレイン出力なので、Highレベルを出力するするには工夫が要ります。

UART_connection

設計する UART の要求仕様

自分で好き勝手に設計をするので、思いつくままに機能リッチに作ってみたいと思います。

1. Baud Rate 検出
Baud Rate は受信するフレームから検出するか、設定された Baud Rate にするか選ぶことが出来る。

2. データの 0 / 1 判定は多数決で決める
ノイズなどで誤ったデータを取り込むのを防ぐために データビットの中心と 他に2箇所の値を取って多数決で決める。

3. データ長
データの長さは 5ビット から 10ビット まで変えられるようにする。

4. データの並び
データの並びは LSB から始めるか MSB から始めるか選べるようにする。

5. Parity ビット
Parity ビットは付ける、付けないが選択出来て、偶数 Parity か 奇数 Parity かを選択出来るようにする。

6. Stop ビット
Stop ビットの長さは 1ビット か 2ビット かを選べるようにする。

まぁ、こんなところでしょうか。




海外発激安ガジェットショップ!送料無料!【DX.com】
TITLE

自己紹介

50才になる半導体エンジニアです。
大学で電子電気工学を学び、1990年にその分野のまま就職。ASICやマイコンの設計を長く続けてきましたが20年も同じ分野にいると業態も衰退したり変化するもので退職し、今は外資のIT系会社に再就職して設計請負業をやっております。
お問い合わせは
nakata.xianzhi@outlook.com







Linux と 小ネタ

デジタル回路設計

海外駐在後記