FPGA活用回路&サンプル記述集(4) ―― 安定動作のための回路
tag: 半導体 電子回路 ディジタル・デザイン
技術解説 2009年4月 6日
事例2.調歩同期のシリアル通信を行う回路
森田 一
外部回路
- 回路図:図2-1
- 主要部品:マイコンなど
- Verilog HDL:リスト2-1
- 外部入力:si(シリアル入力)
- 外部出力:so(シリアル出力)
- 内部入力:pi(パラレル・データ),div(ボー・レート),xmit(送信開始),clk,nreset
- 内部出力:po(パラレル・データ),rdy(送信終了),rcvd(受信終了),ferr(受信フレーミング・エラー)
- パラメータ:なし
- Altera社,Quartus II
FPGAとマイコン間で通信を行いたい場合があります.そういった場合,SCI(Serial Communication Interface)やUART(Universal Asynchronous Receiver Transmitter)などの調歩同期のシリアル通信を使っておくと便利です.例えば,マイコンとFPGAの開発のスケジュールがずれた場合や,動作に問題が発生した場合に,マイコンとFPGAの片方とパソコンを接続して,パソコン上のターミナル・ソフトウェアなどで通信をシミュレーションできます(図2-1).また,パソコンからFPGAを制御したい場合にも便利です.
図2-1 マイコンとFPGA間は調歩同期式のシリアル通信を使っておくと便利
● SCIの実装
今回は,SCIの仕様としてはかなり簡略化しました.
- データ長:8ビット
- パリティ:なし
- ストップ・ビット:1
- ボー・レート:クロックの4分の1程度まで
通常のマイコンなどのSCIでは,ボー・レートの分周比の設定はサンプリング・クロックがボー・レートの4倍になるように設定します.今回の実装では,サンプリング・クロックはボー・レートの2倍になるように設定します.
表2-1に受信ブロックの状態遷移を示します.リスト2-1が今回の実装のVerilog HDL記述です.
状態 | 遷移先 | 遷移条件 | |
0 | 待機 | 1 | siに'0'が入力 |
1 | スタート・ビットの確認 | 0 | siが'1' |
2 | siが'0' | ||
2 | NOP | 3 | ボー・レートの半分の周期の経過 |
3 | ビット0の取り込み | 4 | ボー・レートの半分の周期の経過 |
4 | NOP | 5 | ボー・レートの半分の周期の経過 |
5 | ビット1の取り込み | 6 | ボー・レートの半分の周期の経過 |
6 | NOP | 7 | ボー・レートの半分の周期の経過 |
7 | ビット2の取り込み | 8 | ボー・レートの半分の周期の経過 |
8 | NOP | 9 | ボー・レートの半分の周期の経過 |
9 | ビット3の取り込み | 10 | ボー・レートの半分の周期の経過 |
10 | NOP | 11 | ボー・レートの半分の周期の経過 |
11 | ビット4の取り込み | 12 | ボー・レートの半分の周期の経過 |
12 | NOP | 13 | ボー・レートの半分の周期の経過 |
13 | ビット5の取り込み | 14 | ボー・レートの半分の周期の経過 |
14 | NOP | 15 | ボー・レートの半分の周期の経過 |
15 | ビット6の取り込み | 16 | ボー・レートの半分の周期の経過 |
16 | NOP | 17 | ボー・レートの半分の周期の経過 |
17 | ビット7の取り込み | 18 | ボー・レートの半分の周期の経過 |
18 | NOP | 19 | ボー・レートの半分の周期の経過 |
19 | ストップ・ビットの確認 | 22 | ボー・レートの半分の周期の経過 |
20 | NOP | 0 | ボー・レートの半分の周期の経過 |
表2-1 受信ブロックの状態遷移
受信のボー・レート分周器は,スタート・ビットの立ち下りエッジを検出してスタートします.このためサンプリング・クロックがボー・レートの2倍でも受信データのほぼ中央部でデータをサンプルできます.受信が終了するとrcvdパルスが出ます.また,ストップ・ビットが検出できなかった場合はferrパルスが出ますから,ブレーク信号などによる起動に利用できます.
送信ブロックのボー・レート分周器はxmit信号が'1'になったことでスタートします.データの送信中はrdy信号が'0'になります.またxmit信号のパルス幅は,データの送信終了までに'0'になれば問題ありません.
送信は単純にシフト・レジスタを回していくだけです.本来ステート数はアイドル・ステートと,スタート・ビットからストップ・ビットまでの10ステート,あわせて11ステートでよいのですが,受信ブロックに合わせてボー・レートの半分の周期で回しています.
もりた・はじめ
tag: FPGA