uart受信設計2013

54
UART 受受受 FSM 受受 © 受受受受 , 受受受 2013/03/04 (c)watabe kinji, [email protected] 1

Upload: kiyoshi-ogawa

Post on 14-Jun-2015

506 views

Category:

Technology


2 download

DESCRIPTION

FPGA, Verilog-HDLを用いてシリアル通信を演習する題材。

TRANSCRIPT

Page 1: Uart受信設計2013

UART 受信器 FSM 設計

© 渡部謹二 , 小川清

2013/03/04 (c)watabe kinji, [email protected] 1

Page 2: Uart受信設計2013

演習目的 簡単な実習を通して FSM 設計を体験す

る UART 通信を題材とする 自ら設計、検証、実装を行う

2013/03/04 (c)watabe kinji, [email protected] 2

Page 3: Uart受信設計2013

概要PC から RS-232C シリアル通信でASCII データを送信する

FPGA 内①シリアル→パラレル変換回路②パラレル ASCIIデータ→ LED 点灯パターン変換

今回は固定した ASCIIコードを入力して動作確認する

2013/03/04 (c)watabe kinji, [email protected] 3

Page 4: Uart受信設計2013

例題 (sample) 動作確認 例題 (sample) を動作させて確認する 道具 (tool) の使用方法は、操作説明資

料“ Xilinx 設計統合環境操作の覚え ISE 12.4 を題材として ver3.0” を参照してください

2013/03/04 (c)watabe kinji, [email protected] 4

Page 5: Uart受信設計2013

配線 例動作確認

配線 RS232C スト

レートケーブル(通信)

パラレルケーブル(プログラムダウンロード用)

AC アダプタ(電源)

2013/03/04 (c)watabe kinji, [email protected] 5

Page 6: Uart受信設計2013

プログラム例題動作確認

プロジェクト作成 Verilog 記述 コンパイル ダウンロード 操作説明資料“ Xilinx 設計統合環境操作

の覚え ISE 12.4 を題材として ver3.0” を参照してください

2013/03/04 (c)watabe kinji, [email protected] 6

Page 7: Uart受信設計2013

通信ソフトウェアの起動例題動作確認

スタート -> すべてのプログラム -> アクセサリ -> 通信 -> ハイパーターミナル を起動 通信設定 38400, 8, な

し ,1, なし(左図) できれば TeraTerm

Pro (フリー)を利用した方がよい

2013/03/04 (c)watabe kinji, [email protected] 7

Page 8: Uart受信設計2013

例題動作確認

PC から UART で送る ASCII データ( 0~9 )を取り込み、表示する

次のデータを受け取るまで同じ表示を続ける

確認できましたか?

2013/03/04 (c)watabe kinji, [email protected] 8

Page 9: Uart受信設計2013

例題の全体構成 プログラムの全体構成を把握する

2013/03/04 (c)watabe kinji, [email protected] 9

Page 10: Uart受信設計2013

例題の全体構成

クロック

reciever ascii_decoder

DCM eight_divider

シリアル信号

パラレル信号

LED 点灯パターン

x16 clk

reciever: シリアル信号を受信して 8bit パラレル信号に変換する

ascii_decoder: 受信信号に対応した LED 点灯パターンに変換する

2013/03/04 (c)watabe kinji, [email protected] 10

Page 11: Uart受信設計2013

ファイル構成例題の全体構成

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

Page 12: Uart受信設計2013

題材 題材となる UART 通信について

2013/03/04 (c)watabe kinji, [email protected] 12

Page 13: Uart受信設計2013

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

Page 14: Uart受信設計2013

通信の詳細 題材: UART 通信

8 ビットデータ、パリティ無し、 38400bps 、ストップビット 1 余裕のある人はボーレートが変わって

も対応できるようコード記述を工夫する

約 16 倍の周波数でデータサンプリングする 16 倍サンプリングを慣習的に行っている

2013/03/04 (c)watabe kinji, [email protected] 14

Page 15: Uart受信設計2013

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

Page 16: Uart受信設計2013

データフロー設計 題材 :UART通信

UART データ受信モジュール

recieve

データデコーダascii_decode

7 セグメントLED へ

8 ビット ASCII データをパラレルに渡すデータ受信中は出力

データを保つ

8 ビット ASCIIデータが 1 ビット幅でシリアルに伝

送•ascii_decode は内部に記憶を持たない

2013/03/04 (c)watabe kinji, [email protected] 16

Page 17: Uart受信設計2013

receive の内部データフロー 題材 :UART 通信

D0D1D2D3D4D5D6D7S1

•処理に必要なデータの流れを設計する

recieve

レジスタ receive_data

a1a2a3a4a5a6a7

a0

clkrst レジスタ

ascii[7:0]クロックはボー

レートの 16 倍速度を入力するもの

とする

2013/03/04 (c)watabe kinji, [email protected] 17

Page 18: Uart受信設計2013

receive のコントロールフローの概要

初期化

スタートビット待ち

データ取り込み位相あわせ

データ取り込み

出力データ更新

2013/03/04 (c)watabe kinji, [email protected] 18

Page 19: Uart受信設計2013

実習1:デコーダの完成 問題

acsii_decode.v を記述して数値 0~9 が表示されるようにせよ

上記以外の ASCII コードが入力されたらE ( Error の E )が表示されるようにせよ

実際に7セグ LED を点灯させて確認せよ 確認したら報告せよ

「入力: 8 ビット ASCII コード」の表を完成させてからコーディングに移る

2013/03/04 (c)watabe kinji, [email protected] 19

Page 20: Uart受信設計2013

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

Page 21: Uart受信設計2013

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

Page 22: Uart受信設計2013

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

Page 23: Uart受信設計2013

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

Page 24: Uart受信設計2013

always 文 と function 文 実習1

組み合わせ回路を記述する場合はfunction 文を用いる always 文で組み合わせ回路が記述できる。

しかし記憶素子を用いないにもかかわらず reg宣言をしなければならないので避けるべき

記述する回路規模が大きくなり、設計を再利用することが多くなる

2013/03/04 (c)watabe kinji, [email protected] 24

Page 25: Uart受信設計2013

回路図の読解 実習1

ボード付属 DVD-ROM FPGA\SCH_EVSP3E100_rev1p03.pdf  が回路図

V3P3 は +3.3V 集合抵抗

2013/03/04 (c)watabe kinji, [email protected] 25

Page 26: Uart受信設計2013

回路図の読解 実習1

バイポーラトランジスタの挙動 デジタル回路での基本的な使い方

/DP1_OEN が  L のとき LED に通電する

この間に電位差が 0.7V あ

ると

ここに電流が流れる

2013/03/04 (c)watabe kinji, [email protected] 26

Page 27: Uart受信設計2013

回路図の読解( 1 ) 実習1

出力を多重化している 複数の桁数を表示す

るには時間的に /DP1_OEN ~ / DP4_OEN をずらさなければならない

7 セグ回路では一般的

2013/03/04 (c)watabe kinji, [email protected] 27

Page 28: Uart受信設計2013

回路図の読解(2) 実習1

DP_D1~DP_D8  と  LED セグメントとの対応 正論理か負論理か?

この場合は負論理

2013/03/04 (c)watabe kinji, [email protected] 28

Page 29: Uart受信設計2013

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

Page 30: Uart受信設計2013

実習2:UART 受信モジュールの設計 receive.v を設計してみよう

データフロー設計 コントロールフロー設計

ASM チャートか状態遷移図・表を記述する レビュー&検証を行う

実装、動作確認

2013/03/04 (c)watabe kinji, [email protected] 30

Page 31: Uart受信設計2013

報告:実習2

実習終了後、報告を提出 書式は問わないが以下の項目を含むこ

と データフロー、コントロールフロー、検証項目

実機動作確認 発生した問題点、反省点、改善点

2013/03/04 (c)watabe kinji, [email protected] 31

Page 32: Uart受信設計2013

追加実習 今回の回路に機能を追加

7 セグ LED のダイナミック点灯(複数桁表示)

送信機能 電卓の作成

2013/03/04 (c)watabe kinji, [email protected] 32

Page 33: Uart受信設計2013

参考資料 DLL について

XAPP462 Spartan-3 FPGA におけるデジタル クロックマネージャ (DCM) の使用

Spartan3E データシート FSM のコーディングについて

「合成 /検証デザインガイド」 Spartan3E データシート等をお読みください

参考 「 FPGA によるシリアル・コントローラの設計事

例」 インターフェース 2005.6

2013/03/04 (c)watabe kinji, [email protected] 33

Page 34: Uart受信設計2013

付録:周辺回路 周辺回路について解説する

2013/03/04 (c)watabe kinji, [email protected] 34

Page 35: Uart受信設計2013

クロック設計 サンプリング周波数

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

Page 36: Uart受信設計2013

注意!!ゲーティッドクロックは避ける クロック信号はクロックラインを用いる

データ遅延などを考慮してクロック、レジスタの分配を配置・配線ツールが行う

ゲートを使ってクロックの調整を行うとツールは適正に分配できない

今回の実習例ではゲーティッドクロックを用いています。実際の業務ではそのまま使わないでください。変更してください。

通信用の発振器を外付けするなどで対応

2013/03/04 (c)watabe kinji, [email protected] 36

Page 37: Uart受信設計2013

DLL ( Delay Lock Loop:遅延ロックループ)とは?

クロック信号を一周期(ぐらい)遅らせて位相ロックする

分配したクロックの遅延を補償 位相遅れを加えることも出来、また周波数を逓倍することもで

きる 注意!! DLL はクロック信号を遅らせて使っているの

で入力クロックに乱れが入っていると、乱れを伝播する PLL(Phase Locked Loop) との比較 クロックのジッタなどでロックが外れる

2013/03/04 (c)watabe kinji, [email protected] 37

Page 38: Uart受信設計2013

内部非論理機能  DLL を使う

よく使う機能の専用ハードウェアを備えている 論理リソースの節約、消費電力の低減にも繋がる DSP 、乗算器、イーサネット MAC 、ブロックメモリ、

メモリコントローラ、 CPU コア ,etc DLL もそのうちのひとつ

内部非論理機能を HDL コード中に記述 CORE Generator によるインスタンシエーション 内部機能のいくつかはツールの自動推論により用いることができ、インスタンシエーションの必要なし

2013/03/04 (c)watabe kinji, [email protected] 38

Page 39: Uart受信設計2013

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

Page 40: Uart受信設計2013

CLKDV にチェック入力周波数

33.3MHz入出力の周波数をチェックして

くれる

7分周

2013/03/04 (c)watabe kinji, [email protected] 40

Page 41: Uart受信設計2013

“Use Global Buffers for all selected clock outputs” を選択

Next ボタンを押下 次のダイアログボッ

クスで Finish を押下

2013/03/04 (c)watabe kinji, [email protected] 41

Page 42: Uart受信設計2013

クロック設計(ゲーティッドクロック)

eight_divider.v の作成

クロックを8分周する Verilog モジュール 4カウントごとに出

力を反転させる回路を作ればよい

2013/03/04 (c)watabe kinji, [email protected] 42

Page 43: Uart受信設計2013

トップモジュール構成 作成してきたサブ

モジュールを接続してトップモジュールを作成する Verilog-HDL でサ

ブモジュールを呼び出すことも可

ECS 回路図入力ツールを用いる

2013/03/04 (c)watabe kinji, [email protected] 43

Page 44: Uart受信設計2013

トップモジュール構成

クロック

分周クロック 分周クロック

reciever ascii_decoder

DCM eight_divider

シリアル信号パラレル信号 LED 点灯パターン

リセット信号はこの図では省略してある

2013/03/04 (c)watabe kinji, [email protected] 44

Page 45: Uart受信設計2013

トップモジュール構成 作成したモジュールの回

路シンボルの作成 Sources ウインドウのモ

ジュールファイルをクリックして選択する

その状態を維持したまま、Process ウインドウの Design Entry Utilities セクションから Create Schematic Symbol をダブルクリックする

2013/03/04 (c)watabe kinji, [email protected] 45

Page 46: Uart受信設計2013

自作の回路をライブラリに登録        

トップモジュール構成

①Source ウインドウの Symbol タブをクリック

②作業フォルダのパスを追加しているので選択

③設計したモジュールを追加している(はず)

2013/03/04 (c)watabe kinji, [email protected] 46

Page 47: Uart受信設計2013

回路図エディタで部品を配置するトップモジュール構成

部品を配置する

Symbol タブを選択

ウインドウから現在の作業パスを選択する

2013/03/04 (c)watabe kinji, [email protected] 47

Page 48: Uart受信設計2013

回路図を作成するトップモジュール構成

部品の配置を変更する

Add Wire : 配線ツール

Add Net Name:配線に名前を付

ける

Add IO Marker :配線を入出力とす

る以上のようなツールを使って、回路図を作成したら、ファイルを保存しエディタを終了

2013/03/04 (c)watabe kinji, [email protected] 48

Page 49: Uart受信設計2013

トップモジュール構成

2013/03/04 (c)watabe kinji, [email protected] 49

Page 50: Uart受信設計2013

ボード構成の確認 FPGA チップと外界の接続を確認

LED への接続に関しては組み合わせ論理回路の資料を参照

リセット回路 UART クロック回路

2013/03/04 (c)watabe kinji, [email protected] 50

Page 51: Uart受信設計2013

リセット回路ボード構成の確認

SW 1をリセットとして使用 ボタン押した

ときに SWIN1は H になる

SWIN1 はFPGA の30ピン

シュミットインバータ

2013/03/04 (c)watabe kinji, [email protected] 51

Page 52: Uart受信設計2013

シリアルインターフェースボード構成の確認

Host TxD ( 送信ポート ) ⇒ DB9 3 ピン ⇒ RxD (受信ポート)

FPGA の 79 ピンに接続2013/03/04 (c)watabe kinji, [email protected] 52

Page 53: Uart受信設計2013

クロックソースボード構成の確認

FPGA の 63 ピンに接続

2013/03/04 (c)watabe kinji, [email protected] 53

Page 54: Uart受信設計2013

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