2012年11月28日

UARTの設計(1)

  実機の方のRS-232Cボードが大体落ち着いたので、FPGA版にも実装する事にしました。

  8251 の仕様書を見る限りは、そんなに難しくはありません。
  本来、8251は USART なんですが、同期通信は使わないので、UART の実装になります(S が抜ける)。


  大体、回路は作ってしまいましたが、以下の点が実機(8251)と違います。

1)同期通信を実現していない。
  これは、前述の通り、使用していないので、実装していません。

 2)分周クロックを使わずに、50MHzクロックを数えて代わりに使用している。
  これは、同じようで微妙に違います。受信側の解像度が50MHz になるため、従来よりも受信しやすくなります。
  さらに、従来では出来なかった、1/1分周の非同期受信が可能です(あまり意味はないですが)。

  また、50MHzクロックで数えている関係で、実際のデータレートから若干ずれます。
  例えば、9600bps の場合、データ1ビットの幅は、1/9600 = 104,166 ns です。
  1周期20ns の 50MHz クロックから生成した場合は、104,160 ns になります。

  ただ、500Kbps で通信をしても1%程度のずれなので、特に問題にならないかと思います。

  (ちなみに、平均値として小数点以下も合わせる事は可能です。していませんが。)


 3)ブレーク検出の仕様が若干厳しい
  本来の検出条件は、2キャラクタ分Lの時ブレーク検出なんですが、20ビット間Lならばブレークとしました。
  殆ど影響がないので、このようにしています。

 4)DSR/DTR/CD がない
  これは、DE0 のボードの方の制約です。
  DE0 のボード上には、RS232C用のレベル変換のIC が搭載されています。
  ですが、RXD/TXD/CTS/RTS の4本しかないんですね。

  外部にレベル変換のICを載せればいいんですが、多分使わないので割愛しました。


  回路モジュールとしては完成し、制御のF/Wも一応完成しました。
  ただしボーレートの選択方法がちょっといまいちです。
  回路的には、ボーレートは任意の値が可能なんですが、今のF/Wでは、決まったボーレート以外は選択できません。


posted by えすび at 20:37| Comment(0) | FPGA化:RS232C | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。