uart受信設計2013
DESCRIPTION
FPGA, Verilog-HDLを用いてシリアル通信を演習する題材。TRANSCRIPT
演習目的 簡単な実習を通して FSM 設計を体験す
る UART 通信を題材とする 自ら設計、検証、実装を行う
2013/03/04 (c)watabe kinji, [email protected] 2
概要PC から RS-232C シリアル通信でASCII データを送信する
FPGA 内①シリアル→パラレル変換回路②パラレル ASCIIデータ→ LED 点灯パターン変換
今回は固定した ASCIIコードを入力して動作確認する
2013/03/04 (c)watabe kinji, [email protected] 3
例題 (sample) 動作確認 例題 (sample) を動作させて確認する 道具 (tool) の使用方法は、操作説明資
料“ Xilinx 設計統合環境操作の覚え ISE 12.4 を題材として ver3.0” を参照してください
2013/03/04 (c)watabe kinji, [email protected] 4
配線 例動作確認
配線 RS232C スト
レートケーブル(通信)
パラレルケーブル(プログラムダウンロード用)
AC アダプタ(電源)
2013/03/04 (c)watabe kinji, [email protected] 5
プログラム例題動作確認
プロジェクト作成 Verilog 記述 コンパイル ダウンロード 操作説明資料“ Xilinx 設計統合環境操作
の覚え ISE 12.4 を題材として ver3.0” を参照してください
2013/03/04 (c)watabe kinji, [email protected] 6
通信ソフトウェアの起動例題動作確認
スタート -> すべてのプログラム -> アクセサリ -> 通信 -> ハイパーターミナル を起動 通信設定 38400, 8, な
し ,1, なし(左図) できれば TeraTerm
Pro (フリー)を利用した方がよい
2013/03/04 (c)watabe kinji, [email protected] 7
例題動作確認
PC から UART で送る ASCII データ( 0~9 )を取り込み、表示する
次のデータを受け取るまで同じ表示を続ける
確認できましたか?
2013/03/04 (c)watabe kinji, [email protected] 8
例題の全体構成 プログラムの全体構成を把握する
2013/03/04 (c)watabe kinji, [email protected] 9
例題の全体構成
クロック
reciever ascii_decoder
DCM eight_divider
シリアル信号
パラレル信号
LED 点灯パターン
x16 clk
reciever: シリアル信号を受信して 8bit パラレル信号に変換する
ascii_decoder: 受信信号に対応した LED 点灯パターンに変換する
2013/03/04 (c)watabe kinji, [email protected] 10
ファイル構成例題の全体構成
top_rec.sch トップモジュール 回路図表示
ascii_decode.v ASCII コードを LED 点灯パ
ターンに変換 receive.v
(開発対象)データ受信モジュール
dcm_first.xaw DCM の設定ファイル
eight_devider クロック 8 分周モジュール
top_rec.ucf ピン割り当てファイル
serial_dataflow.v シミュレーション用 receive.v のテストベンチ シリアルデータが受信でき
ているか確認する ascii.mem
シミュレーション用 メモリモデル、 receive.v
ファイルでリードして使用する
シリアルデータの管理 eight_devider_tb.tbw
シミュレーション用 eight_devider.v のテスト
ベンチ 8 分周できているか確認す
る2013/03/04 (c)watabe kinji, [email protected] 11
題材 題材となる UART 通信について
2013/03/04 (c)watabe kinji, [email protected] 12
UART(Universal Asynchronous Reciever and Transmitter) とは?題材 :UART 通信
データフォーマット
スタートビット 0 8 ビットデータ、 LSB ファースト パリティビット
なし ストップビット
1 x16 クロックでサンプリング、シリアル - パラレル変換
X16 サンプリング:スタートビット検出から 8 クロック目に位相設定、以降 16 クロックごとにサンプリングする
1 1 St D0
D1
D2
D3
D4
D5
D6
D7
S1 1 1 1
経過時間
2013/03/04 (c)watabe kinji, [email protected] 13
通信の詳細 題材: UART 通信
8 ビットデータ、パリティ無し、 38400bps 、ストップビット 1 余裕のある人はボーレートが変わって
も対応できるようコード記述を工夫する
約 16 倍の周波数でデータサンプリングする 16 倍サンプリングを慣習的に行っている
2013/03/04 (c)watabe kinji, [email protected] 14
ASCII ( American Standard Code for
Information Interchange )コード 題
材 :UART 通信 16 進数 文字
30 0
31 1
32 2
33 3
34 4
35 5
36 6
37 7
38 8
39 9
2013/03/04 (c)watabe kinji, [email protected] 15
データフロー設計 題材 :UART通信
UART データ受信モジュール
recieve
データデコーダascii_decode
7 セグメントLED へ
8 ビット ASCII データをパラレルに渡すデータ受信中は出力
データを保つ
8 ビット ASCIIデータが 1 ビット幅でシリアルに伝
送•ascii_decode は内部に記憶を持たない
2013/03/04 (c)watabe kinji, [email protected] 16
receive の内部データフロー 題材 :UART 通信
D0D1D2D3D4D5D6D7S1
•処理に必要なデータの流れを設計する
recieve
レジスタ receive_data
a1a2a3a4a5a6a7
a0
clkrst レジスタ
ascii[7:0]クロックはボー
レートの 16 倍速度を入力するもの
とする
2013/03/04 (c)watabe kinji, [email protected] 17
receive のコントロールフローの概要
初期化
スタートビット待ち
データ取り込み位相あわせ
データ取り込み
出力データ更新
2013/03/04 (c)watabe kinji, [email protected] 18
実習1:デコーダの完成 問題
acsii_decode.v を記述して数値 0~9 が表示されるようにせよ
上記以外の ASCII コードが入力されたらE ( Error の E )が表示されるようにせよ
実際に7セグ LED を点灯させて確認せよ 確認したら報告せよ
「入力: 8 ビット ASCII コード」の表を完成させてからコーディングに移る
2013/03/04 (c)watabe kinji, [email protected] 19
Function 文 (1) 実習1
module selector(din,sel,dout) input [3:0] din; input [1:0] sel; out dout;
function select ; input[3:0] data_sel; input[1:0] data_sig; end functionendmodule
Function 文 入力に対し値を返す
(値を保持しない) モジュール内に記述
モジュールのすべての信号が使用出来る
宣言したモジュール内からのみ、そのFunction を使用する事ができる
Always 文でも組み合わせ論理回路を実装することができるが、Function を推奨2013/03/04 (c)watabe kinji, [email protected] 20
Function 文( 2)定義 実習1
module selector(din,sel,dout) input [3:0] din; input [1:0] sel; out dout;
function select ; input[3:0] data_sel; input[1:0] data_sig; endfunctionendmodule
function < ビット幅 > <名前> ;
endfunction で終了
入力の宣言続いて、 wire の宣言も
可
各種ステートメントを記述する(実習)
今回は if 文で記述する
2013/03/04 (c)watabe kinji, [email protected] 21
Function 文( 3)呼び出し 実習1
module selector(din,sel,dout) input [3:0] din; input [1:0] sel; out dout;
assign dout = select(din,sel);
function select ; input[3:0] data_sig; input[1:0] data_sel; ( 省略 ) endfunctionendmodule
継続的代入で用いる宣言(入力はどうか?出力はどうか?)と比較
2013/03/04 (c)watabe kinji, [email protected] 22
Case 文の記述 実習1
function 文のステートメントに if文、 case 文を記述することができる
module dec_inst(din, dout); input [2:0] din; output [6:0] dout;
assign dout = decoder(din);
function [6:0] decoder; input [2:0] data_in; case(data_in)
( 省略 )
endcase endfunctionendmodule
2013/03/04 (c)watabe kinji, [email protected] 23
always 文 と function 文 実習1
組み合わせ回路を記述する場合はfunction 文を用いる always 文で組み合わせ回路が記述できる。
しかし記憶素子を用いないにもかかわらず reg宣言をしなければならないので避けるべき
記述する回路規模が大きくなり、設計を再利用することが多くなる
2013/03/04 (c)watabe kinji, [email protected] 24
回路図の読解 実習1
ボード付属 DVD-ROM FPGA\SCH_EVSP3E100_rev1p03.pdf が回路図
V3P3 は +3.3V 集合抵抗
2013/03/04 (c)watabe kinji, [email protected] 25
回路図の読解 実習1
バイポーラトランジスタの挙動 デジタル回路での基本的な使い方
/DP1_OEN が L のとき LED に通電する
この間に電位差が 0.7V あ
ると
ここに電流が流れる
2013/03/04 (c)watabe kinji, [email protected] 26
回路図の読解( 1 ) 実習1
出力を多重化している 複数の桁数を表示す
るには時間的に /DP1_OEN ~ / DP4_OEN をずらさなければならない
7 セグ回路では一般的
2013/03/04 (c)watabe kinji, [email protected] 27
回路図の読解(2) 実習1
DP_D1~DP_D8 と LED セグメントとの対応 正論理か負論理か?
この場合は負論理
2013/03/04 (c)watabe kinji, [email protected] 28
ASCII コード⇒ LED 点灯パターン変換表実習1
ASCII コード(8 ビット、 16進)
文字 7 セグメント点灯パターン
{ g,f,e,d,c,b,a}
30 0
31 1
32 2 0100100
33 3
34 4
35 5
36 6
37 7
38 8
39 9
その他 E2013/03/04 (c)watabe kinji, [email protected] 29
実習2:UART 受信モジュールの設計 receive.v を設計してみよう
データフロー設計 コントロールフロー設計
ASM チャートか状態遷移図・表を記述する レビュー&検証を行う
実装、動作確認
2013/03/04 (c)watabe kinji, [email protected] 30
報告:実習2
実習終了後、報告を提出 書式は問わないが以下の項目を含むこ
と データフロー、コントロールフロー、検証項目
実機動作確認 発生した問題点、反省点、改善点
2013/03/04 (c)watabe kinji, [email protected] 31
追加実習 今回の回路に機能を追加
7 セグ LED のダイナミック点灯(複数桁表示)
送信機能 電卓の作成
2013/03/04 (c)watabe kinji, [email protected] 32
参考資料 DLL について
XAPP462 Spartan-3 FPGA におけるデジタル クロックマネージャ (DCM) の使用
Spartan3E データシート FSM のコーディングについて
「合成 /検証デザインガイド」 Spartan3E データシート等をお読みください
参考 「 FPGA によるシリアル・コントローラの設計事
例」 インターフェース 2005.6
2013/03/04 (c)watabe kinji, [email protected] 33
付録:周辺回路 周辺回路について解説する
2013/03/04 (c)watabe kinji, [email protected] 34
クロック設計 サンプリング周波数
38400bps の 16 倍であるので 614400Hz 100/3MHz X’tal (基盤に実装されている発
信素子)の約 56 分の 1 0.595MHz( 0.614MHz の誤差約 3 %) 内部の DLL を使う
クロックの分周に LBS を使うにはロジックリソースの消費
1/7 ( DLL) 1/8(Logic )
本当は使っちゃダメ
2013/03/04 (c)watabe kinji, [email protected] 35
注意!!ゲーティッドクロックは避ける クロック信号はクロックラインを用いる
データ遅延などを考慮してクロック、レジスタの分配を配置・配線ツールが行う
ゲートを使ってクロックの調整を行うとツールは適正に分配できない
今回の実習例ではゲーティッドクロックを用いています。実際の業務ではそのまま使わないでください。変更してください。
通信用の発振器を外付けするなどで対応
2013/03/04 (c)watabe kinji, [email protected] 36
DLL ( Delay Lock Loop:遅延ロックループ)とは?
クロック信号を一周期(ぐらい)遅らせて位相ロックする
分配したクロックの遅延を補償 位相遅れを加えることも出来、また周波数を逓倍することもで
きる 注意!! DLL はクロック信号を遅らせて使っているの
で入力クロックに乱れが入っていると、乱れを伝播する PLL(Phase Locked Loop) との比較 クロックのジッタなどでロックが外れる
2013/03/04 (c)watabe kinji, [email protected] 37
内部非論理機能 DLL を使う
よく使う機能の専用ハードウェアを備えている 論理リソースの節約、消費電力の低減にも繋がる DSP 、乗算器、イーサネット MAC 、ブロックメモリ、
メモリコントローラ、 CPU コア ,etc DLL もそのうちのひとつ
内部非論理機能を HDL コード中に記述 CORE Generator によるインスタンシエーション 内部機能のいくつかはツールの自動推論により用いることができ、インスタンシエーションの必要なし
2013/03/04 (c)watabe kinji, [email protected] 38
DLL をつかう 新しいプロジェクト clock_design Create New Source ->IP (COREGen &
Architecture Wizard)-> ファイル名を入力し、 Next ボタンを押下 ファイル名 dcm_test とした
ダイアログボックスで FPGA Features and Design ->Clocking ->Spartan-3E,Spartan-3A->Single DCM SP v9.1i を選択
General Setup for INST1
2013/03/04 (c)watabe kinji, [email protected] 39
“Use Global Buffers for all selected clock outputs” を選択
Next ボタンを押下 次のダイアログボッ
クスで Finish を押下
2013/03/04 (c)watabe kinji, [email protected] 41
クロック設計(ゲーティッドクロック)
eight_divider.v の作成
クロックを8分周する Verilog モジュール 4カウントごとに出
力を反転させる回路を作ればよい
2013/03/04 (c)watabe kinji, [email protected] 42
トップモジュール構成 作成してきたサブ
モジュールを接続してトップモジュールを作成する Verilog-HDL でサ
ブモジュールを呼び出すことも可
ECS 回路図入力ツールを用いる
2013/03/04 (c)watabe kinji, [email protected] 43
トップモジュール構成
クロック
分周クロック 分周クロック
reciever ascii_decoder
DCM eight_divider
シリアル信号パラレル信号 LED 点灯パターン
リセット信号はこの図では省略してある
2013/03/04 (c)watabe kinji, [email protected] 44
トップモジュール構成 作成したモジュールの回
路シンボルの作成 Sources ウインドウのモ
ジュールファイルをクリックして選択する
その状態を維持したまま、Process ウインドウの Design Entry Utilities セクションから Create Schematic Symbol をダブルクリックする
2013/03/04 (c)watabe kinji, [email protected] 45
自作の回路をライブラリに登録
トップモジュール構成
①Source ウインドウの Symbol タブをクリック
②作業フォルダのパスを追加しているので選択
③設計したモジュールを追加している(はず)
2013/03/04 (c)watabe kinji, [email protected] 46
回路図エディタで部品を配置するトップモジュール構成
部品を配置する
Symbol タブを選択
ウインドウから現在の作業パスを選択する
2013/03/04 (c)watabe kinji, [email protected] 47
回路図を作成するトップモジュール構成
部品の配置を変更する
Add Wire : 配線ツール
Add Net Name:配線に名前を付
ける
Add IO Marker :配線を入出力とす
る以上のようなツールを使って、回路図を作成したら、ファイルを保存しエディタを終了
2013/03/04 (c)watabe kinji, [email protected] 48
トップモジュール構成
2013/03/04 (c)watabe kinji, [email protected] 49
ボード構成の確認 FPGA チップと外界の接続を確認
LED への接続に関しては組み合わせ論理回路の資料を参照
リセット回路 UART クロック回路
2013/03/04 (c)watabe kinji, [email protected] 50
リセット回路ボード構成の確認
SW 1をリセットとして使用 ボタン押した
ときに SWIN1は H になる
SWIN1 はFPGA の30ピン
シュミットインバータ
2013/03/04 (c)watabe kinji, [email protected] 51
シリアルインターフェースボード構成の確認
Host TxD ( 送信ポート ) ⇒ DB9 3 ピン ⇒ RxD (受信ポート)
FPGA の 79 ピンに接続2013/03/04 (c)watabe kinji, [email protected] 52
7セグメントLEDボード構成の確認
/DP1_OEN 86 ピン /DP2_OEN 85 ピン /DP3_OEN 3 ピン /DP4_OEN 2 ピン DP_D1 94 ピン DP_D2 92 ピン DP_D3 98 ピン DP_D4 71 ピン DP_D5 70 ピン DP_D6 90 ピン DP_D7 91 ピン DP_D8 95 ピン
2013/03/04 (c)watabe kinji, [email protected] 54