実験で学ぶ ロジック回路設計

Digital
HDL 記述による設計法をマスタする
実験で学ぶ
ロジック回路設計
木村 真也
Shinya Kimura
1
1回 コントローラでラケットを操作する
第
今回はゲームの要素である壁とラケット(写真 11 −
1)の表示部分
(図 11 − 1)を解説します.
ラケットは,コントローラに従って動くので,コン
トローラ部分についても解説します.
回路規模を小さくするために
画面表示を荒くする
● VGA の全ドットを扱うのは大変
ゲームを表示する VGA の描画エリアは,水平方向
単純に計算するとゲーム回路で制御すべきドットの
総数は 307200 ドットとなり,これをすべて扱う回路
は相当規模が大きくなりそうです.
制御対象を減らすために,1 ドットを大きくします.
具体的には,ゲームにおける表示要素である「壁」,
「ボール」,「ラケット」を 8 × 8 ドット・サイズが基
本の図形にします.図 11 − 2 に示すように,制御する
ゲーム・エリアを実質 80 × 60 サイズに縮小できます.
こうすると,制御対象とする点を 4800 個に減らせます.
に 640 ドット,垂直方向は 480 ドットです.
● 8 × 8 のサイズを 1 ゲーム・ドットとする
ディスプレイのドットで 8 × 8 サイズのエリアを,
このゲームでは 1 ドットのように扱うのです.以降,
この 8 × 8 のエリアを「ゲーム・ドット」と呼びます.
ロジック回路
実験ボード
ゲーム・ドットへの対応は,描画点の座標情報であ
ラケット
壁
る x_count 信号と y_count 信号の下位 3 ビットを無
視するだけで可能です(下位 3 ビットは 8 ドットぶん
の座標情報)
.特別な配慮や回路は必要ありません.
図 11 − 2 に示すように壁はゲーム・エリアの上下左
左右に動く
左右に回す
コントローラ
右の端に配置します.
ラケットは上から 50 行目(50 ゲーム・ドット目)に
配置し,幅を 10 ゲーム・ドットとして水平移動のみ
可能とします.
輝度信号は本来アナログ信号ですが,回路規模を小
写真 11 − 1 壁とラケットとコントローラ
Keyword 1
VGA
(Video Graphics Array)
VGA は,1987 年に IBM 社が自社のパソコン PS/2 用に
開発したモニタ表示規格の名前です.
その後のパソコンは,必ずこの規格での表示モードを持
っていると言っても過言ではないくらいで,パソコン用モ
ニタ・ディスプレイでは標準的な規格となっています.
表示は 640 ドット× 480 ライン,正確な規格は 16 色で
す.16 色以外の場合など,正確な規格とは異なる場合で
も VGA と呼ばれることがあります.
信号のタイミングにはいくつかの種類があります.本連
載のテレビ・ゲーム回路は,ドット・クロックが
194
25.175 MHz,水平同期信号周波数が 31.469 kHz,垂直同
期信号周波数が 59.940 Hz のタイミングに基づいて作成し
ています.ただし,部品の関係でドット・クロックを
25 MHz にしているので,少し異なる値になっています.
信号のレベルは,輝度信号(R,G,B)が 0.7 V P − P,同
期信号は TTL レベルとなっています.
信号接続用コネクタはミニ D サブ 15 ピンで,ピンが 3
段に配置されているものです.ミニ D サブ 15 ピンにはピ
ンが 2 段に配置されているものもあるので,部品入手時は
間違えないように注意してください.
2007 年 10 月号
Digital
BASICS
syncgenモジュール(連載第10回;2007年9月号で解説)
電子ビーム座標
(描画座標)
描画期間フラグ
x_count
y_count
squash
最上位モジュール
(CPLD 内の回路)
同期信号
同期信号
x_disp
y_disp
H_SYNC
V_SYNC
(モニタへ)
ゲーム本体部
ボール移動制御部
ボール速度制御
ボール衝突検出
ボール位置座標
ラケット・トリガ
ラケット位置制御部
ラケット座標
RKT_TRG
(コントローラへ)
ラケット・パルス
RKT_PLS
得点カウント部
得点
(コントローラへ)
score
輝度信号
(赤・緑・青)
RD,GR,BL
(モニタへ)
得点表示制御部
表示制御部
壁表示制御部
beep
効果音信号
SPKR
音源部
(スピーカへ)
図 11 − 1 今回は壁とラケットの
制御/表示部分を作る
クロック信号
XTAL
今回は二つをまとめてwall_racket
というモジュールにしている
リセット信号
RESET_N
syncgen モジュールは前回解説した
rkt_lx rkt_rx ball_x
さくするため,ロジック回路から出力するHレベルか
Lレベルで扱います.赤,青,緑の 3 本ありますから,
壁
ball_y
● どんな入力装置からどんな信号を得るか
10ドット
59
▲
Keyword 2
ラケット
Y座標
は,スイッチを 2 個用意して,一方を右方向移動に,
しかし,この方法ではラケットの移動速度をコント
ロールできません.
ボール
50
Z左と右を指定するスイッチ 2 個では物足りない
簡単にラケットを操作する方法として考えられるの
他方を左方向移動に対応させ,ゲームのプレーヤがス
イッチを操作する方法です.
79
0
1
2
白や黒を含めて 8 色を作れます.
ラケットの位置を決める
コントローラを作る
X座標
0 12
数値はゲーム・ドット
(8×8ドット)
図 11 − 2 荒くした描画エリアで壁やラケット,ボールを表示する
ラケットのY座標は 50,幅を 10 ゲーム・ドットと決める
トリガ信号
トリガ信号とはフリップフロップやレジスタ,カウンタ
最近のロジック回路設計では,エッジ・トリガ・タイプ
の動作,つまり記憶や動作のきっかけ,引き金になる信号
を使用し,トリガ信号としてクロック信号を直結する「完
を言います.
全クロック同期方式」がよく用いられます.今回のゲーム
ロジック回路を構成する部品には,エッジ・トリガ・タ
イプとレベル・トリガ・タイプ(レベル・センシティブ・
タイプ)があり,いずれも Verilog HDL で記述し,論理合
成ツールでロジック回路化することができます.
エッジとは信号が“L”→“H”や“H”→“L”と変わ
もそうしています.posedge XTAL という記述に注目して
みてください.
開発ツールによっては,レベル・トリガの記述をすると
ワーニング(注意表示)を出すものもあります.
今回使った 74HC123 もエッジ・トリガの入力を持ちま
るときの,変わり目のことで,エッジ・トリガとは,トリ
す.A 入力を使ったので,トリガ信号(RKT_TRG,実際は
ガ信号のエッジで動作するタイプです.
V_sync と同じ)の立ち下がりで動作を開始します.
2007 年 10 月号
195