« The Practice of Programming と Unicode | Main | 今日の日記 »

2008.03.03

(長門の)UARTを作ろう!

仕事とは関係無しに簡単なUARTが欲しくなった。
いろいろとさがしてみたが、ドキュメント読むより作った方が早そうなので一から作ることにした。ただ作るのもあれなので、一個だけ特徴を持たせてみました。
名前は例によって、(長門の)UART、略してnuart。opencoresのmini UARTがライバル。

ISEで合成した比較

    nuart mini UART
FFの数  78  74
Slice数  78  88
GCLK数  1   2
I/F   FIFO  Wishbone bus

見ての通り、ロジックの数はほぼ同じ。ただし、CLKラインが1本しか使わない。最近の回路はDDR周りだけで2つも3つもクロックラインを使うので、UARTごときでクロックラインを使いたくないという(主に僕の)要望に応えました。

システムクロックを分周して動かすのですが、x16のクロックを使う代わりに、x16のクロックに合わせて動作するように回路を組んでいます。ですので、クロックラインはシステム系(FIFOのI/F)の1系統しか使いません。

トップ回路はnuart.v、I/Fはこんな感じです。

①受信時波形


②送信時波形


要するに、受信したら受信データと共にrx_fifo_wr_oが1CLK HになってFIFOに書き込む。tx_fifo_empty_iがLの時(FIFOにデータがあるとき)は、FIFOからデータを読み出し送信します。一応、16倍クロックで受信時の補正をしていますが、上手く動いているかどうかは不明。

Nios Development Board, Cyclone Edition で折り返しが動いたので公開します。

ファイルはここ。回路のパラメータは、50MHzを入れたときに9600bpsで動作するようにしてます。

テストベンチも入っているので、altera_mf.vを追加すれば、そのままVeritakでシミュレーションできます。

|

« The Practice of Programming と Unicode | Main | 今日の日記 »

Comments

coldsweats02 見事なまでにMSB、LSBを逆に送っていた。折り返しだと気がつかない。

Posted by: なつたん | 2008.03.07 at 06:54 PM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/40360691

Listed below are links to weblogs that reference (長門の)UARTを作ろう!:

« The Practice of Programming と Unicode | Main | 今日の日記 »