Top Banner
卒業研究論文 (2009 2 ) CPLD によるミニゲーム集の制作 ソフトウェア情報学部 ソフトウェア情報学科 和島研究室 ソ 17001 相坂俊
66

卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。...

Jan 23, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

卒業研究論文 (2009 年 2 月)

CPLD によるミニゲーム集の制作

ソフトウェア情報学部

ソフトウェア情報学科

和島研究室

ソ 17001 相坂俊

Page 2: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

2

1. 背景 ............................................................................... 4

2. 開発環境 ........................................................................... 4

2.1 ハードウェア ..................................................................... 4

2.1.1 CPLD ......................................................................... 4

2.1.2 Terasic-Blaster .............................................................. 6

2.1.3 フラットケーブル ............................................................. 6

2.2 ソフトウェア ..................................................................... 7

2.2.1 QuartusⅡ .................................................................... 7

2.2.1.1 プロジェクトの作成 ........................................................... 7

2.2.1.2 回路図エディタによる回路設計 ............................................... 9

2.2.1.3 VHDL 言語による回路設計 ................................................... 12

3. CPLD の動作テスト ................................................................. 16

3.1 テスト用回路基板の制作 .......................................................... 16

3.1.1 EAGLE による回路の設計 ...................................................... 16

3.1.1.1 ライブラリへの部品登録 .................................................... 16

CPLD ............................................................................ 17

7segLED ......................................................................... 21

3.1.1.2 回路図設計 .............................................................. 21

3.1.1.3 基板設計 ................................................................ 23

3.1.2 基板加工機による基板加工 .................................................... 23

3.1.3 ハンダ付け .................................................................. 25

3.2 回路図エディタによる並列 10 進カウンタ回路の作成 ................................. 26

3.2.1.1 仕様 ...................................................................... 26

3.2.1.2 実装 ...................................................................... 26

3.2.2 動作結果 .................................................................... 28

3.3 VHDL 言語による並列 10 進カウンタ回路の作成 ....................................... 29

3.3.1 仕様 ........................................................................ 29

3.3.2 プロジェクトの構成 .......................................................... 30

3.3.2.1 BCDCounter.vhd .......................................................... 31

3.3.2.2 Decode7segment.vhd ...................................................... 32

3.3.2.3 ButtonCount.vhd ......................................................... 33

3.3.2.4 ButtonCount_top.vhd ..................................................... 36

3.3.3 動作結果 .................................................................... 38

4. ミニゲームの作成 .................................................................. 39

4.1 CPLD 基板の製作 ................................................................. 40

4.1.1 EAGLE による回路の設計 ...................................................... 40

4.1.1.1 ライブラリへの部品登録 .................................................. 40

40 ピンコネクタ ................................................................. 40

Page 3: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

3

4.1.1.2 回路図設計 .................................................................. 41

4.1.1.3 基板設計 .................................................................... 42

4.1.2 基板加工機による基板加工 .................................................... 43

4.1.3 ハンダ付け .................................................................. 43

4.2 表示・入力用基板の製作 .......................................................... 43

4.2.1 EAGLE による回路の設計 ...................................................... 44

4.2.1.1 回路図設計 .............................................................. 44

4.2.1.2 基板設計 ................................................................ 45

4.2.2 基板加工機による基板加工 .................................................... 45

4.2.3 ハンダ付け .................................................................. 47

4.3 VHDL 言語による 8パズル回路の作成 ............................................... 47

4.3.1 仕様 ........................................................................ 48

4.3.2 プロジェクトの構成 .......................................................... 49

4.3.2.1 8puzzle.vhd ............................................................. 50

4.3.2.2 Decode7segment.vhd ...................................................... 52

4.3.2.3 Controller.vhd .......................................................... 52

4.3.2.4 check.vhd ............................................................... 55

4.3.3 動作結果 .................................................................... 55

4.4 VHDL 言語による三目並べ回路の作成 ............................................... 57

4.4.1 仕様 ........................................................................ 57

4.4.2 プロジェクトの構成 .......................................................... 58

4.4.2.1 CircleCross.vhd ......................................................... 59

4.4.2.2 Decode7segment.vhd ...................................................... 61

4.4.2.3 Controller.vhd .......................................................... 61

4.4.3 動作結果 .................................................................... 61

5. 問題点とその解決法 ................................................................ 63

5.1 ハードウェア .................................................................... 63

5.2 ソフトウェア .................................................................... 64

6. まとめ ............................................................................ 66

Page 4: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

4

1. 背景

近年家電製品や携帯電話などの組み込み系の技術の需要が高まっている。組み込み技術とは、特定の

システムの目的に特化して動作させるシステムであり、性能の限定されたハードウェアとそれに特化し

た専用のソフトウェアで実現されている。組み込みシステムに限らず、電子回路を動作させる基板の設

計には回路 CAD(Computer Aided Design)が用いられる。これは基板上に実装される部品間の論理的な

接続を設計する回路設計と、実基板上の配線を干渉することなく行うよう部品サイズ・配線レイヤーな

どを考慮して設計する基板設計に分かれる。一方、組み込みシステムの電子回路の内部の設計には、

CPLD(Complex Programmable Logic Device)や FPGA(Field Programmable Gate Array)が使われて

いる。いずれも多くのロジックエレメントの集まりで、その間の接続を電気的に書き換えることのでき

るもので、基板を作り直すことなく素子の論理的な接続を組み替えることができるものである。一般に

数百程度のロジックエレメントを持つものを CPLD、1000 以上のものを FPGA と呼ぶ。回路の設計に

はVHDL(Very high-speed integrated circuit Hardware Description Language)やVerilog HDLが用い

られる。

そこで本研究では回路設計と基板設計を統合して扱うことのできる回路 CAD EAGLE を用いて

CPLD 基板と 7segLED と押しボタンスイッチを搭載した基板を設計・製作し、それにトランジスタ技

術 2006 年 4 月号[1]付録の CPLD 基板を搭載して、VHDL を用いて 8 パズルや三目並べなどの動作をす

るプログラムを組み、CPLD に書き込んで動作を確認した。

2. 開発環境

2.1 ハードウェア

2.1.1 CPLD

本研究で使用した CPLD 基板の仕様を表 2-1 に記す。

図 2-1 CPLD 基板

Page 5: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

5

10 ピンのコネクタ CN4 はプログラムの書き込みの際の PC との通信に使用する。

表 2-1 CPLD 基板の仕様

項目 仕様

基板材質 ガラス・エポキシ(FR-4)

基板層数 1

電解コンデンサ(47μF) 2 層

外形寸法 70×50mm

搭載部品

CPLD(EPM240T100C)

TC74VHC244FT

抵抗、コンデンサ

供給電源 3.3V(3 端子レギュレータを搭載すれば 5V 入力可能)

この基板に搭載されている CPLD EPM240T100C の特性は以下の通りである。

表 2-2 CPLD EPM240T100C の特性

動作電圧 3.3V

ロジックセル数 240

入出力 76

電源入力 16

通信用入出力 4

ボタンからの信号や電源、クロック入力と外部との入出力、また回路の安定動作のために CPLD 基板

に以下の部品をハンダ付けした。

表 2-3 CPLD 基板に実装した部品

部品 個数

ダブルヘッダピン(メス) 20 ピン×2、10 ピン×1、8 ピン×1

抵抗(220Ω) 1

電解コンデンサ(47μF) 2

IC ソケット 4 ピン×1

3端子レギュレータ(LM1117T-3.3/NOPB) 1

水晶発振器(ACH-10.000MHZ-EK) 1

CPLD の動作電圧は 3 端子レギュレータを搭載したため、入力電圧には 5V のものを使用した。

Page 6: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

6

2.1.2 Terasic-Blaster

プログラムの書き込みには、USB Blaster 互換の Terasic Blaster(Terasic 社製)を使用した。これは

3.3V の電源で動作し、TCK、TDO、TMS、TDI の 4 つの入出力信号を用いて PC と CPLD の通信を行

うものである。

図 2-2 Terasic Blaster

左側の黒い端子が CPLD 基板に接続される 10 ピンのメスのコネクタで、本体の左側の端子は A-B

タイプの USB ケーブルを通じて PC の USB 端子に接続される。

Terasic-Blaster を使用するために USB ケーブルで PC に接続し、ハードウェアの追加ウィザードで

ドライバを自動でインストールした。図 2-1 がデバイスマネージャでの表示である。Terasic-Blaster

は ALTERA 社の USB Blaster の互換品であるため、USB Blaster として認識される。

図 2-3 Terasic-Blaster の認識

2.1.3 フラットケーブル

長さはそれぞれ芯数 40 本, ピッチ 1.27mm とした。

図 2-4 基板の接続に使用する 2本のフラットケーブル

Page 7: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

7

2.2 ソフトウェア

2.2.1 QuartusⅡ

QuartusⅡとは CPLD の回路の情報を作成し、書き込むためのソフトウェアである。CPLD への回路

の入力方法にはエディタによる入力と VHDL による入力がある。エディタによる入力では回路図エデ

ィタ上に Symbol(回路記号)を配置し、それらを配線で接続し入出力を CPLD のピンに対応させて、そ

れをコンパイルして書き込む。一方 VHDL による入力では、VHDL ファイルを作成し、その中で入出

力の信号を定義して入力の値によって求める動作をするようなプログラムを書き下し、それをコンパイ

ルして書き込む。いずれの方法でも回路を設計・入力することができるが、VHDL を使った回路の設計

の方が、目的とする動作のための機能に応じてロジックエレメントを効率よく使うことができる。

QuartusⅡは有償だが、本研究では Web Edition という無償の評価版を使用した。

図 2-5 QuartusⅡを使ったディジタル回路開発の流れ

Windows でこれを使用するために、トランジスタ技術 2006 4 月号の付録 CD の QuartusⅡインス

トールファイル quartusii_51_web_edition.exe を実行してインストールした。初回起動時に「使用には

ライセンスファイルが必要である」というメッセージが表示されたので、ALTERA 社[2]のサイトにアク

セス・ユーザ登録し、ライセンスファイルを取得して、QuartusⅡのメニューバーの Tools の License

Setup を選択してライセンスファイルを導入した。

2.2.1.1 プロジェクトの作成

書き込む回路の情報を作るには、回路図・VHDL いずれの方法を使う場合も以下の手順に従ってプロ

ジェクトを作成する。

1. QuartusII のメニューバーから「File」→「New Project Wizard」を選択する。

2. 使用法の説明が表示されるので、このまま「Next」ボタンを押す。「Don’t show me this introduction

again」にチェックを入れると、次回からこのウィンドウが表示されなくなる。

3. 一番上のテキストボックスに、プロジェクトを作成するフォルダのパスを、二番目のテキストボッ

クスに作成するプロジェクト名を、三番目のテキストボックスにトップレベルデザインエンティテ

ィ名(回路を階層的に設計する場合に 上位の階層に置くエンティティの名前)を入力し、「Next」

ボタンを押す。

プロジェクト

の作成

回路図エディタ

で回路を入力

VHDL を使って

回路を入力

回路の制約

条件を入力 コンパイル 書き込み

回路図上の端子と CPLD の端子の割り当てなど

Page 8: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

8

図 2-6 プロジェクトの情報の入力

4. 既存の設計ファイルがある場合は「File name」の右のテキストボックスにその名前を入力して、

「Add」を押すと、プロジェクトに追加することができるが、何もせずに「Next」ボタンを押す。

5. 「Family」の右のコンボボックスで、使用する CPLD のファミリ(グループ)を、「Target device」

で自動認識するかデバイスを指定するかを選択し、「Available devices」でデバイス名を指定する。

ここでは「MAXⅡ」、「Specific device selected in ‘Available device’ list」、「EPM240T100C5」を

選択する。

Page 9: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

9

図 2-7 CPLD の種類の選択

6. QuartusII 評価版以外の外部ツールを追加できるが、ここでは使用しないのでそのまま「Next」ボ

タンを押す。

作成するプロジェクトの内容を確認する画面が表示されるので、内容に問題がなければ「Finish」ボタ

ンを押す。

2.2.1.2 回路図エディタによる回路設計

回路図エディタで回路を設計する場合は以下の手順で行う。

1. QuartusII のメニューバーから「File」→「New」→「Block Diagram/Schematic」を選択する。

Page 10: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

10

図 2-8 シンボル部品選択

2. Symbol Tool アイコンをクリックしてライブラリから回路素子をエディタに入力する。

図 2-9 部品配置

3. Orthogonal Node Tool アイコンをクリックして、シンボル間を配線で接続する。

Page 11: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

11

図 2-10 接続

4. 作成した回路を部品として使いたい場合は「File」→「Create/Update」→「Create Symbol Files

for Current File」で図 2-9 を部品化する。このことにより上で作成した回路と同等の動作をする

部品が使えるようになる。

図 2-11 部品化したエンティティ

5. 部品化したエンティティを使う場合は、Symbol Tool アイコンをクリックしてライブラリから入力

する。さらに入力信号、出力信号のシンボルをエディタに入力し、シンボル間を配線で接続する。

6. 回路図の入出力を CPLD の端子に関連付ける(図 2-11)。

Page 12: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

12

図 2-12 CPLD に書き込まれる回路

7. 「Processing」→「Start Compilation」でコンパイルする。

8. 「Tools」→「programmer」→「start」で CPLD への書き込みを行う。

2.2.1.3 VHDL 言語による回路設計

次に VHDL で回路を記述して CPLD に書き込む方法は以下の手順に従う。なお、デフォルトでは

QuartusⅡのテキストエディタの使用フォントは英数用のものになっているので「Tools」→「Options」

→「Text Editor」の中の「Fonts」欄を MS ゴシックにし、日本語の表示を可能にしておく。

1. 「File」→「New」→「VHDL File」でソースファイルを作成する。VHDL でもエディタを使った

場合と同様に複数のコンポーネント(部品)を組み合わせて全体の動作を定義することができる。

2. 「Assignments」→「Pins」で VHDL ファイルに記述された入出力と CPLD のピンを関連付ける。

3. 「Processing」→「Start Compilation」でコンパイルする。

4. 「Tools」→「programmer」→「start」で CPLD への書き込みを行う。

VHDL の基本的な構造文と書式

VHDL で回路を記述する際は、初めに演算や CPLD を使用するために読み込むヘッダファイルを指

定し、その回路の入出力の信号とその型を書き下す。 後に内部的な信号を定義し、イベント発生時に

実行する命令を書く(参考:VHDL によるハードウェア設計入門)。

Page 13: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

13

図 2-13 VHDL の基本構文

変数の種類

通常のプログラミング言語とは異なり、VHDL では変数に相当するものを実際の回路の信号と結びつ

けて考える必要がある。このうち明確に信号として扱うものを signal、内部的に処理して見かけ上独立

した変数として扱うものを variable、一定の値をとるものを constant と呼ぶ。

変数の型

通常の言語と同様に変数は型を持つ。使用できる型には以下のものがある。

表 2-4 VHDL の変数型

型名 とることのできる値

std_logic 0, 1

std_logic_vector それぞれのビットについて 0, 1

boolean 論理値 true, false

integer -214783647~214783647 の整数

パッケージの指定

演算や CPLD を使用するためのヘッダファイルを読み込む

library ライブラリ名;

use ライブラリ名, パッケージ名;

エンティティの定義

入出力の信号名とその型を定義する

entity エンティティ名 is

port(ポート名 : モード型 データ型);

end エンティティ名;

アーキテクチャの記述

内部的な信号を定義する

イベント発生時に実行する命令を書く

常に実行する命令を書く

Architecture アーキテクチャ名 of エンティティ名 is

(信号宣言文)

begin

(VHDL 本体)

end アーキテクチャ名;

Page 14: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

14

natural 0~214783647 の整数

positive 1~214783647 の整数

real -1.0E-38 から +1.0E+38 の実数

character ASCII 文字

string 文字列

time 時間の物理タイプ fs, ps, ns, us, ms, sec, min, hr

severity level メッセージタイプ NOTE, WARNING, ERROR, FAILURE

すべての変数は種類と型を持ち、アーキテクチャの先頭で

変数の種類 変数名 : 変数の型

の書式で宣言することで使用可能になる。特に std_logic_vector では、変数の型の後に

(開始ビット to 終了ビット)または(終了ビット downto 開始ビット)

をつけて使用するビットを明確に宣言する。

型の変換

VHDL では厳密に型の一致が求められ、異なる型同士の演算や代入は出来ないので、代入を行うため

には代入される側の型に変換してから行う必要がある。以下に主な型変換関数の書式を挙げる。

他の VHDL ファイルをコンポーネントとして使用する場合は、アーキテクチャを記述する際にコン

ポーネントとして使用するファイルについてPORT の情報を ARCHITECTURE 文と BEGIN 文の間に

書く。

図 2-14 階層構造を持つ VHDL の構文

値を引数として受け取り処理をした後で何らかの値を返すファンクション文、値を返さないプロシー

エンティティの定義

パッケージの指定

アーキテクチャの記述

コンポーネントのポートの記述

コンポーネントのポートとエンティティとの対応の記述

信号の定義

integer から std_logic_vector への変換

conv_std_logic_vector(元の変数、ビット幅)

std_logic_vector から integer への変換

conv_integer(元の変数)

Page 15: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

15

ジャ文などのあらかじめ書き下した機能をまとめたものをパッケージという。パッケージ、ファンクシ

ョンの構文は図 2-13, 2-14 の様になる。

図 2-15 パッケージの構文

図 2-16 ファンクションの構文

別ファイルに書かれたパッケージを使用する場合は、パッケージの指定の際に

NEWLIB;

USE NEWLIB.ファンクション名.all;

という記述を追加する。

パッケージの宣言

信号宣言, 定数宣言, データタイプなどを記述する。

パッケージ文の処理の記述

packege パッケージ名 is

(宣言文)

end パッケージ名;

packege body パッケージ名 is

(本体)

end パッケージ名;

ファンクションの宣言

引数として受け取る信号名とそのデータ型、戻り値のデータ型を記述する

ファンクション文の処理の記述

function ファンクション名 (

(宣言文)

return データ・タイプ名 is

function ファンクション名 (

(本文)

return データ・タイプ名 is

begin

(順次処理文)

return 返却データタイプ

end;

Page 16: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

16

3. CPLD の動作テスト

CPLD 基板の動作確認のために、手頃な基板を製作する必要があった。そこで入力の信号 2 つ、出力

の信号 14 個(7segLED2 つ分)を備えた回路・基板を設計・製作し 10 進カウンタ回路を書き込んで動作

を確認した。回路の設計では回路図を用いた方法と VHDL を用いた方法の 2 通り試し、いずれも正し

く動作することが確認できた。

3.1 テスト用回路基板の制作

テスト基板の製作に使用した部品を表 3-1 に示す。

表 3-1 テスト基板の製作に使用した部品

部品 個数

ダブルヘッダピン(オス) 20 ピン×2、10 ピン×1、8 ピン×1

DIP スイッチ 1

押しボタンスイッチ 2

電解コンデンサ (47μF) 1

セラミックコンデンサ(0.1μF) 2

7 セグメントLED 2

LED 1

抵抗(330Ω) 21

コード 2

メタルスペーサ 4

ナット 4

押しボタンスイッチは信号入力用、7segLED は出力表示用であり、抵抗は LED に大電流が流れない

ようにするためのものである。DIP スイッチは電源の ON・OFF 用、LED はその確認のため使用した。

コードは電源入力用の 2 ピンコネクタの代用である。コンデンサは信号の変化の際に生じるノイズを打

ち消すもの (パスコン)である。メタルスペーサとナットはハンダの劣化やショートを防ぐために使用し

た。

3.1.1 EAGLE による回路の設計

EAGLE(Easily Applicable Graphical Layout Editor)は回路設計と基板設計を統合して扱うことので

きる回路 CAD である。使用する素子をライブラリ(回路図上のピン数と個々のピン名、入出力の情報を

もつ Symbol(図 3-4,3-5)を組み合わせた Device の集合)から入力し、論理的配線を行った後、基板フ

ァイルで物理的配線を行うことで回路基板の情報を設計することができる。

ここで作成した基板ファイルは、CAM ツールを使ってさまざまな形式のファイルに変換し、基板加

工機のコントロールアプリケーションで使用できる。

3.1.1.1 ライブラリへの部品登録

今回作成する基板で用いる部品のうち、CPLD と 7segLED がライブラリに無かったため、新規にこ

Page 17: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

17

れらの Package と Symbol、Device を作成し、Device 上で Package の Pad(端子)と Symbol の Pin の

関連付けを行った。

CPLD

CPLD 基板は CN1~CN5 の 5 つの入出力コネクタを持つ。このうち PC との通信に用いられる CN4

は通信用のコネクタであり、回路基板とは接続されないため省略した。

図 3-1 CPLD の Package(51×71mm)

Page 18: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

18

図 3-2 CPLD の CN1 の Symbol 図 3-3 CPLD の CN2 の Symbol

図 3-4 CPLD の CN3 の Symbol 図 3-5 CPLD の CN5 の Symbol

Page 19: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

19

表 3-2~3-5 に Pad(package)と Pin(Symbol)の端子の対応を示す。

表 3-2 CN1 の pin 対応 表 3-3 CN2 の pin 対応

Pad Pin Pad Pin Pad Pin Pad Pin

1 GND_1 21 USERIO83 1 VCCIO_1 21 GND_1

2 GND_2 22 USERIO84 2 VCCIO_2 22 GND_2

3 USERIO02 23 USERIO81 3 USERIO19 23 USERIO43

4 USERIO01 24 USERIO82 4 USERIO20 24 USERIO44

5 USERIO100 25 USERIO77 5 USERIO21 25 USERIO47

6 USERIO99 26 USERIO78 6 USERIO26 26 USERIO48

7 USERIO98 27 USERIO75 7 USERIO27 27 USERIO49

8 USERIO97 28 USERIO76 8 USERIO28 28 USERIO50

9 USERIO96 29 USERIO73 9 USERIO29 29 USERIO51

10 USERIO95 30 USERIO74 10 USERIO30 30 USERIO52

11 USERIO92 31 USERIO71 11 USERIO33 31 USERIO53

12 USERIO91 32 USERIO72 12 USERIO34 32 USERIO54

13 USERIO90 33 USERIO69 13 USERIO35 33 USERIO55

14 USERIO89 34 USERIO70 14 USERIO36 34 USERIO56

15 USERIO88 35 USERIO67 15 USERIO37 35 USERIO57

16 USERIO87 36 USERIO68 16 USERIO38 36 USERIO58

17 USERIO86 37 GCLK3 17 USERIO39 37 USERIO61

18 USERIO85 38 USERIO66 18 USERIO40 38 GCLK2

19 GND_3 39 VCCIO2_1 19 USERIO41 39 GND_3

20 GND_4 40 VCCIO2_2 20 USERIO42 40 GND_4

Page 20: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

20

表 3-4 CN3 の pin 対応 表 3-5 CN5 の pin 対応

Pad Pin Pad Pin

1 3.3VCC 1 5V_1

2 VCCINT 2 3.3V_1

3 USERIO04 3 5V_2

4 USERIO03 4 3.3V_2

5 USERIO06 5 DC_1

6 USERIO05 6 DC_2

7 USERIO08 7 DC_3

8 USERIO07 8 DC_4

9 GND_1

10 GND_2

11 GCLK1

12 GCLK2

13 GND_3

14 GND_4

15 USERIO16

16 USERIO15

17 USERIO18

18 USERIO17

19 GND_5

20 GND_6

Page 21: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

21

7segLED

EAGLE の既存のライブラリにも 7segLED はあったが、ここで使用した GL9R04 の形状のものはな

かったため新規に作成した。表 3-6 に Pad(package)と Pin(Symbol)の端子の対応を示す。

図 3-6 7segLED の Symbol 図 3-7 7segLED の Package(17×13mm)

表 3-6 7segLED の pin 対応

Pad Pin

1 A

2 F

3 VCC_2

4 E

5 D

6 DP

7 C

8 G

9 B

10 VCC_1

3.1.1.2 回路図設計

7segLED への出力には CPLD の USERIO81、83~88、91、92、96~100 にあたる CN1 の 5~9、

11、12、15~18、21~23 を接続し、ボタンからの入力には USERIO2、89 にあたる、CN1 の 3、14

を接続した。基板への入力電圧は 5V であるが、CPLD 基板に搭載した三端子レギュレータで降圧され

た 3.3V の電源が CPLD の駆動電圧となる。

Page 22: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

22

図 3-8 回路設計

Page 23: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

23

3.1.1.3 基板設計

水色の部分が配線を表す。今回は片面基板として設計したため、すべての配線はハンダ面を通る。GND、

VCC(5V)、VDD(3.3V)の電源系は多くの部品に入るため、他の信号よりも配線を先に行った。基板の 4

隅の穴は基板固定穴と呼ばれ、スペーサとナットで基板を固定するのに使用される。このことによって

ハンダ面と床の接触によるショートやハンダの劣化を防ぐことができる。

図 3-9 基板設計(98×78mm)

3.1.2 基板加工機による基板加工

基板加工機 RS21 とそのコントロール用アプリケーション FLASH Win を使用してテスト基板を作成

した。設計した基板データを元に EAGLE の CAM 機能で GERBER 形式のデータ drill(ドリルデータ:

穴の大きさや位置をまとめたファイル), photo(配線データ:配線部分の座標データをまとめたファイル),

frame(基板外形データ:基板外形の端点の座標をまとめたファイル)を作成した。

テスト基板の材料は合成樹脂板の片面に銅箔が貼り付けられたものである。初めに drill のデータを

元に基板の厚さより長いドリルで基板を貫通する穴をあけた(A)。次に、銅箔の必要な部分のみを残して

配線とするため、FLASH Win の輪郭抽出の機能を用いて photo から輪郭データを作成し、そのデータ

を元に銅箔をミリングカッタと呼ばれる先端が円錐状のドリルで削り取った(B)。 後に frame のデー

タを元にフォーミングカッタと呼ばれる、先端が円柱状のドリルで基板を切り離した。

Page 24: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

24

図 3-10 基板加工機での基板加工過程 図 3-11 ドリルの種類

図 3-12 ドリルデータ 図 3-13 配線データ

図 3-14 輪郭データ 図 3-15 基板外形データ

銅箔

(A)

(B)

合成樹脂板

ミリングカッタ

フォーミングカッタ

ドリル

Page 25: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

25

3.1.3 ハンダ付け

出来上がった基板に抵抗など背の低いものから順にハンダ付けした。セラミックコンデンサなどの背

の高いものを先にハンダ付けしてしまうと、他の部品のハンダ付けが困難になってしまうからである。

図 3-16 テスト基板(部品面) 図 3-17 テスト基板(ハンダ面)

図 3-18 テスト基板の入出力素子

電源用スイッチとして 4 素子の DIP スイッチを使用したが、実際の電源の ON・OFF 用には一番右

の素子を使用した。確認用 LED は電源を ON にしたときに点灯する。LED1, 2 に使用した GL9R04 は

アノードコモンなので、それぞれのセグメントに対応するピンに GND を入力すると点灯する。

ボタン 1

ボタン 2

LED1 LED2

電源用

スイッチ

確認用 LED

Page 26: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

26

3.2 回路図エディタによる並列 10 進カウンタ回路の作成

3.2.1.1 仕様

電源投入時の状態は 7seg LED1, 2 ともに 0 でボタン 1, 2 を押すごとに 7segLED1, 2 の数字が 1 ずつ

増えていき、9 になったとき 0 に戻るという動作をさせる。

3.2.1.2 実装

10 進カウンタの動作をさせるため、IC74160(4 ビット同期式カウンタ)、IC7447(7segDecoder)、

input(入力)、output(出力)、VCC のシンボルを回路図エディタに配置し、Orthogonal Node Tool アイ

コンをクリックして、シンボル間を配線で接続する。10 進カウンタの LDN、A、B、C、D、ENT、ENP、

CLRN を VCC に、CLK を入力に接続する。これで CLK の立ち上がりで 2 進数 QDQCQBQA の値が 1

増加する様になる。1 組のボタンと LED に対しての動作をこれで実現できる。

図 3-19 1 組分の 10 進カウンタ回路

ここではこれをひとつの部品として使用するので、図 3-19 を部品化する。このことにより BUTTON

という 1 つの入力と LEDA~G という 7 つの出力を持ち、図 3-19 の回路と同等の動作をする部品が

使えるようになる。

ライブラリから部品化した ButtonCount エンティティ、input(入力)、output(出力)のシンボルをエ

ディタに入力し、シンボル間を配線で接続し、回路図の input, output を CPLD の端子に関連付ける(図

3-20)。これをコンパイルし、CPLD への書き込みを行う。

Page 27: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

27

図 3-20 CPLD に書き込まれる回路

Page 28: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

28

3.2.2 動作結果

仕様で述べた通りの動作をした。

コンパイル時のメッセージから確認した、この回路の使用ロジックエレメント数は 22 個であった。

図 3-21 テスト基板の動作例

ボタン 2 を押すたびに LED2 に表示

される値が 1 増える。

9を超えるとLED2の値が0に戻る。

ボタン 1 を押すたびに LED1 に表示

される値が 1 増える。

9を超えるとLED1の値が0に戻る。

Page 29: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

29

3.3 VHDL 言語による並列 10 進カウンタ回路の作成

3.3.1 仕様

動作については回路図で設計した場合と同様である。VHDL ではそれぞれの入出力の信号名に名前を

つけるが、ここではそれぞれのセグメントに対応する出力に図 3-22 のような名前をつける。

図 3-22 LED のセグメント

LED_A

LED_C

LED_D

LED_E

LED_B LED_F

LED_G

Page 30: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

30

3.3.2 プロジェクトの構成

回路図を使った設計で用いた方法に倣い、こちらでも階層構造を使って回路を設計する。すなわち、

10 進カウンタの働きをする BCDCounter、7seg デコーダの働きをする Decode7segment を作成し、両

者をエンティティとして 1 つずつ含む、1 入力 7 出力を持つ ButtonCount を作成する。 後にエンテ

ィティとして 2 つの ButtonCount を含む ButtonCount_top を作成し、その入出力を CPLD のピンに

対応させる。

図 3-23 階層構造を使った設計

ButtonCount

Decode7segment BCDCounter

USERIO02 USERIO92

USERIO91

USERIO96

USERIO99

USERIO100

USERIO97

USERIO98

USERIO84

USERIO81

USERIO83

USERIO86

USERIO87

USERIO85

USERIO88

ButtonCount

Decode7segment BCDCounter

ButtonCount_top

USERIO89

ボタン1から

ボタン2から

LED1 へ

LED2 へ

Page 31: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

31

3.3.2.1 BCDCounter.vhd

1 つの入力信号 BUTTON を受け取り、電源投入後の BUTTON の立ち上がりの回数の下 1 桁の数値

を 2 進数に変換したものに対応する信号を出力する。

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

USE IEEE.std_logic_unsigned.ALL;

USE IEEE.std_logic_arith.ALL;

パッケージの指定

使用する CPLD 独自のヘッダの読み込み

logic 変数を扱うためのヘッダの読み込み

算術演算のためのヘッダの読み込み

エンティティの定義

std_logic 型の入力 CLK を受け取り、QA, QB, QC,

QD を出力する

アーキテクチャ

4bit の std_logic_vector 型の内

部変数 counter の定義

入力 CLK の立ち上がりのイベ

ント発生時に実行する命令

counter が 9 なら counter を 0

に、そうでないときは counter

を 1 増加させる

出 力 QA, QB, QC, QD に

counter のそれぞれのビットの

値を書き込む

ENTITY BCDCounter IS

PORT(

CLK : in std_logic;

QA : out std_logic;

QB : out std_logic;

QC : out std_logic;

QD : out std_logic

);

END BCDCounter;

ARCHITECTURE rtl of BCDCounter IS

signal counter : std_logic_vector(3 downto 0);

BEGIN

QA <= counter(0);

QB <= counter(1);

QC <= counter(2);

QD <= counter(3);

end rtl;

PROCESS(CLK)

BEGIN

if(CLK'event and CLK='1') then

if( counter = 9 ) then

counter <=CONV_STD_LOGIC_VECTOR(0,4);

else

counter <= counter + 1;

end if;

end if;

END PROCESS;

Page 32: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

32

3.3.2.2 Decode7segment.vhd

4 つの入力信号 A~D を受け取り、2 進数 DCBA を 10 進数に変換した数値の形に 7segLED を点灯さ

せるための 7 つの信号 LEDA~G を出力する。2 進数 DCBA の値が 9 以下ならそれを 10 進数に変換し

た数値を、10~15 なら空白を表示するための信号を出力する。

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

USE IEEE.std_logic_unsigned.ALL;

パッケージの指定

使用する CPLD 独自のヘッダの読み込み

logic 変数を扱うためのヘッダの読み込み

ENTITY Decode7Segment IS

PORT(

A, B, C, D : in std_logic;

LED_A : out std_logic;

LED_B : out std_logic;

LED_C : out std_logic;

LED_D : out std_logic;

LED_E : out std_logic;

LED_F : out std_logic;

LED_G : out std_logic

);

END Decode7Segment;

エンティティの定義

std_logic 型の入力 A, B, C, D を受け取り、

LED_A~LED_G を出力する

ARCHITECTURE rtl of Decode7Segment IS

signal number : std_logic_vector(3 downto 0);

BEGIN

number(0) <= A;

number(1) <= B;

number(2) <= C;

number(3) <= D;

アーキテクチャ

4bit の std_logic_vector 型の内部変

数 number の定義

出力 number に D, C, B, A の値を書

き込む。

Page 33: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

33

3.3.2.3 ButtonCount.vhd

1 つの入力信号 BUTTON を受け取り、電源投入後の BUTTON の立ち上がりの回数の下 1 桁の数値

の形に 7segLED を点灯させるための 7 つの信号を BC_LEDA~G に出力する。

このファイルは既出の 2 つとは異なり、他の VHDL ファイルをコンポーネントとして使用する。

図 3-24 ButtonCount の階層構造

ButtonCount

Decode7segment BCDCounter

counter1 decoder1

LED_A <= '0' when number = 0 else

'1' when number = 1 else

'0' when number = 2 else

'0' when number = 3 else

'1' when number = 4 else

'0' when number = 5 else

'1' when number = 6 else

'0' when number = 7 else

'0' when number = 8 else

'0' when number = 9 else

'1';

...

end rtl;

number の値によって LED_A の点

灯・消灯を切り替える。

LED を点灯させる時は'0'を、消灯さ

せる時は’1’を出力する。

LED_B~G も A と同様に記述する。

number の値が 10 から 15 の時はす

べての LED を消灯させるため’1’を

出力する。

Page 34: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

34

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

USE IEEE.std_logic_unsigned.ALL;

パッケージの指定

使用する CPLD 独自のヘッダの読み込み

logic 変数を扱うためのヘッダの読み込み

ENTITY ButtonCount IS

PORT(

BUTTON : in std_logic;

BC_LED_A : out std_logic;

BC_LED_B : out std_logic;

BC_LED_C : out std_logic;

BC_LED_D : out std_logic;

BC_LED_E : out std_logic;

BC_LED_F : out std_logic;

BC_LED_G : out std_logic

);

END ButtonCount;

エンティティの定義

std_logic 型の入力 BUTTON を受け取り、

LED_A~LED_G を出力する

Page 35: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

35

ARCHITECTURE rtl of ButtonCount IS

signal BC_A : std_logic;

signal BC_B : std_logic;

signal BC_C : std_logic;

signal BC_D : std_logic;

BEGIN

counter1 : BCDCounter port map(

CLK => BUTTON,

QA => BC_A,

QB => BC_B,

QC => BC_C,

QD => BC_D

);

コンポーネントの入出力の情報

コンポーネント間を接続する為の信号の

宣言

BCDCounter のエンティティ

counter1 の入出力に ButtonCount の入出

力を接続する。

COMPONENT Decode7Segment

PORT(

A, B, C, D : in std_logic;

LED_A : out std_logic;

LED_B : out std_logic;

LED_C : out std_logic;

LED_D : out std_logic;

LED_E : out std_logic;

LED_F : out std_logic;

LED_G : out std_logic

);

END COMPONENT;

COMPONENT BCDCounter

PORT(

CLK : in std_logic;

QA : out std_logic;

QB : out std_logic;

QC : out std_logic;

QD : out std_logic

);

END COMPONENT;

Page 36: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

36

3.3.2.4 ButtonCount_top.vhd

2 つの入力信号 BUTTON1, 2 を受け取り、2 つの 7segLED を点灯させるための信号 LED1A~G、

LED2A~G を出力する。

LED1A~G は電源投入後の BUTTON1 の立ち上がりの回数の下 1 桁の数値の形に 7segLED を点灯

させるように変化し、LED2A~G は BUTTON2 について同様に変化する。これら 2 つの組み合わせは

互いに独立に動作する。

図 3-25 ButtonCount_top の階層構造

ButtonCount

ButtonCount_top

bc1

ButtonCount

bc1

decoder1 : Decode7Segment port map(

A => BC_A,

B => BC_B,

C => BC_C,

D => BC_D,

LED_A => BC_LED_A,

LED_B => BC_LED_B,

LED_C => BC_LED_C,

LED_D => BC_LED_D,

LED_E => BC_LED_E,

LED_F => BC_LED_F,

LED_G => BC_LED_G

);

END rtl;

Decode7segment のエンティティ

decoder1の入出力にButtonCountの入出力

を接続する。

Page 37: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

37

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

USE IEEE.std_logic_unsigned.ALL;

パッケージの指定

使用する CPLD 独自のヘッダの読み込み

logic 変数を扱うためのヘッダの読み込み

ENTITY ButtonCount_top IS

PORT(

BUTTON1 : in std_logic;

LED1_A : out std_logic;

...

LED1_G : out std_logic;

BUTTON2 : in std_logic;

LED2_A : out std_logic;

...

LED2_G : out std_logic

);

END ButtonCount_top;

エンティティの定義

std_logic 型の入力 BUTTON1, 2 を受け取り、

LED1_A~LED1_G、LED2_A~LED2_G を出

力する

ARCHITECTURE rtl of ButtonCount_top IS

COMPONENT ButtonCount

PORT(

BUTTON : in std_logic;

LED_A : out std_logic;

LED_B : out std_logic;

LED_C : out std_logic;

LED_D : out std_logic;

LED_E : out std_logic;

LED_F : out std_logic;

LED_G : out std_logic

);

END COMPONENT;

コンポーネント ButtonCount の入出力の

情報

Page 38: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

38

3.3.3 動作結果

このプログラムを基板に書き込み動作を確認すると、電源投入時の状態は 7seg LED1, 2 ともに 0 で

ボタン 1, 2 を押すごとに 7segLED1, 2 の数字が 1 ずつ増えていき 9 になったとき 0 に戻るという動作

をする。

この回路でも 22 個のロジックエレメントを使用したことがわかった。回路図で設計したときと使用

ロジックエレメント数は同じだが、これは回路図で設計したときに IC74160に含まれているENT, ENP,

CLRN, RCO などの使用されていない機能がコンパイル時に再現されていないためだと思われる。

BEGIN

bc1 : ButtonCount port map(

BUTTON => BUTTON1,

LED_A => LED1_A,

LED_B => LED1_B,

LED_C => LED1_C,

LED_D => LED1_D,

LED_E => LED1_E,

LED_F => LED1_F,

LED_G => LED1_G

);

bc2 : ButtonCount port map(

BUTTON => BUTTON2,

LED_A => LED2_A,

LED_B => LED2_B,

LED_C => LED2_C,

LED_D => LED2_D,

LED_E => LED2_E,

LED_F => LED2_F,

LED_G => LED2_G

);

END rtl;

ButtonCount エンティティ

bc1 の入出力に ButtonCount_top の入出

力を接続する。

bc2 の入出力に ButtonCount_top の入出

力を接続する。

Page 39: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

39

4. ミニゲームの作成

次に CPLD EPM240T100C の 76 の入出力をフルに活用するため、入力用に 5 つのボタン, 出力用に

10 個の 7segLED を搭載した基板を製作することにした。以降は図 4-1 の拡張情報表示部の 7segLED

を「LED0」、メイン表示部のものを左上から右向きに「LED1」~「LED9」と呼ぶ。また、5 つのボ

タンのうち中央のものを「ボタン C」、上下左右にあるものをそれぞれボタン U, D, L, R と呼ぶ。

図 4-1 入出力インターフェイスの仕様

図 4-1 の入出力を使ってできるものを検討した結果、メイン表示部を使った 8 パズルと三目並べが

候補に上がり、入力と出力の仕様と動作の具体的な手段について検討した結果、実装の見通しがついた

のでこれらを製作することにした。

今回設計する回路全体で、(a)入力スイッチとその周辺素子(押しボタンスイッチ、抵抗 330Ω×2、セ

ラミックコンデンサ)が 5 セット、(b)出力用 LED とその周辺素子(7segLED、抵抗 330Ω×7)が 10 セッ

ト、(c)電源系(トグルスイッチ、LED、抵抗 330Ω、セラミックコンデンサ)が 1 セット必要である。し

かし、フリーウェア版の EAGLE で設計できる基板の 大サイズは 100×80mm であり、その中にすべ

ての素子を搭載することはできないので、CPLD 用基板と表示・入力用の基板の 2 つに分けて設計し、

予備を含めた 76 個の信号と、電源の種類をフラットケーブルで接続する方法にした。そのため(a)の入

力用スイッチに関わる構成部品すべてと (b)の 7segLED を表示・入力用の基板に搭載し、残りを CPLD

用基板に実装することにした。

メイン表示部

拡張情報表示部 ボタン

Page 40: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

40

図 4-2 フラットケーブルによる 2枚の基板の接続

4.1 CPLD 基板の製作

この基板には、主に CPLD 基板との入出力、電源入力とその ON・OFF の機能を持たせる。また、

CPLD の信号と電源を 40 ピンケーブルを通じて表示・入出力用基板に渡す。

表示・入力用の基板とつながる 2 つの 40 ピンコネクタには、7segLED への出力のために 70 個、ボ

タンからの入力のために 5 個の USREIO を接続した。7segLED に流れる電流を抑えるための抵抗はこ

の基板に搭載した。出力である USREIO07 は今回使用していないが、表示・入出力用基板に仕様変更

があった場合を考慮して、抵抗を経由して CN3-8 に接続した。表示・入力用基板上の 7segLED は 5V、

スイッチは 3.3V の電圧を必要とするため、40 ピンコネクタの 1 箇所ずつに 0V、5V を、2 箇所に 3.3V

を接続した。

表 4-1 CPLD 用基板に使用した部品

ダブルヘッダピン(オス) 20 ピン×2、10 ピン×1、8 ピン×1

ダブルヘッダピン(メス) 20 ピン×2

LED 1

セラミックコンデンサ(0.1μF) 1

抵抗(330Ω) 72

トグルスイッチ 1

2 ピンコネクタ 1

メタルスペーサ 4

ナット 4

4.1.1 EAGLE による回路の設計

4.1.1.1 ライブラリへの部品登録

40 ピンコネクタ

CPLD 用基板と表示・入力用基板の接続に 40 ピンのケーブルを使用するため、40 ピンコネクタを作

成した。40 ピンコネクタの 40 個の端子は、回路図上ではどれも等価であるため、Symbol を 1 つだけ

作成して、Device 設計時にそれを 40 個入れて Package の Pad に対応させた。

図 4-3 40 ピンコネクタの Symbol 図 4-4 40 ピンコネクタの Package(6×51mm)

Page 41: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

41

4.1.1.2 回路図設計

図 4-5 回路設計

Page 42: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

42

4.1.1.3 基板設計

GND や VCC が入る部品同士や、数が多い CPLD からの出力に当たる抵抗は配線のしやすさを考慮

しながら配置した。また、基板サイズの制限のため、抵抗を立てて実装することを前提として基板上の

部品を選択した。

図 4-6 基板設計(98×78mm)

Page 43: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

43

4.1.2 基板加工機による基板加工

テスト基板の製作時と同様にして加工用のファイル drill, photo, frame を作成し基板加工機で片面基

板を加工した。

図 4-7 ドリルデータ 図 4-8 輪郭データ

4.1.3 ハンダ付け

抵抗と抵抗の幅が狭く、少しでもハンダを付けすぎてしまうと隣接する端子・配線がショートしてし

まうため、ショートがないことをテスターで確認しながら、ハンダ付けを行った。

図 4-9 CPLD 基板(部品面) 図 4-10 CPLD 基板(ハンダ面)

4.2 表示・入力用基板の製作

この基板にはミニゲームをする際に必要となる10個のLED, 5個のボタンとその周辺素子を搭載する。

入出力の信号は 40 ピンケーブルを通じて CPLD 用基板とやりとりする。

7segLED の各セグメントに対して必要となる抵抗は CPLD 用基板側に置いたので、7segLED と 40

ピンコネクタは直接接続する。押しボタンスイッチの端子一つを VDD(3.3V)に接続し、押したときにそ

の電位を信号として CPLD 基板に渡す。

Page 44: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

44

表 4-2 表示・入出力用基板に使用した部品

部品 個数

ダブルヘッダピン(メス) 20 ピン×2

押しボタンスイッチ 5

7 セグメント LED 10

セラミックコンデンサ 5

抵抗(330Ω) 10

メタルスペーサ(25mm) 4

ナット 4

4.2.1 EAGLE による回路の設計

4.2.1.1 回路図設計

図 4-11 回路設計

Page 45: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

45

4.2.1.2 基板設計

素子が多く、配線が複雑になるため、部品面とハンダ面の両側を使って配線を行った。両面で配線を

行う場合、部品面とハンダ面の配線数が同程度になるようにするのが普通であるが、後述するスルーホ

ールの加工が人手を要すること、素子の近くの部品面のハンダ付けが難しいことから、可能な限りハン

ダ面で配線を行い、残りを部品面で配線した。図 4-12 の茶色が部品面、水色がハンダ面の配線である。

図 4-12 基板設計(98×78mm)

4.2.2 基板加工機による基板加工

この基板には部品面にも配線データがあるため、加工データとして drill, photo0(ハンダ面 ),

photo1(部品面), frame を作成した。輪郭加工のための輪郭データは photo0, photo1 からそれぞれ抽出

した。

Page 46: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

46

図 4-13 輪郭データ(部品面) 図 4-14 輪郭データ(ハンダ面)

加工はドリルによる穿孔、部品面の輪郭加工、基板を裏返す、ハンダ面の輪郭加工、基板外形加工の

順で行ったが、基板を裏返す際に起こる角度や位置のずれを補正するため、ドリル加工の前に基板の対

角線上に基準穴を開け、裏返した後にそれらを使い位置合わせを行った。この作業により、以降の加工

で FLASH Win が自動的に位置・角度のずれを補正して加工を行う。

図 4-15 位置・角度の補正

部品面の輪郭加工

ハンダ面の輪郭加工

基準穴

Page 47: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

47

4.2.3 ハンダ付け

この基板を作るために使用した両面基板は、絶縁体である紙フェノールの表と裏の両側に銅箔が貼り

付けられたものである。ここで設計した両面基板には基板の両面にまたがる配線があるが、基板の部品

面とハンダ面の間は紙フェノールで絶縁されているので、そのままではこのような配線はスルーホール

で途切れることになる。そこでスルーホールに抵抗の足を切ったものを通して図 4-17 のように両面に

ハンダ付けをした。

その際、7segLED を先にハンダ付けしてしまうとスルーホールのハンダ付けができなくなるため、

こちらを先にハンダ付けした。

図 4-16 基板の両面にまたがる配線 図 4-17 スルーホールでのハンダ付け

図 4-18 表示・入力用基板(部品面) 図 4-19 表示・入力用基板(ハンダ面)

4.3 VHDL 言語による 8パズル回路の作成

8 パズルとは、3×3 のマスに 1~8 の数字の書かれた駒があり、1 つの空白を利用してそれらを動か

して数字が順に並ぶ状態をつくることを目的としたパズルである。ここでは押しボタンと 7segLED を

抵抗の足 ハンダ

銅箔

紙フェノール

Page 48: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

48

入力・表示としたパズルができる回路を作成する。

4.3.1 仕様

メイン表示部で 8 パズルを行うために、LED1~9 に、数字の 1~8 と空白一つを表示する。

ボタン U, D, L, R で空白部分がその方向に移動し、その位置にあった数字が空白であった部分に移る

ものとする。ボタン C はリセット用で、これを押すと LED1~8 に数字の 1~8 が、LED9 に空白が表

示される状態(完成状態)に戻る。LED1~9 の数字がこの状態になったときのみ LED0 には完成を意味

する 0 を表示し、そうでない場合は未完成を意味する-を表示する。

メイン表示部に空白と 1~8 の数字を表示させるため、それぞれの LED に対応する 4 ビットの

std_logic_vector 型の変数 n1~n9 を定義する。また、LED0 には完成か否かの状態を表示させるため

に 2 通りの状態が必要になるので、これに対応する 4 ビットの std_logic_vector 型の変数 n0 を定義し、

0 か 11 を入れることで表示をコントロールする。

表 4-3 8 パズルの LED 表示

変数の値 用途 表示

0~9 数字の表示 ~

10 空白の表示

11 未完成を意味する記号

12~15 未使用

空白部分の移動にはボタン U, D, L, R を用いるが、状態のチェックは CLK の立ち上がりで行う。

ボタンが押されている状態が検出されるたびに空白の移動をするという仕様にすると、クロックの立ち

上がりのたびにイベントが起こってしまう。そのため 1 つ前のクロックでのボタンの状態を変数に入れ

て記憶しておき、ボタンが離された瞬間だけイベントが起こるようにした。状態を記憶するための変数

はボタン一つあたり 0か 1の値を格納しなければならないため、5ビットの std_logic_vector型とした。

Page 49: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

49

表 4-4 入出力と変数の型

名前 型 意味

入力 btn0~btn4 std_logic ボタンの状態

CLK std_logic クロック

出力 LEDA~G std_logic_vector(3 downto 0); LED 表示用出力

変数 status std_logic_vector(4 downto 0); 一つ前のクロックでのボタンの状態(0~4番

目のビットが btn0~btn4 に対応する)

空白と上下左右のいずれかを交換したとき、LED0 が完成の状態か否かの判定をさせるために変数 n1

~n9 を受け取り、それらが 1~8, 10 であれば 0 を返し、そうでなければ 11 を返すファンクションを作

成した。

4.3.2 プロジェクトの構成

クロックとボタンからの入力を受け取り、ゲーム全体をコントロールする EightPuzzule、7seg デコ

ーダの働きをする Decode7segment を作成し、前者を 1 つ, 後者を 10 個エンティティとして含む 6 入

力 70 出力を持つ Controller を作成し、その入出力を CPLD のピンに対応させた。

図 4-20 階層構造を使った設計

Controller

Decode7segment EightPuzzle

puzzle

decoder0

Decode7segment

decoder9

・・

USERIO02

USERIO100

USERIO96

USERIO97

USERIO01

USERIO98

USERIO99

USERIO51

USERIO53

USERIO61

USERIO54

USERIO52

USERIO56

USERIO55

USERIO04

USERIO05

USERIO06

USERIO03

USERIO08

USERIO62

ボタン

クロック

LED0 へ

LED9 へ

Page 50: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

50

4.3.2.1 8puzzle.vhd

入力信号 btn0~4, CLK を受け取り、10 個の 4 桁の std_logic_vector 型の内部変数 n0~n9 を入力に

応じて変化させ、40 個の信号 QA0~QD9 を出力する。

ここで QDkQCkQBkQAk は nk(k は 0~9)を 2 進数に変換したものに対応する。また、btn0~4 の状

態のチェックは CLK の立ち上がりのタイミングでのみ行う。

LIBRARY IEEE, NEWLIB;

USE IEEE.std_logic_1164.ALL;

USE IEEE.std_logic_unsigned.ALL;

USE IEEE.std_logic_arith.ALL;

USE NEWLIB.Check.all;

パッケージの指定

使用する CPLD 独自のヘッダの読み込み

logic 変数を扱うためのヘッダの読み込み

算術演算のためのヘッダの読み込み

NEWLIB の読み込み

ENTITY EightPuzzle IS

PORT(

CLK, btn0,btn1, btn2, btn3, btn4 : in std_logic;

QA0, QB0, QC0, QD0 : out std_logic;

...

QA9, QB9, QC9, QD9 : out std_logic

);

END EightPuzzle;

エンティティの定義

std_logic 型の入力 CLK,

btn0~btn4 を受け取り、

QA0~QD9 を出力する

ARCHITECTURE rtl of EightPuzzle IS

signal n0 : std_logic_vector(3 downto 0);

...

signal n9 : std_logic_vector(3 downto 0);

signal status : std_logic_vector(4 downto 0);

BEGIN

PROCESS(CLK, n0, n1, n2, n3, n4, n5, n6, n7, n8, n9)

variable v :integer ;

BEGIN

if rising_edge(CLK) then

if(n1=10)then

v:=1;

elsif(n2=10)then

v:=2;

・・・

else

v:=9;

end if;

アーキテクチャ

4bit の std_logic_vector 型

の内部変数 n0~n9 と 5bit

の std_logic_vector 型の内

部変数 status の定義

空白の位置を表す変数

空白の位置を v に格納す

る。

Page 51: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

51

QA0 <= n0(0); QB0 <= n0(1); QC0 <= n0(2); QD0 <= n0(3);

...

QA9 <= n9(0); QB9 <= n9(1); QC9 <= n9(2); QD9 <= n9(3);

end rtl;

if(btn4 = '1' and status(4) = '0') then

status(4) <= '1';

elsif (btn4 = '0' and status(4) = '1')then

status(4) <= '0';

if (v = 1) then

n1 <= n4;

n4 <= CONV_STD_LOGIC_VECTOR(10, 4);

end if;

...

end if;

...

...

if(btn0 = '1' and status(0) = '0') then

status(0) <= '1';

elsif (btn0 = '0' and status(0) = '1')then

status(0) <= '0';

n1 <= CONV_STD_LOGIC_VECTOR(1, 4);

n2 <= CONV_STD_LOGIC_VECTOR(2, 4);

n3 <= CONV_STD_LOGIC_VECTOR(3, 4);

n4 <= CONV_STD_LOGIC_VECTOR(4, 4);

n5 <= CONV_STD_LOGIC_VECTOR(5, 4);

n6 <= CONV_STD_LOGIC_VECTOR(6, 4);

n7 <= CONV_STD_LOGIC_VECTOR(7, 4);

n8 <= CONV_STD_LOGIC_VECTOR(8, 4);

n9 <= CONV_STD_LOGIC_VECTOR(10, 4);

end if;

n0 <= check_done(n1, n2, n3, n4, n5, n6, n7, n8, n9);

end if;

END PROCESS;

ボタン D を離し

たときの動作

v の値が 1~6 の

いずれかである

場合は、その位置

の変数と一つ下

の位置の変数の

値を交換する。

ボタンU, L, Rに

ついても同様の

処理をする。

ボタン C を離し

たときの動作

n1~n8 に 1~8,

n9 に 10 の値を

入れる。

ファンクション

文 check_down

の呼び出し

出力 QA0~QD9

に n0~n9 のそ

れぞれを接続す

る。

Page 52: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

52

4.3.2.2 Decode7segment.vhd

4 つの入力信号 A~D を受け取り、2 進数 DCBA を 10 進数に変換した数値の形に 7segLED を点灯さ

せるための 7 つの信号 LEDA~G を出力する。2 進数 DCBA の値が 9 以下ならそれを 10 進数に変換し

た数値を、11 なら―を、10, 12~15 なら空白を表示するための信号を出力する。

4.3.2.3 Controller.vhd

入力信号 BUTTON0~4, CLOCK を受け取り、10 個の LED に数値や記号を表示させるための信号

LED0A~9G を出力する。

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

USE IEEE.std_logic_unsigned.ALL;

ENTITY Controller IS

PORT(

CLOCK : in std_logic;

BUTTON0 : in std_logic;

...

BUTTON4 : in std_logic;

LED_A0 : out std_logic;

LED_B0 : out std_logic;

LED_C0 : out std_logic;

LED_D0 : out std_logic;

LED_E0 : out std_logic;

LED_F0 : out std_logic;

LED_G0 : out std_logic;

...

LED_G9 : out std_logic

);

END Controller;

パッケージの指定

使用する CPLD 独自のヘッダの読み込み

logic 変数を扱うためのヘッダの読み込み

エンティティの定義

std_logic 型 の 入 力 CLOCK, BUTTON0 ~

BUTTON4 を受け取り、LED_A0~LED_G9 を出力

する

Page 53: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

53

ARCHITECTURE rtl of Controller IS

signal A0, B0, C0, D0 : std_logic;

...

signal A9, B9, C9, D9 : std_logic;

BEGIN

puzzle : EightPuzzle port map(

CLK => CLOCK,

btn0 => BUTTON0,

...

btn4 => BUTTON4,

QA0 => A0,

QB0 => B0,

QC0 => C0,

QD0 => D0,

...

COMPONENT EightPuzzle

PORT(

CLK : in std_logic;

btn0 : in std_logic;

...

btn4 : in std_logic;

QA0, QB0, QC0, QD0 : out std_logic;

...

QA9, QB9, QC9, QD9 : out std_logic

);

END COMPONENT;

COMPONENT Decode7Segment

PORT(

A, B, C, D : in std_logic;

LED_A : out std_logic;

...

LED_G : out std_logic

);

END COMPONENT;

コンポーネントEightPuzzleの入出力

の情報

コンポーネント Decode7segment の

入出力の情報

コンポーネント間を接続する為の信

号の宣言

EightPuzzle のエンティティ

出力 CLK, btn0~btn4, QA0~,QD9

に CLOCK, BUTTON , A0~D9 を接

続する。

Page 54: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

54

QA9 => A9,

QB9 => B9,

QC9 => C9,

QD9 => D9

);

decoder0 : Decode7Segment port map(

A => A0,

...

D => D0,

LED_A => LED_A0,

...

LED_G => LED_G0

);

...

decoder9 : Decode7Segment port map(

A => A9,

...

D => D9,

LED_A => LED_A9,

...

LED_G => LED_G9

);

END rtl;

Decode7Segment のエンティティ

出力 A~D, LED_A~LED_G に A0~

D0 を接続する。

Page 55: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

55

4.3.2.4 check.vhd

8puzzle から n1~n9 の値を受け取り、n1~n8 が 1~8, n9 が 10 なら 0 を std_logic_vector 型に変換

したものを、それ以外であれば 11 を変換したものを返す。

4.3.3 動作結果

これらを含んだプロジェクトをコンパイルして CPLD に書き込んだ。使用したロジックエレメントは

240 個であった。

ボタンによる U, D, L, R による空白部分の移動、ボタン C によるリセット、LED0 の完成・未完成状

態表示が確認できた。しかしかなり頻繁に誤動作がおこり、通常ではありえない数字の配置がおこるな

どの問題が残った。

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

USE IEEE.std_logic_unsigned.ALL;

USE IEEE.std_logic_arith.ALL;

package Check is

function check_done(

n1 : std_logic_vector;

...

n9 : std_logic_vector

) return std_logic_vector;

end Check;

package body Check is

function check_done(

n1 : std_logic_vector;

...

n9 : std_logic_vector

) return std_logic_vector is

begin

if(n1 = 1 and n2 = 2 and n3 = 3 and n4 = 4 and n5 =

5 and n6 = 6 and n7 = 7 and n8 = 8 and n9 = 10)then

return CONV_STD_LOGIC_VECTOR(0, 4);

else

return CONV_STD_LOGIC_VECTOR(11, 4);

end if;

end;

end Check;

パッケージの指定

使用する CPLD 独自のヘッダの読み込み

logic 変数を扱うためのヘッダの読み込み

算術演算のためのヘッダの読み込み

パッケージの宣言

std_logic_vector 型の引数 n1~n9 を受け取る。

std_logic_vector 型の戻り値を返す。

完成の判定

n1~n8に 1~8, n9に 10

があった場合は 0 を、そ

れ以外は 11 を返す。

Page 56: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

56

図 4-21 8 パズルの動作例

ボタン D を押すと n5 と n8 の値を交換する

ボタン R を押すと n8 と n9 の値を交換する

未完成状態なので拡張情報表示部

の LED0 に対応する変数 n0 の値は

11 である。

完成したので n0 の値は 0 になる。

Page 57: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

57

4.4 VHDL 言語による三目並べ回路の作成

三目並べとは、3×3 のマスに○と×の記号を交代で置いていき、自分の記号を縦, 横, 斜めのいずれ

かに先に 3 つ揃えることを目的としたゲームである。ここでは押しボタンと 7segLED を入力・表示と

したゲームができる回路を作成する。

4.4.1 仕様

メイン表示部で三目並べを行うためには、LED1~9 で○, ×, 空白と、カーソルの有無を識別できる

ようにしなければならない。そこで、表 4-5 の様に 6 通りの状態を作る。また、拡張情報表示部には

現在○×どちらのターンであるかを識別するために現在のプレイヤーのターンの記号を表示する。

ボタン U, D, L, R を用いてカーソルを移動し、ボタン C を押したときにカーソルがある位置に○か×の

記号がまだ入力されていなければ、現在のターンのプレイヤーの記号を入力する。ボタン U, D を同時

に押すとすべてのマスの記号を消去し、カーソルを中央に戻す。

メイン表示部に表 4-5 の 6 通りの状態を表示させるため、それぞれの LED に対応する 3 ビットの

std_logic_vector 型の変数 n1~n9 を定義する。また、LED0 においても 1, 2 の 2 通りの数値を使い表

示をコントロールする必要があるので、対応する変数 n0 にも 3 ビットの std_logic_vector 型のものを

用いる。

表 4-5 三目並べの LED 表示

変数の値 状態 表示

0 空白

1 ○

2 ×

3 カーソル+空白

4 カーソル+○

5 カーソル+×

6, 7 未使用

Page 58: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

58

4.4.2 プロジェクトの構成

クロックとボタンからの入力を受け取り、ゲーム全体をコントロールする CircleCross、7seg デコー

ダの働きをする Decode7segment を作成し、前者を 1 つ, 後者を 10 個エンティティとして含む 6 入力

70 出力を持つ Controller を作成し、その入出力を CPLD のピンに対応させる。

図 4-22 階層構造を使った設計

Controller

Decode7segment CircleCross

puzzle

decoder0

Decode7segment

decoder9

・・

USERIO02

USERIO100

USERIO96

USERIO97

USERIO01

USERIO98

USERIO99

USERIO51

USERIO53

USERIO61

USERIO54

USERIO52

USERIO56

USERIO55

USERIO04

USERIO05

USERIO06

USERIO03

USERIO08

USERIO62

ボタン

クロック

LED0 へ

LED9 へ

Page 59: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

59

4.4.2.1 CircleCross.vhd

入力信号 btn0~4, CLK を受け取り、3 桁の std_logic_vector 型の 10 個の内部変数 n0~n9 を入力に

応じて変化させ、40 個の信号 QA0~QC9 を出力する。ここで QCkQBkQAk は nk(k は 0~9)を 2 進数

に変換したものに対応する。

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

USE IEEE.std_logic_unsigned.ALL;

USE IEEE.std_logic_arith.ALL;

ENTITY CircleCross IS

PORT(

CLK, btn0, btn1, btn2, btn3, btn4 : in

std_logic;

QA0, QB0, QC0 : out std_logic;

...

QA9, QB9, QC9 : out std_logic

);

ARCHITECTURE rtl of CircleCross IS

signal n0 : std_logic_vector(2 downto 0);

...

signal n9 : std_logic_vector(2 downto 0);

signal status : std_logic_vector(4 downto 0);

signal turn : std_logic;

BEGIN

PROCESS(CLK, n0, n1, n2, n3, n4, n5, n6, n7, n8,

n9, status, turn)

BEGIN

if (CLK'event and CLK='1') then

if(btn4 = '1' and status(4) = '0') then

status(4) <= '1';

elsif (btn4 = '0' and status(4) = '1')then

status(4) <= '0';

if(n1 >= 3) then

n1 <= n1-3;

n4<= n4+3;

end if;

...

end if;

パッケージの指定

使用する CPLD 独自のヘッダの読み込み

logic 変数を扱うためのヘッダの読み込み

算術演算のためのヘッダの読み込み

エンティティの定義

std_logic 型の入力 CLK, btn0~

btn4 を受け取り、QA0~QC9 を

出力する

アーキテクチャ

3bit の std_logic_vector 型

の内部変数 n0~n9 と 5bit

の std_logic_vector 型の内

部変数 status の定義

ボタン D を離したときの

動作

n1~n6 にカーソルがあっ

た場合、一つ下に移動す

る。

Page 60: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

60

QA0 <= n0(0); QB0 <= n0(1); QC0 <= n0(2);

...

QA9 <= n9(0); QB9 <= n9(1); QC9 <= n9(2);

end rtl;

...

...

if(btn0 = '1' and status(0) = '0') then

status(0) <= '1';

elsif (btn0 = '0' and status(0) = '1')then

status(0) <= '0';

if(n1 = 3) then

n1<=CONV_STD_LOGIC_VECTOR(4,3)

+CONV_STD_LOGIC_VECTOR(turn, 3);

turn <= not (turn);

end if;

...

end if;

if(btn4 ='1' and btn3 ='0' and btn2 ='0' and

btn1 ='1' and btn0 ='0') then

status <= "00000";

n1 <= CONV_STD_LOGIC_VECTOR(0, 3);

n2 <= CONV_STD_LOGIC_VECTOR(0, 3);

n3 <= CONV_STD_LOGIC_VECTOR(0, 3);

n4 <= CONV_STD_LOGIC_VECTOR(0, 3);

n5 <= CONV_STD_LOGIC_VECTOR(3, 3);

n6 <= CONV_STD_LOGIC_VECTOR(0, 3);

n7 <= CONV_STD_LOGIC_VECTOR(0, 3);

n8 <= CONV_STD_LOGIC_VECTOR(0, 3);

n9 <= CONV_STD_LOGIC_VECTOR(0, 3);

turn <= '0';

end if;

n0<=CONV_STD_LOGIC_VECTOR(1,3)+

CONV_STD_LOGIC_VECTOR(turn, 3);

end if;

END PROCESS;

ボタン U, L, R について

も同様の処理をする。

ボタン C を離したとき

の動作

カーソルが空白にある

場合は現在のターンの

記号をその位置に配置

しターンを変更する。

リセット(U, D ボタン同

時押し)

n1~n4, n6~n9 に 0、n5

に 3 の値を入れる。

n0に turn+1の値を入れ

出力 QA0~QC9 に n0~

n9 のそれぞれのビット

の値を書き込む

Page 61: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

61

4.4.2.2 Decode7segment.vhd

3 つの入力信号 A~C を受け取り、2 進数 CBA を 10 進数に変換した値に対応する表 4-5 の記号の

形に 7segLED を点灯させるための 7 つの信号 LEDA~G を出力する。

4.4.2.3 Controller.vhd

入力信号 BUTTON0~4, CLOCK を受け取り、10 個の LED に記号を表示させるための信号 LED0A~

9G を出力する。

4.4.3 動作結果

これらを含んだプロジェクトをコンパイルして CPLD に書き込んだ。使用したロジックエレメントは

215 個であった。

ボタン U, D, L, R によるカーソルの移動、ボタン C による現在のプレイヤーのターンの記号の配置、

ボタン U, D 同時押しによるリセット、LED0 の現在のプレイヤーのターンの表示が確認できた。しか

し、8 パズル同様かなり頻繁に誤動作がおこり、カーソルが無くなるなどの問題が残った。

Page 62: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

62

図 4-23 三目並べの動作例

×

×

○のターンなので拡張情報表示

部の LED0 に○を表示するため

対応する変数n0の値は 1になる

ボタン C を押すと、カーソルの位置に○が配置されターンが×に変わる

×のターンなので LED0 には×

が表示される

LED5 では○とカーソルが重な

っているので、このような表示

になる。

ボタン C を押すと、カーソルの位置に×が配置されターンが○に変わる

ボタン L を押すとカーソルが左に移動する

×

×

LED3 は×とカーソルが重なっ

ているので、このような表示に

なる。

ボタン U を押すと上に、ボタン R を押すと右にカーソルが移動する

Page 63: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

63

5. 問題点とその解決法

5.1 ハードウェア

1. 設計段階の配線ミス

図 3-17 のテスト基板(裏側)では、回路図設計で接続すべき DIP スイッチと VCC の間の配線が抜け

た状態のデータを元に基板加工機で基板を作成してしまったため、抵抗の足を利用して基板の裏側にパ

イパス配線を作成した。

2. コネクタの不適合

使用したオス・メスのダブルヘッダピンはペアで購入したものではなかったため、図 5-1 の様に正

しくかみ合わず接触が悪かった。そこで、ハンダごてでメス側のコネクタの突起を熔かし正しく接触す

るようにした。ハンダごてで熔かした際に、熔けたプラスチックが隣の穴を塞ぐことがあったが、その

部分をヤスリで削り穴を露出させた。

図 5-1 コネクタの加工

3. ハンダ不良

ハンダの不足による接触不良のため 7segLED に点灯しないセグメントがあった。この問題は不足部

分にハンダを追加することで一部解決した。

4. 素子の不良

ハンダの修正によっても正しい動作が得られない部分があったため、外部から抵抗を通して電流を流

しても点灯しなかったため、この不具合は素子の不良によるものであることが分かった。部品を交換す

ることでこの問題は解決した。使用する素子に不良品が混入していないかのチェックを事前に行うべき

であるとの教訓が得られた。

5. 高電圧による CPLD 基板の焼損

CPLD に誤って 9V の電圧をかけてしまい QuartusⅡが CPLD を認識しなくなった。そのため新たに

この付録を含むトランジスタ技術を購入しなければならなくなり、研究が遅れた。今回はそのまま

CPLD 基板を入れ替えて対応したが、対策としては確実に 5V の入力が保証される AC アダプタからの

入力に対応した基板を設計するという方法も考えられる。

フラットケーブル

40 ピンコネクタ(オス)

40 ピンコネクタ(メス)

基板

ピン

Page 64: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

64

5.2 ソフトウェア

1. クロックイベントの利用

CPLD 基板に搭載した水晶発信器からの信号をもう一つの入力として使用し、その立ち上がりのイベ

ントでボタンの状態を調べ、変数にその値を格納して、それらを比較することでボタンが離された瞬間

に数値の交換を行う形にした。これは誤動作の問題は残るものの、一応は正しく動作した。

2. ロジックエレメントの不足

三目並べで勝敗が決定したことが確認できるように、拡張情報表示部に勝敗が決定したときは勝者側

の記号を、未定のときはと現在のターンのプレイヤーの記号を表示させるプログラムを作成した。文法

的なエラーなしに目的とした出力を出すはずのものが書けたが、回路を構成するロジックエレメント数

は 340 となり、使用した CPLD の使用可能なロジックエレメントの 大数である 240 を大きく超えて

しまった。そこで拡張情報表示部の機能を現在のターンのプレイヤーの記号の表示のみに限定したとこ

ろ、使用ロジックエレメント数は 215 となり、動作が確認できた。

3. 誤動作

8 パズルの動作で、ボタンを押した際に値が交換されずに同じ数が現れるという現象が起きた。表 5

-1 の方法に加えてさらに 2 通りの方法を試したがいずれも解決には至らなかった。4.3 で紹介したソ

ースコードは方法 4 のものである。

表 5-1 試した方法

A B C

D 方法 1 方法 3 方法 5

E 方法 2 方法 4 方法 6

A) クロックの立ち上がりが発生したときに、ボタンが押されている場合に値の交換を行う。

B) クロックの立ち上がりが発生したときにボタンが離されており、直前のクロックではボタンが押さ

れていた場合に値の交換を行う。

C) ボタンを押したときに値の交換を行う。

D) LED の表示に相当する変数の値を調べ、空白にあたる数値のある位置の変数と隣接する数値を交

換する。

E) 空白の位置にあたる変数を用いて、その値の示す位置の変数と隣接する数値を交換する。

方法 1

使用ロジックエレメント数は 230 個だった。1 秒間に 100 万回起こるクロックの入力があるたびに値

の交換がされるので四隅にしか空白が行かない動作になった。

Page 65: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

65

図 5-2 方法 1の動作

方法 2

使用ロジックエレメント数が 284 個だったため、CPLD に書き込むことができなかった。

方法 3

使用ロジックエレメント数は 222 個だった。空白の状態が二つになる、同じ数字が現れるなどの誤動

作がたびたび起こった。

方法 4

使用ロジックエレメント数は 240 個だった。方法 3 と同様の誤動作は起こるが、この方法の方が起こ

る頻度が少なかった。

方法 5

使用ロジックエレメント数は 238 個だった。方向ボタンを押すと常に空白の状態が無くなり、数字が

重複して現れるという動作になった。

図 5-3 方法 5の動作

方法 6

使用ロジックエレメント数が 257 個だったため、CPLD に書き込むことができなかった。

方法 7

クロックのカウント数にあたる変数 count を導入し、ボタン入力がある度に count を 0 にし count

が一定値(2.5 秒)未満の時は他の入力を受け付けないようにしたが、すべてのボタンについての処理を実

装した場合はロジックエレメント不足で書き込みができなかった。また、一部だけの機能を実装した場

合も count のループ値(5 秒)を周期として、2.5 秒毎に入力を連続的に受け付ける状態とまったく受け付

けない状態が繰り返された。

1 2 3

4 5 6

7 8

1 2 3

4 5 3

7 8 6

1 2

4 5 3

7 8 6

1 2

4 5 3

7 8 6

1 2 3

4 5 6

7 8

ボタン U ボタン L

Page 66: 卒業研究論文aows.jp/lab/GR_2008/aisaka/aisaka.pdfはVHDL(Very high-speed integrated circu it Hardware Description Language) やVerilog HDL が用い られる。 そこで本研究では回路設計と基板設計を統合して扱うことのできる回路CAD

66

方法 8

空白を置くべき位置に相当する変数 pを導入し、クロックの立ち上がりで方向のボタンが押されてい

たら空白が移動するべき位置を pに格納し、そこの変数を空白のある位置の変数をコピーする。立ち上

がりですべてのボタンが離されていたら pの位置に相当する変数に空白の値を入れる。

図 5-4 方法 8の動作

この方法でも一通りは動作したが、数発的に誤動作が見られた。

6. まとめ

本研究において CPLD を使用したミニゲームのための基板を設計して製作し、VHDL で制作したプ

ログラムを書き込むことで、複数のミニゲームの動作をさせることができた。しかし、今回使用した

CPLD 基板の 大ロジックエレメントの数は 240 と少なく、それを越えないようにするために回路を単

純化しなければならなかった。そのため無駄な変数を減らす、入力や出力の信号を必要 低限に抑える

などの工夫をし、使用したロジックエレメントの数をできる限り節約した。組み込みプログラムでは限

られた数で効率よく回路を使わなければならないということを学んだ。

VHDL 言語は今回初めて使ったため、単純なプログラムを理解するのも時間がかかった。しかし使っ

ていくうちに書式, 変数の種類や型を覚えたため今回のような動作プログラムを組むことができた。

CPLD 基板のロジックエレメントがもう少し多ければもっと良いものができたと思うので少し残念で

はあるが VHDL 言語の知識を少しでも身につけることができたことは大きな収穫であった。

参考文献

1.トランジスタ技術 2006 年 4 月号 CQ 出版社 ..................................................................................... 4

2. ALTERA 社 http://www.altera.co.jp/ .................................................................................................. 7

3. VHDL によるハードウェア設計入門 長谷川裕恭著 CQ 出版社 ..................................................... 12

4.電気通信大学 電子工学科 電子工学実験 http://www-lab.ee.uec.ac.jp/

5.電子工作の実験室 http://www.picfun.com/

6.HDL 設計入門 http://homepage3.nifty.com/hdl_design/

1 3 6

4 2 8

7 5 8

1 3 6

4 2 8

7 5

ボタン U 押下

1 3 6

4 2

7 5 8

ボタン U 離す