UART 受信器 FSM 設計
© 渡部謹二 , 小川清

2013/03/04

(c)watabe kinji, kaizen@wh.commufa.jp

1
演習目的


簡単な実習を通して FSM 設計を体験す
る



2013/03/04

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

(c)watabe kinji, kaizen@wh.commufa.jp

2
概要
PC から RS232C シリア
ル通信で
ASCII データ
を送信する

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

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

(c)watabe kinji, kaizen@wh.commufa.jp

3
例題 (sample) 動作確認



例題 (sample) を動作させて確認する
道具 (tool) の使用方法は、操作説明資
料“ Xilinx 設計統合環境操作の覚え ISE 12.4
を題材として ver3.0” を参照してください

2013/03/04

(c)watabe kinji, kaizen@wh.commufa.jp

4
配線 例動作確認


配線






2013/03/04

RS232C ストレー
トケーブル(通
信)
パラレルケーブル
(プログラムダウ
ンロード用)
AC アダプタ(電
源)

(c)watabe kinji, kaizen@wh.commufa.jp

5
プログラム例題動作確認






2013/03/04

プロジェクト作成
Verilog 記述
コンパイル
ダウンロード
操作説明資料“ Xilinx 設計統合環境操作
の覚え ISE 12.4 を題材として
ver3.0” を参照してください
(c)watabe kinji, kaizen@wh.commufa.jp

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



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



2013/03/04

通信設定 38400, 8, な
し ,1, なし(左図)

できれば TeraTerm
Pro (フリー)を利

(c)watabe kinji, kaizen@wh.commufa.jp

7
例題動作確認




PC から UART で送る ASCII データ
( 0~9 )を取り込み、表示する
次のデータを受け取るまで同じ表示を続
ける
確認できましたか?

2013/03/04

(c)watabe kinji, kaizen@wh.commufa.jp

8
例題の全体構成


2013/03/04

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

(c)watabe kinji, kaizen@wh.commufa.jp

9
例題の全体構成
パラレル信号
シリアル信号

LED 点灯パターン
reciever

ascii_decoder
x16 clk

クロック


eight_divider

reciever:




DCM

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

ascii_decoder:


2013/03/04

受信信号に対応した LED 点灯パターンに変換する
(c)watabe kinji, kaizen@wh.commufa.jp

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

top_rec.sch








(開発対象)データ受信モ
ジュール







クロック 8 分周モジュール

シミュレーション用
receive.v のテストベンチ
シリアルデータが受信でき
ているか確認する

ascii.mem


DCM の設定ファイル

eight_devider


2013/03/04





ピン割り当てファイル

serial_dataflow.v

dcm_first.xaw






ASCII コードを LED 点灯パ
ターンに変換

receive.v




トップモジュール
回路図表示

top_rec.ucf


ascii_decode.v






シミュレーション用
メモリモデル、 receive.v
ファイルでリードして使用
する
シリアルデータの管理

eight_devider_tb.tbw

シミュレーション用

eight_devider.v のテストベ
ンチ
11
(c)watabe kinji, kaizen@wh.commufa.jp

8 分周できているか確認す

題材


2013/03/04

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

(c)watabe kinji, kaizen@wh.commufa.jp

12
UART(Universal Asynchronous Reciever
and Transmitter) とは?題材 :UART 通信


1

データフォーマット
1








2013/03/04

St D0 D1 D2 D3 D4 D5 D6 D7 S1 1

1

1

経過時間

スタートビット  0
8 ビットデータ、 LSB ファースト
パリティビット

なし
ストップビット 
 1
x16 クロックでサンプリング、シリアル - パラレル変換

X16 サンプリング:スタートビット検出から 8 クロック
目に位相設定、以降 16 クロックごとにサンプリングす
る
(c)watabe kinji, kaizen@wh.commufa.jp

13
通信の詳細 題材: UART 通信


8 ビットデータ、パリティ無
し、 38400bps 、ストップビット 1
余裕のある人はボーレートが変わって
も対応できるようコード記述を工夫す
る
約 16 倍の周波数でデータサンプリングす
る






2013/03/04

16 倍サンプリングを慣習的に行っている
(c)watabe kinji, kaizen@wh.commufa.jp

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
2013/03/04

文字

9
(c)watabe kinji, kaizen@wh.commufa.jp

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

UART データ受信
モジュール
recieve

7 セグメント
LED へ
データデコーダ
ascii_decode

8 ビット ASCII
8 ビット ASCII デー
データが 1 ビット
タをパラレルに渡す
幅でシリアルに伝
データ受信中は出力
送
データを保つ
•ascii_decode は内部に記憶を持たない

2013/03/04

(c)watabe kinji, kaizen@wh.commufa.jp

16
receive の内部データフロー 
題材 :UART 通信
clk
rst
クロックはボー
レートの 16 倍速
度を入力するもの
とする
recieve

D0
D1
D2
D3
D4
D5
D6
D7
S1

a0
a1
a2
a3
a4
a5
a6
a7

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

レジスタ
ascii[7:0]

レジスタ 
receive_data

(c)watabe kinji, kaizen@wh.commufa.jp

17
receive のコントロールフローの
概要
初期化

データ取り込み

スタートビット待ち
出力データ更新
データ取り込み
位相あわせ

2013/03/04

(c)watabe kinji, kaizen@wh.commufa.jp

18
実習1:デコーダの完成


問題









2013/03/04

acsii_decode.v を記述して数値 0~9 が表示される
ようにせよ
上記以外の ASCII コードが入力されたら
E ( Error の E )が表示されるようにせよ
実際に7セグ LED を点灯させて確認せよ
確認したら報告せよ

「入力: 8 ビット ASCII コード」の表を完成
させてからコーディングに移る
(c)watabe kinji, kaizen@wh.commufa.jp

19
Function 文 (1)  実習1
module selector(din,sel,dout)
input [3:0] din;
input [1:0] sel;
out dout;



Function 文






function select ;
input[3:0] data_sel;
input[1:0] data_sig;
end function
endmodule
2013/03/04

入力に対し値を返す
(値を保持しない)
モジュール内に記述


モジュールのすべての
信号が使用出来る
宣言したモジュール内
からのみ、その
Function を使用する事
ができる

Always 文でも組み合
わせ論理回路を実装
することができるが
、 Function を推奨20
(c)watabe kinji, kaizen@wh.commufa.jp

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;
endfunction
endmodule

2013/03/04

function < ビット幅 >  <名前> ;
endfunction で終了

入力の宣言
続いて、 wire の宣言も
可
各種ステートメントを
記述する(実習)
今回は if 文で記述する
(c)watabe kinji, kaizen@wh.commufa.jp

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;
( 省略 )
endfunction
endmodule
2013/03/04

(c)watabe kinji, kaizen@wh.commufa.jp

22
Case 文の記述 実習1
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)



function 文のステー
トメントに if
文、 case 文を記述
することができる

( 省略 )
endcase
endfunction
endmodule
2013/03/04

(c)watabe kinji, kaizen@wh.commufa.jp

23
always 文 と function 文 実習1


組み合わせ回路を記述する場合は
function 文を用いる




2013/03/04

always 文で組み合わせ回路が記述できる。
しかし記憶素子を用いないにもかかわらず
reg 宣言をしなければならないので避ける
べき
記述する回路規模が大きくなり、設計を再
利用することが多くなる
(c)watabe kinji, kaizen@wh.commufa.jp

24
回路図の読解 実習1





2013/03/04

ボード付属 DVDROM  
FPGASCH_EVSP
3E100_rev1p03.pdf
 が回路図
V3P3 は +3.3V
集合抵抗

(c)watabe kinji, kaizen@wh.commufa.jp

25
回路図の読解 実習1
この間に電位
差が 0.7V ある
と



バイポーラトラン
ジスタの挙動




ここに電流
が流れる

2013/03/04

デジタル回路での基
本的な使い方
/DP1_OEN が  L
 のとき LED に通
電する

(c)watabe kinji, kaizen@wh.commufa.jp

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

出力を多重化してい
る




2013/03/04

複数の桁数を表示す
るには時間的
に /DP1_OEN ~ /
DP4_OEN をずらさ
なければならない
7 セグ回路では一般
的

(c)watabe kinji, kaizen@wh.commufa.jp

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





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

2013/03/04

この場合は負論理

(c)watabe kinji, kaizen@wh.commufa.jp

28
ASCII コード⇒ LED 点灯パターン変
換表
実習1
ASCII コード

文字

7 セグメント点灯パターン

{ g,f,e,d,c,b,a}

(8 ビット、 16
進)
30

0

31

1

32

2

33

3

34

4

35

5

36

6

37

7

38

8

39
その他
2013/03/04

9
E

0100100

(c)watabe kinji, kaizen@wh.commufa.jp

29
実習2:
UART 受信モジュールの設計


receive.v を設計してみよう



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



2013/03/04

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

実装、動作確認

(c)watabe kinji, kaizen@wh.commufa.jp

30
報告:実習2



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




2013/03/04

データフロー、コントロールフロー、検証
項目
実機動作確認
発生した問題点、反省点、改善点
(c)watabe kinji, kaizen@wh.commufa.jp

31
追加実習


今回の回路に機能を追加





2013/03/04

7 セグ LED のダイナミック点灯(複数桁表
示)
送信機能
電卓の作成

(c)watabe kinji, kaizen@wh.commufa.jp

32
参考資料


DLL について






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

FSM のコーディングについて
「合成 / 検証デザインガイド」
 Spartan3E データシート
等をお読みください




参考


2013/03/04

「 FPGA によるシリアル・コントローラの設計事
例」 インターフェース 2005.6
(c)watabe kinji, kaizen@wh.commufa.jp

33
付録:周辺回路


2013/03/04

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

(c)watabe kinji, kaizen@wh.commufa.jp

34
クロック設計


サンプリング周波数



38400bps の 16 倍であるので 614400Hz
100/3MH z X’tal (基盤に実装されている発信
素子)の約 56 分の 1



0.595MH z( 0.614MHz の誤差約 3 %)
内部の DLL を使う


クロックの分周に LBS を使うにはロジックリソースの
消費

1/7 ( DLL)
2013/03/04

1/8(Logic )

(c)watabe kinji, kaizen@wh.commufa.jp

本当は使っ
ちゃダメ

35
注意!!
ゲーティッドクロックは避ける


クロック信号はクロックラインを用い
る






2013/03/04

データ遅延などを考慮してクロック、レジ
スタの分配を配置・配線ツールが行う
ゲートを使ってクロックの調整を行うと
ツールは適正に分配できない
今回の実習例ではゲーティッドクロックを
用いています。実際の業務ではそのまま使
わないでください。変更してください。


通信用の発振器を外付けするなどで対応
(c)watabe kinji, kaizen@wh.commufa.jp

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

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



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

注意!! DLL はクロック信号を遅らせて使っているので
入力クロックに乱れが入っていると、乱れを伝播する
PLL(Phase Locked Loop) との比較
 クロックのジッタなどで
ロックが外れる


2013/03/04

(c)watabe kinji, kaizen@wh.commufa.jp

37
内部非論理機能  DLL を使う


よく使う機能の専用ハードウェアを備えてい
る







内部非論理機能を HDL コード中に記述



2013/03/04

論理リソースの節約、消費電力の低減にも繋がる
DSP 、乗算器、イーサネット MAC 、ブロックメ
モリ、メモリコントローラ、 CPU コア ,etc
DLL もそのうちのひとつ
CORE Generator によるインスタンシエーション
内部機能のいくつかはツールの自動推論により用
いることができ、インスタンシエーションの必要
38
なし
(c)watabe kinji, kaizen@wh.commufa.jp
DLL をつかう



新しいプロジェクト  clock_design
Create New Source ->IP (COREGen &
Architecture Wizard)-> ファイル名を入力し、
Next ボタンを押下






2013/03/04

ファイル名  dcm_test とした

ダイアログボックスで FPGA Features and
Design ->Clocking ->Spartan-3E,Spartan-3A>Single DCM SP v9.1i を選択
General Setup for INST1
(c)watabe kinji, kaizen@wh.commufa.jp

39
CLKDV に
チェック

入力周波数
33.3MH z
入出力の周波数
をチェックして
くれる

7
分周

2013/03/04

(c)watabe kinji, kaizen@wh.commufa.jp

40





2013/03/04

“Use Global Buffers
for all selected clock
outputs” を選択
Next ボタンを押下
次のダイアログボッ
クスで Finish を押下

(c)watabe kinji, kaizen@wh.commufa.jp

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



eight_divider.v の作
成
クロックを8分周す
る Verilog モジュー
ル


2013/03/04

4カウントごとに出
力を反転させる回路
を作ればよい

(c)watabe kinji, kaizen@wh.commufa.jp

42
トップモジュール構成


作成してきたサ
ブモジュールを
接続してトップ
モジュールを作
成する

Verilog-HDL でサ
ブモジュールを
呼び出すことも
可
 ECS 回路図入力
ツールを用いる
43
(c)watabe kinji, kaizen@wh.commufa.jp


2013/03/04
トップモジュール構成
シリアル信号

パラレル信号

LED 点灯パターン

reciever

ascii_decoder

DCM

eight_divider

クロック
分周クロック

分周クロック

リセット信号はこの図で
は省略してある
(c)watabe kinji, kaizen@wh.commufa.jp

2013/03/04

44
トップモジュール構成


作成したモジュールの回
路シンボルの作成




2013/03/04

Sources ウインドウのモ
ジュールファイルをク
リックして選択する
その状態を維持したまま
、 Process ウインドウの
Design Entry Utilities セク
ションから Create
Schematic Symbol をダブ
ルクリックする

(c)watabe kinji, kaizen@wh.commufa.jp

45
自作の回路をライブラリに登録
        
トップモジュール構成

② 作業フォルダのパスを追
加しているので選択
③ 設計したモジュールを追
加している(はず)

①Source ウイン
ドウの Symbol タ
ブをクリック
2013/03/04

(c)watabe kinji, kaizen@wh.commufa.jp

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

部品を配置
する

Symbol タ
ブを選択

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

(c)watabe kinji, kaizen@wh.commufa.jp

47
回路図を作成する
トップモジュール構成
部品の配置を
変更する

Add Net Name:
配線に名前を付
ける

Add Wire : 配線ツール

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

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

(c)watabe kinji, kaizen@wh.commufa.jp

48
トップモジュール構成

2013/03/04

(c)watabe kinji, kaizen@wh.commufa.jp

49
ボード構成の確認


FPGA チップと外界の接続を確認






2013/03/04

LED への接続に関しては組み合わせ論理回
路の資料を参照
リセット回路
UART
クロック回路

(c)watabe kinji, kaizen@wh.commufa.jp

50
リセット回路ボード構成の確認
シュミットイン
バータ



SW 1をリ
セットとして
使用




2013/03/04

(c)watabe kinji, kaizen@wh.commufa.jp

ボタン押した
ときに SWIN1
は H になる
SWIN1 は
FPGA の30
ピン
51
シリアルインターフェースボード構
成の確認




2013/03/04

Host TxD ( 送信ポート )  ⇒ 
DB9 3 ピン ⇒ RxD (受信ポー
ト)
FPGA の 79 ピンに接続
(c)watabe kinji, kaizen@wh.commufa.jp

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

2013/03/04

FPGA の 63 ピ
ンに接続

(c)watabe kinji, kaizen@wh.commufa.jp

53
7セグメントLEDボード構成の確
認














2013/03/04

(c)watabe kinji, kaizen@wh.commufa.jp

/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 ピン

54

Uart受信設計2013

Editor's Notes

  • #26 設計者の技量とはリテラシ(読み書き能力)のことである。 C言語、VHDL,VerilogHDL、デジタル・アナログ回路図、タイミングチャート、ステートチャート、日本語、英語、特許文書 etc
  • #36 1/7 の分袖
  • #39 DLLはクロックソースにジッタがあるとうまくロックしない
  • #41 Test Bench Waveforms are currently not supported for Architecture Wizard or Coregen sources.
  • #50 こんな感じで作ってみました
  • #51 リセットには論理リセットと電源リセットがある