卒業研究2 umlを用いたハードウェア設計の開発 事例uml...

42
大学 コミュニケーション 1 2006 2 6 2 UML いたハード ェア 2ADT2104 1

Upload: others

Post on 21-May-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

東海大学 電子情報学部 コミュニケーション工学科

卒業論文 12006年 2月 6日

卒業研究2UMLを用いたハードウェア設計の開発

事例

2ADT2104 並木滋

指導教員 清水尚彦 教授

1

Page 2: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

目 次

1 はじめに 7

2 ペイントツールハードウェア 7

3 開発環境 10

4 開発の経緯 10

5 開発プロセス 11

6 モデル 126.1 概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136.2 オブジェクト図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136.3 シナリオ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136.4 シーケンス図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156.5 ステートマシン図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156.6 実装クラス図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

7 PS/2インタフェースモジュール 217.1 PS/2モジュールの役割 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217.2 PS/2モジュール内の機能分割 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217.3 今回用いたコマンド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

8 PS/2マウス 238.1 Host-To-Devise通信 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238.2 Devise-To-Host通信 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238.3 PS/2バスタイミング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238.4 マウスからのデータ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

9 VGA 259.1 vgactlモジュール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259.2 syncoutモジュール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259.3 カーソル位置算出・描画処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269.4 背景・カーソル表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

10 モデルによる拡張の提案 28

10.1 概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2810.2 オブジェクト図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2910.3 シナリオ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3010.4 シーケンス図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3110.5 ステートマシン図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2

Page 3: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

10.6 実装クラス図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3110.7 ブロック図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

11 開発の問題点とつまづき 38

11.1 PS/2インタフェースモジュール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3811.2 vgactlモジュール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3911.3 メモリコントロールモジュール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

12 開発を通して得た知見 41

13 UMLを用いたモデルの適用性についての考察 41

14 教育的効果 42

15 おわりに 42

目次

3

Page 4: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

図 目 次

1 ペイントツールハードウェアの出力画面 . . . . . . . . . . . . . . . . . . . . . . . . 73 PS/2インタフェースモジュールの初期設定の流れ . . . . . . . . . . . . . . . . . . . 84 PS/2インタフェースモジュールブロック図 . . . . . . . . . . . . . . . . . . . . . . 85 vgactlモジュールブロック図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 メモリコントロールモジュールブロック図 . . . . . . . . . . . . . . . . . . . . . . . 82 ペイントツールハードウェアのブロック図 . . . . . . . . . . . . . . . . . . . . . . . 97 開発日程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 全体概念図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 オブジェクト図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1610 全体同期シーケンス図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1711 スプライト読み出し時同期シーケンス図 . . . . . . . . . . . . . . . . . . . . . . . . 1712 背景読み出し時同期シーケンス図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1713 書き込み時同期シーケンス図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1814 非同期シーケンス図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1815 ステートマシン図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1916 実装クラス図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2017 本モジュールの状態遷移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2118 マウス初期化機能の状態遷移図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2119 データサンプリング機能の状態遷移図 . . . . . . . . . . . . . . . . . . . . . . . . . . 2220 1パケット収集機能の状態遷移図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2221 パリティチェック機能の状態遷移図 . . . . . . . . . . . . . . . . . . . . . . . . . . . 2222 PS/2バスのタイミング波形 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2323 マウスからのパケットデータ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2424 マウスの座標系 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2425 VGA Connections from FPGAbord . . . . . . . . . . . . . . . . . . . . . . . . . . . 2526 syncoutのブロック図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2627 VGA Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2628 VGA Control Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2729 画面上の座標位置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2730 座標算出・色選択・描画の状態遷移図 . . . . . . . . . . . . . . . . . . . . . . . . . . 2731 背景・カーソル (スプライト)の読み出しの状態遷移図 . . . . . . . . . . . . . . . . . 2732 全体概念モデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3233 オブジェクト図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3234 全体同期シーケンス図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3335 書き込み時の同期シーケンス図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3336 スプライト読み出し時の同期シーケンス図 . . . . . . . . . . . . . . . . . . . . . . . 3337 背景読み出し時の同期シーケンス図 . . . . . . . . . . . . . . . . . . . . . . . . . . . 3438 SRAMから RAMへの書き込み時の同期シーケンス図 . . . . . . . . . . . . . . . . . 34

4

Page 5: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

39 非同期シーケンス図 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3440 非同期シーケンス図 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3441 ステートマシン図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3542 実装クラス図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3643 拡張を考慮したペイントツールハードウェアのブロック図 . . . . . . . . . . . . . . 3744 ロジックアナライザによるマウスからのデータ確認 . . . . . . . . . . . . . . . . . . 3945 スプライトのバグポイント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3946 スプライトメモリマップ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3947 データフロー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4048 VGAのビットマップと本システムのメモリにマッピングした様子 . . . . . . . . . . 4049 背景のメモリの切り替えの失敗 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40図目次

5

Page 6: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

表 目 次

1 開発環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 PS/2バスタイミング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 カラーコード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 640× 480 Mode VGA Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 各モジュールにおけるつまづき . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39表目次

6

Page 7: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

1 はじめに

Windowsには無料で付いてくるペイントツールがある。パソコンの初心者ユーザでも手軽に

使用でき、誰もが一度は使用した経験のあるツー

ルである。ハードウェア設計初学者である私、木

下、堀口の 3名は、研究室に配属後、最初の開発を行うにあたり、本来、ソフトウェアで構成

されているペイントツールをハードウェアで構

成するための開発を行った。開発未経験者であ

るため、システムの分析・設計が完了しないま

ま開発を進め、開発途中でシステムの分析・設

計に戻るといった場面が度々生じた。開発を終

えて、システム分析・設計の重要性を認識する

ことができた。

その後、システムの分析・設計・実装にUML(UnifiedModeling Language)を用いたプロジェクト型の学習を行った。UMLは分析・設計・実装をモデルで表記することが可能であり、表記法の範囲内で

あれば、どのようなシステムのモデルでも作成す

ることができる。また、オブジェクト指向をベー

スにしているので、オブジェクト指向言語や、オ

ブジェクト指向開発で使用すると高い効果を発

揮する。今回使用した HDL(Hardware Discrip-tion Language)は SFL(Structured Functionaldescription Language)であり、オブジェクト指向型の言語である。よってハードウェア設計に

おいて、UMLを用いてシステムの分析・設計・実装をモデル化し、実際にソースに落すことが

可能であるのではないかと考えた。

本論文では、ペイントツールハードウェアの

開発およびその教育効果について述べる。また、

実際にUMLを用いてペイントツールハードウェアシステムをモデル化し、モデルの適用性につ

いて述べる。

2 ペイントツールハードウェア

ペイントツールハードウェアについて説明す

る。

図 1: ペイントツールハードウェアの出力画面

図 1にペイントツールハードウェアの出力画面を示す。今回開発したハードウェアは PS/2マウスを使用し VGA インタフェースを用いて画面に出力する。出力画面の左側には 8色のパレットがあり、十字の形の青色のカーソルはスプラ

イトを用いて表示されており、さらに PS/2マウスに連動して動くマウスカーソルがある。カー

ソルがパレットの上にある時にマウスの左ボタ

ンを押すと下にある色を選択する。カーソルが

パレット右側の白色部分上にある時マウスの左

ボタンを押すことで選択した色を書くことがで

きる。

図 2にペイントツールハードウェアのブロック図を示す。ペイントツールハードウェアは PS/2通信の処理を行うPS/2インタフェースモジュールと VGAをコントロールする vgactlモジュール、そしてメモリの処理を行うメモリコントロー

ルモジュールの 3つの主機能から構成される。図3に PS/2インタフェースモジュールの初期設定の流れを示す。また図 4、図 5、図 6にそれぞれのモジュールのブロック図を示す。

7

Page 8: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

power on mouse initial- ization

detect mouse data

initialization succeeded

initialization failed

図 3: PS/2インタフェースモジュールの初期設定の流れ

input_data

reg_abdata

reg_b

reg33

reg_st reg_x reg_y

reg_st1 reg_x1 reg_y1

reg_sadata

reg_11

input_clk

send_com

reg_data

reg_clk0 1

out_status out_xdir out_ydir

to vgasync module

ps2d_out ps2c_out

to top module

8 8 8 1

in_clkin_data

from top module

1

1 1

図 4: PS/2インタフェースモジュールブロック図

top modules_in y_inx_in

sreg xreg yreg

sreg<3> xreg sreg<2> yreg

ADD SUI

RegX RegY

8 8 8

wadrreg

wDatareg

adrreg

top module

vgaR vgaG vgaBHS VS

1 1 1 1 1

memcount module

voReg

syncout module

HS VS

11

outdata

3

図 5: vgactlモジュールブロック図

from vgactl module

readaddin writeaddin writedatain

adr din

8

11 11 8

to mempaint1 module

adrreg wadrreg wDatareg

outData

8

3

read readSP

cnt3 base

add

11

write1write10

to vgactl module

voReg

図 6: メモリコントロールモジュールブロック図

8

Page 9: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

ps2c ps2d

vgaR vgaG vgaB VS HS

BIDIRECT

ps2c_in ps2d_inm_clock p_reset

ps2c_out ps2d_out vgaR vgaG vgaB HS VS outdata outclock

top

s_in x_in y_in

VGACTL

vgaR vgaG vgaB HS VS get_info

ps2c_out ps2d_out out_status out_x_dir out_y_dirled0--2status x_dir y_dir

PS2ps2c_in ps2d_in

RAMCTLreadaddinwriteaddinwritedatain

outdata

change read readSP write1--10

SYNCOUT

HSVS

CVVC

hDispvDisp hdispend

vdispendget

changeAdrchangebaseAdr

finishAdrgetresetAdr

adr

RAM_ACCESSdin

outdata

write read

図 2: ペイントツールハードウェアのブロック図

9

Page 10: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

3 開発環境

本開発の開発環境について説明する。使用し

たツールを以下に述べる (表 1参照)。

• SFL

高い抽象度をもつハードウェア記述言語。

並列記述および習得が容易。

• Verilog

ハードウェア記述言語。具体的な回路図に

近い記述。

• sfl2vl

SFL のソースコードを Verilog のソースコードに変換するプログラム。

• Icarus Verilog

Verilogソースコードを実行形式のファイルに変換する Verilogコンパイラ。

• Project Navigeter

EDAツール XILINX社 論理合成用アプリケーションソフト。

• Spartan-3

論理合成可能な FPGAボード。

表 1: 開発環境

工程 ツール

論理設計 SFLVerilog変換 sfl2vl論理検証 Verilog

Icarus Verilog論理合成 Project Navigete

Spartan-3

2004/12/20

1/10

1/31

3/3

studySFL.

designadder onFPGA.

developmentof paint toolhardware.

3/30second dead line.

3/19ASIC designcontestfirst dead line

Don’tmake it !

4/1

development.

4/10 4/20 4/23

target :ASIC design contest

target :A society for the study of parthenon

stop this deveropmentand collect each modulespecification.

test.(convine all module)

make a fewmodificationon paint toolhardware.

4/29completion!

vgactl

PS/2

memory

vga

3/3 4/104/74/4

back groundprocessing

coordinatecalculation

host to mouse and mouse to host comunication processing

sprite processing

test

study vgainterface.

divide functionin PS/2 moduleand vga module.

3/9

divide vga modulein vgactl moduleand memory module.

図 7: 開発日程

4 開発の経緯

図 7に開発の線表を示す。

• 2004年 12月

この時点では、我々は SFLはおろか、開発に関する知識が皆無であった。12月上旬から SFLの学習を始めた。学習方法は SFLによる LSI設計入門のテキストを使用して進めた。この学習で、

SFLの基本的な記述方法と Verilogによる論理シミュレーションの手法を学んだ。

• 2005年 1月

SFLの基礎学習を終え、8ビット全加算器の開発を行った。そして、開発した 8ビット全加算機を FPGAボードに論理合成することで FPGAボードへの実装手法を学んだ。この学習で、SFLを実際に使用して開発を行うことができ、その

教育効果は大きかった。

• 2005年 2月

VGAインタフェースについての学習を始めた。画面出力用のコードを SFLで記述し、VGA インタフェースを用いて画面に色を出力した。色

10

Page 11: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

の出力は、第一段階として、画面全体に一色だ

け出力するようにした。そして、二段階、三段

階と、徐々に多くの色を出力し、また、複数の

色を組み合わせた簡単な絵を出力をするように

記述していった。この学習で、初めてクロック

のタイミング制約について学んだ。

• 2005年 3月

同研究室の木下・堀口と共に、パルテノン研究会

の ASICデザインコンテストへの応募を目標にペイントツールハードウェア開発を 3日から始めた。プロジェクトの進め方に関して知識の無

い我々は開発計画を立てずに最初から PS/2マウス制御側と VGA出力側にそれぞれの役割を分割した。開発を進めた結果、最終的には PS/2インタフェースモジュール・vgactlモジュール・メモリコントロールモジュールの 3つに分割した。このように、開発を進めるうちに修正点が多々

発生し、その結果各機能のモジュールは一つも

できず、19日の締め切りには間に合わなかった。その為、月末を目標に開発を継続した。しかし、

31日になっても機能のモジュールは一つも出来ずに月末の目標も守ることができなかった。

• 2005年 4月

最終的に本開発の目標を 6月のパルテノン研究会での発表に変更した。4月に入ってからも開発計画を作成せず、それぞれの担当モジュールの

開発はそれぞれの進度で進んだ。10日に各機能を一つのシステムに統合し、論理シミュレーショ

ンと FPGAボードへの実装を行った。実装によるデバッグのため、バグが収束せず開発が息詰

まった。その為、20日に一旦実装によるデバッグを中断し、各設計者が自分の担当モジュール

を中心に仕様書の作成を行い、相互確認を行っ

た。23日からその確認を基に実装によるデバッグではなく、論理シミュレーションでチェックを

し、修正を行った。29日にペイントツールハードウェアが完成した。

5 開発プロセス

本開発は以下の開発プロセスで進めた。

1. 要求分析

ペイントツールハードウェアの構成をメン

バー 3人で話し合って決めた。VGA出力により画面に出力し、PS/2マウスを動かすことによって画面上のカーソルが動き、

その動きに合わせて描画するという構成で

ある。

2. 外部設計

画面の構成やユーザインタフェースを決め

た。画面の構成は、画面左側に黒・青・緑・

青緑・赤・紫・黄・白の 8色のパレットを置き、画面右側に白地のパレットを配置した。

ユーザインタフェースは、画面上の 8色上で左クリックすることで色を選択でき、画

面右側の白地のパレット上で左クリックす

ることで、選択した色で描画できるという

構成である。

3. 内部設計・コーディング

主機能を PS/2インタフェースモジュール、vgactlモジュール、メモリコントロールモジュールに 3分割した。また、各モジュールとも担当の開発者がコーディングしなが

ら内部設計をするというように内部設計

とコーディングを同時に行った。モジュー

ル間インタフェースについての確認をメン

バー 3人で詳しく行わなかった。以下に機能ごとに行った内部設計について述べる。

• PS/2インタフェースモジュール

電源を入れると同時に初期化を行う。

初期化が完了次第、マウスからデータ

を受け取り、パケット解析し、PS/2マウスの前位置との差分データと PS/2マウスの左ボタンを押したかどうかの

ステータスデータを vgactlモジュールに渡す。

11

Page 12: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

• vgactlモジュール

PS/2インタフェースモジュールからPS/2 マウスの前位置との差分とステータスのデータを受け取り、その

データを基にカーソル (スプライト)の位置を割出す為の座標計算や描い

ているどうかの判断、出力画面の構

成の判断を行う。そして、その判断

を基に背景やカーソル (スプライト)のデータの読み出しや書き込みをメ

モリコントロールモジュールに指示

し、読み出したデータで出力画面を

構成する。

• メモリコントロールモジュールvgactlモジュールから来る信号を基に 10個の block RAMに保存されている背景と 1個の block RAMに保存されているカーソル (スプライト)のデータの読み出し、または書き込み

をする。また、これら 11個の blockRAMの中で、背景を保存する blockRAMとカーソル (スプライト)データを保存する block RAMの使い分けを行う。

4. テスト

単体テストを行ったのは PS/2 インタフェースモジュールだけであり、vgactlモジュールとメモリコントロールモジュールに

ついては結合テストを行った。また全体

を結合してのシミュレーションを入念に行

わず FPGAボードに実装してバグ検出を行った。

6 モデル

ペイントツールハードウェアシステムを UMLを使ってモデル化する。

システムのモデル化はまず、システムの要求

を分析し、コンピュータ処理に依存しないモデ

ル (CIM:Computation Independent Model)を作成することから始まる。そして、プラットフ

ォームに依存しないモデル (PIM:Platform In-dependent Model)に変換し、最後にプラットフォームに特化したモデル (PSM:Platform SpecificModel)に変換する。PSMはソースコードと 1対1の関係であり、PSMからソースコードを生成する。

今回の開発ではペイントをFPGAボード・PS/2MOUSE・VGAを使用して実現することを予め掲示されていたので、要求分析によるCIMの作成は不要と判断した。また、本研究室は SFLを用いた LSI設計を行っているため、実装言語が特定されるこ

とになり、PIMの作成も不要と判断した。よって、PSMのみで十分と判断した。ただし、FPGAボードのプラットフォーム依存の無い、ソース

コードと 1対 1の関係になるモデルであることを心がけた。

モデリングの手順を以下に示す。

1. システムの概念モデルの作成。

2. 各オブジェクトの振る舞いを概念シナリオで表す。

3. 概念シナリオを基に FPGAボードに構成する LSIをオブジェクト図で表す。

4. オブジェクト図で表した各オブジェクトの振る舞いをシナリオで表す。

5. 静的な構造をクラス図を用いて表す。

6. オブジェクト間の相互作用をシーケンス図用いて時系列で表す。

7. システムを構成するオブジェクトの状態の遷移をステートマシン図で表す。

12

Page 13: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

8. 実装クラス図を用いて表す。

今回使用する言語は SFLであり、オブジェクト指向型の言語であるが、ハードウェア記述言

語である。よって、モデルとソースコードが 1対 1となるようにするために、モデルからソースコードに変換する際に変換ルールを設ける必

要があった。

6.1 概念

図 8はペイントツールハードウェアシステムの全体概念図である。概念モデルはシステムの

構成を扱いやすくするために作成した。ペイン

トツールハードウェアシステムは大きく分けて、

PS/2MOUSEオブジェクト・CRTオブジェクト・FPGAボードオブジェクトから構成されている。また、FPGAボードはさらに細かいオブジェクトで構成している。これらのオブジェクトはシス

テムに重要な役割を果たすオブジェクトであり、

それぞれの関係に矛盾が無いようにオブジェク

ト同士を矢印で表した。PS/2MOUSEオブジェクトは通信プロトコルに従って FPGAボードに対して status・x軸差分データ・y軸差分データを送信する。CRTオブジェクトは FPGAボードから RGBデータを受け取り画面に出力する。FPGAボードオブジェクトは PS/2MOUSEとのデータのやり取りを行い、PS2/MOUSEからの送られてくるデータを基に画面上の色の構成

を制御し、CRTへ VGA出力用の RGBデータを送信する。以下に各オブジェクトの振る舞い

を表した概念シナリオを述べる。

• PS/2MOUSEオブジェクト

– FPGAボードから初期化のためのコマンドをを受け取り初期化をする。

– 初期化後、プロトコルに合わせてマウ

スの状態を表した (status)・x軸差分データ (x dir)・y軸差分データ (y dir)を 1ビットごとに FPGAボードに送信する。

• CRTオブジェクト

– FPGAボードから送られてくるVGAの RGBデータを画面に出力する。

• FPGAボードオブジェクト

– PS/2MOUSEの初期化を行う。

– PS/2MOUSEから送られてくるビットデータの抽出・1パケットデータの生成・パリティチェックを行う。

– PS/2MOUSEとの通信プロトコルを確立する。

– 1パケットデータを基に VGA出力の制御を行う。

– メモリに画面上に配置する色の構成

を保存する。

6.2 オブジェクト図

図 9にオブジェクト図を示す。実際に設計を行う部分は FPGAボードに構成する LSIであるため、FPGAボードをより具現化するため、概念シナリオからオブジェクトを抽出を行った。各

オブジェクトが示しているものは FPGAボードに構成する個々のモジュールである。

6.3 シナリオ

各オブジェクトのシナリオを表すことにより、

各オブジェクトの振る舞いを明確にする。以下

に各オブジェクトのシナリオを述べる。

• BIDIRECT

– FPGAボードからクロック信号が供給される。

– FPGAボードから供給されるクロック信号を 25MHzへ分周し、システムクロックとする。

13

Page 14: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

– PS/2MOUSEに対してPS2/MOUSEデータを入力・出力する (双方向通信)。

– PS/2MOUSEに対してPS/2MOUSEクロック信号を入力・出力する (双方向通信)。

– CRTへ Redデータ・Greenデータ・Blueデータ・Horizontal Sync信号・Vertical Sync信号を出力する。

– TOPへシステムクロック・PS/2MOUSEクロック信号・PS/2MOUSEデータを出力する。

– TOPからの PS/2MOUSEクロック・PS/2MOUSEデータ・Redデータ・Greenデータ・Blueデータ・Horizon-tal Sync信号・Vertical Sync信号を入力する。

• TOP

– BIDIRECTからのシステムクロック・PS/2MOUSEクロック・PS/2MOUSEデータを入力する。

– PS/2MOUSE CONTROLLERからのPS/2MOUSEクロック・PS/2MOUSEデータ・ステータス・x軸差分データ・y軸差分データを入力する。

– VGA CONTROLLERからのRedデータ・Greenデータ・Blueデータ・Hor-izontal Sync信号・Vertical Sync信号を入力する。

– BIDIRECT へ PS/2MOUSE クロック・PS/2MOUSEデータ・Redデータ・Greenデータ・Blueデータ・Hor-izontal Sync信号・Vertical Sync信号を出力する。

– VGA CONTROLLERへシステムクロック・ステータス・x軸差分データ・y軸差分データをVGA CONTROLLERへ出力する。

– PS/2MOUSE CONTROLLERへシステムクロック・PS/2MOUSEクロック・PS/2MOUSEデータを出力する。

• PS2MOUSE CONTROLLER

– TOPからのシステムクロック・PS/2MOUSEクロック・PS/2MOUSEデータを入力する。

– TOPへ (ステータス・x 軸差分データ・y軸差分データを出力する。

– PS/2MOUSEを初期化を行う。

– ビットデータの抽出および 33ビットの 1パケットデータを生成する。

– 1パケットデータのパリティチェックを行う。

• VGA CONTROLLER

– TOPからのステータス・x軸差分データ・y軸差分データを入力する。

– TOPへ Redデータ・Greenデータ・Blueデータ・Horizontal Sync信号・Vertical Sync信号を出力する。

– SYNCOUTからの Horizontal Sync信号・Vertical Sync信号を入力する。

– カーソル (スプライト)位置の算出・背景データの変更点のアドレスの算

出を行う。

– 画面上の色の構成に合わせてRedデータ・Greenデータ・Blueデータを生成をする。

– RAM CONTROLLERへ背景データのアドレスを出力し、読み出しと書き

込みの指示をする。

– RAM CONTROLLERへカーソル (スプライト)データの読み出しを指示する。

14

Page 15: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

– RAM CONTROLLERからの背景データ・カーソル (スプライト)データを入力する。

• SYNCOUT

– VGA CONTROLLERへ HorizontalSync信号・Vertical Sync信号・各種の合図を出力する。

– Horizontal Sync信号・Vertical Sync信号を生成する。

– 背景データのアドレスの変更の合図

を生成する。

• RAM CONTROLLER

– VGA CONTROLLERからの読み込み合図・書き込みの合図・アドレスを

入力する。

– VGA CONTROLLERへ背景データ・カーソル (スプライト)データを出力する。

– 内部メモリの切替えを行う (SPAR-TAN3の場合)。

• RAM ACCESS

– 内部メモリに対して読み出し・書き込

みをする。

6.4 シーケンス図

ペイントツールハードウェアシステムは複数

の同期シーケンスと非同期シーケンスをもって

いる。図 10に全体同期シーケンス、図 11にスプライト読み出し時の同期シーケンス、図 12に背景読み出し時の同期シーケンス、図 13に書き込み時の同期シーケンスを示す。図 14に各オブジェクトの非同期シーケンスを示す。

6.5 ステートマシン図

図 15にステートマシン図を示す。すべてのオブジェクトは電源 ON後、終了状態は存在しない。内部状態はある程度までを示し、仕様の範

囲については示していない。

6.6 実装クラス図

図 16に実装クラス図を示す。個々のクラスはモジュールであり、属性が表すものは input 名と output名およびビット幅である。操作はそのモジュールがもつ制御信号であり、端子と端子

をつなぐ記述および個々のみがもつ役割はすべ

て「~ctl()」として表した。

15

Page 16: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

CRT

PS2MOUSE

PS2MOUSE_CONTROLLER TOP BIDIRECT

VGA_CNTROLLER

RAM_CONTROLLER SYNC_CONTROLLER

RAM_ACCESS

RAM

FPGA LOGIC CELL

図 8: 全体概念図

1

1

1

1

1

11

1 1

1

1 1

RAM_ACCESS

PS/2MOUSE_CONTROLLER

RAM_CONTROLLERSYNCOUT

VGA_CONTROLLER

BIDIRECT

TOP

1

図 9: オブジェクト図

16

Page 17: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

: RAM_ACCESS : RAM_CONTROLLER : SYNCOUT : VGA_CONTROLLER: PS/2MOUSE_CONTROLLER : TOP

: vDisp()

: vDispend()

: get()

: out_xdir(xdir : 8)

: out_ydir(y_dir : 8)

: out_status(status : 8)

: get_info(s_in : 8, x_in : 8, y_in : 8)

図 10: 全体同期シーケンス図

: VGA_CONTROLLER : RAM_CONTROLLER : RAM_ACCESS

: read(adr : address)

: readSP()

図 11: スプライト読み出し時同期シーケンス図

: RAM_ACCESS : RAM_CONTROLLER : VGA_CONTROLLER

: read(adr : address)

: read(read_adr : address)

図 12: 背景読み出し時同期シーケンス図

17

Page 18: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

: RAM_ACCESS : VGA_CONTROLLER : RAM_CONTROLLER

: write(write_adr : address, write_data : data)

: write(adr : address, data : data)

図 13: 書き込み時同期シーケンス図

: PS/2MOUSE_CONTROLLER : TOP : VGA_CONTROLLER : BIDIRECT : SYNCOUT

: topctl() : vgactl(): bidirectctl() : syncctl(): ps2ctl()

図 14: 非同期シーケンス図

18

Page 19: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

bidirectctl

VGA_CONTROLLER

mouse initialization detect mouse data

SYNCOUT

topctlPowerOn

RAM_ACCESS

PowerOn

TOP

PS/2MOUSE_CONTROLLER

RAM_CONTROLLER

BIDIRECT

PowerOn succeed initialization

failed initialization

idle idlefinish idle finish idle

finish detect

vgactlPowerOn

syncoutctlPowerOn

idle

readSP

read _background

write _background

PowerOn

readSP

write_background

read_background

finish readSP

finish write_background

finish read_background

idle

read

write

read finish read

write

finish write

PowerOn

図 15: ステートマシン図

19

Page 20: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

BIDIRECT- ps2c : 1- ps2d : 1- vgaR : 1- vgaG : 1- vgaB : 1- HS : 1- VS : 1- m_clock : 1- p_reset : 1- bidirectctl()

SYNCOUT- HS : 1- VS : 1+ hDisp()+ vDisp()+ hDispend()+ vDispend()+ changrAdr()+ finishAdr()+ syncoutctl()+ get()- syncctl()

TOP- ps2c_in : 1- ps2d_in : 1- ps2c_out : 1- ps2d_out : 1- vgaR : 1- vgaG : 1- vgaB : 1- HS : 1- VS : 1- topctl()

RAM_CONTROLLER- read_adr_in : address- write_adr_in : address- write_data : data- read_data : data+ readSP()+ write(write_adr:address,write_data:data)+ read(read_adr:address)

RAM_ACCESS- adr : address- data : data+ write(adr:address,data:data)+ read(adr : address)

VGA_CONTROLLER- s_in : 8- x_in : 8- y_in : 8- vgaR : 1- vgaG : 1- vgaB : 1- HS : 1- VS : 1+ get_info(s_in:8,x_in:8,y_in:8)- vgactl()

PS/2MOUSE_CONTROLLER- ps2c_in : 1- ps2d_in : 1- ps2c_out : 1- ps2d_out : 1- status : 8- x_dir : 8- y_dir : 8+ out_status(status:8)+ out_xdir(xdir:8)+ out_ydir(y_dir:8)- ps2ctl()

図 16: 実装クラス図

20

Page 21: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

7 PS/2インタフェースモジュール

7.1 PS/2モジュールの役割

本モジュールの役割について述べる。本モジ

ュールはデバイスの初期化とデバイスから送ら

れて来るデータの処理を行う。デバイスの初期

化では、コマンドを発行してデバイスをデータ

伝送許可の状態にする。データ処理ではデバイ

スから送られて来る1パケット分のデータを取

得し、パリティチェックを行い、データが正しけ

ればデータであるマウス状態データ、X座標データ、Y座標データの 3つの情報を、1つ上のTOPモジュールに転送する。もしデータが正しくな

ければ再送要求のコマンドをデバイスに発行す

る。図 23に本モジュールのステートチャートを示す。

power on mouse initial- ization

detect mouse data

initialization succeeded

initialization failed

図 17: 本モジュールの状態遷移

7.2 PS/2モジュール内の機能分割

本モジュール内の機能分割について述べる。機

能はマウス初期化、データサンプリング、1パケット収集、パリティチェックの 3つがある。SFLではそれぞれの機能を 1つのステージとして記述している。以下にそれぞれの機能について説明

する。

• マウス初期化機能

デバイスの初期化を行う。具体的にはいくつか

のコマンドを順にマウスに送り、マウスをデー

タ伝送可能状態にする。電源を入れると直ちに

本機能ステージを生成し、マウスにコマンドを

送り、初期化を行う。初期化が終了すると本機能

ステージを終了し、残りの機能である 3つの機能ステージを生成する。図 18に本機能のステートチャートを示す。

command finish

forth invalid data

power on

mouse:Enable data reporting

mouse:Reset

invalid data

command finish

get the mouse data

mouse:Resendcommand finish

図 18: マウス初期化機能の状態遷移図

• データサンプリング機能

本機能はマウスから送られて来るデータのビッ

ト抽出を行うもので抽出したビットデータは 1パケット収集機能に渡す。データ抽出はマウス

が生成するクロック信号が ”Low”のときに行う。図 19に本機能のステートチャートを示す。

21

Page 22: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

detect next falling edge on clock line

get data

waiting 30usdetect risingedge on clock line

waiting 30us

図 19: データサンプリング機能の状態遷移図

• 1パケット収集機能

本機能ではデータサンプリング機能から送られ

て来るビットデータを 33ビット収集し、1パケットデータを生成する。マウスからの 1パケット送信間隔は約 50msであり、この間隔を考慮することで、収集した 33ビットデータがマウスから送られて来る 1パケットデータとなる。生成した 1パケットデータはパリティチェック機能に渡す。図 20に本機能のステートチャートを示す。

initial state

waiting for mouse data

get the data

time out

waiting for 5ms

preserving mousedata(33total bits)

get the data

図 20: 1パケット収集機能の状態遷移図

• パリティチェック機能

1パケット収集機能から送られてきたデータのパリティチェックを行う。1パケット内のマウスの3つの8ビットデータである、状態データ、X座標データ、Y座標データについてパリティチェックを行い、3つのデータがすべて正しければそれらのデータを 1つ上の TOPモジュールに送る。図 21に本機能のステートチャートを示す。

get the 33 bits data

initial state

waiting for 33 bits data

divide the datainto status,xdirand ydir

checking parity bit

invalid data

valid data

preserving each data

図 21: パリティチェック機能の状態遷移図

7.3 今回用いたコマンド

本モジュールでは 3つのコマンドを用いており、それらについて説明する。

• Resetコマンド (hFF)

デバイスの初期化の際に用いるコマンドである。

デバイスはこのコマンドを受け取るとACK(hFA)と self-test(hAA)とmouseID(h00)を返信し、Re-setModeとなる。

• Resendコマンド (hFE)

このコマンドは再送要求コマンドである。ホス

トはデバイスから無効データを受け取ると、こ

のコマンドを送信する。このコマンドを送ると

22

Page 23: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

デバイスは前パケットを再送する。もし、デバ

イスが Resendコマンドに対し再び無効パケットを返信してくる際は、ホストは再び Resendコマンドを送信するか、Errorコマンドをデバイスに送信しデバイスにリセットをかける、もしくは

通信禁止の手段をとる。どの手段をとるかはホ

ストに依存する。

• EnableDataReportingコマンド (hF4)

デバイスのデータ伝送を許可するためのコマン

ドである。デバイスはこのコマンドを確認する

と、マウスの位置カウンタをリセットしデータ

伝送を開始する。このコマンドを発行しないと

デバイスからデータを得ることができない。

8 PS/2マウス

8.1 Host-To-Devise通信

ホストからデバイスにデータを送るときの通

信プロトコルについて説明する。ホストからデバ

イスにデータを送る際は、最初に”Request-to-Send”という状態をつくる必要がある。この状態は、ホストがクロック信号を 100usから 10msの間立ち下げ、次にクロック信号を立ち下げる

ことでつくることができる。この状態でクロッ

ク信号を開放し、ハイインピーダンスとすると、

デバイスは”Request-to-Send”状態を確認する。デバイスはこの状態の確認後、クロック信号を

生成し PS2C端子からそのクロック信号をホストに入力する。ホストはこの入力されるクロッ

ク信号に合わせて、デバイスにデータを送るこ

とができる。

ホストはクロック信号が”Low”のときにのみデータをデータ線に書き込むことができる。デ

バイスはクロック信号の”High”のときにデータを読み込むため、そのときホストはデータを

書き換えてはならない。デバイスはデータの最

終ビットであるストップビット’1’を読み込むと、データ線に”Low”を入力してクロックパルスを

1つ生成する。11クロックパルスの後にホストはデータ線を開放しなければならず、もし開放

しなければデバイスはクロック信号を生成し続

けエラーとなる。ホストがクロックを開放して

から 20ms以内にデバイスはコマンドに対するACKコマンドを送る。

8.2 Devise-To-Host通信

デバイスからホストにデータが送られるとき

の通信プロトコルについて説明する。デバイス

から1パケット分の情報が送られるとき、その

前のクロックが少なくとも約 50usは”High”でなければならない。デバイスはクロック信号が”

High”の時にデータ線にデータを書き込み、ホストはクロック信号が”Low”の時にそのデータを読み取る。上記のクロック信号はデバイスが

生成するクロック信号であり、データ伝送時に

生成する。

8.3 PS/2バスタイミング

PS/2バスタイミングを表 2と図 22に示す。クロック信号とデータ信号はデータ伝送がある

ときだけ動作し、アイドル状態のときは”High”である。図 22に示すようにデバイスはクロック信号が ”High”のときデータ線に 1ビット書き込み、ホストはクロック信号が”Low”のときにデータを読み込む。

Edge 10

’1’stop bit’0’start bit

CLK(PS2C)

DATA(PS2D)

TckEdge 0

TsuThld

図 22: PS/2バスのタイミング波形

23

Page 24: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

表 2: PS/2バスタイミング

記号 パラメータ Min Max

Tck クロックが Highまたは Lowである時間 30us 50us

Tsu データセットアップ時間 5us 25us

Thld データホールド時間 5us 25us

8.4 マウスからのデータ

マウスは動作時にクロック信号とデータ信号

を生成する。マウスは動かなければアイドル状

態となり, これらの信号は”High”となる。マウスは動く度に、3 つの 11ビットデータ計 33ビットをホストに送信する。11ビットデータ構成はスタートビット’0’から始まり、それに続いて 8ビットのマウスデータ、次に奇数パリティビット、そして最後にストップビット’1’となっている。すなわち 1パケット 33ビットデータは、0ビット目、11ビット目そして 22ビット目が各11ビットデータのスタートビット’0’となり、10ビット目、21ビット目そして 33ビット目がそのそれぞれのストップビット’1’となっている。3つの 8ビットデータ領域は図 23に示す動作データで構成される。データはデバイスが生成する

クロック信号の立ち下がりで有効であり、その

クロック期間は 20kHzから 30kHzである。

1 0 L R 0 1 XSYS XV YV 1 0 X0 X1 X2X3 X4 X5 X6 X7 PP 1 0 Y0 Y1 Y2Y3 Y4 Y5Y6 Y7 P 1

idol state start bitstop bit stop bitstart bitstart bit

stop bitidol state

mouse status byte X direction byte Y direction byte

L : Left botton flag

R : Right botton flagXS,YS : define the sign of each valueP : Parity bitX0~7,Y0~7 : magnitude of the X and Y valuesXV,YV : indicate when the X or Y values exceed their maximum value

図 23: マウスからのパケットデータ

PS/2マウスは図 24に示す相対座標系を利用している。マウスを右に動かすと X軸において正の値を生成し、左に動かすと負の値を生成す

る。同様に Y軸では上へ動かすと正の値を生成

し、下へ動かすと負の値を生成する。状態デー

タの XSと YSビットはマウス動作における X軸、Y軸の正負を表す。例えば、1であるならば負の値を示す。Xと Yの値の大きさはマウスの動きの比率によって定まる。値が大きい程マウ

スは速く動いている。状態データの XVと YVは、オーバーフローフラグであり、XもしくはYの値がそれらの最大値を越えたときに 1となる。もしマウスが連続動作する場合は、約 50ms間隔で 1パケットデータが伝送される。状態データの Lと R領域は左ボタンと右ボタンが押されたときに用いる。ボタンが押されているときは

1が表示される。

+Y values(YS=0)

+X values (XS=0)

-Y values(YS=1)

-X values (XS=1)

X:001111111Y:001111111

X:001111111Y:110000001

X:110000001Y:110000001

X:110000001Y:001111111

図 24: マウスの座標系

24

Page 25: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

9 VGA

VGAとは Video Graphics Arrayの略称である。IBM社が開発し、パソコン PS/2に組み込んだグラフィックシステムである。640× 480ドットである。本開発で使用する VGAの出力色は8である。そのカラーコードを表 2に示す。また、本開発で使用する VGA Connectionを図 8に示す。

GND

VS

HSB

G

R270Ω

270Ω

270Ω

1

2

3

4

5

DB15 Connector

図 25: VGA Connections from FPGAbord

表 3: カラーコード

R(Red) G(Green) B(Blue) 出力色

0 0 0 黒

0 0 1 青

0 1 0 緑

0 1 1 シアン

1 0 0 赤

1 0 1 マジェンタ

1 1 0 黄

1 1 1 白

9.1 vgactlモジュール

本モジュールはVGA出力のコントロールを行う。具体的には、PS/2インタフェースモジュールから PS/2マウスの前位置との差分データとボタンを押したかどうか判断するステータスデー

タを基にカーソル (スプライト)の位置の算出、描画による背景のデータの変更点の算出をする。

この処理により、背景・カーソル (スプライト)の画面上の構成を作成する。また、メモリコン

トロールモジュールに読み出しと書き込みの指

示を行う。VGA出力のタイミングは 640× 480であるが、今回使用した block RAMの個数の関係で、1アドレスにつき 4ドット分の色データを表示するという仕様にした。160× 120分の色データである。

サブモジュールとして syncoutモジュールがある。TOPモジュールに垂直信号、水平信号、構成した背景・カーソル (スプライト)通りに R・G・Bを渡す。

9.2 syncoutモジュール

本モジュールは vgactlのサブモジュールである。本モジュールのブロック図を図 26に示す。一つ目の機能は、640× 480モード VGA出力の為の水平信号と垂直信号のタイミングを作成

し、作成した 2つの信号を vgactlモジュールに渡す。図 27、図 28、表 4は水平信号と垂直信号のタイミングである。それぞれ画面に出力でき

るタイミングは Tdispの期間であり、それ以外の期間では画面に出力することはできない。

二つ目の機能は、メモリコントロールモジュー

ルが背景・カーソル (スプライト)の色データを読み出す際のアドレスを変えるタイミングを作

成している。本開発では、実際には 160× 120の色データであるので、変えるタイミングは 4クロック毎に一回であり、vgactlモジュールにそのタイミングを知らせる。

25

Page 26: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

表 4: 640× 480 Mode VGA Timing

Symbol Parameter Vertical Sync Horizontal Sync

Time Clocks Lines Time Clocks

Ts Sync pulse time 16.7 ms 416800 521 32 us 800

Tdisp Display time 15.36 ms 384000 480 25.6 us 640

Tpw Pulse width 64 us 1600 2 3.84 us 96

Tfp Front porch 320 us 8000 10 640 ns 16

Tbp Back porch 928 us 23200 29 1.92us 48

1

vCount

ADD

HS VSvgactl module

1

hCount

ADD

1 1

nVSnHS

図 26: syncoutのブロック図

9.3 カーソル位置算出・描画処理

図 29に画面上の座標を示す。図 30にカーソル (スプライト)の座標算出、色選択、描画の 3つの処理の状態遷移を示す。これら 3つの機能は状態の遷移で行い、同時に処理を行う時は無い。

PS/2インタフェースモジュールからデータを受け取り、まず最初に行うことはカーソル (スプライト)の位置を決める座標算出である。PS/2インタフェースモジュールから受け取るデータ

は PS/2マウスの前の位置からの差分座標であるので、前の座標から差分座標をステータスデー

タを基に加算、または減算をすることで現在の

H-Ts

V-Ts

V-TbpH-Tbp H-Tfp

V-Tdisp

H-Tdisp

V-Tfp

H

V

Horizontal Sync

Vertical Sync

Enable output display period.

V-Tpw

H-Tpw

図 27: VGA Display

座標が算出できる。

次に、ステータスデータに左ボタンを押した

というデータが入っていた場合、上記で算出し

た現在の座標を基に、画面上の色を選ぶ部分か、

または描画する部分かを判断する。色を選ぶ部

分の場合は、その色のデータを色レジスタに保

存する。最後に、状態は初期状態に戻る。描画す

る部分の場合は、上記で算出した現在の座標か

らその座標部分の背景データが入っている blockRAMのアドレスを計算により算出する。そして、そのアドレス、現在色レジスタに入ってい

るデータ、書き込み信号をメモリコントロールモ

26

Page 27: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

Tdisp

Ts

Tpw Tfp Tbp

図 28: VGA Control Timing

ジュールに渡す。最後に状態は初期状態に戻る。

BlueBlack

Green

Cyan

RedMagenta

YellowWhite

Enable write

(0,0) (40,0) (159,0)

(0,119) (40,119) (159,119)

(40,15)

(40,15)

(40,15)

(40,15)

(40,15)

(40,15)

(40,15)

図 29: 画面上の座標位置

9.4 背景・カーソル表示

図 31に背景とカーソル (スプライト)の色データの読み出しの状態遷移を示す。

背景の色データは 10個の block RAMに入っており、一つの block RAMで使用できる 0~2047アドレスの内、本開発では 0~1919アドレスを仕様している。背景の色データを読み出す

タイミングは 4クロックに一回であり、そのタイミングは syncoutモジュールから受け取る。読み出す際は、0~1919アドレスを順番に読み出す。1919アドレスまで読みだしが完了した場合、メモリコントロールモジュールに次の block RAMを読むという信号を出す。この動作を繰り返す

ことにより、160× 120分の背景の色データを読み出すことができる。

initial state

waitting signal

coordinates

calculation

select color ordecide writting Y-ordinate

decide writting x-ordinatewrite memmory

get signal

writable areaselect color case

図 30: 座標算出・色選択・描画の状態遷移図

カーソル (スプライト) の色データは 1 個のblock RAMに入っている。これを読み出すタイミングはカーソル (スプライト)の位置座標から算出する。カーソル (スプライト)の範囲分、背景の色を出力せずに、カーソル (スプライト)の色を出力するように制御する。

read background dataand sprite data oraddress reset

get memory dataand add address data

read signal

図 31: 背景・カーソル (スプライト)の読み出しの状態遷移図

27

Page 28: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

10 モデルによる拡張の提案

現段階のペイントツールでは大きな問題とし

て、以下の 2点が挙げられる。

• 160*120ドット分のデータしか扱えないため、繊細な描画を行うことができない。

• 最初のハードウェア設計であったため、システムの階層設計が良くない。

よって、以上 2点の修正を踏まえたペイントツールハードウェアシステムの拡張を提案する。

UMLを用いてモデル化を行った。現段階でのペイントツールハードウェアシス

テムの拡張であるため、CIM・PIMの作成は不要とし、PSMのみで十分と判断した。また、実装言語および変換ルールにおいても変更はない。

ただし、FPGAボードのプラットフォーム依存の無い、ソースコードと 1対 1の関係になるモデルであることを心がけた。

モデリングの手順を以下に示す。

1. システムの概念モデルの作成。

2. 各オブジェクトの振る舞いを概念シナリオで表す。

3. 概念シナリオを基に FPGAボードに構成する LSIをオブジェクト図で表す。

4. オブジェクト図で表した各オブジェクトの振る舞いをシナリオで表す。

5. 静的な構造をクラス図を用いて表す。

6. オブジェクト間の相互作用をシーケンス図用いて時系列で表す。

7. システムを構成するオブジェクトの状態の遷移をステートマシン図で表す。

8. 実装クラス図を用いて表す。

10.1 概念

図 32は拡張を考慮したペイントツールハードウェアシステムの全体概念モデルである。

全体的なオブジェクトに変更はなく、変更点は

FPGAボード内のオブジェクトを追加した。追加したオブジェクトは SRAM CONTROLLERオブジェクト・ASYNCHRONOUS T 1オブジェクト・ASYNCHRONOUS R 1オブジェクト・ASYNCHRONOUS T 2オブジェクト・ASYN-CHRONOUS R 2オブジェクトである。振る舞いの変更は FPGAボードオブジェクト

のみである。以下に各オブジェクトの振る舞い

を表した概念シナリオを述べる。

• PS/2MOUSEオブジェクト

– FPGAボードから初期化のためのコマンドを受け取り初期化をする。

– 初期化後、プロトコルに合わせてマウ

スの状態を表した (status)・x軸差分データ (x dir)・y軸差分データ (y dir)を 1ビットごとに FPGAボードに送信する。

• CRTオブジェクト

– FPGAボードから送られてくるVGAの RGBデータを画面に出力する。

• FPGAボードオブジェクト

– 色の初期データを SRAMに保存する。

– PS/2MOUSEの初期化を行う。

– PS/2MOUSEから送られてくるビットデータの抽出・1パケットデータの生成・パリティチェックを行う。

– PS/2MOUSEとの通信プロトコルを確立する。

– 1パケットデータを基に VGA出力の制御を行う。

28

Page 29: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

– SRAMから背景データを RAMに保存し、RAM から背景データを読み出す。

– 描画により、背景に変更があった場

合、その背景データを SRAMに保存する。

10.2 オブジェクト図

各オブジェクトのシナリオを表すことにより、

各オブジェクトの振る舞いを明確にする。以下

に各オブジェクトのシナリオを述べる。

• TOP

– FPGAボードからクロック信号が供給される。

– FPGAボードから供給されるクロック信号を 25MHzへ分周し、システムクロックとする。

– PS/2MOUSEに対してPS2/MOUSEデータを入力・出力する (双方向通信)。

– PS/2MOUSEに対してPS/2MOUSEクロック信号を入力・出力する (双方向通信)。

– CRTへ Redデータ・Greenデータ・Blueデータ・Horizontal Sync信号・Vertical Sync信号を出力する。Hor-izontal Sync信号・Vertical Sync信号を入力する。

– PS/2MOUSE CONTROLLERからのPS/2MOUSEクロック・PS/2MOUSEデータ・ステータス・x軸差分データ・y軸差分データを入力する。

– VGA CONTROLLERからのRedデータ・Greenデータ・Blueデータ・Hor-izontal Sync信号・Vertical Sync信号を入力する。

– VGA CONTROLLERからの read・readSP・writeを基にRAM CONTROLLERの read・readSP・writeを呼ぶ。

– VGA CONTROLLERへシステムクロック・ステータス・x軸差分データ・y軸差分データをVGA CONTROLLERへ出力する。

– SRAM CONTROLLERとRAM CONTROLLERの間のデータのやり取りを行う。

– PS/2MOUSE CONTROLLERへシステムクロック・PS/2MOUSEクロック・PS/2MOUSEデータを出力する。

• PS2MOUSE CONTROLLER

– TOPからのシステムクロック・PS/2MOUSEクロック・PS/2MOUSEデータを入力する。

– TOPへ (ステータス・x 軸差分データ・y軸差分データを出力する。

– PS/2MOUSEを初期化を行う。

– ビットデータの抽出および 33ビットの 1パケットデータを生成する。

– 1パケットデータのパリティチェックを行う。

• VGA CONTROLLER

– TOPからのステータス・x軸差分データ・y軸差分データを入力する。

– TOPへ Redデータ・Greenデータ・Blueデータ・Horizontal Sync信号・Vertical Sync信号を出力する。

– SYNCOUTからの Horizontal Sync信号・Vertical Sync信号を入力する。

– カーソル (スプライト)位置の算出・背景データの変更点のアドレスの算

出を行う。

29

Page 30: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

– 画面上の色の構成に合わせてRedデータ・Greenデータ・Blueデータを生成をする。

– TOPへ背景データのアドレスを出力し、読み出しと書き込みの指示をす

る。

– TOPへカーソル (スプライト)データの読み出しを指示する。

– TOPからの背景データ・カーソル (スプライト)データを入力する。

• SYNCOUT

– VGA CONTROLLERへ HorizontalSync信号・Vertical Sync信号・各種の合図を出力する。

– Horizontal Sync信号・Vertical Sync信号を生成する。

– 背景データのアドレスの変更の合図

を生成する。

• RAM CONTROLLER

– TOPからの読み込み合図・書き込みの合図・アドレスを入力する。

– TOPへ背景データ・カーソル (スプライト)データを出力する。

• RAM ACCESS

– 内部メモリに対して読み出し・書き込

みをする。

• SRAM CONTROLLER

– 初期色データを SRAMに保存する。

– TOPへ読み出した背景データを出力する。

– TOPから書き込み指示がきたら色データを書き込む。

• ASYNCHRONOUS T 1

– ASYNCHRONOUS R 2と 2相同期転送のタイミングを作成する。

– タイミングに合わせて、TOPに合図を送る。

• ASYNCHRONOUS R 1

– ASYNCHRONOUS T 2と 2相同期転送のタイミングを作成する。

– タイミングに合わせて、TOPに合図を送る。

• ASYNCHRONOUS T 2

– ASYNCHRONOUS R 1と 2相同期転送のタイミングを作成する。

– タイミングに合わせて、TOPに合図を送る。

• ASYNCHRONOUS R 2

– ASYNCHRONOUS T 1と 2相同期転送のタイミングを作成する。

– タイミングに合わせて、TOPに合図を送る。

10.3 シナリオ

図 33に拡張を考慮したオブジェクト図を示す。実際に設計を行う部分は FPGAボードに構成

する LSIであるため、FPGAボードをより具現化するため、概念シナリオからオブジェクトを

抽出を行った。

追加したオブジェクトは SRAM CONTROLLERオブジェクト・ASYNCHRONOUS T 1オブジェクト・ASYNCHRONOUS R 1オブジェクト・ASYNCHRONOUS T 2オブジェクト・ASYN-CHRONOUS R 2オブジェクトである。各オブジェクトが示しているものはFPGAボー

ドに構成する個々のモジュールである。

30

Page 31: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

10.4 シーケンス図

ペイントツールハードウェアシステムは複数

の同期シーケンスと非同期シーケンスをもって

いる。拡張を行うにあたり、シーケンスはすべ

て変更した。図 34に全体同期シーケンス、図 39に書き込み時の同期シーケンス、図 39にスプライト読み出し時の同期シーケンス、図 35に背景読み出し時の同期シーケンス、図 36に SRAMから RAMへの書き込み時の同期シーケンスを示す。図 40に各オブジェクトの非同期シーケンスを示す。

10.5 ステートマシン図

図 41に拡張を考慮したステートマシン図を示す。すべてのオブジェクトは電源 ON後、終了状態は存在しない。内部状態はある程度までを

示し、仕様の範囲については示していない。

10.6 実装クラス図

図 42に拡張を考慮した実装クラス図を示す。個々のクラスはモジュールであり、属性が表す

ものは input名と output名およびビット幅である。操作はそのモジュールがもつ制御信号であ

り、端子と端子をつなぐ記述および個々のみが

もつ役割はすべて「~ctl()」として表した。追加したクラスは SRAM CONTROLLERク

ラス・ASYNCHRONOUS T 1クラス・ASYN-CHRONOUS R 1クラス・ASYNCHRONOUS T 2クラス・ASYNCHRONOUS R 2クラスである。

10.7 ブロック図

ペイントツールハードウェアのブロック図を図

43に示す。これはモデルを基に作成したブロック図である。

31

Page 32: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

CRT

PS2MOUSE

FPGA LOGIC CELL

TOP

PS2MOUSE_CONTROLLER

VGA_CNTROLLERRAM_CONTROLLER

SYNC_CONTROLLER

RAM_ACCESS

RAM

SRAM_CONTROLLER

ASYNCHRONOUS_T_1

ASYNCHRONOUS_T_2

ASYNCHRONOUS_R_1

ASYNCHRONOUS_R_2

図 32: 全体概念モデル

1

1PS/2MOUSE_CONTROLLER

1

VGA_CONTROLLER

1

SYNCOUT

1

1

RAM_CONTROLLER

1

RAM_ACCESS

11

TOP

SRAM_CONTROLLER

ASYNCHRONOUS_T_1

ASYNCHRONOUS_R_1

ASYNCHRONOUS_T_2

ASYNCHRONOUS_R_2

1

1

1

11 1

1

1 1

1

1

図 33: オブジェクト図

32

Page 33: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

: TOP

: vDisp()

: vDispend()

: get()

: finish()

: SYNCOUT: PS/2MOUSE_CONTROLLER

: out_data(status : 8, x_dir : 8, y_dir : 8)

: get_info(s_in : 8, x_in : 8, y_in : 8)

: VGA_CONTROLLER

図 34: 全体同期シーケンス図

: RAM_CONTROLLER : RAM_ACCESS : TOP : VGA_CONTROLLER

: write()

: write(in_adr : address, in_data : data)

: write(in_adr : address, in_data : data)

図 35: 書き込み時の同期シーケンス図

: RAM_ACCESS : RAM_CONTROLLER : TOP : VGA_CONTROLLER

: read(in_adr:address)adr : address

: readSP()

: readSP()

図 36: スプライト読み出し時の同期シーケンス図

33

Page 34: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

: TOP : RAM_CONTROLLER : RAM_ACCESS : VGA_CONTROLLER

: read()

: read(in_adr : address)

: read(in_adr : address) : address

図 37: 背景読み出し時の同期シーケンス図

: SRAM_CONTROLLER : TOP : RAM_CONTROLLER : RAM_ACCESS

: write(in_adr : address, in_data : data)

: read(c_A : 16)

: write(in_adr : address, in_data : data)

図 38: SRAMから RAMへの書き込み時の同期シーケンス図

: PS/2MOUSE_CONTROLLER : TOP : VGA_CONTROLLER : SYNCOUT

: topctl() : syncctl(): ps2ctl() : vgactl()

図 39: 非同期シーケンス図 1

: ASYNCHRONOUS_R_1 : ASYNCHRONOUS_T_2 : ASYNCHRONOUS_T_1 : ASYNCHRONOUS_R_2 : SRAM_CONTROLLER

: sramctl(): tctl1()

: rctl1(): tctl2() : rctl2()

図 40: 非同期シーケンス図 2

34

Page 35: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

TOP

PowerOnPowerOn

PowerOnPowerOn

ASYNCHRONOUS_R_1

ASYNCHRONOUS_R_2AHYNCHRONOUS_T_2

tctl2 rctl2

tctl1

ASYNCHRONOUS_T_1

rctl1

PS/2MOUSE_CONTROLLER

VGA_CONTROLLER

failed initialization

idle idle

finish idle

topctl

PowerOnsucceed initialization

mouse initialization detect mouse data

PowerOn

finish idle

finish detect

vgactlPowerOn

write

finish write

finish read

write

finish write

adle

read

read _background

write

read

write

finish read

adle

read

PowerOn

finish initialize

read

write initialize color

write _background

PowerOn

PowerOn

syncoutctl

read

SRAM_CNTOROLLER

SYNCOUT

finish read

RAM_ACCESS

write finish write

finish readSP

readSP

readSP

PowerOnadle

RAM_CONTROLLER

: STATE1 : 1

図 41: ステートマシン図

35

Page 36: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

TOP- ps2c : 1- ps2d : 1- vgaR : 1- vgaG : 1- vgaB : 1- HS : 1- VS : 1- topctl()

ASYNCHRONOUS_T_1- tin : 1- tout : 1+ treq()+ tack()+ tctl1()

ASYNCHRONOUS_R_1- rin : 1- rout : 1+ rreq()+ rack()+ rctl1()

ASYNCHRONOUS_R_2- rin : 1- rout : 1+ rreq()+ rack()+ rctl2()

ASYNCHRONOUS_T_2- tin : 1- tout : 1+ treq()+ tack()+ tctl2()

SYNCOUT- HS : 1- VS : 1+ hDisp()+ vDisp()+ hDispend()+ vDispend()+ finish()+ syncoutctl()+ get()- syncctl()

RAM_CONTROLLER- read_adr_in : address- write_adr_in : address- write_data : data- read_data : data+ readSP()+ write(in_adr:address,in_data:data)+ read(in_adr:address)

SRAM_CONTROLLER- c_A : 16- c_Data : 16- IOin : 16- A : 16- s_Data : 16- IOout : 16- CE : 1- OE : 1- WE : 1- LB : 1- UB : 1+ start_system()+ read(c_A:16)+ write(c_A:16,c_Data:16)+ sramctl()

RAM_ACCESS- adr : address- data : data+ write(in_adr:address,in_data:data)+ read(in_adr:address)adr : address

VGA_CONTROLLER- s_in : 8- x_in : 8- y_in : 8- vgaR : 1- vgaG : 1- vgaB : 1- HS : 1- VS : 1+ get_info(s_in:8,x_in:8,y_in:8)- vgactl()+ read()+ write()+ readSP()

PS/2MOUSE_CONTROLLER- ps2c_in : 1- ps2d_in : 1- ps2c_out : 1- ps2d_out : 1- status : 8- x_dir : 8- y_dir : 8+ out_data(status:8,x_dir:8,y_dir:8)- ps2ctl()

図 42: 実装クラス図

36

Page 37: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

ps2c ps2dm_clock p_reset

vgaR vgaG vgaB HS VS

top

IO

ps2c_out ps2d_outstatus x_dir y_dir

ps2c_in ps2d_in

s_in x_in y_in

readSP

vgaR vgaG vgaB HS VS get_info

HS VS CV VC hDisp vDisp hdispend vdispend get finish

out_data

in_read_data

out_write_adr out_write_data

address

out_data

read write

start_system

PS2

VGACTL

SYNCOUT

RAMCTLRAM_ACCESS

asynchronous_R_1 asynchronous_T_1 asynchronous_R_2 asynchronous_T_2

read write

read writec_A IOin

A IOoutCE OE WE LB UB start_system

c_Data

s_Data

SRAMCTL

in_data

read write in_data

ACE OE WE LB UB

in_adr

in_adr

out_data

tout

tinrin rin tin

rout rout tout

treq

tack

tack tack treq

treq treq tack

readSP

37

Page 38: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

11 開発の問題点とつまづき

以下にこの開発プロセスにおける問題点を述

べる。

• コミュニケーションの不足プロジェクトメンバー内でのコミュニケー

ション不足により、各機能の開発進度が不

明であった。各機能をどのような仕様で作っ

ているのかも不明であった。また、仕様の

正確な確認を行わず、仕様が明確になって

いない状態で開発を進めた。その為、開発

終盤で、正確な仕様を確認することになり、

開発が遅れた。

• スケジュール管理の不足開発当初から一切のスケジュールを立てず

に開発を進めた為、各機能における完成の

期限、単体テスト試行日、統合テスト試行

日などを決めていなかった。その為、シス

テム全体で統合テストを行おうとした際に

まだ完成していない機能があるなど、開発

に支障をきたした。また、開発を効率良く

進めることが出来なかった。

• モジュール内の機能切り分けの不十分各モジュールの中で機能の切り分けをせず

に開発を進めたため、モジュールの内部で

機能が複雑に連結し、デバッグが収束しな

かった。

• テストの不適正コードの修正後論理シミュレーションを行

わず,FPGAボードに実装してテストを行った。当初、二つの機能 (vgactlモジュール、メモリコントロールモジュール)は、単体テストを行わずに統合テストの論理シミュ

レーションを行うなど適切なテストを行わ

なかった。機能ごとに単体テストを行わな

かったことで、システム全体での統合テス

トを行った際に発生したバグの原因特定に

時間がかかった。特に vgactlモジュールは3つの機能の中間に位置する機能なので、メモリコントロールモジュールと PS/2インタフェースモジュールの両方の疑似モデ

ルを作る必要があった。しかし疑似モデル

を作成しての論理シミュレーションは面倒

であると考え、結果的に実装でのデバック

を行い、バグの特定ができなかった。

• 分析・設計の不足本開発は要求分析、外部設計、内部分析を

完全に終了していない状態でコーディング

を行った。これら 4プロセスを同時に行いつつ開発を進めていった。場あたり的な設

計になってしまい、再分析、機能追加、機

能削除を頻繁に行った。その為、開発が進

まず、バグが増える原因となった。

11.1 PS/2インタフェースモジュール

PS/2インタフェースモジュールの開発においてつまづいた点を以下に述べる (表 4参照)。

• 双方向通信の仕組みを知らなかった

• マウスの正確な仕様が入手できず、正確な通信プロトコルが分からなかった。

上記の 2点は、前者は勉強することで、後者はロジックアナライザを用いることで解決する

ことができた。参考書を基に設計した論理回路

を載せた FPGAボードに、分解した PS/2マウスを接続し、その信号線の通信波形をロジック

アナライザを用いて確認し、これによりホスト

とマウス間の通信プロトコルを解決することが

できた。図 44にロジックアナライザによるマウスからのデータ確認の写真を示す。

38

Page 39: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

図 44: ロジックアナライザによるマウスからのデータ確認

表 5: 各モジュールにおけるつまづき

モジュール つまづき

PS/2インタフェース ・マウスの正確な仕様が入手できず、正確な通信プロトコルが分か

らなかった。

・双方向通信の仕組みを知らなかった。

・仕様書の読み落しによりデータ形式を誤った。

・PS/2インタフェースモジュール内で機能の切り分けをせずに開発を進めたためデバッグが収束しなかった。

・シリアル通信のシミュレーションをせずに実装デバッグに突入し

たため、バグの発見ができず、ボード破壊の危険も招いた。

vgactl スプライトの移動異常。

・スプライトの形成の異常。

・シミュレーションの面倒さ。

メモリコントロール ・背景のメモリの切替え異常

・スプライトのアドレス指定の異常

11.2 vgactlモジュール

vgactlモジュールにおいてつまづいた点について述べる (表 4参照)。

• カーソル (スプライト)の移動

マウスを x軸または y軸の負方向に動かすと正の方向に動かす場合よりも明らかに大

きな移動をする状態になった。

この原因は 2つあり、1つ目は PS/2インタフェースモジュールから受け取る PS/2マウスの前位置との差分データのデータ

形式は当初、符号+絶対値形式であると思

い込んでいた。しかし実際は PS/2インタフェースモジュールから受け取る PS/2マウスの前位置との差分データの形式は 2の補数形式であった。

2つ目はデータを受け取ると PS/2インタ

フェースモジュールはデータが入っていた

レジスタをリセットするのだが、9ビット目のデータ (図 47参照)が異なるレジスタにあったためリセット忘れが生じた。

• カーソル (スプライト)の形成

カーソル (スプライト)データを読み出すタイミングを作っている信号にタイミング

がずれてしまうバグが生じたために (図 46参照)、カーソル (スプライト)の形がうまく形成されなかった。この現象は画面の境

界 (図 45に示す y=0、x=0)及び使用しているメモリの、バンク切替え部分 (図 45に示す change memory)で生じた。

(0,0) (159,0)

(159,119)(0,119)

change memory

y=0

x=0

display

sprite(normal)

sprite(Bug)

X

Y

図 45: スプライトのバグポイント

readSP signal

0 1 2

3 4 5

6 7 8

sprite’s output: base+count

count=0

count=3

base=0

base=3

base=6

count=1

count=2

4 dot

12 dot

12 dot

4 dot

図 46: スプライトメモリマップ

39

Page 40: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

* * * * * * 0 1 0 1 1 0 0 1 0 1 1 11 1 1 1 0 1

* * * * * *1 1 0 0 0 0 0 00 0 0 0 0 0 0 00 0

hold reset reset

XS YSMouse status byte X direction byte Y direction byte

before geting data

after geting data

XS YS

0 0 0 0 0 00 0

0 0 0 0 0 00 0

1

1

sign bit remain.Y

X

図 47: データフロー

11.3 メモリコントロールモジュール

メモリコントロールモジュールのつまづいた

点を以下に述べる (表 4参照)。

• 背景の block RAMの切り替え

本来、一つの block RAMにアドレスは横160×縦 12ドット分の 1920アドレスがあり、1920アドレス分を読み出すと、次のblock RAMに切り替わるようにしていた(図 48参照)。しかし、1920アドレス分の読みだしが完了せずに次の block RAMに切り替わるということが生じた。当初は、

vgactlモジュールから read信号を受け取った場合に使用するカウンタが二つあった。

一つ目は read信号を受け取った回数をカウントするカウンタAで、二つ目はメモリを指定する際に使用するカウンタBであった。カウンタAをリセットするタイミングでカウンタ Bに 1を加算してメモリを切り替えるはずが、リセットするタイミング

がずれてしまい、block RAMの切替え部分にバグが生じてしまった (図 49参照)。

• スプライトのアドレス指定vgactlからカーソル (スプライト)データを読み出すという指示を受け取ると、スプ

ライトのアドレス指定はメモリコントロー

ルモジュールで行った。スプライトのアド

レスの指定は横軸をカウントさせるものと

Memory1

Memory2

Memory3

Memory4

Memory5

Memory6

Memory7

Memory8

Memory9

Memory10

ADDRESS0ADDRESS1 ADDRESS1918 ADDRESS1919

(159,0)

480dot

640dot

(159,12) change memory

(159,24) change memory

(159,36) change memory

(159,48) change memory

(159,60) change memory

(159,72) change memory

(159,84) change memory

(159,96) change memory

(159,108) change memory

(159,119) change memory

(0,0)

(0,12)

(0,24)

(0,36)

(0,48)

(0,60)

(0,72)

(0,84)

(0,96)

(0,108)

(0,119)

図 48: VGAのビットマップと本システムのメモリにマッピングした様子

MEMORY1

MEMORY2

ADDRESS

0 1

1918 1919

0 1

1918 1919error:CHANGE MEMORY

図 49: 背景のメモリの切り替えの失敗

縦軸をカウントさせるものの二つ使い、そ

の二つのカウンタの値をを加算することで

アドレスを指定していた。横軸のカウンタ

をリセットさせるタイミングを間違い、ア

ドレスの指定がうまくできず、本来呼ばれ

るべきはずのアドレスではなく、違うアド

レスが呼ばれてしまった (図 46参照)。

40

Page 41: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

12 開発を通して得た知見

本開発を通して開発途上で種々の問題点が生

じた。ここでは、その体験から得た知見につい

て以下に述べる。

• 開発計画の重要性システム開発を行うにあたっては開発期限

の制約をふまえた機能ごとのスケジュール

管理が必要である。また、プロジェクト全

体を通してのプロジェクト管理が必要であ

る。計画を明らかにすることで各機能を合

わせたシミュレーションを行うことが容易

になる。期限制約を意識した開発を行うこ

とで、プロジェクトを効率良く進めること

ができる。

• 開発メンバー内のコミュニケーションの必要性

プロジェクトを複数人数で行う際はプロ

ジェクトメンバー全員による定期的な報告

会が必要である。報告会を行うことで各機

能設計、進度報告、開発途上で生じた問題

点、そしてインタフェース仕様の相互理解

を全体で共有することができる。また、シ

ステムにおける問題点・修正点の早期発見

が期待できる。

• 検証の重要性システム全体で検証を行う際は、単体テス

トにより各機能の検証を行い、バグが無い

ということを確実に立証してから行う必要

がある。なぜなら問題が生じた際に着眼点

を下位の設計階層の部分にまで下げる必要

性が生じ、バグの発見に時間がかかってし

まう。また、実装による検証では問題点の

発見は非常に困難であり、論理シュミレー

ションによりバグの有無を確かめずに実装

してしまうと、実装ボードを破壊する危険

性も生じる。その為、論理シミュレーショ

ンによる検証によって問題点・修正点を確

実に特定するべきである。

13 UMLを用いたモデルの適用性についての考察

ハードウェア設計における UMLを用いたモデルの適用性について考察する。

以下に抽象化・理解性・実装コードへの変換・

適用性の 4つの観点について述べる。

• 抽象化デバイスの仕様にかかわる部分を隠蔽する

ことにより、システムを抽象化することが

できたと考える。よってハードウェア設計

において、システムを抽象化することは可

能であると考えた。

• 理解性ある程度の抽象化を行うことにより、モデ

ルから視覚的に読み取ることは可能である

と考える。しかし、抽象度を低くするにつ

れ、モデルから視覚的に読み取ることは難

しくなっていくと考える。

• 実装コードへの変換今回、モデルから実装コードへの変換は

行っていない。実装言語が SFLというオブジェクト指向型の HDLであれば変換ルールを決めることにより、可能であると考え

る。しかし、verilog-HDLのような線と線を結ぶような回路図に近い記述を行うよう

な言語の場合、コード変換は非常に難しい

と考える。

• 適用性モデルと実装コードが真に 1 対 1となるような PSMの作成は非常に難しいと考える。しかし、実装言語のプラットフォーム

依存をしない PIMまでのモデルであれば適用は可能であると考える。

41

Page 42: 卒業研究2 UMLを用いたハードウェア設計の開発 事例UML を用いたハードウェア設計の開発 事例 2ADT2104 並木滋 指導教員清水尚彦教授 1 目次

よって、ハードウェア設計における UMLを用いたモデルの適用は PIMまでのモデルであれば適用が可能であると考える。

14 教育的効果

本開発によって得た具体的な教育的効果を以

下に述べる。

• プロジェクトマネジメントプロジェクト教育を受けることでプロジェ

クト管理の重要性を認識することができ

る。プロジェクトを円滑に進めていくには

プロジェクトマネジメントが重要である。

• 開発プロセスプロジェクト教育を受けることで実際に開

発の難しさを実感し、それを経験すること

により適切な開発プロセスを学んでいくこ

とができる。また、開発プロセスの必要性

を理解することができる。

• ハードウェア設計アプリケーションとしての効果

本開発を行うことで、非同期・同期間イン

タフェース、双方向インタフェース、シリ

アル・パラレル変換、外部からのタイミン

グ制約 (VGA出力)、システムを仕様から決定、機能分割、実装等のノウハウを本開

発を通して得ることができる。したがって

種々のハードウェア設計の経験をすること

でさまざまなノウハウを得ることができる。

15 おわりに

本卒業論文 2では開発を通して得ることができた知見と教育効果および UMLを用いたモデルによるハードウェア設計およびその適用性に

ついて述べた。以下に結論を述べる。

• 開発通して得た知見開発を終えて、開発プロセスの必要性およ

びプロジェクトマネジメントの重要性を知

ることができた。また、ハードウェア設計

のノウハウを得ることができた。

• UMLを用いたモデルの適用性

システムを抽象化することは可能である

が、実装コードとモデルを 1 対 1にすることは難しい。ハードウェア設計における

UMLを用いたモデルの適用は PIMまでのモデルであれば適用が可能であるという

結論に達した。

今回、開発に関しての知識が全く無い私が初

めての開発を行ったが、開発を行うには多くの

知識、開発に適した環境、時間、技術が必要で

あるということを学ぶことができた。本開発の

経験によりハードウェア設計またはプロジェク

トを行うにあたって、長く活かせるものを得る

ことができたのではないかと考えている。

参考文献

[1] Sparta-3 Starter KIt Board User Guide

[2] 木下修平、並木滋、堀口雅晴、清水尚彦:「初学者によるペイントツールハードウェア

の開発とその教育効果」、第 26回パルテノン研究会 資料集、pp.11-17

[3] PS/2 マウス通信プロトコルについて参考ホームページ、http://www.computer-engineering.org/

[4] 株式会社テクノロジックアート :独習UML

42