89
平成 24 年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門 FPGAとマイコンの連携システム ハードウェア編 ~The first step is the only difficulty. 東北の復興を担う自動車組込みエンジニア育成支援プロジェクト

実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

Embed Size (px)

Citation preview

Page 1: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

平成 24年度 「東日本大震災からの復興を担う専門人材育成支援事業」

実践!自動車組込み技術者入門

FPGAとマイコンの連携システム

ハードウェア編

~The first step is the only difficulty.

東北の復興を担う自動車組込みエンジニア育成支援プロジェクト

Page 2: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門
Page 3: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

目次I

Content

0 はじめに ..................................................................................... 1

1 FPGAとマイコンの連携システム ................................................................ 2

2 FPGA概論 .................................................................................... 3

2.1 FPGA学習ボード .......................................................................... 4

2.1.1 機能の説明、 ........................................................................ 4

2.1.2 部品の確認 .......................................................................... 5

2.1.3 事前準備 ............................................................................ 6

2.1.4 はんだ付けの前に、 ................................................................... 6

2.1.5 抵抗の実装 .......................................................................... 8

2.1.6 積層セラミックコンデンサの実装 ....................................................... 8

2.1.7 電界コンデンサの実装 ................................................................. 8

2.1.8 スイッチの実装 ...................................................................... 9

2.1.9 トランジスタの実装 ................................................................... 9

2.1.10 発光ダイオードの実装.............................................................. 10

2.1.11 セラミック発信子・オシレータ・各種 ICの実装 ....................................... 10

2.1.12 コネクタの実装 ................................................................... 11

2.1.13 7セグメント LEDの実装 ............................................................ 11

2.1.14 USBモジュールとレギュレータの実装 ................................................ 12

2.1.15 FPGA基板へのモード選択用ピンヘッダの実装 ......................................... 13

2.1.16 FPGA基板連結用コネクタの実装 ..................................................... 13

2.1.17 ジャンパピンの設定 ............................................................... 14

3 FPGA開発環境 ............................................................................... 15

3.1 ISE(Integrated Software Environment) .................................................... 15

3.2 ハードウェア記述言語 .................................................................... 15

3.2.1 VerilogHDL ......................................................................... 15

3.2.2 VHDL ............................................................................... 15

4 VerilogHDLによる信号処理 ................................................................... 16

4.1 VerilogHDL書式 ......................................................................... 16

4.1.1 組合せ論理回路 ..................................................................... 16

4.1.2 順序論理回路 ....................................................................... 19

4.1.3 ISEによる設計.................................................................... 22

4.2 モジュールの階層化 ...................................................................... 38

5 超音波距離計の仕様 .......................................................................... 40

5.1 超音波距離計の原理 ...................................................................... 40

5.1.1 センサーモジュールの仕様 ............................................................ 40

5.1.2 モジュール構成 ..................................................................... 41

5.1.3 センサーモジュールの信号処理手順 .................................................... 47

5.1.4 トリガおよびイネーブル信号の生成 .................................................... 49

6 シリアルインターフェースモジュール .......................................................... 57

6.1 モジュール概要 .......................................................................... 57

7 おわりに .................................................................................... 63

ハードウェアとソフトウェア .................................................................... 63

8 Appendix .................................................................................... 64

超音波距離計のための VerilogHDL ソースリスト .................................................. 64

8.1 RangFinderForAVES.v (TOP Module) ...................................................... 64

8.2 Gen_Com_Scan.v(U0 Module) ............................................................. 71

8.3 Gen_Clk_R232C.v(U1 Module) ............................................................ 72

Page 4: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

目次II

8.4 Send_Data_Slect.v(U2 Module) .......................................................... 74

8.5 RS232C_TX.v(U3 Module) ................................................................ 75

8.6 Gen_1mm_Pulse.v(U4 Module) ............................................................ 77

8.7 Count_Renge.v(U5 Module) .............................................................. 78

8.8 Disp_Counter.v(U6 Module) ............................................................. 80

8.9 RangFinderForAVES.ucf(ピンアサイン) ................................................... 82

Page 5: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

1

近年、コストの削減や、設計期間の短縮などにより、組込システムが多くのシステムに利用されています

が、システムの高機能化と共に、規模が拡大していき、従来のマイコンによる処理だけでは対応出来ない機

能が出てきました。

特に注目を集めている衝突防止システムや、車の周辺環境を複数のカメラで把握し苦手な駐車スペースへ

誘導するパーキングアシストシステムなど、画像信号の高速処理が必要となる部分(画像解析等)や、並列

同時処理が必要な部分は、マイコンのみのシステムでは信号処理の負担が大き過ぎ、ハードウェアによる機

能の実現を計ってきました。

しかし、ASICの様な専用デバイスでは、開発コストや期間が、現在の要求に対応出来きず、開発が容

易で多機能な要求に対応できるデバイスが求められています。

そこに、近年急速に技術開発が進んでこの様な要求に対応できるデバイスとして注目されているのがFP

GAというデバイスです。

現在、多くの製品で、このFPGAとマイコンが連携して高性能な機能を実現しています。

本書では、実際の製品開発に用いられる VerilogHDL による FPGA 開発とマイコンシステムを用いた連携

システムにより、具体的な実装方法からアプリケーションの開発までを幅広く説明しています。

始めに、このFPGAとマイコンの連携システムの開発方法の説明をし、FPGA での簡単な距離計測シス

テムを設計した後、マイコンと連携させた、より高機能なシステムを学びます。

FPGA の利用方法では、様々な書物が提供されています。実際に実装する場合になると、各メーカー毎の

開発環境によって異なるため、本書では実際の製品開発の現場でも用いられるザイリンクス社が無償で提供

している ISE@webPACK と VerilogHDL というハードウェア開発言語を用いて、入門者が最も手間の掛かる

FPGA 実装の方法について具体的に説明しています。

本書が、車載システム開発の FPGA とマイクロコンピュータの連携システムを始めようという技術者、学

生の良き参考書になれば幸いです。

第一章「FPGA とマイコンの連携システム」では、FPGA とマイコンが連携することの利点について、そ

の理由を説明します。

第二章「FPGA 概論」、第三章「FPGA 開発環境」では、FPGA の特徴と学習用 FPGA ボードキットの製

作手順と、ISE と呼ばれる HDL で記述されたソースコードから論理合成、インプリメンテーション、回路デ

ータの書き込み迄を統合した開発環境の概要と HDL の種類とその特徴を説明します。

第四章「VerilogHDL による信号処理」では、実際に演習を通して VerilogHDL による記述と実装方法を説

明します。

第五章「超音波距離計の仕様」第六章「シリアルインターフェースモジュール」では、マイコンとの連携

システムのために、超音波センサーを制御して距離計測を行うための方法と、計測データをマイコンシステ

ムに転送するためのインターフェースの仕様を説明します。

0 はじめに

Page 6: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

2

1 FPGAとマイコンの連携システム

マイコンによる組込システムが多くのシステムに利用されていますが、マイコンにおける処理では、ソフ

トウェア処理のウィークポイントである、信号の高速処理が必要となる部分(画像解析等)や、並列同時処

理が必要な部分において対応出来ない事が多々あります。

その様な場合、ハードウェアによるASIC等により機能の実現を計ってきました。しかし、ASICの

様な専用デバイスでは、開発コストや期間が、現在の要求に対応出来なくなって来ました。

そこで注目されてきたのが、より簡単に機能検証や仕様変更に対応できるFPGAというデバイスです。

現在、多くの製品では、このFPGAとマイコンが連携して高性能な機能を実現しています。

マイコンによるソフトウェア処理に於いては、仕様の変更などに柔軟に対応出来る利点があり、多くのシ

ステムに導入されてきました。

しかし、ソフトウェアの弱点である以下の項目が、近年のシステムでは問題になっています。

① -命令の読込・解析・実行-という手順に於いて一定の処理時間が必要となる。

② リアルタイム OS を用いたシステムでも、厳密には並列処理ではなく時分割処理になっている。

このような課題の解決にはハードウェアとの連携が必要であり、以前よりトレードオフと呼ばれる機能分

割が行われてきました。

しかし、ハードウェアによる機能実現は、ソフトウェアに比べ高価になる事が大半で、可能な限りソフト

ウェアによる機能実現を進めてきました。しかし、最近のハードウェアによる機能実現の手法が大きく進み、

特にFPGAと呼ばれるデバイスが脚光をあびております。

このような FPGA との連携システムの実現で上記のような問題が解消可能になってきました。

Page 7: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

3

2 FPGA概論

FPGA とは、「Field Programmable Gate Array」の略で、一度書き込みを行った後でも、仕様変更などに

より回路構成が変更された後、再度書き換えが可能なデバイスです。また、FPGA では、IP コアと呼ばれる

機能単位にまとめられたら回路情報を組込むことにより、同じ回路構成のままで異なった機能を、複数のシ

ステムユニットを搭載しなくても実現可能になります。

FPGA が登場する前では、PLD の PAL などでは、内部回路をプロダクト・タームと呼ばれる積和形式

(AND-OR)による論理式で実現してきましたが、FPGA では LUT(look-up table)と呼ばれる小規模なメ

モリーで実現しています。

図 2.1-1 LUT の構造

LUT は入力パラメータをアドレスとして、そのパラメータによる論理式の値をメモリーにあらかじめ格納

しておく事で、論理回路(組み合わせ)による複雑な回路構成を省略し、即座に結果を得ることが可能にな

る方法です。

次の第3章から、演習を通して具体的に FPGA の設計について解説していきます。

Page 8: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

4

2.1 FPGA学習ボード

FPGA 学習ボード

FPGA 学習ボードは、組み立てキットとなっており、マニュアルを参考にしながら、はんだ付けをして組

み立てます。また、汎用部品を多く使用しているため、回路が分かり易く、ハードウェアの学習も同時に行

うことができます。

図 2.1 FPGA 学習ボード

2.1.1 機能の説明、

① FPGA として、Xilinx 社製の XC3S100E-4VQG100C を搭載しています。

② 大型の緑色 7 セグメント LED です。

③ USB により PC と接続します。JTAG インターフェイスによる FPGA プログラミングや、仮想 COM ポ

ートによる通信を行うことができます。また、USB 給電により FPGA 学習ボードを動かすことも可能で

す。

④ 電源用の DC ジャックです。USB による給電を行わない場合、DC ジャックに 6V~12V の AC アダプタ

を接続することで FPGA 学習ボードを動作させることができます。

⑤ RS-232C通信用のDsub9ピンコネクタです。RS-232Cトランシーバを介してFPGAに接続されており、

FPGA からシリアル通信を行うことができます。

⑥ Parallax 社製の超音波センサです。超音波の反射を利用して、物体までの距離を測ることができます。

⑦ FPGA にクロックを供給するオシレータです。FPGA 学習ボードでは 33.333MHz を搭載しています。

⑧ CAN(Control Area Network)用のコネクタです。自動車等に広く使用されている CAN 通信を行うことが

できます。CAN 通信に必要なプロトコルは、マイクロチップ社製の MCP2515 に搭載されているため、

簡単に CAN 通信を行うことができます。

⑨ FPGA から直接点灯可能な赤色 LED が 8 個搭載されています。

⑩ FPGA から直接読み取り可能な SW が 8 個搭載されています。

⑪ FPGA学習ボード上で使用していないXC3S100Eの空きピンを拡張用コネクタとして取り出しています。

⑦ ⑧

Page 9: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

5

2.1.2 部品の確認

組み立てに入る前に、必要な部品がすべてそろっているか確認してください。

表 x にキットに含まれている部品の一覧を示します。

表 2.1.2 キット同梱部品一覧

数量 品名 型番 備考

4 100uF25V電解コンデンサ 25PK100MEFC5X11

22 0.1uF50V積層セラミックコンデンサ RPEF11H104Z2P1

1 33Ω1/4Wカーボン抵抗 RD-25TJ330 橙橙黒金

1 120Ω1/4Wカーボン抵抗 RD-25TJ121 茶赤茶金

17 330Ω1/4Wカーボン抵抗 RD-25TJ331 橙橙茶金

19 1KΩ1/4Wカーボン抵抗 RD-25TJ102 茶黒赤金

4 10KΩ1/4Wカーボン抵抗 RD25S 10K 茶黒橙金

1 FPGA基板 IEEC-DI001A

1 33.333MHzオシレータ SG8002DC-33.333MHz-PCB

1 10MHzセラミック発信子 CSTLS10M0G53-B0

4 トランジスタ 2SA1015Y

1 5V レギュレータ NJU7223F50

1 3.3V レギュレータ NJU7223F33

1 RS232C トランシーバ ICL3232CPZ

1 CANコントローラ MCP2515-I/P

9 赤色 LED OSDR3133A

1 4桁 7セグメント LED OSL40562-IG

7 ジャンパピン P-03688

6 ゴム足 P-00298

1 2.1mmDCジャック MJ-179P

1 2P コネクタ B2B-XH

1 Dsub9コネクタ オス C-00644

3 3P コネクタ B3B-XH

8 タクトスイッチ DTS-6

2 ネジ 10mmM3

2 ナット M3

1 USBケーブル C-05222

1 超音波センサ M-05400

3 ピンソケット C-05779

3 ピンヘッダ C-00167

1 USBモジュール M-02990

1 プリント基板 AVES-XC3S100E

Page 10: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

6

2.1.3 事前準備

はんだ付け作業に入る前に、図 x のように、ピンヘッダとピンフレームを折って分割します。

ピンヘッダは、20 ピン 1 個、19 ピン 2 個、8 ピン 1 個、7 ピン 1 個、3 ピン 4 個、2 ピン 1 個にします。

ピンフレームは、20 ピン 1 個、19 ピン 2 個、8 ピン 1 個、7 ピン 1 個、3 ピン 1 個、2 ピン 1 個にします。

図 2.1.3-1 分割したピンヘッダ 図 2.1.3-2 分割したピンフレーム

2.1.4 はんだ付けの前に、

図 x に示すプリント基板に対して、部品のはんだ付けを行います。図 x の様に、はんだ付けの難しい表面

実装 IC は事前にはんだ付けを行ってあります。

図 2.1.4 はんだ付け前のプリント基板

20 ピン

19 ピン

8 ピン

7 ピン

3 ピン

2 ピン

20 ピン

19 ピン

8 ピン

7 ピン

3 ピン

2 ピン

Page 11: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

7

はんだ付けは、基本的に背の低い部品から順に行っていくと簡単です。

表 x に示す部品表の部品番号と、プリント基板に白文字で印字されているシルク番号を合わせて実装しま

す。

表 2.1.4 FPGA 学習ボード部品表

Page 12: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

8

2.1.5 抵抗の実装

部品表の部品番号 R1~R42 をはんだ付けします。

極性はありません。どちら向きに実装しても大丈夫です。

図 2.1.5 抵抗実装後のプリント基板

2.1.6 積層セラミックコンデンサの実装

部品表の部品番号 R5~R26 をはんだ付けします。

極性はありません。

図 2.1.6 積層セラミックコンデンサ実装後のプリント基板

2.1.7 電界コンデンサの実装

部品表の部品番号 C1~C4 をはんだ付けします。 極性があります。

図 x に示すように電解コンデンサの側面に白い線が入っている方をシルク印刷の+が無い方に実装します。

図 2.1.7-1 電界コンデンサの実装

Page 13: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

9

図 2.1.7-2 電界コンデンサ実装後のプリント基板

2.1.8 スイッチの実装

SW1~SW8 のタクトスイッチをはんだ付けします。タクトスイッチは、縦と横でピンの足の幅が違いま

す。プリント基板の向きに合わせてはんだ付けしてください。

図 2.1.8 タクトスイッチ実装後のプリント基板

2.1.9 トランジスタの実装

Q1~Q4 のトランジスタをはんだ付けします。

図 x の様に、トランジスタの平らな面がシルク印刷と同じ向きになるように実装します。

図 2.1.9-1 トランジスタの実装

Page 14: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

10

図 2.1.9-2 トランジスタ実装後のプリント基板

2.1.10 発光ダイオードの実装

D1~D9 の発光ダイオードを実装します。

図 x の様に、シルク印刷と発光ダイオードの平らな面がが合うように実装します。

図 x 発光ダイオードの実装

図 2.1.10 発光ダイオード実装後のプリント基板

2.1.11 セラミック発信子・オシレータ・各種 IC の実装

JP1~4 のジャンパピンをはんだ付けします。事前準備で割り折ったピンヘッダとピンフレームを使用し

ます。

X2 のセラミック発信子を実装します。極性はありません。

X1 のオシレータと U8 と U9 の IC を実装します。基板のシルク印刷の向きにしたがって実装してくださ

い。

IC に切込みの無い物は表面に●など印がある側を合わせます。

図 2.1.11-1 オシレータ・IC の実装

Page 15: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

11

図 2.1.11-2 セラミック発信子・オシレータ・各種 IC 実装後のプリント基板

2.1.12 コネクタの実装

J1~J7 の各種コネクタをはんだ付けします。

J2・J5~J7 のコネクタは、基板のシルク印刷の四角に収まるように実装します。

(逆向きに実装すると、シルク印刷の四角からはみ出します)

図 2.1.12 各種コネクタ実装後のプリント基板

2.1.13 7 セグメント LED の実装

D10 の 7 セグメント LED をはんだ付けします。

図 x の様に、7 セグメント LED の DP と基板のシルク印刷の DP マークを合わせて実装します。

図 2.1.13-1 7 セグメント LED の実装

Page 16: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

12

図 2.1.13-2 7 セグメント LED 実装後のプリント基板

2.1.14 USB モジュールとレギュレータの実装

U3 の USB モジュールをはんだ付けします。USB コネクタが基板の外を向くように実装します。

U1 と U2 のレギュレータを実装します。基板のシルク印刷の線があるほうにレギュレータの背中がくるよ

うに

実装します。

図 2.1.14-1 レギュレータの実装

図 2.1.14-2 USB モジュールとレギュレータ実装後のプリント基板

Page 17: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

13

2.1.15 FPGA 基板へのモード選択用ピンヘッダの実装

FPGA 基板の図 x に示す位置に、ピンヘッダを実装します。ピンヘッダは、事前準備で割り折ったピンヘ

ッダ

を使用します。FPGA と同じ面に実装します。実装する面に注意してください。

図 2.1.15 FPGA 基板へのモード選択用ピンヘッダの実装

2.1.16 FPGA 基板連結用コネクタの実装

FPGA 基板連結用のピンフレームをはんだ付けします。事前準備で割り折ったピンヘッダとピンフレーム

使用します。

図 2.1.16-1 FPGA 基板連結用ピンフレームの実装

FPGA 基板側にピンフレームを実装します。

図 2.1.16-2 FPGA 基板へのピンヘッダ実装

3 ピン

3 ピン

20 ピン

8 ピン 7 ピン

2 ピン

19 ピン

19 ピン

20 ピン

8 ピン 7 ピン 2 ピン

19 ピン

19 ピン

Page 18: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

14

完成

はんだ付けは、終了です。

ゴム足を基板裏に貼り付け、Dsub コネクタをねじとナットで固定しください。

超音波センサを、J4 に差し込んでください。

以上で完成です。

ジャンパピンの設定を行うまで電源は入れないでください。

図 2.1.16-3 完成した FPGA 学習ボードとジャンパピン

2.1.17 ジャンパピンの設定

① FPGA 動作モード設定(3 箇所)

すべてをショートした状態に設定してください。

② USB モジュール IO 電圧設定(2 箇所)

すべてをオープンにした状態にしてください。

③ USB 給電 ON/OFF 設定

ショートした状態にしてください。

④ 電源切り替え

FPAG 学習ボードの電源を USB 給電もしくは、DC ジャックいずれかに選択します。

図 2.1.17-1 USB 給電の場合 図 2.1.17-2 DC ジャック給電の場合

⑤ シリアル通信ポート切り替え

シリアルポートを USB 経由の仮想 COM ポートもしくは、Dsub9 ピンの RS-232C いずれかに選択しま

す。

選択は、送信と受信を個別に設定できます。

図 2.1.17-3 Dsub9 ピン RS-232C の場合 図 2.1.17-4 USB 仮想 COM ポートの場合

⑥ CAN 終端抵抗 ON/OFF 設定

CAN 通信を使用する際に、この基板が CAN バスの終端にあたる場合にショートします。

CAN 通信を使用しない場合は、オープン/ショートどちらでも構いません。

JACK

USB

JP1

TX

JP3 RX

JP2 TX

JP3 RX

JP2

JACK

USB

JP1

Page 19: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

15

3 FPGA開発環境

3.1 ISE(Integrated Software Environment)

ISE は Xilinx(ザイリンクス)社が提供している PLD の統合開発環境です。

HDL による記述と、UCF(ユーザー制約ファイル)により HDL 合成およびシミュレーション、イ

ンプリメンテーション、デバイスへのフィット、JTAG プログラミングの機能を備えた、ダウンロード

可能なソリューションです。

Xilinx 社では、この ISE を簡単に試すことが出来るように、無償の ISE WebPACK を提供しています。

詳しい入手方法およびインストールは Xilinx 社のホームページを参照してください。

http://japan.xilinx.com/

3.2 ハードウェア記述言語

3.2.1 VerilogHDL

Verilog(ヴェリログ)は、デジタル回路の設計用の論理シミュレータで、そこ

で使用するハードウェア記述言語でもあります。両者を区別する場合、言語の方を「Ve

rilogHDL」と呼びます。

言語の開発にあたっては、ソフトウェア開発者にも受け入れられるようにプログラム言

語のC言語やPascalの要素を取り入れたものとなっていてIEEE 1364-2005とし

て標準化されています。

3.2.2 VHDL

VHDLは、デジタル回路ハードウェア記述言語の一種で、EDA(Electronic Design

Automation)分野における標準の一つです。主として論理回路の設計に、特にFPGAや

ASICなどの設計で使われる。規格が存在し、IEEE 1076-2008 です。

Page 20: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

16

4 VerilogHDLによる信号処理

4.1 VerilogHDL書式

VerilogHDLの基本書式は以下のようになります。

module モジュール名(入出力ポートリスト);

input 入力ポートリスト;

output 出力ポートリスト;

wire 結線リスト;

reg レジスタ定義;

assign 論理式; ・・・組合せ論理回路記述

always @(動作トリガ定義)

begin

ff_q <= x; ・・・順序論理回路記述

end

endmodule

4.1.1 組合せ論理回路

組合せ論理回路は、その時の入力信号だけで出力が決まるデジタル回路です。

主な回路としては、基本ゲート回路があり、その応用としてはスイッチによる入力回路や、7セグメ

ントLEDの表示制御出力のようなエンコーダ、デコーダ回路があります。

回路の設計手順としては

状態図 → 真理値表 → 論理式 → 簡略式 → 論理回路

という手順で設計を進めていきます。

簡単な例として、多数決回路を考えてみましょう。

多数決回路では、命題に対し賛成と反対の各意見を表明し、その過半数で可決、または否決を決める

物です。

説明を簡単にするため、最少人数でこれをデジタル回路で考えると、3人で命題を考え、それぞれ賛

成と反対の意志をデジタル信号の「0」と「1」で、それぞれAさんBさんCさんとして表明します。

そこで、この3人の意志を表す信号を「0」と「1」で考えた時、その組合せは以下の8通りになり

ます。これを表で現した物を真理値表と言います。

そこで、この3人の意志を表す信号を「0」と「1」で考えた時、その組合せは以下の8通りになり

ます。これを表で現した物を真理値表と言います。

Page 21: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

17

表 4.1.1 真理値表

表4.1.1で、出力が「0」または「1」のいずれかの場合について考えます。

通常は正論理と呼ばれる方法で、出力が「1」の状態に着目して考える方法で、この時の出力が

「1」の状態をアクティブな状態、「0」をインアクティブな状態と言います。

アクティブな状態とは、「電灯では電灯が点灯している」「スイッチではスイッチが押されてい

る」

等の状態をいいます。

このアクティブな状態に着目して、論理式を導く方法を加法標準形と言います。

また「0」の場合を考える事を負論理と言い、インアクティブな状態に着目した考え方になりま

す。アクティブとは、能動的な状態で、例えばラアンプなら点灯している時、プッシュプスイッチ

ならばスイッチを押してONにした、この時、加法標準形でこの回路の論理式を求めると

X=m3+m5+m6+m7

となります。

この式をブール代数や、カルノー図により簡略化を行います。

簡略化は、論理式中の冗長な部分を無くし、無駄な回路を省く効果があり、それによりディス

クリート基板では実装面積を小さくし、FPGAの様なロジックデバイスでも、その消費電力を

押さえることが期待出来るので回路設計上においては必須の課程です。

現在は、論理合成時にソフトウェアで自動的に行われるのが当たり前になっていますが、その

手法を知っておくことは、回路の誤りを速やかに発見する上で大変重要なポイントとなります。

簡略化の例

前の加法標準形により導かれた論理式を、ブール代数を用いて簡略すると

X=m3+m5+m6+m7を正確に記述すると

X=(/A・B・C)+(A・/B・C)+(A・B・/C)+(A・B・C)

となります。(/は否定:NOT を表す)

X=((/A・B・C)+(A・B・C))

+((A・/B・C)+(A・B・C))

+((A・B・/C)+(A・B・C))

X=((/A・B・C)+(A・B・C))・・・B・C・(/A+A)=B・C

+((A・/B・C)+(A・B・C))・・・A・C・(/B+B)=A・C

+((A・B・/C)+(A・B・C))・・・A・B・(/C+C)=A・B

X=(B・C)+(A・C)+(A・B)

Page 22: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

18

ここで求まった簡略式を VerilogHDL の書式にならってで記述すると以下の様になります。

ファイル名:majority.v

この多数決の論理回路を1つのモジュールとして、モジュール名、入出力ポートを定義します。

module majority(IN_A, IN_B, IN_C, OUT_X);

input IN_A, IN_B, IN_C;

output OUT_X;

次に、かっこ内の論理積の信号を引き出す線として

wire AND_BC, AND_AC, AND_AB;

続いて、定義したワイヤーに論理回路を割り付けると

assign AND_BC = IN_B & IN_C;

assign AND_AC = IN_A & IN_C;

assign AND_AB = IN_A & IN_B;

この3つの論理積の出力を出力 X に論理和で接続します

assign OUT_X = AND_BC | AND_AC | AND_AB;

最後にモジュールの宣言を完結する記述

endmodule

を書いて終了です。

※HDLリストのコメントは、C言語と同じ/*~*/または//です。

ucfファイル

制約ファイルと呼ばれ、主にピンアサインの記述を行います。

ucfファイルの基本書式は以下のようになります。

NET “ポート名” LOC = “ピン番号”;

今回の多数決回路を例として記述すると以下のようになります。

ファイル名:majority.ucf

# INPUT PIN

NET "IN_A" LOC = "P35"; # SW1

NET "IN_B" LOC = "P34"; # SW2

NET "IN_C" LOC = "P33"; # SW3

# OUTPUT PIN

NET "OUT_X" LOC = "P54"; # LED1

※ucfリストのコメントは、#でそれ以降行末までがコメントになります。

Page 23: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

19

4.1.2 順序論理回路

順序論理回路は、その時の入力信号と出力の状態により次の出力が決まるデジタル回路です。

この回路では、現在の信号状態を記憶する機能が必要となります。

主な回路としては、フリップ・フロップ回路があり、その応用としてはカウンタ回路や、レジスタ回路

があります。

回路の設計手順としては

状態遷移図 → 状態遷移表 → 論理式 → 簡略式 → 論理回路

という手順で設計を進めていきます。

簡単な例として、電子サイコロを考えてみましょう。

電子サイコロ回路では、サイコロの目を一定時間間隔で1~6まで変化させていきます。

説明を簡単にするため、サイコロの目を1~6まで一定時間毎に順番に変化すると仮定します。

(本物のサイコロは、その目がランダムに出ますが、今回は順番に出る物と仮定します)

そこでまず、サイコロの目の変化を状態遷移図として記述します。

図4.1.2は、サイコロの目の移り変わりを図で示したものです。これを状態遷移図と言います。

図 4.1.2 状態遷移図

Page 24: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

20

サイコロの目の値は最大6で、この値を表すために3ビットが必要です。

これを D フリップ・フロップで実現するには3個のフリップ・フロップが必要で、各フリップ・フロ

ップの入出力をD2、D1、D0、Q2、Q1、Q0と割り振ると以下の状態遷移図が出来ます。

計数値| 現在の状態 | 次の状態 | 制御入力

i | Q2 Q1 Q0 | Q2 Q1 Q0 | D2 D1 D0

0 | 0 0 0 | 1 0 1 | 1 0 1

1 | 0 0 1 | 0 1 0 | 0 1 0

2 | 0 1 0 | 0 1 1 | 0 1 1

3 | 0 1 1 | 1 0 0 | 1 0 0

4 | 1 0 0 | 1 0 1 | 1 0 1

5 | 1 0 1 | 1 1 0 | 1 1 0

6 | 1 1 0 | 0 0 1 | 0 0 1

7 | 1 1 1 | 1 0 1 | 1 0 1

表 4.1.2 状態遷移表

表4.1.2は図4.1.2の状態遷移図を基に遷移状態を表にした状態遷移表です。次に、この状態

遷移表から論理式を導きいます。

論理式の導き方は組み合わせ論理回路の場合と同じ手法で行います。

真理値表との対応は以下の通りです。

真理値表 状態遷移表

入力 現在の状態

出力 制御入力(D フリップ・フロップの場合は次の状態と同じになる)

まず、真理値表の出力に相当する制御入力の「1」に着目(加法標準形)し、D2~D0までをそれぞ

D2 = m0+m3+m4+m5+m7

D1 = m1+m2+m5

D0 = m0+m2+m4+m6+m7

と導き出されます。

この時の論理式は、組み合わせ論理で行った加法標準系で、入力を現在の状態、出力を制御入力として

導きます。

これは、現在の状態から次の状態へ遷移させるためにDフリップ・フロップのD入力を現在の状態から

導くことになります。

例えば、現在サイコロが1であれば次は2にしたいので

D2には「0」

D1には「1」

D0には「0」

を与えることになり、ここではD1の論理式に現在の状態の最小項m1(001)が論理和として入力さ

れることになります。

Page 25: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

21

後は、組み合わせ論理式の時と同じくD2からD0の各論理式を簡略し回路を構成し、その結果をフ

リップ・フロップのD入力に与えれば良いのです。

今回はカルノー図を用いて簡略します。

簡略後の格式は

D2 = m0+m3+m4+m5+m7

D2 = ①+②+③

D2 = (/Q1・/Q0)

+ ( Q1・ Q0)

+ ( Q2・ Q0)

D1 = m1+m2+m5

D1 = ①+②

D1 = (/Q2・ Q1・/Q0)

+ (/Q1・ Q0)

D0 = m0+m2+m4+m6+m7

D0 = ①+②+③

D0 = (/Q1・/Q0)

+ (/Q2・/Q0)

+ ( Q1・ Q0)

となります。

Page 26: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

22

4.1.3 ISEによる設計

ここでは、4.1.1 で設計した多数決回路を実際にISEで作成します。

今回使用する ISE のバージョンは8.2iです。

図 4.1.3-1

初めてISEを起動すると図のような画面になります。

もし、以前に何か設計した実績があれば、以前の設計を継承した画面になります。

① 新規プロジェクトの作成

左上の File タブから NewProject を

選択

図 4.1.3-2

Page 27: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

23

・プロジェクト名 格納場所 ソースタイプの選択

New Oroject Wizard

Project Name:

新規に作成するプロジェクト名

[majority]と入力

Project Location:

作成するプロジェクトの格納場所

各自の環境に合わせて場所を指定

Top-Level Source Type:

最上位階層のソースタイプ

[HDL] デフォルト

図 4.1.3-3

・デバイスプロパティの選択

Family:

これから作成する FPGA の

ファミリーの選択

[Spartan3E]を選択

Device:

デバイス名の選択

[XC3S100E]を選択

Package:

パッケージの選択

[VQ100]を選択

その他はデフォルトのままです。

図 4.1.3-4

Page 28: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

24

・ソースファイルの作成

New Sorce…:

ボタンをクリック

図 4.1.3-5

・ソースタイプ選択 ソース名入力

Select Sorce Type:

Verilog Module を選択

File name:

Majority と入力

図 4.1.3-6

Page 29: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

25

・ポートリストの作成

Port Name:

ポート名

IN_A

IN_B

IN_C

OUT_X

を入力

Direction:

入出力方向の選択

IN_A,IN_B,IN_C:input

OUT_X:output

を選択

図 4.1.3-7

・ポートリストの作成

Finish:

クリック

図 4.1.3-8

Next:

クリック

図 4.1.3-9

Page 30: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

26

Next:

クリック

図 4.1.3-10

Finish:

クリック

図 4.1.3-11

OK:

クリック

図 4.1.3-12

Page 31: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

27

・最初のひな形が出来て新規プロジェクトになります

majority.v:

タブをクリック

図 4.1.3-13

moduke majority のソースの

ひな形

この中に 4.1.1 で求めた論理式

を基に、ソースコードを記述し

ていきます。

図 4.1.3-14

Page 32: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

28

・制約ファイルの作成

Processes ウィンドウの

User Constraints →

Edit Constraints(Text) →

Run をクリック

図 4.1.3-15

確認ウィンドウでYesをクリック

すると、ucf ファイルの画面にな

ります。

図 4.1.3-16

ここに、ピンアサイン情報

を記述します。

図 4.1.3-17

Page 33: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

29

・ ISE による論理合成→実装配置→FPGA データ

ISE では、VerilogHDL ソースコードから、以下の処理を逐次的に自動実行されます。

◇ 論理合成(回路生成)

◇ 実装配置

◇ 書き込みデータ生成

Synthesize –XST(XST (Xilinx® Synthesis Technology))

Synthesize Report

RTL Schematic

Technology Schematic]

Check Syntax

Genetate Post-Synthesis Simulation Model

Implement Design

Translate

Map

Place & Route

Generate Programming File

Programming File Generation Report

Generate PROM, ACE or JTAG File

Configure Device(iMPACT)

Processes ウィンドウの

Generate Programinng File を右クリックし

て Run

を選ぶと一連の作業が始まります。

確認画面で Yes をクリックします。

図 4.1.3-18

Page 34: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

30

・Xilinx Web Talk

Xilinx Web Talkは ISEユーザーが

どのような設計で ISEを使ってい

るかの情報を Xilinx 社に送り、製

品開発へフィードバックするもの

で情報を送りたくない時はウィン

ドウの閉じるボタンで閉じても処

理を続行できます。

図 4.1.3-19

一連の処理が完了すると、各処理の

ところにチェックマークがつきます。

この時、ワーニングが出てもファイ

ルは生成されますので問題ありませ

ん。

ワーニングは、ISE のバージョンア

ップにより解決される物などがあり

ます。

図 4.1.3-20

Page 35: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

31

・FPGA ボードと接続し回路データを書き込みます

FPGA へのデータ書き込みでは、JTAG と呼ばれる規格のケーブルで行われますが、今回使用する

AVES-XC3S100E ボードでは、その JTAG を USB 変換して接続しており、事前にドライバのインストー

ルと、変換ソフト(cblsrv)の起動を行う必要があります。

webサイトで入手可能なソフトがありますので、そちらを使用しています。

以下が cblsrv を起動した画面です。(コマンド:cblsrv.exe -c amontec -p 10001)

図 4.1.3-21

変換ソフトを起動後

Generate Programming File から

書き込みソフト iMPACTを起動しま

す。

図 4.1.3-22

Page 36: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

32

・ iMPACT の起動

iMPACT を起動すると左のウインドウ

が表示されますので、 Prepare a

PROM File を選択して Next をクリッ

クします。

図 4.1.3-23

PROM File Name に majority と入力

して Next をクリックします。

図 4.1.3-24

Select a PROM で xcf01s を選択して

Add ボタンをクリックて Next ボタン

をクリックします。

図 4.1.3-25

Page 37: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

33

最後にFinishボタンをクリックして確定します。

図 4.1.3-26

1回目は OK をクリックします。

図 4.1.3-27

生成された majority.bit ファイルを選択し開く

をクリックします。

図 4.1.3-28

Page 38: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

34

Add Deviceの確認でNoをクリックし

ます。

図 4.1.3-29

OK をクリックしファイル選択を終了

します。

図 4.1.3-30

図 4.1.3-31 図 4.1.3-32

iMPACT Processes メニューから Generate File をダブルクリックして PROM への書き込みデ

ータを生成します。

Bounday Scan をダブルクリックしま

す。

図 4.1.3-33

Page 39: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

35

OutputメニューからCable Setupを選択しま

す。

図 4.1.3-34

Communication Mode でParallelⅢを選択し、

Port で LPT1 を選択します。

続いてCable LocationでRemoteを選択して

Host Name に

Localhost:10001 を入力し最後に OK をクリ

ックします。

図 4.1.3-35

Intialize Chain をクリックし、接続デバイスを

スキャンします。

図 4.1.3-36

Page 40: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

36

PROM File Formatter で生成された

majority.mcfファイルを選択します。

図 4.1.3-37

次に、 FPGA 用回路データの

majority.bin を選択します。

図 4.1.3-38

ここでワーニングがでても、その

まま OK をクリックします。

図 4.1.3-39

これで書き込み準備が出来ました。

左の xcf01s_vo2 を選択し proguram

を実行すると PROM に書き込まれ

ます。

右側の xc3s100e を選択し program

を実行するとFPGAへ直接書き込ま

れます。

図 4.1.3-40

※bit ファイルで直接 FPGA に書き込まれた場合は、電源が OFF になるとデータも消

滅します。デバッグ時には FPGA へ書き込み動作チェックを行い確実に動作するよう

になったら PROM へ書き込みます。

Page 41: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

37

ここでは、直接 FPGA にデータを書き込ん

で見ましょう。

図 4.1.3-41

確認画面が表示されるので、そのまま OK ボ

タンをクリック。

図 4.1.3-42

Page 42: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

38

4.2 モジュールの階層化

VerilogHDL で記述されたモジュールは、その後もモジュールブロックとして再利用が可能です。

モジュールの再利用には、逐次的な接続によるものと、階層構造的なものがあり、逐次的な接続では、

各ポートを wire などのより接続します。また、階層構造として利用する場合は、同一のモジュール名で

複数の同じ回路を使用出来るため、以下の書式により定義します。

階層構造でのモジュールの使用

モジュール名 インスタンス名(ポートリスト);

例えば、自動車には4本のタイヤがあり、すべて同じ構造をしていますが、取り付けられる場所が異

なります。そのため、各タイヤには識別名が必要となります。

モジュール名:タイヤ インスタンス名:右前タイヤ

モジュール名:タイヤ インスタンス名:左前タイヤ

モジュール名:タイヤ インスタンス名:右後ろタイヤ

モジュール名:タイヤ インスタンス名:左後ろタイヤ

のような定義文です。

また、各ポートリストの接続では、記述順による接続方法と、記述名による接続方法があります。

・記述順による接続方法

従属モジュール(利用される側のモジュール定義)

module slv(a, b, c,x);

endmodule

上位モジュール(利用する側の記述)

module master(port_list);

wire w, x, y, z;

slv sub1(w, x, y, z);

endmodule

この場合は、ポートリストに記述した順にそれぞれ

上位側 従属側

a → w

b → x

c → y

x → z

に接続されます。

(従属側と同じポート名があっても名前ではなく、あくまで記述順で接続されます)

Page 43: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

39

・記述名による接続方法

従属モジュール(利用される側のモジュール定義)

module slv(a, b, c,x);

endmodule

上位モジュール(利用する側の記述)

module master(port_list);

wire w, x, y, z;

slv sub1(.a(w), .c(x), .x(y), .b(z));

endmodule

この場合は、ワイヤーリストとポートリストに記述した名前でそれぞれ

上位側 従属側

w → a

z → b

x → c

y → x

に接続されます。

(従属側ポートと同じ接続信号名があった場合でも、記述順では無くあくまで両モジュールで定義さ

れている名前で接続されます)

Page 44: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

40

5 超音波距離計の仕様

5.1 超音波距離計の原理

超音波距離計は、その名の通り超音波を発信する振動子と受信する振動子を用いてその時間的なずれ

を検出する事で距離を計測するものです。

人間のみみで聞こえる可聴波は20~20kHz ですが、超音波はおおむね40kHz の音波を用いま

す。この周波数の場合は人間の耳で聞く事は出来ません。

超音波の発信、受信に使用される振動子にバイモルフ振動子が使われます。

バイモルフ型振動子は、 端子接続方向に伸縮する圧電素子を接合し、一方が伸びると他方が縮むよう

に構成したもので撓み振動子となります。これは逆に撓みを与えると端子間には交流電界を出力するた

め、超音波センサーではこの二つの振動子の先にコーンを付け応用したものです。

本教材では、この振動子を応用した、パララックス社超音波距離センサーモジュールを FPGA 側から

の信号で制御し距離計測を行います。

5.1.1 センサーモジュールの仕様

このセンサーモジュールは、SIG、Vcc、GND の3端子で接続され、SIG にトリガ(計測開始パルス)

を印可すると一定時間後に計測された距離に応じたパルス幅の信号を同じ SIG に出力されます。

このパルス幅をを FPGA 内部ブロックで距離換算を行いその値をシリアルで出力しています。

トリガ:

データ出力開始:

距離データ信号: ~

図 5.1.1

Page 45: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

41

5.1.2 モジュール構成

①TOP module RangFinderForAVES(CLK, TX_SELECT, DATA_IN, RxD,

TRG_EN, DATA_EN, TRG, PLS_1mm, LED, COM, SEG7, TP_TRG, TxD);

図 5.1.2-1

入力ポート

CLK: 33.333MHz Mastar Clock

DATA_IN: Sensor Data

RxD: RS232C Data Receive Port

TX_SELECT: Input Transmit Data Mode Select

出力ポート

COM: Select 7segLED

LED: Monitor mm

SEG7: Display 7segment LED

DATA_EN: Data Enable

PLS_1mm: Monitor 1mm Pulse Clock

TP_TRG: Monitor Trigger

TRG: Trigger

TRG_EN: Trigger Enable

TxD: Send Data

Page 46: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

42

②U0 Gen_Com_Scan U0(CLK, ComScan);

図 5.1.2-2

入力ポート

CLK: 33.333MHz Mastar Clock

出力ポート

ComScanPLS: Select 7segLED Pulse

③U1 RS232C_CLKGEN U1( CLK, RST, TX_CK, RX_CK );

図 5.1.2-3

入力ポート

CLK: 33.333MHz Mastar Clock

RST:

出力ポート

RX_CK: Receive Clock

TX_CK: Transmit Clock

Page 47: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

43

④U2 Send_Data_Slect U2(Tx_Data_Cnt, MODE, hold_renge_dec, Send_Data);

図 5.1.2-4

入力ポート

Data_Select: Transmit Data Select

Renge_Data: Renge Count Data

SEL: Transmit Data Mode Select

出力ポート

Send_Data: Transmit Data

Page 48: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

44

⑤U3 RS232C_TX( TX_CK, RST, TX_EN, WR, PD_IN, SD_OUT ) ;

図 5.1.2-5

入力ポート

PD_IN: Parallel Data Input

RST: Reset

TX_CK: Transmit Clock

RX_CK: Receive Clock

WR: Transmit Data Write

出力ポート

SD_OUT: Serial Data Output

⑤U4 Gen_1mm_Pulse(CLK33M, pls_1mm);

図 5.1.2-6

入力ポート

CLK33M: 33.333MHz Mastar Clock

出力ポート

pls_1mm: 1mm Range Pulse

Page 49: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

45

⑤U5 Count_Renge(check_counter, RST, DATA_IN_EN, PLS_1mm, renge_dec, renge_bin);

図 5.1.2-7

入力ポート

check_counter: Check Count Number

DATA_IN_EN: Range Data Enable

PLS_1mm: 1mm Range Pulse

RST: Counter Reset

出力ポート

renge_bin: Range Count Binary

renge_bin: Range Count Decimal

⑤U6 Disp_Counter(SelCLK, Count_Data, Seg_Data, Sel);

図 5.1.2-8

入力ポート

Count_Data: Hold Renge Count Data

SelCLK: Counter Reset

出力ポート

Seg_Data: 7segment LED Display Data

Sel: Select 7segment LED

Page 50: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

46

////////// Module Session

// 7segLED common select PLS

Gen_Com_Scan U0(CLK, ComScan);

// RS232C 送受信クロック生成 38400bps

RS232C_CLKGEN U1( CLK, RST, TX_CK, RX_CK );

// Send_Data_Slect

Send_Data_Slect U2(Tx_Data_Cnt, MODE, hold_renge_dec, Send_Data);

// RS232C データ送信 data bit:8 stop bit:2 parity:none x-on/off:none

RS232C_TX U3( TX_CK, RST, TX_EN, TX_WR, Send_Data, TxD );

// Generating 1mm Pulse(33.333MHz -> 99.799KHz(173.609375KHz))

Gen_1mm_Pulse U4(CLK, PLS_1mm);

// Count_Renge

Count_Renge U5(master_counter, data_en_flg, DATA_IN, PLS_1mm, renge_dec, renge_bin);

// Didplay Renge Data

Disp_Counter U6(ComScan, {4'h0,hold_renge_dec[15:4]}, SEG7, ComSelect);

Page 51: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

47

5.1.3 センサーモジュールの信号処理手順

まず全体の処理手順を記述すると、以下の手順になります。

① 計測開始トリガイネーブル信号 ON

② 計測開始トリガ信号 ON

③ 計測開始トリガ信号 OFF

④ 計測開始トリガイネーブル信号 OFF

図 5.1.3-1 トリガ(上)とイネーブル信号(下)

⑤ 距離データイネーブル信号 ON

⑥ 距離データ信号入力

⑦ 距離データイネーブル信号 OFF

図 5.1.3-2 データ(上)とイネーブル信号(下:3本目)

図 5.1.3-3 時間軸を縮小 (上:トリガとデータ) (下:データイネーブル)

Page 52: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

48

⑧ 計測距離カウント値 ラッチ

⑨ 計測値シリアル出力

図 5.1.3-4 データ信号収束後(1本目)、シリアル転送(6バイト:4本目)

図 5.1.3-5 シリアルタイミング拡大図(最下線)

Page 53: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

49

5.1.4 トリガおよびイネーブル信号の生成

FPGAボードのマスタークロックは33.333MHzであり周期は0.03マイクロ秒です。

このクロックをベースにカウンタを構成し、5.1.2 の各タイミングを生成します。

計測トリガから、データ転送完了までを1ターンとし、これを40ミリ秒とします。

これをベースとして、このカウンタを構成すると全体周波数は25Hzの処理サイクルとなります。

最小パルス幅であるトリガを正確に扱うために、マイクロ秒単位でカウンタの信号処理を行うためマ

スタークロック信号を、そのままカウンタクロックとして使用しています。

以下は、各信号タイミングです。

経過時間(μ秒) カウント値 イベント

0・・・・・・・・・・0・・・・カウント・スタート

―――――センサー・コントロール・シーケンス

20・・・・・・・・666・・・・トリガイネーブル ON

35・・・・・・・1166・・・・トリガ ON

40・・・・・・・1333・・・・トリガ OFF

55・・・・・・・1833・・・・トリガイネーブル ON

―――――データ・カウント・シーケンス

540・・・・・・17999・・・・データイネーブル ON(データカウントON)

21000・・・・・699993・・・・データイネーブル OFF(データカウントOFF)

21150・・・・・704992・・・・データカウントラッチ

―――――データ・転送・シーケンス

(Reset Stop:3bit + Write:3bit + Dummy:3bit + TX_EN:13(S1/D8/ST2/DUMMY2))

24000・・・・・800000・・・・データ転送:1バイト目

24630・・・・・821000・・・・データ転送:2バイト目

25260・・・・・842000・・・・データ転送:3バイト目

25890・・・・・863000・・・・データ転送:4バイト目

26520・・・・・884000・・・・データ転送:5バイト目

27150・・・・・905000・・・・データ転送:6バイト目

―――――カウンタ・リセット・シーケンス

40000・・・・1333320・・・・カウンタリセット

Page 54: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

50

////////// Generating Triger & Enable Pulse

always @(posedge CLK)

begin

if(master_counter == 1333320) begin // 25Hz(40 msec)

master_counter <= 0;

trg_flg <= 0;

trg_en_flg <= 1;

data_en_flg <= 1;

Tx_Data_Cnt <= 6'b111110;

end

///////////////////////////

///// triger Sequence

else begin

/// triger enable

if(master_counter == 667) begin // 20 usec

trg_en_flg <= 0;

end

/// triger

if(master_counter == 1167) begin // 35 usec

trg_flg <= 1;

end

if(master_counter == 1333) begin // 40 usec(39.99usec)

trg_flg <= 0;

end

if(master_counter == 1834) begin // 55 usec

trg_en_flg <= 1;

end

///////////////////////////

///// Data Count Sequence

///// Data Count Start

if(master_counter == 18000) begin // 540 usec

data_en_flg <= 0;

end

///// Count Data Save

if(master_counter == 700000) begin // 21 msec

data_en_flg <= 1;

end

///// Data Count Stop

if(master_counter == 705000) begin // 21.15 msec

hold_renge_dec <= renge_dec;

end

Page 55: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

51

///////////////////////////

///// RS232C Sequence Data 1 - 24.0002 msec /////

if(master_counter == data1_start) begin // Sequence

Start

///// transmit reset Stop

TX_RST = 0;

// Reset transmit module

///// Data Select Tx Data Type [B] or [D]

Tx_Data_Cnt <= 6'b111110;

end

///// transmit data set

if(master_counter == (data1_start + bit3)) begin //

130usec

TX_WR <= 1;

end

if(master_counter == (data1_start + bit6)) begin //

260usec

TX_WR <= 0;

end

if(master_counter == (data1_start + bit9)) begin //

312usec

TX_EN <= 1;

end

if(master_counter == (data1_start + bit24)) begin //

312usec

///// transmit reset

TX_RST = 1;

// Reset transmit module

TX_EN <= 0;

end

Page 56: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

52

///// RS232C Sequence Data 2 - 24.6302 msec /////

///// transmit reset

if(master_counter == data2_start) begin // Sequence

Start

///// transmit reset Stop

TX_RST = 0;

// Reset transmit module

///// Data Select Tx Data Bit15-12

Tx_Data_Cnt <= 6'b111101;

end

///// transmit data set

if(master_counter == (data2_start + bit3)) begin //

130usec

TX_WR <= 1;

end

if(master_counter == (data2_start + bit6)) begin //

260usec

TX_WR <= 0;

end

if(master_counter == (data2_start + bit9)) begin //

312usec

TX_EN <= 1;

end

if(master_counter == (data2_start + bit24)) begin //

312usec

///// transmit reset

TX_RST = 1;

// Reset transmit module

TX_EN <= 0;

end

Page 57: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

53

///// RS232C Sequence Data 3 - 25.2603 msec /////

///// transmit reset

if(master_counter == data3_start) begin // Sequence

Start

///// transmit reset Stop

TX_RST = 0;

// Reset transmit module

///// Data Select Tx Data Bit11-8

Tx_Data_Cnt <= 6'b111011;

end

///// transmit data set

if(master_counter == (data3_start + bit3)) begin //

130usec

TX_WR <= 1;

end

if(master_counter == (data3_start + bit6)) begin //

260usec

TX_WR <= 0;

end

if(master_counter == (data3_start + bit9)) begin //

312usec

TX_EN <= 1;

end

if(master_counter == (data3_start + bit24)) begin //

312usec

TX_RST = 1;

// Reset transmit module

TX_EN <= 0;

end

Page 58: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

54

///// RS232C Sequence Data 4 - 25.8903 msec /////

///// transmit reset

if(master_counter == data4_start) begin // Sequence

Start

///// transmit reset Stop

TX_RST = 0;

// Reset transmit module

///// Data Select Tx Data Bit7-4

Tx_Data_Cnt <= 6'b110111;

end

///// transmit data set

if(master_counter == (data4_start + bit3)) begin //

130usec

TX_WR <= 1;

end

if(master_counter == (data4_start + bit6)) begin //

260usec

TX_WR <= 0;

end

if(master_counter == (data4_start + bit9)) begin //

312usec

TX_EN <= 1;

end

if(master_counter == (data4_start + bit24)) begin //

312usec

TX_RST = 1;

// Reset transmit module

TX_EN <= 0;

end

Page 59: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

55

///// RS232C Sequence Data 5 - 26.5203 msec /////

///// transmit reset

if(master_counter == data5_start) begin // Sequence

Start

///// transmit reset Stop

TX_RST = 0;

// Reset transmit module

///// Data Select Tx Data Bit3-0

Tx_Data_Cnt <= 6'b101111;

end

///// transmit data set

if(master_counter == (data5_start + bit3)) begin //

130usec

TX_WR <= 1;

end

if(master_counter == (data5_start + bit6)) begin //

260usec

TX_WR <= 0;

end

if(master_counter == (data5_start + bit9)) begin //

312usec

TX_EN <= 1;

end

if(master_counter == (data5_start + bit24)) begin //

312usec

TX_RST = 1;

// Reset transmit module

TX_EN <= 0;

end

Page 60: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

56

///// RS232C Sequence Data 6 - 27.1503 msec/////

///// transmit reset

if(master_counter == data6_start) begin // Sequence

Start

///// transmit reset Stop

TX_RST = 0;

// Reset transmit module

///// Data Select Tx Data End Mark [E]

Tx_Data_Cnt <= 6'b011111;

end

///// transmit data set

if(master_counter == (data6_start + bit3)) begin //

130usec

TX_WR <= 1;

end

if(master_counter == (data6_start + bit6)) begin //

260usec

TX_WR <= 0;

end

if(master_counter == (data6_start + bit9)) begin //

312usec

TX_EN <= 1;

end

if(master_counter == (data6_start + bit24)) begin //

312usec

TX_RST = 1;

// Reset transmit module

TX_EN <= 0;

end

///// RS232C Sequence end /////

///////////////////////////////

master_counter <= master_counter + 1;

end

end

Page 61: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

57

6 シリアルインターフェースモジュール

6.1 モジュール概要

シリアルモジュールは、パラレルデータ(PD_IN)、モジュールリセット(RST)、転送クロック(TX_CK)、

転送イネーブル(TX_EN)、出力データセット(WR)を入力ポート、シリアルデータ(SD_OUT)を出力

ポートとしています。

図 6.1-1

通常 UART デバイス等では、転送クロックの16倍や、64倍のクロックを必要としますが、これは調歩

同期に於いて、わずかな転送レートの誤差があっても、ボーレートの安定をはかるためです。

今回は、送信モジュールのみで、誤差を修正するのは受信側に依存する為ボーレートと同じ等倍のクロッ

クを使用します。

今回は、クロックジェネレータで作り出された38400Hz を使用します。

実際にボーレートは受信側の環境や計測周期と転送データ量で決まります。

以下は、送信クロックジェネレータのモジュールです。

Page 62: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

58

/*** */

/** RS232C_CLKGEN **/

/* ***/

module RS232C_CLKGEN( CK, RST, TX_CK, RX_CK );

input CK;

input RST;

output TX_CK;

output RX_CK;

// ボーレート用クロック生成カウント値

parameter bps110 = 303027;

parameter bps150 = 222220;

parameter bps300 = 111110;

parameter bps1200 = 27777;

parameter bps2400 = 13888;

parameter bps4800 = 6944;

parameter bps9600 = 3472;

parameter bps19200 = 1736;

//parameter bps38400 = 868;

parameter bps38400 = 434;

parameter bps = bps38400;

reg [19:0] TX_CNT;

reg [19:0] RX_CNT;

reg RX_FLG;

reg TX_FLG;

always @( posedge CK )

begin

if( RST ) begin

RX_CNT <= 0;

RX_FLG <= 0;

TX_CNT <= 0;

TX_FLG <= 0;

end

else begin

if( RX_CNT == ( bps / 16 ) ) begin // TX_CNT -> 1/16

RX_CNT <= 0;

RX_FLG <= 1;

end

else begin

RX_CNT <= RX_CNT + 1;

RX_FLG <= 0;

end

if( TX_CNT == bps ) begin// 38400bps

TX_CNT <= 0;

// TX_FLG <= 1;

TX_FLG <= TX_FLG ^ 1;

end

Page 63: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

59

else begin

TX_CNT <= TX_CNT + 1;

// TX_FLG <= 0;

end

end

end

assign RX_CK = RX_FLG;

assign TX_CK = TX_FLG;

endmodule

モジュールリセットは、転送モジュールのビットカウンタのリセット、送信データのラッチフラグのリセ

ットを行い、送信データ計測中はリッセトの状態のままとし、計測終了後、送信データが決定した後リセッ

トを解除します。

この時、最低のリセット時間を5ビット幅として確実にリセットが行えるようにしてあります。

リセットが解除されると、内部バッファに送信データがラッチされ、送信イネーブルを待ちます。

リセット解除後送信イネーブルが入る時間も5ビット幅を確保しデータのラッチを確実に行う様に設定し

ます。

この後、送信クロックのエッジをとりがとして、最初のクロックでスタートビット(0)の送出からビッ

ト数をカウントしながらストップビットまでを順次送出します。

図 6.1-2 送信波形

Page 64: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

60

はじめの1バイト目の波形を拡大すると、

図 6.1-3 1バイトの波形

0:スタートビット

0:bit0(LSB)

0:bit1

1:bit2

0:bit3

0:bit4

0:bit5

1:bit6

0:bit7(MSB)

1:ストップビット1

1:ストップビット2

となり、

データビットをMSBからLSBに並び替えると

0100・0100 0x44(JISコード)・・・D

即ち、英大文字の「D」で、これは送信される計測距離データが10進数であることを示しています。

Page 65: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

61

/*** */

/** RS232C_TX **/

/* d8 pn s1 xoff ***/

module RS232C_TX( TX_CK, RST, TX_EN, WR, PD_IN, SD_OUT ) ;

input TX_CK;

input RST;

input TX_EN;

input WR;

input [7:0] PD_IN; // パラレルデータ入力

output SD_OUT; // シリアルデータ出力

reg SD_OUT;

reg LOAD;

reg [7:0] SERIAL;

reg [3:0] CBIT;

always @( posedge TX_CK ) begin

if( RST ) begin

SD_OUT <= 1'b1;

CBIT <= 4'h0;

LOAD <= 1'b0;

end

else begin

if( WR ) begin

LOAD <= 1'b1;

SERIAL <= PD_IN;

end

else begin

if( TX_EN && LOAD ) begin

case( CBIT )

// スタートビットの送出(0)

0 :

begin

SD_OUT <= 1'b0;

CBIT <= CBIT + 4'h1;

end

Page 66: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

62

// データビットの送出

1,2,3,4,5,6,7,8 :

begin

SD_OUT <= SERIAL[0];

SERIAL <= { 1'b1, SERIAL[7:1]};

CBIT <= CBIT + 4'h1;

end

// ストップビットの送出(1bit目)

9 :

begin

SD_OUT <= 1'b1;

CBIT <= CBIT + 4'h1;

// LOAD <= 1'b0;

end

// ストップビットが 1 ビットの場合以下をコメント

///////////////////////////////////////////

// // ストップビットの送出(2bit目)

10 :

begin

SD_OUT <= 1'b1;

CBIT <= 4'h0;

LOAD <= 1'b0;

end

///////////////////////////////////////////

default :

begin

SD_OUT <= 1'b1;

CBIT <= 4'h0;

end

endcase

end // if (TX_EN && LOAD)

end //end else (WR)

end // end else (RST)

end // end always

endmodule

Page 67: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

63

7 おわりに

ハードウェアとソフトウェア

本ハードウェア編では FPGA の開発手法として、VerilogHDL にる記述をご紹介しマイコンとの連携

の解説はソフトウェア編でおこないます。

実際のシステムに於いては、当初より処理速度・開発/実装コストによってハードウェアとソフトウ

ェアのトレードオフが行われてきました。これまではコスト面や開発環境面でマイコンによる機能実現

が最も効率の良いシステムでした。しかし、近年デジタルデバイスの飛躍的な技術革新により、ハード

ウェアによる機能実現が可能になってきました。

ハードウェアによる機能実現では、何よりも処理速度および並列処理が可能である事が挙げられます。

これは、マイコンによるソフトウェアの命令デコード処理を無くし、更に、リアルタイムに並列信号

処理が可能であると言うことです。では、全てがこの様なハードウェアに置き換えれば良いのでしょう

か?

答えは“NO”です。確かに「処理速度」・「並列処理」等ではハードウェアによる実装が高いパフォ

ーマンスを実現できます。しかし、実数演算などを行う場合、ハードウェアではかなり複雑な回路を必

要とし、コストパフォーマンスに於いてマイコンによるソフトウェアには及びません。そこでマイコン

との連携システムにより、より高機能で、高精度なシステムを実現できるのです。

とかく、システムを構築する場合に得意な分野に偏りがちになります。これは、ある意味当然の事だ

と思います。不得意な分野と組み合わせて時間をかけるより、得意な分野で進めれば無駄な時間をかけ

ずにシステムの設計が出来ます。でも・・・もし、システムにとってそれが最適な構成?と考えた場合、

ソフトウェアとハードウェアによる連携システムが最善の構成となる事が良くあるのではないでしょ

うか。

近年の技術革新により、今までよりも多くの場面でハードウェアが利用可能な環境が整ってきました。

特に、FPGA によるシステムは、今までソフトウェアの開発を行ってきた方々でも、HDL による設計で

比較的容易に利用できます。文法的にソフトウェア言語と共通点が多いので比較的容易に理解できると

思います。

強いて言えば、ソフトウェア言語との大きな違いは、処理が記述順ではなく全てが同時実行されると

いう超リアルタイム処理と言うことです。この感覚はいくつかの経験を積んで行く事が理解の為の早道

です。

Page 68: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

64

8 Appendix

超音波距離計のための VerilogHDL ソースリスト

8.1 RangFinderForAVES.v (TOP Module)

//////////////////////////////////////////////////////////////////////////////////

module RangFinderForAVES(

CLK, TX_SELECT, DATA_IN, TRG_EN,

DATA_EN, TRG, PLS_1mm,

LED, COM, SEG7, TP_TRG,

RxD, TxD);

input CLK; // Input Master clock

input TX_SELECT; // Input Transmit Data Select

input DATA_IN; // Input Ultrasonic sensor

input RxD; // RS232C 受信データ

output TRG_EN; // Sensing trigger enable

output DATA_EN; // Data enable

output TRG; // Trigger

output PLS_1mm;

output [8:1]LED; // Monitor mm

output [4:1]COM; // Select 7segLED

output [8:1]SEG7; // Display

output TP_TRG; // トリガ・モニター

output TxD; // RS232C 送信データ

parameter data1_start = 800000; // 24.0002 msec

parameter data2_start = 821000; // 24.6302 msec

parameter data3_start = 842000; // 25.2603 msec

parameter data4_start = 863000; // 25.8903 msec

parameter data5_start = 884000; // 26.5203 msec

parameter data6_start = 905000; // 27.1503 msec

parameter bit3 = 2604; // 78.12 usec --- Tx Reset

parameter bit6 = 5208; // 156.24 usec --- Tx Data Write

parameter bit9 = 7812; // 234.36 usec --- Hold

parameter bit24 = 20832; // 624.97 usec --- Tx Start

reg [20:0]master_counter = 0; // Internal master counter initialize

reg trg_en_flg = 1; // Sensing trigger enable flag

Page 69: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

65

reg trg_flg = 0; // Sensing trigger flag

reg data_en_flg = 1; // Range data enable flag

reg [7:0]count_1mm = 0; // 1mm counter initialize

reg count_1mm_flg = 0; // 1mm counter flag

reg TX_WR = 0; // Enable transmit flag

reg TX_EN = 0; // Enable transmit flag

reg TX_RST = 1; // Reset transmit module

reg MODE = 1;

reg [5:0]Tx_Data_Cnt = 6'b111110; // Tx Data Select Pulse

reg [15:0]hold_renge_dec = 0; // Tx & Display Hold Data(Dec)

wire [15:0]renge_dec; // Count Renge Data (Dec)

wire [15:0]renge_bin; // Count Renge Data (Bin)

wire [15:0]hold_renge_sel;

wire Count_Data_Enable;

wire ComScan;

wire [6:1]ComSelect;

wire [7:0]Send_Data;

wire TX_CK;

wire RX_CK;

////////// Assign I/O Pulse

assign TRG_EN = trg_en_flg;

assign TRG = trg_flg;

assign DATA_EN = data_en_flg;

assign TP_TRG = trg_en_flg & trg_flg;

assign LED[4:1] = ~hold_renge_dec[3:0];

assign LED[8:5] = {MODE, TX_SELECT, 2'b11};

assign COM = ComSelect[4:1];

////////// Generating Transmit Sel Flg

always @(posedge TX_SELECT)

begin

MODE <= MODE ^ 1;

end

////////// Module Session

// 7segLED common select PLS

Gen_Com_Scan U0(CLK, ComScan);

// RS232C 送受信クロック生成 38400bps

RS232C_CLKGEN U1( CLK, RST, TX_CK, RX_CK );

Page 70: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

66

// Send_Data_Slect

Send_Data_Slect U2(Tx_Data_Cnt, MODE, hold_renge_dec, Send_Data);

// RS232C データ送信 data bit:8 stop bit:2 parity:none x-on/off:none

RS232C_TX U3( TX_CK, RST, TX_EN, TX_WR, Send_Data, TxD );

// Generating 1mm Pulse(33.333MHz -> 99.799KHz(173.609375KHz))

Gen_1mm_Pulse U4(CLK, PLS_1mm);

// Count_Renge

Count_Renge U5(master_counter, data_en_flg, DATA_IN, PLS_1mm, renge_dec, renge_bin);

// Didplay Renge Data

Disp_Counter U6(ComScan, {4'h0,hold_renge_dec[15:4]}, SEG7, ComSelect);

////////// Generating Triger & Enable Pulse

always @(posedge CLK)

begin

if(master_counter == 1333320) begin // 25Hz(40 msec)

master_counter <= 0;

trg_flg <= 0;

trg_en_flg <= 1;

data_en_flg <= 1;

Tx_Data_Cnt <= 6'b111110;

end

///////////////////////////

///// triger Sequence

else begin

/// triger enable

if(master_counter == 667) begin // 20 usec

trg_en_flg <= 0;

end

/// triger

if(master_counter == 1167) begin // 35 usec

trg_flg <= 1;

end

if(master_counter == 1333) begin // 40 usec(39.99usec)

trg_flg <= 0;

end

if(master_counter == 1834) begin // 55 usec

trg_en_flg <= 1;

end

///////////////////////////

///// Data Count Sequence

///// Data Count Start

if(master_counter == 18000) begin // 540 usec

data_en_flg <= 0;

end

Page 71: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

67

///// Count Data Save

if(master_counter == 700000) begin // 21 msec

hold_renge_dec <= renge_dec;

end

///// Data Count Stop

if(master_counter == 705000) begin // 21.15 msec

data_en_flg <= 1;

end

///////////////////////////

///// RS232C Sequence Data 1 - 24.0002 msec /////

if(master_counter == data1_start) begin // Sequence Start

///// transmit reset Stop

TX_RST = 0; // Reset transmit module

///// Data Select Tx Data Type [B] or [D]

Tx_Data_Cnt <= 6'b111110;

end

///// transmit data set

if(master_counter == (data1_start + bit3)) begin // 130usec

TX_WR <= 1;

end

if(master_counter == (data1_start + bit6)) begin // 260usec

TX_WR <= 0;

end

if(master_counter == (data1_start + bit9)) begin // 312usec

TX_EN <= 1;

end

if(master_counter == (data1_start + bit24)) begin // 312usec

///// transmit reset

TX_RST = 1; // Reset transmit module

TX_EN <= 0;

end

///// RS232C Sequence Data 2 - 24.6302 msec /////

///// transmit reset

if(master_counter == data2_start) begin // Sequence Start

///// transmit reset Stop

TX_RST = 0; // Reset transmit module

///// Data Select Tx Data Bit15-12

Tx_Data_Cnt <= 6'b111101;

end

///// transmit data set

if(master_counter == (data2_start + bit3)) begin // 130usec

TX_WR <= 1;

end

if(master_counter == (data2_start + bit6)) begin // 260usec

TX_WR <= 0;

end

if(master_counter == (data2_start + bit9)) begin // 312usec

Page 72: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

68

TX_EN <= 1;

end

if(master_counter == (data2_start + bit24)) begin // 312usec

///// transmit reset

TX_RST = 1; // Reset transmit module

TX_EN <= 0;

end

///// RS232C Sequence Data 3 - 25.2603 msec /////

///// transmit reset

if(master_counter == data3_start) begin // Sequence Start

///// transmit reset Stop

TX_RST = 0; // Reset transmit module

///// Data Select Tx Data Bit11-8

Tx_Data_Cnt <= 6'b111011;

end

///// transmit data set

if(master_counter == (data3_start + bit3)) begin // 130usec

TX_WR <= 1;

end

if(master_counter == (data3_start + bit6)) begin // 260usec

TX_WR <= 0;

end

if(master_counter == (data3_start + bit9)) begin // 312usec

TX_EN <= 1;

end

if(master_counter == (data3_start + bit24)) begin // 312usec

TX_RST = 1; // Reset transmit module

TX_EN <= 0;

end

///// RS232C Sequence Data 4 - 25.8903 msec /////

///// transmit reset

if(master_counter == data4_start) begin // Sequence Start

///// transmit reset Stop

TX_RST = 0; // Reset transmit module

///// Data Select Tx Data Bit7-4

Tx_Data_Cnt <= 6'b110111;

end

///// transmit data set

if(master_counter == (data4_start + bit3)) begin // 130usec

TX_WR <= 1;

end

if(master_counter == (data4_start + bit6)) begin // 260usec

TX_WR <= 0;

end

if(master_counter == (data4_start + bit9)) begin // 312usec

TX_EN <= 1;

end

if(master_counter == (data4_start + bit24)) begin // 312usec

Page 73: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

69

TX_RST = 1; // Reset transmit module

TX_EN <= 0;

end

///// RS232C Sequence Data 5 - 26.5203 msec /////

///// transmit reset

if(master_counter == data5_start) begin // Sequence Start

///// transmit reset Stop

TX_RST = 0; // Reset transmit module

///// Data Select Tx Data Bit3-0

Tx_Data_Cnt <= 6'b101111;

end

///// transmit data set

if(master_counter == (data5_start + bit3)) begin // 130usec

TX_WR <= 1;

end

if(master_counter == (data5_start + bit6)) begin // 260usec

TX_WR <= 0;

end

if(master_counter == (data5_start + bit9)) begin // 312usec

TX_EN <= 1;

end

if(master_counter == (data5_start + bit24)) begin // 312usec

TX_RST = 1; // Reset transmit module

TX_EN <= 0;

end

///// RS232C Sequence Data 6 - 27.1503 msec/////

///// transmit reset

if(master_counter == data6_start) begin // Sequence Start

///// transmit reset Stop

TX_RST = 0; // Reset transmit module

///// Data Select Tx Data End Mark [E]

Tx_Data_Cnt <= 6'b011111;

end

///// transmit data set

if(master_counter == (data6_start + bit3)) begin // 130usec

TX_WR <= 1;

end

if(master_counter == (data6_start + bit6)) begin // 260usec

TX_WR <= 0;

end

if(master_counter == (data6_start + bit9)) begin // 312usec

TX_EN <= 1;

end

if(master_counter == (data6_start + bit24)) begin // 312usec

TX_RST = 1; // Reset transmit module

TX_EN <= 0;

end

Page 74: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

70

///// RS232C Sequence end /////

///////////////////////////////

master_counter <= master_counter + 1;

end

end

endmodule

Page 75: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

71

8.2 Gen_Com_Scan.v(U0 Module)

//////////////////////////////////////////////////////////////////////////////////

Module Gen_Com_Scan(CLK, ComScanPLS);

input CLK;

output ComScanPLS;

reg [19:0]counter = 0;

reg ComSan_flg = 0;

assign ComScanPLS = ComSan_flg;

always @(posedge CLK) begin

// if(counter == 16666) begin

if(counter == 90000) begin

counter <= 20'h00000;

ComSan_flg <= ComSan_flg ^ 1'b1;

end

else begin

counter <= counter + 1;

end

end

endmodule

Page 76: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

72

8.3 Gen_Clk_R232C.v(U1 Module)

//////////////////////////////////////////////////////////////////////////////////

/*** */

/** RS232C_CLKGEN **/

/* ***/

module RS232C_CLKGEN( CK, RST, TX_CK, RX_CK );

input CK;

input RST;

output TX_CK;

output RX_CK;

// ボーレート用クロック生成カウント値

parameter bps110 = 303027;

parameter bps150 = 222220;

parameter bps300 = 111110;

parameter bps1200 = 27777;

parameter bps2400 = 13888;

parameter bps4800 = 6944;

parameter bps9600 = 3472;

parameter bps19200 = 1736;

//parameter bps38400 = 868;

parameter bps38400 = 434;

parameter bps = bps38400;

reg [19:0] TX_CNT;

reg [19:0] RX_CNT;

reg RX_FLG;

reg TX_FLG;

always @( posedge CK )

begin

if( RST ) begin

RX_CNT <= 0;

RX_FLG <= 0;

TX_CNT <= 0;

TX_FLG <= 0;

end

else begin

if( RX_CNT == ( bps / 16 ) ) begin // TX_CNT -> 1/16

RX_CNT <= 0;

RX_FLG <= 1;

end

else begin

RX_CNT <= RX_CNT + 1;

RX_FLG <= 0;

end

if( TX_CNT == bps ) begin// 38400bps

TX_CNT <= 0;

Page 77: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

73

// TX_FLG <= 1;

TX_FLG <= TX_FLG ^ 1;

end

else begin

TX_CNT <= TX_CNT + 1;

// TX_FLG <= 0;

end

end

end

assign RX_CK = RX_FLG;

assign TX_CK = TX_FLG;

endmodule

Page 78: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

74

8.4 Send_Data_Slect.v(U2 Module)

//////////////////////////////////////////////////////////////////////////////////

module Send_Data_Slect(Data_Select, SEL, Renge_Data, Send_Data);

input [5:0]Data_Select;

input SEL;

input [15:0]Renge_Data;

output [7:0]Send_Data;

assign Send_Data = Tx_data(SEL);

// RS232 port transmit data select Bin

function [7:0]Tx_data ;

input select ;

case (select)

1'b0: Tx_data = Tx_bin(Data_Select) ; // Binary Data

1'b1: Tx_data = Tx_dec(Data_Select) ; // Decimal Data

endcase

endfunction

// RS232 port transmit data select Bin

function [7:0]Tx_bin ;

input [5:0]in_data ;

case (in_data)

6'b111110: Tx_bin = 8'h42 ; // B

6'b111101: Tx_bin = {4'b0000,Renge_Data[15:12]} ; //

6'b111011: Tx_bin = {4'b0000,Renge_Data[11:8]} ; //

6'b110111: Tx_bin = {4'b0000,Renge_Data[7:4]} ; //

6'b101111: Tx_bin = {4'b0000,Renge_Data[3:0]} ; //

6'b011111: Tx_bin = 8'h45 ; // E

endcase

endfunction

// RS232 port transmit data select Dec

function [7:0]Tx_dec ;

input [5:0]in_data ;

case (in_data)

6'b111110: Tx_dec = 8'h44 ; // D

6'b111101: Tx_dec = {4'b0011,Renge_Data[15:12]} ; // 1000mm

6'b111011: Tx_dec = {4'b0011,Renge_Data[11:8]} ; // 10mm

6'b110111: Tx_dec = {4'b0011,Renge_Data[7:4]} ; // 10mm

6'b101111: Tx_dec = {4'b0011,Renge_Data[3:0]} ; // 1mm

6'b011111: Tx_dec = 8'h45 ; // E

endcase

endfunction

endmodule

Page 79: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

75

8.5 RS232C_TX.v(U3 Module)

//////////////////////////////////////////////////////////////////////////////////

/*** */

/** RS232C_TX **/

/* d8 pn s1 xoff ***/

module RS232C_TX( TX_CK, RST, TX_EN, WR, PD_IN, SD_OUT ) ;

input TX_CK;

input RST;

input TX_EN;

input WR;

input [7:0] PD_IN; // パラレルデータ入力

output SD_OUT; // シリアルデータ出力

reg SD_OUT;

reg LOAD;

reg [7:0] SERIAL;

reg [3:0] CBIT;

always @( posedge TX_CK ) begin

if( RST ) begin

SD_OUT <= 1'b1;

CBIT <= 4'h0;

LOAD <= 1'b0;

end

else begin

if( WR ) begin

LOAD <= 1'b1;

SERIAL <= PD_IN;

end

else begin

if( TX_EN && LOAD ) begin

case( CBIT )

// スタートビットの送出(0)

0 :

begin

SD_OUT <= 1'b0;

CBIT <= CBIT + 4'h1;

end

// データビットの送出

1,2,3,4,5,6,7,8 :

begin

SD_OUT <= SERIAL[0];

SERIAL <= { 1'b1, SERIAL[7:1]};

CBIT <= CBIT + 4'h1;

end

// ストップビットの送出(1bit目)

9 :

Page 80: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

76

begin

SD_OUT <= 1'b1;

CBIT <= CBIT + 4'h1;

// LOAD <= 1'b0;

end

// ストップビットが 1 ビットの場合以下をコメント

///////////////////////////////////////////

// // ストップビットの送出(2bit目)

10 :

begin

SD_OUT <= 1'b1;

CBIT <= 4'h0;

LOAD <= 1'b0;

end

///////////////////////////////////////////

default :

begin

SD_OUT <= 1'b1;

CBIT <= 4'h0;

end

endcase

end // if (TX_EN && LOAD)

end //end else (WR)

end // end else (RST)

end // end always

endmodule

Page 81: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

77

8.6 Gen_1mm_Pulse.v(U4 Module)

//////////////////////////////////////////////////////////////////////////////////

module Gen_1mm_Pulse(CLK33M, pls_1mm);

input CLK33M;

output pls_1mm;

reg [7:0]count_1mm = 0;

reg count_1mm_flg = 0;

assign pls_1mm = count_1mm_flg;

////////// Generating 1mm Pulse(33.333MHz -> 99.799KHz(173.609375KHz))

// 1ミリメール パルスジェネレータ

always @(posedge CLK33M)

begin

if(count_1mm == 93) begin // 2.78 usec -> 5.57 usec / 1mm

count_1mm_flg = count_1mm_flg ^ 1;

count_1mm <= 0;

end

else begin

count_1mm <= count_1mm + 1;

end

end

endmodule

Page 82: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

78

8.7 Count_Renge.v(U5 Module)

//////////////////////////////////////////////////////////////////////////////////

module Count_Renge(check_counter, RST, DATA_IN_EN, PLS_1mm, renge_dec, renge_bin);

input [20:0]check_counter;

input RST;

input DATA_IN_EN;

input PLS_1mm;

output [15:0]renge_dec;

output [15:0]renge_bin;

reg [15:0]data_count_Bin = 16'h0000; // Range data counter(binary)

reg [15:0]data_count_Dec = 16'h0000; // Range data counter(decimal)

assign renge_dec = data_count_Dec;

assign renge_bin = data_count_Bin;

////////// Count_Renge 超音波距離計計測パルスカウンタ

always @(posedge PLS_1mm)

begin

// Count Enable //

if(check_counter > 8000) begin

// Count Start //

if(DATA_IN_EN == 1'b1) begin

data_count_Bin <= data_count_Bin + 1;

// column-1 //

if(data_count_Dec[3:0] == 4'h9) begin

data_count_Dec[3:0] <= 4'h0;

data_count_Dec[7:4] <= data_count_Dec[7:4] + 4'h1;

// column-2 //

if(data_count_Dec[7:4] == 4'h9) begin

data_count_Dec[7:4] <= 4'h0;

data_count_Dec[11:8] <= data_count_Dec[11:8] +

4'h1;

// column-3 //

if(data_count_Dec[11:8] == 4'h9) begin

data_count_Dec[11:8] <= 4'h0;

data_count_Dec[15:12] <=

data_count_Dec[15:12] + 4'h1;

// column-4 //

if(data_count_Dec[15:12] == 4'h9) begin

data_count_Dec[15:12] <= 4'h0;

end

else begin

data_count_Dec[15:12] <=

Page 83: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

79

data_count_Dec[15:12] + 4'h1;

end

//4-4-4-4-4//

end

else begin

data_count_Dec[11:8] <=

data_count_Dec[11:8] + 4'h1;

end

//3-3-3-3-3//

end

else begin

data_count_Dec[7:4] <= data_count_Dec[7:4] +

4'h1;

end

//2-2-2-2-2//

end

else begin

data_count_Dec[3:0] <= data_count_Dec[3:0] + 4'h1;

end

//1-1-1-1-1//

end

end

// count disable //

if(RST == 1) begin

data_count_Bin <= 0;

data_count_Dec <= 16'h0000;

end

end

endmodule

Page 84: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

80

8.8 Disp_Counter.v(U6 Module)

//////////////////////////////////////////////////////////////////////////////////

module Disp_Counter(SelCLK, Count_Data, Seg_Data, Sel);

input SelCLK;

input [15:0]Count_Data;

output [8:1]Seg_Data;

output [4:1]Sel;

reg [4:1]com_select = 4'b1110;

function [3:0]col ;

input [3:0]sel_data ;

case (sel_data)

4'b1110: col = Count_Data[3:0] ;

4'b1101: col = Count_Data[7:4] ;

4'b1011: col = Count_Data[11:8] ;

4'b0111: col = Count_Data[15:12] ;

endcase

endfunction

function [7:0]dec ;

input [3:0]in_data ;

case (in_data)

4'b0000: dec = 8'b00111111 ; // 0

4'b0001: dec = 8'b00000110 ; // 1.

4'b0010: dec = 8'b01011011 ; // 2

4'b0011: dec = 8'b01001111 ; // 3.

4'b0100: dec = 8'b01100110 ; // 4

4'b0101: dec = 8'b01101101 ; // 5.

4'b0110: dec = 8'b01111101 ; // 6

4'b0111: dec = 8'b00100111 ; // 7.

4'b1000: dec = 8'b01111111 ; // 8

4'b1001: dec = 8'b01100111 ; // 9.

4'b1010: dec = 8'b01110111 ; // A.

4'b1011: dec = 8'b01111100 ; // b.

4'b1100: dec = 8'b00111001 ; // C.

4'b1101: dec = 8'b01011110 ; // d.

4'b1110: dec = 8'b01111001 ; // E.

4'b1111: dec = 8'b01110001 ; // F.

endcase

endfunction

assign Sel = com_select;

assign Seg_Data = ~dec(col(com_select[4:1])) ;

always @(posedge SelCLK)begin

com_select[2] <= com_select[1];

com_select[3] <= com_select[2];

com_select[4] <= com_select[3];

Page 85: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

81

com_select[1] <= com_select[4];

end

endmodule

Page 86: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

82

8.9 RangFinderForAVES.ucf(ピンアサイン)

#/////////////////////////////////////////////////////////////////////////////////

#// Mastar Clock 33.333MHz

NET "CLK" LOC = "P63";

#// Input Transmit Data Select

#NET "S1" LOC = "P35"; # S1

#NET "S2" LOC = "P34"; # S2

#NET "S3" LOC = "P33"; # S3

#NET "S4" LOC = "P32"; # S4

#NET "S5" LOC = "P30"; # S5

#NET "S6" LOC = "P27"; # S6

#NET "S7" LOC = "P26"; # S7

NET "TX_SELECT" LOC = "P24"; # S8

#// Ultra Sonic Sencer Enable Triger

NET "TRG_EN" LOC = "P67";

NET "TRG" LOC = "P68";

#// Ultra Sonic Sencer Enable Data

NET "DATA_IN" LOC = "P66";

NET "DATA_EN" LOC = "P65";

#// Ultra Sonic Sencer Pulse Monitor

NET "TP_TRG" LOC = "P57";

NET "PLS_1mm" LOC = "P60";

NET "LED<8>" LOC = "P36";

NET "LED<7>" LOC = "P40";

NET "LED<6>" LOC = "P41";

NET "LED<5>" LOC = "P47";

NET "LED<4>" LOC = "P48";

NET "LED<3>" LOC = "P49";

NET "LED<2>" LOC = "P53";

NET "LED<1>" LOC = "P54";

#// 7segmant LED Select(common)

NET "COM<1>" LOC = "P78"; #comD

NET "COM<2>" LOC = "P79"; #comC

NET "COM<3>" LOC = "P83"; #comB

NET "COM<4>" LOC = "P84"; #comA

#// 7segmant LED Data

NET "SEG7<1>" LOC = "P85"; # seg a

NET "SEG7<2>" LOC = "P90"; # seg b

NET "SEG7<3>" LOC = "P92"; # seg c

NET "SEG7<4>" LOC = "P95"; # seg d

NET "SEG7<5>" LOC = "P98"; # seg e

NET "SEG7<6>" LOC = "P86"; # seg f

Page 87: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

83

NET "SEG7<7>" LOC = "P91"; # seg g

NET "SEG7<8>" LOC = "P94"; # seg dp

#// RS232C Tx Rx Data

NET "RxD" LOC = "P71"; #RS232C Rx DATA

NET "TxD" LOC = "P70"; #RS232C Tx DATA

Page 88: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門
Page 89: 実践!自動車組込み技術者入門 FPGAと ... · 平成24年度 「東日本大震災からの復興を担う専門人材育成支援事業」 実践!自動車組込み技術者入門

平成 24年度文部科学省委託 「東日本大震災からの復興を担う専門人材育成支援事業」

東北の復興を担う自動車組込みエンジニア育成支援プロジェクト

■推進協議会 ◎ 佐藤 公一 東北電子専門学校 校長

今野 幸信 東北電子専門学校 総務部 部長 與那嶺 尚弘 仙台高等専門学校 知能エレクトロニクス工学科 准教授 岩渕 喜悦 公益財団法人仙台市産業振興事業団 地域産業振興部 新事業推進課 産学連携担当 ビジネス開発ディレクター 伊藤 俊 宮城県黒川高等学校 教頭 木村 康弘 宮城県米谷工業高等学校 情報技術科 科長 森 武彦 宮城県工業高等学校 校長 白田 正樹 アベールジャパン仙台支店 システム開発センター 渋谷 義博 トライポッドワークス株式会社

技術本部 プロジェクトマネージメントグループ プロジェクトマネージャ 羽曽部 恭美 カストマシステム株式会社 エンベデソドシステムソリューション事業部 事業部長 三浦 卓 宮城県経済商工観光部 産業人材対策課 課長 工藤 拓 宮城県自動車産業振興室 技術支援班 主事 今井 和彦 宮城県震災復興・企画部情報産業振興室/ 産業技術総合センター

機械電子情報技術部 情報技術開発班 副主任研究員 吉岡 正勝 有限会社ザ・ライスマウンド マーケティングマネージャー

■開発分科会 ◎ 坂藤 健 東北電子専門学校 自動車組込みシステム科 学科主任 高橋 敬 東北電子専門学校 CAD設計製図科 学科主任 小野寺 敬司 花壇自動車大学校 教頭 白田 正樹 アベールジャパン仙台支店 システム開発センター 渡辺 登 株式会社アフレル エデュケーション・プランナー/事業企画室 室長 柴原 健次 エキスパートプロモーション 代表 吉岡 正勝 有限会社ザ・ライスマウンド マーケティングマネージャー

■講座運営分科会 ◎ 坂藤 健 東北電子専門学校 自動車組込みシステム科 学科主任 小野寺 敬司 花壇自動車大学校 教頭 與那嶺 尚弘 仙台高等専門学校 知能エレクトロニクス工学科 准教授 岩渕 喜悦 公益財団法人仙台市産業振興事業団

地域産業振興部 新事業推進課 産学連携担当 ビジネス開発ディレクター 伊藤 政光 株式会社エスワイシステム 執行役員 中部事業部 事業部長 吉岡 正勝 有限会社ザ・ライスマウンド マーケティングマネージャー

■事業実施協力専修学校・企業・団体等 ◎ 古賀 稔邦 日本電子専門学校 校長 石川 浩 日本工学院専門学校 テクノロジーカレッジ ロボット科 岡田 靖志 浜松情報専門学校 教務課長 村岡 好久 名古屋工学院専門学校 テクノロジー学部 部長 村上 登昭 大阪工業技術専門学校 教員 服部 博行 株式会社ヴィッツ 取締役 組込みソフトウェア開発部部長 伊藤 政光 株式会社エスワイシステム 執行役員 中部事業部 事業部長 小林 靖英 株式会社アフレル 代表取締役社長 柴原 健次 エキスパートプロモーション 代表 飯塚 久仁子 有限会社ザ・ライスマウンド 取締役 飯塚 正成 一般社団法人全国専門学校情報教育協会 専務理事

平成 24年度文部科学省委託

「東日本大震災からの復興を担う専門人材育成支援事業」

東北の復興を担う自動車組込みエンジニア育成支援プロジェクト

実践!自動車組込み技術者入門 FPGAとマイコンの連携システム ハードウェア編

平成 25年 3月

学校法人日本コンピュータ学園(東北電子専門学校) 〒980-0013 宮城県仙台市青葉区花京院一丁目3番1号

問合せ先 有限会社ザ・ライスマウンド 〒164-0003 東京都中野区東中野 1-57-8 辻沢ビル 3F

電話:03-5332-5080 FAX 03-5332-5083

●本書の内容を無断で転記、掲載することは禁じます