Más contenido relacionado
La actualidad más candente (20)
Similar a Uart受信設計2013 (20)
Más de Kiyoshi Ogawa (20)
Uart受信設計2013
- 1. UART 受信器 FSM 設計
© 渡部謹二 , 小川清
2013/03/04
(c)watabe kinji, kaizen@wh.commufa.jp
1
- 3. 概要
PC から RS232C シリア
ル通信で
ASCII データ
を送信する
FPGA 内
① シリアル
→ パラレル変換回路
② パラレル ASCII
データ→ LED 点灯パ
ターン変換
今回は固定
した ASCII
コードを入
力して動作
確認する
2013/03/04
(c)watabe kinji, kaizen@wh.commufa.jp
3
- 4. 例題 (sample) 動作確認
例題 (sample) を動作させて確認する
道具 (tool) の使用方法は、操作説明資
料“ Xilinx 設計統合環境操作の覚え ISE 12.4
を題材として ver3.0” を参照してください
2013/03/04
(c)watabe kinji, kaizen@wh.commufa.jp
4
- 8. 例題動作確認
PC から UART で送る ASCII データ
( 0~9 )を取り込み、表示する
次のデータを受け取るまで同じ表示を続
ける
確認できましたか?
2013/03/04
(c)watabe kinji, kaizen@wh.commufa.jp
8
- 11. ファイル構成例題の全体構成
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 分周できているか確認す
- 13. 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
- 14. 通信の詳細 題材: UART 通信
8 ビットデータ、パリティ無
し、 38400bps 、ストップビット 1
余裕のある人はボーレートが変わって
も対応できるようコード記述を工夫す
る
約 16 倍の周波数でデータサンプリングす
る
2013/03/04
16 倍サンプリングを慣習的に行っている
(c)watabe kinji, kaizen@wh.commufa.jp
14
- 15. 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
- 16. データフロー設計 題材 :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
- 17. 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
- 20. 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
- 21. 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
- 22. 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
- 23. 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
- 24. always 文 と function 文 実習1
組み合わせ回路を記述する場合は
function 文を用いる
2013/03/04
always 文で組み合わせ回路が記述できる。
しかし記憶素子を用いないにもかかわらず
reg 宣言をしなければならないので避ける
べき
記述する回路規模が大きくなり、設計を再
利用することが多くなる
(c)watabe kinji, kaizen@wh.commufa.jp
24
- 29. 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
- 33. 参考資料
DLL について
XAPP462 Spartan-3 FPGA におけるデジタル ク
ロックマネージャ (DCM) の使用
Spartan3E データシート
FSM のコーディングについて
「合成 / 検証デザインガイド」
Spartan3E データシート
等をお読みください
参考
2013/03/04
「 FPGA によるシリアル・コントローラの設計事
例」 インターフェース 2005.6
(c)watabe kinji, kaizen@wh.commufa.jp
33
- 35. クロック設計
サンプリング周波数
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
- 37. DLL ( Delay Lock Loop: 遅延ロック
ループ)とは?
クロック信号を一周期(ぐらい)遅らせて位相ロックす
る
分配したクロックの遅延を補償
位相遅れを加えることも出来、また周波数を逓倍することもでき
る
注意!! DLL はクロック信号を遅らせて使っているので
入力クロックに乱れが入っていると、乱れを伝播する
PLL(Phase Locked Loop) との比較
クロックのジッタなどで
ロックが外れる
2013/03/04
(c)watabe kinji, kaizen@wh.commufa.jp
37
- 38. 内部非論理機能 DLL を使う
よく使う機能の専用ハードウェアを備えてい
る
内部非論理機能を HDL コード中に記述
2013/03/04
論理リソースの節約、消費電力の低減にも繋がる
DSP 、乗算器、イーサネット MAC 、ブロックメ
モリ、メモリコントローラ、 CPU コア ,etc
DLL もそのうちのひとつ
CORE Generator によるインスタンシエーション
内部機能のいくつかはツールの自動推論により用
いることができ、インスタンシエーションの必要
38
なし
(c)watabe kinji, kaizen@wh.commufa.jp
- 39. 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
Notas del editor
- 設計者の技量とはリテラシ(読み書き能力)のことである。
C言語、VHDL,VerilogHDL、デジタル・アナログ回路図、タイミングチャート、ステートチャート、日本語、英語、特許文書 etc
- 1/7 の分袖
- DLLはクロックソースにジッタがあるとうまくロックしない
- Test Bench Waveforms are currently not supported for Architecture Wizard or Coregen sources.
- こんな感じで作ってみました
- リセットには論理リセットと電源リセットがある