卒 業 研 究 報 告
題
目
連珠状 LED ディスプレイ制御回路の設計と製作
指 導 教 員
矢野 政顕 教授
報 告 者
学籍番号: 1040230
氏名:
野々村 規正
平成 16 年
2 月 17 日
高知工科大学 電子・光システム工学科
目次
第1章
はじめに ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・1
第2章
従来の LED 表示装置 ・・・・・・・・・・・・・・・・・・・・・・・・・・・2
2-1 LED(Light Emitting Diode) ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・2
2-1-1 LED とは ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・2
2-1-2 LED の歴史 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・2
2-1-3 LED の発光原理 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・3
2-1-4 フルカラーLED ランプ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・5
2-2 従来の LED 表示装置 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・6
2-2-1 LED 駆動法 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・6
2-2-2 LED ドットマトリクス型ディスプレイ ・・・・・・・・・・・・・・・・・・・・・・6
2-2-3 階調制御方式 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・8
第3章
連珠状 LED 表示装置 ・・・・・・・・・・・・・・・・・・・・・・・・・・10
3-1 連珠状 LED ディスプレイ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・10
3-1-1 連珠状 LED ディスプレイとは ・・・・・・・・・・・・・・・・・・・・・・・・・・・・10
3-1-2 ランプユニット ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・11
3-2 連珠状 LED 表示システム制御回路 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・11
3-2-1 連珠状 LED モジュール ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・11
3-2-2 制御方法 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・12
3-2-3 制御回路 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・16
第4章
VHDL による設計 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・26
4-1 VHDL とは ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・26
4-2 データ転送回路の設計 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・26
4-2-1 データ転送回路の VHDL による記述 ・・・・・・・・・・・・・・・・・・・・・・・・26
4-2-2 データ転送回路のシミュレーション ・・・・・・・・・・・・・・・・・・・・・・・・・31
4-3 切換信号回路の設計 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・32
4-3-1 切換信号回路の VHDL 記述 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・32
4-3-2 切換信号回路のシミュレーション ・・・・・・・・・・・・・・・・・・・・・・・・・・・33
4-4 LED 点灯制御回路の設計 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・33
4-4-1 LED 点灯制御回路の VHDL 記述 ・・・・・・・・・・・・・・・・・・・・・・・・・・33
4-4-2 LED 点灯制御回路のシミュレーション ・・・・・・・・・・・・・・・・・・・・・36
4-5 周辺回路の記述 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・36
4-5-1 MODE 回路の記述 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・36
4-5-2 クロック分周回路と選択回路の記述 ・・・・・・・・・・・・・・・・・・・・・・・・38
4-6 制御回路全体の記述 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・40
第5章
連珠状 LED ディスプレイの製作と評価 ・・・・・・・・・・41
5-1 テスト回路製作 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・41
5-2 テスト回路による評価 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・45
5-2-1 テストパターンの表示 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・45
5-2-2 色調 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・46
5-2-3 文字の表示 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・47
5-2-4 信号線と配置 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・47
5-3
問題点と可能性・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・48
第6章
終わりに ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・49
謝辞 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・50
参考文献 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・51
付録 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・52
付録1 VHDL ソース ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・52
付録 2 シミュレーション波形 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・69
第1章
はじめに
研究の背景
LED(Light Emitting Diode)はダイオードの一種であり、PN 接合に順方向電圧
を印加すると、発光するダイオードである。LED を点光源として使用したものには、テ
レビ、ビデオなどの家電製品や電子機器のシグナル用としてやプリンタの書き込みヘ
ッドとして使用されている。また、光ファイバと組み合わせて通信用としても使用されて
いる。さらに、LED の光をレンズや樹脂を使用して拡散させることにより、線または面
状に光らせることができ、このような光源は、音響機器などのレベルメータとしてや数
字表示器のセグメントとして利用されている。また、信号機や踏切警告灯など、交通
機関での使用や自動車のハイマウントストップランプとしても使われるようになってき
た。
LED のディスプレイへの応用は、多くの場所で見ることができ、文字や図形を表示
するだけの小型のものから、建物の壁面に設置されている大型のディスプレイまで、
様々なものがある。
交通機関で使用されているものには、道路標示版や駅など見る列車到着時刻表
などがある。これらには注意を引き付けやすい赤色や橙色などが使用されている。ま
た、青色の LED の登場で、赤緑青の三原色がそろいフルカラーのディスプレイも見
られるようになってきた。
これらのディスプレイに LED が使われている理由は、LED が非常に長寿命である
こと、低消費電力であること、応答速度が速いことなどの特徴による[1]。
研究の目的
現在、多く使われている LED ディスプレイにマトリックス状 LED ディスプレイがある
が、マトリックス状 LED ディスプレイは制御するために多数の信号線を複雑に施す必
要がある。このためメンテナンス性が悪く、組み立ても困難なものになる。また、LED
モジュールを強度の高いフレームに固定する必要もあり、柔軟性にも欠ける。
この問題を解決するために、マトリックス状 LED モジュールに変わり、LED ランプを
一本の連珠状にして、少数の制御信号線で制御する、連珠状 LED ディスプレイが考
えられる。
本研究では、連珠状 LED ディスプレイの制御回路を設計し、連珠状 LED ディスプ
レイ駆動回路と組み合わせて連珠状 LED ディスプレイを試作して評価する。これに
より、連珠状 LED ディスプレイの可能性を見極めることを目的とする。
1
第2章
従来の LED 表示装置
2-1 LED(Light Emitting Diode)
2-1-1
LED とは
ダイオードは電極間に電圧を印加すると、一方向だけにしか電流を流さない
という整流特性を示す。LED(Light Emitting Diode:発光ダイオード)は、ダイ
オードの一種であるが、整流方向に電圧を印加すると、キャリアである電子と
正孔が注入されて再結合を起こす。LED の発光現象は、キャリアが再結合する
時のエネルギーの一部が光に変換されたものである。
LED は、寿命が 10 万時間以上と非常に長い。そして、1 素子を発光させる
のに電圧が数V、電流が数十mAと比較的少なく低消費電力でもある。LED 素
子単体は、固体素子の形状であり、大きさは約数 100 μmと小さく、他の熱変
換発光素子にくらべて信頼性が高い。
LED の発光は、発光スペクトルが狭く、単色に近いため視認性がよい。発光
波長は、材料により、赤外線から赤、黄、緑、青などの可視光領域の光、紫外
線領域までの広範囲に及ぶ[2]。
2-1-2
LED の歴史
1907 年に H.J.Round によるカーボランダム結晶(炭化珪素結晶)により、LED
の注入発光現象が発見されたとされている。1923 年には O.W.Lossew により
SiC の点接触部での発光が確認された。さらに、1952 年には Ge、Si での PN
接合部で発光、1955 年にはⅢ-Ⅴ族半導体の GaP での発光が確認された。
1960 年代には、GaAs、GaP、GaAsP、ZnSe などの結晶成長技術や発光現
状に関する多くの研究が行われ、LED の製造技術が確立されていった。そして、
1968 年には GaAsP 赤色 LED ランプが発売された。その後、1970 年代、1980
年代は基板結晶育成技術、PN 接合技術をはじめとする LED の製造に関する技
術が進み、LED は各種のパイロットランプや数字表示機、電光情報掲示板など
として広く市場に出るようになった。最近では、高輝度化や青色 LED の実現
によりフルカラーのディスプレイなどにも使用されるようになっている[2]。
2
2-1-3
LED の発光原理
発光原理
LED の発光は、電子と正孔が再結合する時、エネルギーの一部が光に変わっ
て起こる。半導体には、電子が自由に動くことの出来る伝導帯と、原子間の結
合による価電子帯のエネルギー帯があり、価電子帯と伝導帯の間には電子の存
在しないエネルギー帯を持つ。電子と正孔の再結合は、伝導帯の電子が価電子
帯の正孔と禁制帯をこえて再結合することである。そのため LED の発光波長
は禁制帯幅によってきまる。
再結合過程には、直接遷移型、間接遷移型、アイソエレクトロニックトラッ
プ型がある。直接遷移型は、再結合によって放出されるエネルギーがすべて光
に変わるため、発光効率が良い。間接遷移型は、電子と正孔の再結合時の運動
量が異なり、再結合確立が小さくなってしまう。そのため発光効率が悪い。ア
イソエレクトロニックトラップ型は、バンド間にアイソエレクトロニックトラ
ップと言うエネルギー順位を作ったものであり高効率で発光させることができ
る [2]。
発光波長
LED の発光波長は電子と正孔のエネルギーの差によって決まる。直接遷移型
の材料では、禁制帯の幅 Eg が発光波長を決める。この場合の発光波長λは
λ [nm
]=
1240
Eg
[eV ]
という関係になる。一般的に可視光の波長は 380∼760nm ぐらいなので、可視
光を得るには Eg が 1.6eV 以上でなければならない。また、伝導帯、価電子帯
ともに放射線状になっているために発光スペクトルは、端がゆるやかに広がっ
たものになり、スペクトルの半値幅は 30∼50nm になる。図 2-1 に LED 材料
と発光波長を示す。
3
波長
(n m )
色
化合物半導体
In P
G aA s
900
赤外
G a A lA s
G aA sP
800
700
赤
600
オレンジ
黄
黄緑
緑
500
青緑
青
400
A lG a In P
A lA s
G aP
A lP
ZnSe
S iC (6 H
型)
青紫
G aN
300
紫外
図 2-1 LED 材料と発光
赤外線 LED は、GaAs、GaAlAs などの直接遷移型の材料が使われている。
赤色 LED にはアイソエレクトロニックトラップ型の Zn-O ペアとドーピングし
た GaP が材料として多く使われている。間接遷移型の GaP に不純物として
Zn-O ペアをドーピングして、Zn-O ペアを再結合中心とすることにより効率の
高い LED を作ることができる。GaAsP は As と P の組成を変えることにより
禁制帯幅を変えることができる。GaAlAs も同じように Al と As の組成を変え
ることにより禁制帯幅を変えることができ、主に高輝度 LED の材料に使われ
る。
橙色や黄色の材料は間接遷移型あるため、赤色のように発光効率はよくない。
AlGaInP は直接遷移型であり、Ga、Al の組成を変えることにより、橙色から
緑色を出すことができるので、この領域での高輝度 LED の材料に使われる。
青色 LED には禁制帯幅が大きい、SiC、GaN などが使われている。SiC は
PN 接合が容易であるが高輝度 LED には向いていない。GaN は高輝度化が可
能であるため高輝度化青色 LED に使われる。
4
2-1-4
フルカラーLED ランプ
フルカラーで LED ディスプレイを実現するために、高輝度の赤、緑、青の
LED を組み合わせた、ハイブリット型のフルカラーLED ランプが使用される
場合がある。フルカラーLED ランプの構造例を図 2-2 に示す。
正極
台座
(負極)
図 2-2 フルカラーLED ランプの構造
赤、緑、青の三色を持つことにより、フルカラーLED
、緑、青の三色を持つことにより、フルカラーLED は、純白色を含む多色
発光が可能である。また、フルカラーLED をディスプレイとした場合、他の
LED ディスプレイに比べて自然な色を出すことができる。
しかし、フルカラーLED を駆動する場合には、LED 各色の光の強度や人間
の色の感じ方により人により見える色が違うため、色度図などを参考にしなが
ら光の強度を考えて駆動する必要がある。
5
2-2
従来の LED 表示装置
2-2-1
LED 駆動法
スタティック駆動
もっとも単純な駆動で、1 つの LED を駆動するのと同じであり、必要に応じ
て構成部分を、駆動させる方法である。LED の光量が不足な場合は、LED を
直接または並列に接続することで光量を上げることができる。
ダイナミック駆動
LED をパルス点灯させる方式であり消費電力を抑えることができる。ダイナ
ミック駆動は人間の目の残像現象を利用した駆動方法で、デジタル回路と組み
合わせてよく使われる。
図 2-3 に直流点灯とダイナミック点灯の原理を示す。点灯時間を直流点灯時
の半分にし、光量を 2 倍にする電流でパルス点灯させた場合には、平均電流は
ほぼ同じであり、人間の目には残像により同じ明るさに見える[3]。
ダイナミック点灯
直流点灯
平均電流
点灯時間
点灯時間
図 2-3 直流点灯とダイナミック点
6
2-2-2
LED ドットマトリクス型ディスプレイ
LED ドットマトリクスディスプレイとは
LED ドットマトリクスディスプレイは、LED を格子状に配置してユニット
化したものである。ディスプレイのモジュールには、5×7、16×16、24×24
などのサイズや表示色など使用目的により、さまざまなタイプがある。このド
ットマトリクスモジュールを縦横に接続することにより小型のものから大型の
ディスプレイまで実現できる。現在、LED ドットマトリクスディスプレイは店
先などの文字表示板や道路の表示板などとして、屋内、屋外で見ることができ
る[3]。
ドットマトリクモジュールの制御
パルス幅変調方式でのドットマトリクスモジュール回路の基本ブロック図は
図 2-4 である。図 2-4 は1色分の回路であり、フルカラーで表示する場合には
同じ回路が RGB の3色分必要である。
点灯制御レジスタ
輝度データ
カウンタ
比較器
行選択回路
LEDランプ
図 2-4 ドットマトリクスモジュール回路のブロック図
7
モジュール上の LED は、各行共通の駆動回路により時分割駆動される。各
行の選択は行選択回路によって行われる。選択された行での LED の点灯制御
は、各 LED に対しての明るさを示す輝度データにより行われる。
1 行分の LED の輝度データを、相互に接続されたレジスタにシフト&ラッチ
方式により転送する。このレジスタを点灯制御レジスタという。点灯制御レジ
スタは隣接するモジュールの点灯制御レジスタと接続され、画面全体としても
1 つのシフトレジスタが構成されている。
点灯制御レジスタに輝度データが転送されると、カウンタが動作し初め、
LED が点灯する。カウンタの値と輝度データとを比較器により比較して、値が
一致すると LED を非点灯にする制御を各行について行っている。
2-2-3
階調制御方式
階調制御とは、輝度を段階的に変えることにより、明るさや、色を表現する
方法のことです。輝度データを 8 ビットとすると、0 が非点灯となり輝度は 255
段階に変化させることができる。ドットマトリックス型モジュールでは、点灯
時間と非点灯時間の比で輝度を制御している。その制御方法としてパルス幅変
調方式と逓倍スロット方式がある。
パルス幅変調方式 (ダイナミック階調制御)
パルス幅変調方式は、与えられた輝度データに比例する時間のパルスを発生
させて LED を駆動する方式である。輝度データ幅を 4 ビットとして、値を 2
進数で“10102”とした時のパルスを図 2-5 に示す。この方法は通常、各 LED
にパルス幅を変換する回路が必要となる。
輝度データ=1010
10
0
1
2
3
4
5
6
7
8
9
図 2-5 パルス幅変調方式
8
10 11 12 13 14 15
逓倍スロット方式 (サブフレーム階調制御)
逓倍スロット方式は 1 周期を逓倍となるいくつかのスロットに分けて点灯を
制御する方法である。逓倍スロット方式でスロット数を輝度データのビット数
と同じにすれば、輝度データの各ビットをそのまま対応させることができる。
逓倍スロット方式で、輝度データを 4 ビットとし、値を“10102”としたとき
のパルスは図 2-6 となる[3]。
輝度データ=10102
S0
0
1
2
0
S2
S1
2
2
1
2
S3
2
3
4
5
2
6
7
8
9
10 11 12 13 14 15
図 2-6 逓倍スロット方式
9
3
第3章
連珠状 LED 表示装置
3-1 連珠状 LED ディスプレイ
3-1-1 連珠状 LED ディスプレイとは
連珠状 LED ディスプレイは、ドットマトリクス型ディスプレイのモジュー
ルにあった上下の配線をなくし、LED を 1 列に並べ、端の制御回路からの少数
の信号線でランプユニットを制御するものである。カラーで表示させる場合に
は三色の LED を赤青緑などと並べて制御すればよい。連珠状 LED モジュール
の構成を図 3-1 に示す。
LEDランプ
メモリデータ
(輝度データ)
メモリアドレス
メモリクロック
制
御
回
路
信号線
クロック
ランプユニット
図 3-1 連珠状 LED モジュールの構成
各 LED には LED を駆動するための簡単な回路(ランプユニット)が設置され
ている。ランプユニットを制御する回路には、ランプユニットを制御するため
の信号線と外部のメモリから輝度データを取り込むための入力、メモリのため
のアドレスとクロックの出力がある。
制御回路の動作は、各 LED に対応した輝度データのnビット目をランプユ
ニットのレジスタに転送して、ランプユニットのレジスタに LED を点灯させ
るための信号を送る。これにより LED を輝度データにしたがって点灯させる
ことができる。
10
3-1-2 ランプユニット
連珠状 LED モジュールで使用する LED ランプユニットの基本的な回路図を
図 3-2 に示す。ランプユニットは、点灯する LED を選択するためのシフトレ
ジスタである選択シフトレジスタと、輝度データを保持し、点灯を制御する点
灯制御シフトレジスタ、選択された LED を輝度データにしたがって点灯させ
るためのゲートで構成される。
Vcc
LED
選択レジスタへの入力
D
CLR
選択レジスタクロック
輝度データ
SET
D
SET
CLR
Q
D
Q
Q
Q
SET
CLR
D
SET
CLR
D
Q
Q
SET
CLR
D
Q
Q
SET
CLR
Q
D
Q
Q
SET
CLR
D
Q
SET
CLR
Q
Q
選択レジスタ
Q
Q
データ転送用クロック
データ保持用の
レジスタ
図 3-2 ランプユニットの回路図
ランプユニットへの入力は、LED を選択するための選択シフトレジスタへの
入力と、選択シフトレジスタを動作させるためのクロック、点灯制御シフトレ
ジスタへの輝度データの入力、点灯制御シフトレジスタのためのクロックであ
り、これによりランプユニットを制御することができる。
3-2
連珠状 LED 表示システム制御回路
3-2-1 連珠状 LED モジュール
設計をする連珠状 LED モジュールは、赤青緑の三色の LED を使ったフルカ
ラーLED モジュールとする。各色の輝度データは8ビットとし、256 段階の明
るさを表現することができる。
サイズはフルカラーLED を 16 個並べたものを、
16 段重ねた、16×16 のモジュールを想定して設計する。
11
フルカラーLED を連珠状 LED モジュールに使用した時は、図 3-3 に示すように、
各色の LED を 1 列に並べたものとなる。
G
R
B
ランプユニット
図 3-3 フルカラーLED での構成
3-2-2 制御方法
データの転送と LED の点灯
LED の点灯制御は、フルカラーLED4 個を、最小単位として制御し、フルカ
ラーLED4 個を 4 組で LED16 個×16 行の 1 行を構成する。
連珠状 LED モジュールで LED を点灯させるためには、連珠状に接続された
ランプユニットに輝度データを転送する必要がある。図 3-2 に示すように、ラ
ンプユニットには、輝度データを保持するためのレジスタを備えているが、各
色につき 1 ビットしか保持しておくことができない。そのためランプユニット
には、各色についての輝度データ8ビットを 1 ビット分ずつ転送する。
LED を点灯させ 8 ビットの輝度データを表現するためには、輝度データの 1
ビット目(LSB)を転送、LED 点灯、2 ビット目を転送、LED 点灯、以下 8 ビッ
ト目(MSB)まで転送と LED 点灯を繰り返しておこなえばよい。
8ビット目までのデータ転送と LED 点灯を 1 フレームとすると、ディスプ
レイとして画像を表示するためには、少なくとも1秒間に 30 フレーム必要で
あり、ちらつきを抑えるためには 1 秒間に約 60 フレーム必要である。
図 3-4 に 1 フレーム内のデータ転送と LED 点灯の様子を示す。
1フレーム
1bit目
輝度データの
転送
2bit目
LED点灯
8bit目
輝度データの
転送
2
1
図 3-4 データ転送と点灯
12
128
LED の点灯時間は、輝度データの 2 ビット目の点灯では、1 ビット目点灯時間の2
( 2 )倍、3 ビット目では2( 2 2 )倍、8 ビット目では 128( 2 7 )倍とする。 21 倍、 2 2 倍とするこ
とにより 8 ビットの輝度データをそのまま表現することができる。この方法は逓倍スロッ
ト方式のスロット数に輝度データビット数をあてはめたものである。
また、輝度データの転送時間が長いと、LED を点灯させる時間が短くなって
しまい、LED の輝度などに影響が出てしまう。そのため輝度データの転送時間
はできるだけ短くしたほうがよい。
1
輝度データの転送
ランプユニットに輝度データを送る場合、図 3-3 のように各色が並んだもの
となっているため、輝度データを並び替える必要がある。ランプユニットに輝
度データを送る時は、データ転送用のパルスの立ち上がりで、データをシフト
していく。このとき、各色の輝度データ8ビットのnビット目を、1 ピクセル
分ごとに色の順番どおりに並び替える。並び替えと転送を示した図が図 3-5 で
ある。また、転送するデータは、シフトされていくため制御回路から最も離れ
た LED のデータから送る必要がある。
輝度データ
データ転送用パルス
R 8bit
G 8bit
B 8bit
n bit目選択
並び替え
B
R
G
1ピクセル
B
R
G
1ピクセル
図 3-5 データ転送と並び替え
LED の点灯
LED を点灯する時は、データの転送が終ると、フルカラーLED4 個分 1 を組
とした選択レジスタ 12 個に制御回路に近い側から‘1’をシフトしていく。
選択シフトレジスタ 12 個の最も制御回路に近い側の入力には、点灯時になる
と‘1’が供給される。シフトレジスタにクロックが供給されると、この‘1’
が選択レジスタの最初にセットされる。
‘1’がセットされるとレジスタへの入
力は‘0’となる。これにより‘1’を 1 つだけシフトしていくことができる。
この選択レジスタの値と転送された輝度データの論理積により、LED を点灯さ
せる。
RGB 比
13
LED の点灯は、図 3-3 に示したように、各色が並んだものを 1 個ずつ点灯さ
せることになる。このとき、三色それぞれの点灯時間の比が同じでは、正しく
色が表現されない。これは、LED の各色の明るさが違うことと、人間の目が色
により感度が違うためである。
色を正しく表現するためには各色の点灯時間比を変えることにより、色を調
整する必要がある。この比は LED の各色を同じ電流で駆動した時、白色にな
るようにすれば良い。しかし、人間の色の感じ方は人により違うため、各色の
比を厳密に決めることはできない。
本研究では、予備実験の結果、赤緑青の LED の点灯時間比である RGB 比を
次のように設定した場合、ほぼ白色に見えることを確認したので、制御回路で
はこの値を採用している。
RGB = 2 : 3 : 1
点灯制御
LED の点灯時間を RGB 比で制御すためには、選択シフトレジスタのクロッ
ク周期を制御すればよい。そして、本研究では RGB 各色の並びは、制御回路
近い側から G,R,B とする。GRB と色が並んでいるので、クロック周期を3:
2:1とした図 3-6 のような波形を出せばよい。輝度データのひとつ上のビッ
トでは波形の周期を伸ばせばよい。
3
2
1
図 3-6 制御クッロク波形
図 3-6 の波形は、3 色分でありフルカラーLED ピクセル分である。LED の
点灯制御は 4 個を 1 組としておこなうので、クロックは 12 パルス必要である。
12 個のパルスは、図 3-6 の波形を 4 回繰り返すことによって実現することがで
きる。しかし、12 個のパルスでは、選択シフトレジスタのシフトされている‘1’
が 12 個目に残ってしまい、12 個目が選択されたままとなってしまう。
選択シフトレジスタにより選択された状態で輝度データの次のビットを転送
すると、転送されている途中のデータが表示されてしまう。これを防ぐため、
選択シフトレジスタの 12 個目の値を‘0’とする必要がある。このため制御
パルスは、12+1 で 13 パルス必要である。
14
フルカラーLED4個分の LED 点灯のための波形と各色別の点灯時間、選択
シフトレジスタの動作を示した図が図 3-7 である。
選択レジスタクロック
S1
S2
選択レジスタ S3
の出力
S10
S11
S12
LED点灯時間
G1
R1
B1
G2
R2
B2
G3
R3
B3
G4
R4
B4
図 3-7 LED 点灯の波形
S1 から S12 は選択シフトレジスタの 12 個それぞれの出力であり、この信号
が‘1’となる場所にある LED が選択されていることになる。そして、S1 か
ら S12 へ‘1’がシフトされて 13 回目のパルスによりすべて‘0’となる。
これは LED がどこも選択されていないことを示す。
データ転送と LED 点灯の切換え
連珠状 LED モジュールにより画像を表現する時は、図 3-4 のように輝度デ
ータの転送と LED の点灯を交互におこなう。切換えは、データの転送が終わ
るとモード切換信号により行う。この切換信号により、データ転送モードから
LED 点灯モードに切換り LED の点灯が始まる。
切換信号は、選択シフトレジスタに‘1’を供給するために使用する信号で
あり、切換え時に 1 つのパルスが出るだけでよい。
MODE
連珠状 LED モジュール制御回路の動作は、
データの転送、データ転送と LED
点灯の切換え、LED の点灯に大きく分かれる。MODE 信号とは、動作をデー
タの転送モード、データ転送と LED 点灯の切換えのモード、LED の点灯モー
ドとして制御するための信号である。表 3-1 に MODE 信号の値と制御回路の
動作を示す。MODE=‘0’は、電源投入時などに制御回路の動作を止めてお
くための MODE である。
15
また、MODE=‘0’の待機状態から MODE=‘1’の輝度データの転送へ
移る時は、start 信号により行う。
表 3-1 MODE 番号と動作
Mode
0
1
2
3
3-2-3
動作
待機
輝度データの転送
転送と点灯の切り替え
LED の点灯
制御回路
制御回路の動作
連珠状 LED モジュール制御回路の動作と出力信号を図 3-8 に示す。また、
制御回路からの出力信号名は、データ転送用のクロックを PC、輝度データの 8
ビットを連珠状 LED モジュール用に並び替えた信号を PD、データ転送と LED
の点灯を切換えるための信号を QC、LED を点灯させるための信号を SC とす
る。これ以降はこの信号名を使用する。
制御回路
待機
Mode = 0
Y
PC
start = '1'
輝度データ
8bit
データの送信
Mode = 1
PD
点灯時間を
2倍にする
10bit
N
8回目か
送信/点灯の切り替え
Mode = 2
QC
LEDの点灯
Mode = 3
SC
図 3-8 制御回路の動作と信号
16
制御回路は、電源を投入し Reset をかけると、MODE=‘0’の状態で待機
する。その後、Start 信号に‘1’が入力されると MODE=‘1’に切り替わ
り動作を開始する。
MODE=‘1’ではデータの転送を行う。転送用クロック PC により転送す
るデータ PD はフルカラーLED を 16×16 の 1 モジュール分である。つまり 256
個分であり、1 個につき三色なので 768 ビットのデータを転送する。
データの転送が終了すると、MODE=2 に替わり、データ転送と LED 点灯
を切換えるための信号 QC が出力される。
切換えが終了すると MODE=3 になり、LED の点灯制御のための信号 SC の
出力をはじめる。RGB 比に分けられた3パルスを4回と、選択シフトレジスタ
から‘1’を排除するための 1 パルスの合計 13 パルスを発生する。
データ転送、切換え、LED 点灯が終わると、この動作が何回目かを判断する。
これは、輝度データの何ビット目を表示したのかを判断するためのものである。
8 回目であれば、輝度データの 8 ビット目まで終えたことになり、いったん動
作をとめる。8 回目でなければ、LED の点灯時間を 2 倍にして、データ転送、
切換え、LED 点灯の動作を行う。これが制御回路の 1 フレーム分の動作である。
このような動作をする回路を製作すれば、連珠状 LED モジュールで画像を表
現できる。
ただし、今回の研究では、1 フレーム分の動作で制御が停止しては、画像の
確認が難しいため、1 フレーム分が終了するごとに Start 信号を生成する回路
をつけ、その他の回路も調整して、1 フレーム分の動作を繰り返すようにした。
図 3-8 に示した制御回路から出力される波形は、図 3-9 のような波形にすれ
ばよい。
データの送信
PC
PD
送信/点灯切り替え
QC
n bit目
SC
G
R
B
LEDの点灯
n + 1 bit目
点灯時間を2倍していく
図 3-9 制御回路からの波形
17
制御回路の構成
制御回路には、データ転送回路(PC)、切換信号回路(QC)、LED 点灯制御回
路(SC)と、MODE により他の回路の動作を制御するための回路やクロック分周
回路、8 ビットの輝度データから 1 ビットを選択するデータ選択回路などの周
辺回路から構成されている。
図 3-10 にデータ転送回路、切換信号回路、LED 点灯制御回路と周辺回路を
組み合わせた制御回路のブロック図を示す。
PC
CLK_hight
reset
start
Memory
data=8bit
CLK_hight
count(00)
PC
Reset
start制御
start
CLK分周回路2
and
CLK選択回路
10bit
Memory
address
QC
QC
CLK_QC
MemoryCLK
PD
PD
QC
Reset
CLK_P8
M_A
PC End
データ選択回路
CLK分周回路1
タイミング調整
EN
QC End
CLK_SC
SC
SC
SC
CLK_hight
Reset
SC End
MODE制御
CLK_hight
CLK_CD
Counter
count
Reset
図 3-10
制御回路のブロック図
図 3-10 では、データ転送回路、切換信号回路、LED 点灯制御回路を組み合
わせて回路が構成されている。それぞれの回路は、“clk_hight”、“clk_QC”、
“clk_SC”により動作する。データ転送回路などに使用されている“clk_hight”
は、回部から入力されるクロックであり、制御回路内で最も周波数の高いクロ
ックである。
18
“Memory_clk”、“Memory_address”は、外部のメモリから輝度データを
読み出すために使用する。また、“PC”と“Memory_clk”は、データ転送回
路内のカウンタの LSB を使用し、それをタイミング調整したものである。
それぞれの回路の動作タイミングの制御は、MODE 回路により行う。しかし、
データ転送回路の場合には Start 制御回路の制御を行い、その Start 制御回路
により、データ転送回路の制御を行う。
“clk_hight”は、輝度データの転送時間を短くするために高速なものとなっ
ている。そのため、他の回路のクロックとして使用する時、クロックの分周回
路が必要になる所がある。
クロック分周回路2は、CLK 分周回路1により分周されたクロック(clk_p8)
を LED 点灯制御回路内のシフトレジスタを制御するためのクロック(clk_SC)
として、さらに分周する。また、CLK 分周回路2の動作は、MODE により制
御される。そして、カウンタの値により、いくつかの分周されたクロックを選
択し出力される。
“clk_cd”により動作するカウンタの値は、輝度データの何ビット目を転送、
点灯しているのかを、あらわしており、輝度データの選択や点灯制御回路のた
めクロック選択に使用する。
“clk_cd”は点灯制御か終了するごとに 1 個のパス
スが供給される。
例えば、輝度データ 8 ビットのnビット目の点灯制御が終了すると、カウン
タに+1し、点灯制御回路ためのクロック周期が 2 倍のクロックを選択する。
これにより、LED の点灯周期が 2 倍となる。このようにカウンタに+1される
ごとに、n+1ビット目のデータ転送、点灯制御をおこなう。
輝度データの選択回路は、カウンタの値を入力としたマルチプレクサとフリ
ップフロップを合わせた回路となり、メモリからの 8 ビットの輝度データから
点灯制御シフトレジスタに転送するデータを選択する。
19
データ転送回路
データ転送のための信号 PC と転送するデータの信号 PD を出力するための
回路を似ついて述べる。データ転送回路の入出力を図 3-11 に示す。
CLK
Reset
start
PC
Memory Data(n)
10bit
PD
図 3-11
PC
Memory Address
PC End
PD
データ転送回路の入出
データ転送用クロック PC は、並び変えられた輝度データである 768 ビット
のデータを LED モジュールのレジスタに送るため 768 個出力すされる。
“Memory Address”は 8 ビット幅のデータ 768 バイトをメモリから呼び出
すためのアドレスである。また、PC はメモリ用のクロックを発生させるため
にも使用する。
“PC End”は、768 ビットのデータ転送を終えたことをあらわす信号であり、
制御回路のための切換信号である。この信号により制御回路はデータ転送モー
ドから転送と点灯の切換モードになる。
ただし、PC を制御回路から外部に出力する場合は、データ転送回路の外で
タイミング調整を行い、PC からメモリクロックのを生成している。
“Memory Data”は“Memory Address”により選択された8ビットの信号
である。
“Memory Address”により選択された信号は、データ選択回路により
選択され 1 ビットの信号(Memory Data(n))となる。この 1 ビットの信号は PD
として出力される。
PD は、選択された信号が、そのまま出力されるだけなので、実質的には PC
のパルス発生回路のみが、データ転送回路となる。
20
データ転送回路の PC パルス発生回路のブロック図を図 3-12 に示す。
PC発生回路
Reset
start
D
SET
CLR
Q
Q
Reset Control
PC End
発生回路
CLK
CLK
Enable
Counter
Reset
count(10∼01)
count
メモリアドレス
count(00)
図 3-12
PC End
PC
PC パルス発生回路
データ転送クロック PC の信号を作るためには、カウンタを使う。11 ビット
のカウンタを使い、カウンタの LSB を PC として出力する。残りの 10 ビット
をメモリアドレスとして使用する。また、カウンタの LSB は、外部メモリ用
のクロックとしても使用する。
パルス発生回路は、入力である“Start”信号が入力されると、フリップフロ
ップ(FF)に‘1’がラッチされカウンタが動作をはじめる。カウンタからの必
要な出力パルスは 768 個である。これは、11 ビットカウンタの値が 153510=
“101111111112 ”の時に止めることによって、768 回の波形を出力する。
“ResetControl”は、カウンタの動作と“Start”信号用のフリップフロップの
Reset を制御するものである。
また、カウンタの 11 ビット目から 2 ビット目では、76710=“10111111112”
となり、8 ビットの輝度データ 768 個をメモリから読み出すために使用するこ
とができる。
データ転送が終了したことを示す PC End 信号は、カウンタの動作が停止す
る時に‘1’を出力することで実現できる。
また、回路のクロックは、データの転送時間を短くするため、高速なクロッ
クにより動作させる。
21
データ転送回路の出力からメモリ用のクロックを生成するが、PC とメモリ
クロックは、メモリアドレスとのタイミング考え、正確にデータ読み込めるよ
うタイミングを調整する必要がある。
タイミング調整とメモリ用クロックのための回路図とタイミングチャートを
ートを
図 3-13 にしめす。
PCin
rom_clk
D
SET
Q
PC
clk_hight
CLR
Q
clk_hight
Memory
address
rom_clk
PC
Memory
data
図 3-13
PC と rom_clk のタイミング調整回路
“Pcin”は、データ転送回路からの出力“PC”を入力として使用できるよう
にしたものである。タイミング調整回路からの出力“PC”は、制御回路から外
部に出力される信号である。
メモリ用のクロックは、“Pcin”をそのまま出力したものであり、タイミン
グ調整回路の“PC”は、
“Pcin”を反転させ“clk_hight”の立下りに同期させ
出力したものである。
動作は、まずメモリアドレスが変化し、次に“rom_clk”によりメモリのか
らの値が確定する。その後、
“clk_hight”により、8 ビットの輝度データから 1
ビットが選択され、レジスタに 1 ビットが保持される。これが“PD”として出
力される。そして、保持されている 1 ビットを“clk_hight”の立下りに同期し
た“PC”により、ランプユニットに転送する。
22
切換信号回路
切換信号の発生回路は、データ転送が終了したあとに 1 個パルスを出力する
回路である。図 3-14 に切換信号回路の入出力を示す。
CLK_QC
Reset
EN
QC
QC
QC End
図 3-14
切換回路の入出力
回路の動作は、イネーブル信号により制御されており、イネーブル信号が‘0’
の時に動作する。出力 QC は切換えのための信号である。出力“QCEnd”は、
切換信号を出力し終わったことを示す信号であり、この信号により、制御回路
は転送と点灯の切換モードから LED 点灯モードになる。
切換回路のブロック図を図 3-15 に示す。
CLK_QC
Reset
EN
Enable
reset
clk
Din
2bit_Shift Register
S1
S0
QC
QC End
図 3-15
切換回路
図 3-14 中の 2 ビットシフトレジスタのからの出力を、“QC”、“QCEnd”として使用す
る。
シフトレジスタは、Din の値をシフトしていくが、Din の値により、シフトレジスタを次
のように動作させる。
“00” → “01” → “10” → “00”
1 ビット目を QC、2 ビット目を。“QC End”とすれば、“QC”のパルスが
出力された後に“QCEnd”が出力されることになる。このような動作の回路に
より切換えを行うことができる。
また、“CLK_QC”の周期は、“CLK_hight”の 2 倍とする。これにより
“QCEnd”に‘1’が出力されている時に、“CLK_hight”により動作する
MODE 回路で“QCEnd”を確認することが出来る。
23
LED 点灯制御回路
LED の点灯を制御するための信号“SC”は、RGB 比の波形と 1 パルスが必
要となる。そのための回路を示す。図 3-16 に回路の入出力信号を示す。
CLK_SC
CLK_hight
Reset
SC
SC
SC End
図 3-16
点灯制御回路の入出力
“SC”は、点灯制御のためのパルス信号である。出力“SCEnd”は、輝度
データnビット目の LED の点灯制御が終了したことを示す信号であり、この
信号により制御回路は、LED 点灯モードからデータ転送モードに切換る。ただ
し、輝度データの 8 ビット目の点灯制御が終了した時には、LED 点灯モードか
ら待機モードに切換る。
LED 点灯制御回路のブロック図を図 3-17 に示す。
SC
010011000111
CLK_hight
counter
SCEnd
SCEnd発生回路
CLK
reset
count=50
or
reset=1
reset
Sin
preset
12bit_Shift_Register
Din
'1'
上位10bit
が'1'で'1'
CLK
Sout(00)
SC
reset=1で111111111110
Sout
CLK_SC
図 3-17
点灯制御回路ブロック図
制御回路ブロック図
“CLK_SC”は、LED の点灯時間を制御するものである。“CLK_SC”の周
期をn倍することにより、SC より出力される波形の周期をn倍することができ
る。
24
RGB比の波形を出力するためには、シフトレジスタを使用する。プリセッ
トの条件をシフトレジスタの値上位 11 ビットが‘1’の時とすることにより、
Reset 信号によりレジスタの値を“11111111110”とした状態でクロックが入力
されると、
“010011000111”がセットされる。この値は RGB 比の波形を‘0’、
‘1’にそのまま置き換えたものである。
出力 SC は、シフトレジスタの 1 ビット目とする。レジスタに“010011000111”
がセットされると SC は‘1’となり、レジスタの値を LSB 側にシフトしてい
くことにより、3:2:1の周期の波形を出すことができる。そして、シフト
時の MSB への入力である Din に‘1’を固定しておくことにより、
‘1’がシ
フ ト さ れ て い き 、“ 11111111110 ” と な る 。“ 11111111110 ” と な る と 再 び
“010011000111”がセットされ、RGB 比の波形を繰り返すことができる。
また、RGB 比の波形を LED4 個分繰り返し、その後 13 個目のパルスが出力
されるまでシフトレジスタを動作させる。
RGB 比の波形繰り返しの制御はカウンタを用いて行う。RGB 比の波形を 1
回出力するためには、シフトレジスタに 12 個のクロックパルスを入力する必
要がある。RGB 比の波形は 4 回必要であり、合わせて 48 個のクロックパルス
が必要である。
48 個のクロックパルスによりカウンタを動作させた場合は、“48”となる。
しかし、SC の 13 回目のパルスを発生させるために、カウンタを“49”まで動
作させる。カウンタを“49”まで動作させた時の出力 SC を表 3-2 示す。
表 3-2 カウンタの値と SC
count
0
1
2
3
レジスタの値
111111111110
010011000111
101001100011
110100110001
SC
0
1
1
1
47
48
49
0
111111111101
111111111110
010011000111
111111111110
1
0
1
0
25
set
set
reset
VHDL による設計
第4章
第4章では、第3章に示した制御回路を、VHDL を用いて設計し、シミュレーション
を行った結果について述べる。
4-1 VHDL とは
VHDL とは Very High Speed Integrated Circuit Hardware Discription
Language 略であり、HDL(Hardware Discription Language)の一種である。
VHDL の特徴は、システムの設計の段階や用途に応じて記述することのでき
る、記述能力の高さにある。
HDL による設計は、設計が容易であり、他の人でも記述内容を理解しやす
いものとなる。また、抽象度の高い設計ができ、回路の変更も容易であり、開
発期間を短縮できる[4]。
4-2 データ転送回路の設計
4-2-1 データ転送回路の VHDL による記述
データ転送回路の VHDL による記述をリスト 4-1 から 4-5 に示す。図 3-10
中の PD の部分を除いたものをモデルとした。データ転送回路 PC のエンティ
ティ宣言はリスト 4-1 である。
リスト 4-1 PC のエンティティ
entity PC is
port(CLK_hight : in std_logic;
reset : in std_logic;
start : in std_logic;
count_out : out std_logic_vector(10 downto 0);
pcend_out : out std_logic;
PC : out std_logic);
end PC;
26
“count_out”は内部のカウンタの出力であり、11 ビットの幅を持っている。
ここの“count_out”の 11 ビット目から2ビット目までをメモリアドレスとし
て使用する。
他の入力については、第3章で示したものと同じである。
アーキテクチャ(architecture)部の記述として、データ転送回路 PC 中のカウ
ンタの記述をリスト
の記述をリスト 4-2 に示めす。
リスト 4-2 PC 中のカウンタの記述
process(clk_hight,reset,start_ff)
begin
if(CLK_hight'event and CLK_hight = '1')then
if(reset = '1')then
count <= "00000000000";
elsif(for_reset = '1' and count(2 downto 0) = "111" )then
count <= "00000000000";
(2.1)
else
if(start_FF = '1')then
count <= count + '1';
else
null;
end if;
end if;
end if;
end process;
内部のカウンタは、クロックの立ち上がりで、カウントアップし、
“Start=0”
でカウントストップするカウンタとなっている。信号“Start_FF”は、入力
“Start”を保持するフリップフロップの出力であり、カウンタのイネーブル信
号として使用する。
また、リスト 4-2 中の(2.1)は、カウントを“0”に戻すための条件である。
カウントを“0”に戻す時は、カウンタの値が“1535”の時である。
count = “10111111111”
が本来の条件となる。
27
しかし、ここでは条件を
for_reset = ‘1’ and count(2 downto 0) = “111”
としている。これは、count =“10111111111”を条件とした場合、11 ビットの
AND をとることとなり、論理の結果が出力されるまでの遅延が大きくなる可
能性がある。そのため、カウンタの値が“10111111111”となる前に、前もっ
て “for_reset”という信号を作っておき、その信号とカウンタの下位の 3 ビ
ットとの 4 ビットの AND とし、ビット数を減らしたものである。
そのための記述をリスト 4-3 に示す
リスト 4-3 カウンタ Reset のための記述
process(clk_hight,reset)
begin
if (clk_hight 'event and clk_hight = '1') then
if (reset = '1') then
for_reset <= '0';
elsif (count =
"10111111111") then
for_reset <= '0';
elsif (count =
"10111111101") then
for_reset <= '1';
else
Null;
end if;
end if;
end process;
リスト 4-3 の記述は、count =“10111111101”時に信号“for_reset”を 1 と
しいる。これにより、カウントの下位 3 ビットと AND をとることにより、カ
ウントを‘0’とするための条件である、count =“10111111111”と同じタイ
ミングをとることができる。
この記述の if 文の条件として 11 ビットの信号を使っているが、“for_reset”
を 1 とする時刻を、カウンタが“10111111111”となる少し前にすることで少々
の時間が遅れが出ても問題ない。そのためここでは、11 ビットで論理をとって
いる。
28
カウンタのイネーブル信号となる“start_FF”とデータの転送が終了したこ
とを示す“pcend_out”についての記述は、リスト 4-4 である。
リスト 4-4 Start と pc_end
process(clk_hight,reset,start)
begin
if(CLK_hight 'event and CLK_hight = '1')then
if(reset = '1')then
start_ff <= '0';
elsif
(for_reset = '1' and count(2 downto 0) = "111")then
start_ff <= '0';
elsif(start = '1')then
start_ff <= '1';
end if;
end if;
end process;
process(clk_hight,reset)
begin
if (clk_hight 'event and clk_hight = '1') then
if (reset = '1') then
pcend_out <= '0';
elsif (for_reset = '1' and count(2 downto 0) = "111")then
pcend_out <= '1';
else
pcend_out <= '0';
end if ;
end if ;
end process;
“start_FF”は、Start 信号に‘1’が入力されると‘1’となりカウンタ
の値が“10111111111”の時に 0 となる。これにより 768 個のパルスを出力す
るとカウント動作は止まる。
29
“pcend_out”は、768 個のパルスが出力された後に 1 パルス出力されるも
のである。この信号は、リスト 4-4 の記述にあるように、カウンタのオーバフ
ローをとるような形となる。
データ転送回路からの出力 PC は、図 3-16 に示すように、タイミング調整を
され、PC とメモリ用のクロックとして制御回路から出力される。
そのための記述がリスト 4-5 である。
リスト 4-5
PC のタイミング制御
process(clk_hight,reset)
begin
if(clk_hight'event and clk_hight = '0')then
if(reset = '1')then
pco <= '0';
else
pco <= not pcin;
end if;
end if;
end process;
rom_clkout <= pcin ;
リスト 4-5内の信号“pcin”はデータ転送回路からの出力 PC を入力として
使用するための信号である。
“pco”はデータ転送用のクロックの最終的な出力
となる。“rom_clkout”は制御回路からの出力でありメモリ用のクロックであ
る。
“clk_hight”は、データ転送回路で使用されるクロックと同じ高速なクロッ
クである。
データ転送回路からの出力 PC を反転させ、フリップフロップを通したもの
を“pco”とし、“rom_clkout”は PC を、そのまま出力したものである。こ
のようにすることにより、メモリからのデータをラッチした信号と
“rom_clkout”、PC のタイミングの調整を行っている。メモリからのデータ
を選択しラッチする動作の記述は本章 4-5 に示す。
30
4-2-2 データ転送回路のシミュレーション
Multisim VHDL によるデータ転送回路のシミュレーション波形を図 4-1 に示す。
図 4-1 PC シミュレーション波形
図 4-1 の上段は、動作開始時の波形である。Start 信号が入力されるとカウ
ンタが動作を開始している。
図 4-1 の下段は、動作終了時の波形である。アドレスの値が、
76710 =“10111111112”
の時のクロックで‘0’に戻っている。これによって、768 個のパルスが出力
されたことがわかる。また、シミュレーション波形より“pcend_out”も正し
く出力されていることがわかる。
輝度データには、アドレスが“1”と“767”の時に‘1’がメモリクロッ
クに同期して出力されるようにしている。PD には、メモリクロックに同期し
て変化する輝度データを、さらに内部のクロックに同期したレジスタに保持し
て出力しているために、メモリクロックから少し遅れて変化している。
また、PC の最後の立ち上がりの前に、“Pcend”が出力されているが、デー
タ送信と LED の点灯制御の切換えや LED の点灯制御信号の出力までには時間
の余裕がある。
31
4-3
切換信号回路の設計
4-3-1 切換信号回路の VHDL 記述
切換信号回路のエンティティ宣言は、図 3-12 をモデルとし、リスト 4-6の
記述となる。
リスト 4-6
切換回路のエンティティ
entity QC is
port(clk_qc : in std_logic;
reset : in std_logic;
EN : in std_logic;
qcendout : out std_logic;
QC : out std_logic);
end QC;
図 3-13 の回路を記述したものが、リスト 4-7である。
リスト 4-7
切換信号回路の記述
process(clk,reset)
begin
if (reset = '1')then
Qout <= "00";
elsif (clk_qc 'event and clk_qc = '1') then
case EN is
when '0' =>
Qout <= Qout(00) & Din;
when others =>
Qout <= Qout;
end case;
end if;
end process;
Din <= Qout(1) nor
Qout(0);
qcendout <= Qout(01);
QC <= Qout(00);
32
切換回路は、2 ビットのシフトレジスタで構成されており“Din”の値をシ
フトする。出力は 2 ビット幅の信号“Qout”であり、
“Qout(00)”を QC とし、
“Qout(01)”を“qcendout”としている。
動作は、外部の回路により“EN”を制御してしる。QC と qcendout が出力
された後に“EN”に‘1’を入力することにより動作を停止させる。その後、
“EN”が‘0’となると再び動作をかしする。
4-3-2 切換信号回路のシミュレーション
図 4-2 は切換信号回路のシミュレーション波形である。
図 4-2
QC のシミュレーション波形
図 4-2 の波形から QC が 1 個のパルスを出力し、その後 qcendout が 1 個の
パルスを出力している。そしてこの動作を繰り返している。これより、切換信
号回路は正常に動作していることがわかる。
4-4
LED 点灯制御回路の設計
4-4-1 LED 点灯制御回路の VHDL 記述
図 3-14 をモデルとした LED 点灯制御回路のエンティティは、リスト 4-8で
ある。
リスト 4-8
LED 点灯制御回路のエンティティ
entity SHIFT_REG is
port(clk_sc : in std_logic;
clk_hight : in std_logic;
reset : in std_logic;
scendout
: out std_logic;
Yout : out std_logic);
end SHIFT_REG;
33
“SC”が点灯制御信号であり、
“scendout”は点灯制御信号の終了を示す信
号である。シフトレジスタは LSB 側にシフトし“Yout”を出力とする。
“CLK_hight”は高速なクロックであり、“CLK_SC”は、点灯制御のため
に分周、制御されたクロックである
リスト 4-9に回路内のシフトレジスタとカウンタの記述を示す。
リスト 4-9
シフトレジスタとカウンタの記述
process(clk_sc , reset)begin
if(reset = '1')then
reg <= "111111111110";
count <= "000000";
elsif(scend_C = '1')then
scendin <= '0';
elsif( CLK_sc 'event and clk_sc = '1')then
if(count = "110001")then
reg <= "111111111110";
scendin <= '1';
elsif(reg(11 downto 1) ="11111111111")then
reg <= "010011000111";
else
reg <= '1' & reg(11 downto 1);
end if;
if(count = "110001")then
count <= "000000";
else
count <= count + '1';
end if;
end if;
end process;
Yout <= reg(0);
scendout <= scendin;
34
(9.1)
信号“reg”はシフトレジスタの内部の値である。シフトレジスタとカウンタ
は、外部で分周されたクロックの立ち上がりで動作する。
(9.1)の記述により、シフトレジスタに RGB の波形を出力するための値がセ
ットされる。また、カウンタが“110001”である時に、Reset することにより、
RGB 比の値の最初の‘1’が出力されている時に、出力を‘0’とする。この
‘1’、‘0’が 13 個目のパルスとなる。
出力“scendout”は、内部信号“scendin”となっている。この出力“scendout”
を直接 if 文中で記述していないのは、リスト 4-10 の記述で“scendout”と同
じ波形を使用するためである。
“scendout”は出力であるので、リスト 4-10 で
入力としては、使用できないが、内部信号“scendin”であれば入力として使
用できる。
リスト 4-10 は“scendin”をリセットするための条件である“scend_c”を
出力するための記述である。
リスト 4-10
scend_c の記述
process(clk_hight,reset)
begin
if (clk_hight 'event and clk_hight = '1' ) then
if (reset = '1')then
scend_C <= '0';
elsif (scendin = '1') then
scend_C <= '1';
elsif(reg(1 downto 0) = “10”)then
scend_C <= '0';
end if;
end process;
scendout <= scendin;
リスト9より、出力“scendout”は、13 個の点灯制御パルスを出力し終えた
あと“scendout”が‘1’となり、
“scend_c”が‘1’となると、
“scendout”
が‘0’となることを示している。また、
“scend_c”は、リスト 10 より“scendin”
が‘1’となった時に‘1’となる。そして、シフトレジスタが、リセットさ
れた時となる値で‘0’となる。
35
これにより、
“scendout”は‘1’CLK_hight の 1 周分の時間で‘0’とな
る。信号“scend_c”の記述がない場合は、カウンタが、
“110001”の時にクロ
ックが入力されると、次のクロックまで“scendout”に‘1’が長時間出力さ
れてしまう。これでは、回路の誤動作を招く可能性がある。そのため“scend_c”
の記述をして、“scendout”に‘1’が長時間出力されないようにしている。
また、
“scend_c”による“scendin”のリセットが非同期となっているのは、
“scendin”が‘1’となると、4-5 に示す MODE 信号が変化しシフトレジス
タのためのクロックが止まってしまい、クロックに同期できないからである。
4-4-2 LED 点灯制御回路のシミュレーション
図 4-3 に LED 点灯制御回路のシミュレーション波形を示す。
図 4-3
SC のシミュレーション波形
図 4-3 では、
“Yout”は出力信号 SC である。RGB 比の波形と 13 個目のパル
スが出力され、その後、動作終了を示す“Scendout”が短時間出力されている。
4-5
周辺回路の記述
図 3-16 に示すように制御回路には、データ転送回路、LED 点灯制御回路、
切換信号回路以外にも、MODE 回路やクロック分周回路、輝度データの選択回
路などが必要である。
4-5-1 MODE 回路の記述
リスト 4-11 は、他の回路からの出力による MODE の変化条件を記述したも
のである。
36
リスト 4-11 MODE の記述
mode_sel : process(clk_hight,reset)
begin
if (clk_hight'event and clk_hight = '1') then
if (reset = '1') then
mode <= "00";
else
case mode is
when "00" =>
if (start1 = '1') then
mode <= "01";
end if;
when "01" =>
if (pcend_out = '1') then
mode <= "10";
end if;
when "10" =>
if (qcendout = '1') then
mode <= "11";
end if;
when others =>
if (countdata = "111") then
if (scendout = '1') then
mode <= "00";
end if;
else
if (scendout = '1') then
mode <= "01";
end if;
end if;
end case;
end if;
end if;
end process;
37
MODE は、データ転送回路、切換信号回路、LED 点灯制御回路の動作終了
を示す信号と Start 信号によって変化する。
MODE=“00”時に。
“Start=1”が入力されると MODE=“01”に変化する。
そして、それぞれ回路からの信号により“10”、
“11”と変化し、これを繰り返
す。しかし、
“count_data”が“111”の時には、MODE=“00”となり、Start
信号が入力されるまで待機する。リスト 4-11 の“11.1”の“”
“count_data”とは、輝度データの何ビット目について制御しているのかを
示す信号であり、回路は点灯制御の終了を示す信号をクロックとしたカウンタ
となっている。
MODE 信号によりデータ転送回路、切換信号回路、LED 点灯制御回路のど
の回路を動作させるのかを選択して動作させている。
4-5-2 クロック分周回路と選択回路の記述
LED 点灯制御の周期を決定するクロックの分周回路について示す。回路の記
述はリスト 4-12 である。
リスト 4-12
ダウンカウンタによるクロック分周
architecture RTL of clkout is
signal countin : std_logic_vector(7 downto 0);
begin
process(clk_p8)
begin
if (clk_p8'event and clk_p8 = '1') then
if (reset = '1' or reset2 = '1') then
countin <= "00000000";
elsif (EN = '1')then
NULL;
else
countin <= countin - '1';
end if;
end if;
end process;
countout <= countin;
end RTL;
38
リスト 4-12 に示したように点灯制御用クロックの分周にはダウンカウンタ
を用いている。アップカウンタを用いた場合には、最初に‘1’となるタイミ
ングが異なってしまうので点灯制御用には向いていない。
ダウンカウンタであれば、“00000000”からカウントを初めることにより、
入力クロック 1 個で、全てが‘1’となり、最初に‘1’となるタイミングは
出力クロックによらずほぼ同じである。また、上位ビットになるごと周期が 2
倍となるので、点灯制御用のクロックとして使用できる。
n
選択されたクロックの、最初に‘1’となるタイミングを同じにする場合に
は、クロックの選択切換時に、Reset をかけて全て‘0’とする必要がある。
これは、点灯制御の終わりを示す Scend を Reset2に入力して行う。
クロック分周回路は EN 信号により制御される。EN 信号を生成するための
記述を、リスト 4-13 に示す。
リスト 4-13
クロック分周回路のための EN 信号の記述
clkout_C : process(clk_hight)
begin
if (clk_hight'event and clk_hight = '1') then
case mode is
when "11" =>
clkoutEN <= '0';
when others =>
clkoutEN <= '1';
end case;
end if;
end process;
EN 信号は MODE 信号が“11”である時に‘0’であり、それ以外の時‘1’
となる。MODE 信号は、それぞれの動作の終了を示す信号によって変化するた
め EN 信号が‘0’から‘1’に変化する時は、
“Scend”が‘1’となった時
である。
“Scend”は Reset としても使用されているため。クロック分周回路内
のカウンタは、LED 点灯制御終了時に“00000000”となり、動作を停止する。
これにより MODE 信号が“11”以外となるので次回動作時に“00000000”か
ら始めることができる。
39
4-6
制御回路全体の記述
制御回路全体を記述した VHDL ソースは、付録1に示す。また、シミュレー
ション結果も付録2に示す。
制御回路全体の記述は、図 3-16 のように、データ転送回路、切換信号回路、
LED 点灯制御回路の波形を出力する回路の記述と、MODE 制御回路、クロッ
ク分周回路などの記述をまとめ、信号を接続したものとなっている。
付録 2-1 のシミュレーション波形は、輝度データの 1 ビット目の転送開始時
と転送終了時の波形である。付録 2-2 は、転送された 1 ビット目の輝度データ
についての LED 点灯時の波形である。付録 2-3 は、2ビット目の輝度データ
についての LED 点灯時の波形の一部である。
また、シミュレーション時の輝度データの変化するタイミングは、第 5 章の
テスト用の回路で生成したものであるため、実際のタイミングとは異なったも
のとなっている。
40
第5章
連珠状 LED ディスプレイの製作と評価
5-1 テスト回路製作
制御確認のために連珠状 LED モジュールのテスト回路 FPGA を用いて製作
した。テスト回路では LED の点灯と LED の各色を正しく制御できているかを
確認することが目的である。
クロック周期とフレーム時間
回路を製作し、実際に動作させるためのクロック周期は 100ns とする。デー
タの転送用クロック PC は、カウンタの LSB を使用しているため周期は 2 倍の
200ns となる。1 フレーム分のデータ転送時間は、
200ns×768×8=1228800ns≒1.3ms
である。LED の点灯時間は、シフトレジスタのために分周されたクロックの周
期によりきまる。クロック周期は最も短いもので 1600ns である。クロックパ
ルスは、シフトレジスタを動作させるために 50 個必要であり、8 ビットの輝度
データを表現するためには、これを 256 倍した時間が必要である。これより 1
フレーム分の LED 点灯時間は、
1600ns×50×256=20480000ns≒21ms
となる。1 フレーム分の時間は、
21ms+1.3ms=22.3ms
となる。この時間は、1 秒間に 45 フレーム表示できる時間である。タイミング
調整などの時間を入れても、1 秒間に約 40 フレーム表示できる時間である。
テスト回路
FPGA とは、Field Prgramble Gate Array の略であり、プログラムできるロ
ジックデバイスの一種である。FPGA のロジックはプログラムをしなおすこと
によりロジックを変更することができる。そのため回路の変更を容易におこな
うことができる。
使用した FPGA は、
Altera MAX7000 シリーズ EPM7160SLC84-15
である。
41
製作した回路の構成は図 5-1 である。
16個
フルカラー
LEDランプ
CLK
Reset
Start
制御
回路
Invert_sw
lamp_test
8bit
図 5-1 テスト回路の構成
製作した回路は 16 個のフルカラーLED を配線したランプ駆動回路を複数個
接続したものと制御回路を接続したものである。輝度データはテスト用に制御
回路内部で生成した。
Invert_sw は 8 ビット幅の信号であり、外部のスイッチにより値を決める。
このスイッチ信号は、輝度データを生成する時に使用し、対応するビットの値
を反転させて、輝度データのパターンを変化させるために使用する。
輝度データの生成回路を図 5-2 に示す。
C11
111
Inv_SW11
C10
110
Inv_SW10
C9
101
Inv_SW9
C8
100
Inv_SW8
MUX
C7
011
Inv_SW7
C6
Counter
010
Inv_SW6
C5
001
Inv_SW5
C4
000
Inv_SW4
C3
C2
C1
CLK
C0
D
使用しない
図 5-2 輝度データ生成回路
42
SET
CLR
Lamp_test_sw
CLK
Q
Q
out
輝度データは、本来、外部メモリから読み出すが、今回は 12 ビットのカウ
ンタとマルチプレクサによって内部で生成した。カウンタは、データ転送回路
のカウンタと同じクロックで動作する。そのためカウンタの LSB である“C0”
は、データ転送用のクロック PC と同じ周期と同じになる。
カウンタは、1 フレームごとのデータを同じにするために、LED256 個分の
8 ビット幅の輝度データを作り終えた時点で、Reset される。
マルチプレクサは、カウンタの上位 8 ビットを、残りの 3 ビットにより選択
するものである。また、マルチプレクサの出力と Lamp_test スイッチの OR を
とることにより、Lamp_test が‘1’の時は輝度データが常に‘1’となり、
LED は全点灯する。
連珠状 LED モジュールでは、輝度データはシフトされていくため、生成さ
れる輝度データの最初は最も制御回路からはなれた LED のデータとなる。
そのため、図 5-1 の回路のように、制御回路から近い LED のデータは、カ
ウンタがある程度動作したものを選択したもとなり、各 LED を違った輝度デ
ータにより点灯させることができる。
制御回路から 16 個分の LED の輝度データは、表 5-1 のようになる。
表 5-1 LED16 個分の輝度データ
B カウンタ 12 ビット目反転
A 基本パターン
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
G
210
255
255
153
255
0
170
255
210
255
0
153
255
255
170
0
R
153
255
255
170
255
210
255
0
153
255
0
170
0
210
255
255
B
170
255
210
255
255
153
255
255
170
255
210
255
255
153
255
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
43
G
45
255
255
153
255
0
170
255
45
255
0
153
255
255
170
0
R
153
255
255
170
255
45
255
0
153
255
0
170
0
45
255
255
B
170
255
45
255
255
153
255
255
170
255
45
255
255
153
255
0
表 5-1 の A は反転スイッチをすべて“0”とした、LED16 個分の輝度デー
タである。B はカウンタの 12 ビット目を反転させた時の輝度データである。
輝度データは、LED 各色ごとに違った値のものと同じものがある。12 ビッ
ト目を反転させたものは、基本パターンから少し異なっている。
LED を点灯させ、基本パターンと 8 ビットの反転スイッチを変化させた時に
表 7-1 のように予想された値の輝度で LED が点灯していれば、連珠状 LED も
ジュールの制御が出来ているものとできる。
製作したテスト回路は、図 5-3 である。
図 5-3 テスト回路
44
5-2
テスト回路による評価
5-2-1 テストパターンの表示
5-1 で製作したテストパターンが表示できているかを確認した。テストパタ
ーンを表示させた時の画像が図 5-4 である。
(A)
(B)
(C)
図 5-4 テストパターン画像
(A)はテストパターンの基本パターンであり、(B)はテストパターン生成回路
のカウンタの MSB を反転させた値での表示である。(C)カウンタの 8 ビット目
を反転させた値での表示である。テストパーンは、正しく表示されていること
を確認した、これにより制御回路は正しく動作していることが確認できた。
45
5-2-2 色調
テストパターンを、赤から緑へ、緑から青へ、青から紫へと段階的に変化す
るあたいとして、画像を表示させる。これにより、LED 各色が混ざり正しく中
間色が表示できるかを確かめた。
そのときの画像を図 5-5 に示す。
図 5-5 グラデーション
図 5-5 にしめすように、色が段階的に変化していることがわかる。しかし、
LED の色は、使用する LED の種類や LED の個体差、人による個人差がある
ため、色調の調整が必要である。
46
5-2-3 文字の表示
テストパターンを、文字が表示できるよう変化させ、文字が正しく表示でき
るかを確認した。
文字パターンを表示させた時の画像を図 5-6 に示す。
図 5-6 文字
表示させる文字は、3 文字で‘K’、‘U’、‘T’である。LED の数か少ないため滑らか
なに表示することはできないが、3 文字が認識できる。
5-2-4 信号線と配置
従来のマトリックス方式の LED ディスプレイでは、信号線を上下左右に多
数施す必要があった。テスト回路は、FPGA を用いて LED16 個を 1 つの基盤
に配置しているが、それぞれの基盤間の配線は、信号線 4 本と電源、グランド
だけでよく、上下左右に信号線を施す必要もない。これは、従来のマトリック
ス状 LED ディスプレイの問題点であった配線数を減らすことができたといえ
る。
47
また、マトリックス方式のディスプレイに比べ LED の配置が、FPGA を用
いたテスト回路基盤では限界があるが LED の配置が比較的自由である。
5-3
問題点と可能性
問題点
テスト回路を製作しテストした結果、考えられる問題点としては、製作した
回路では、データの転送と LED の点灯を交互に行なっているため、駆動する
LED の数が多くなった場合は、輝度データの転送時間が長くなってしまう。こ
れにより、LED の点灯時間がデータの転送時間に比べて短くなり、輝度が落ち
てしまう。また、データの転送時間が長くなると、1 秒間に表示できるフレー
ム数が減ってしまい画面がちらつきがでる可能性がある。
そして、本章 5-2-2 で述べように、表示を見た時の色は、使用する LED や人
により個人差があるため、表示色をより細かく調整できるよう改良が必要であ
る。
可能性
連珠状 LED ディスプレイは、LED ランプ1つにランプユニットを1つ取り
付けた回路ものとなる。この場合、従来のマトリックス方式の LED ディスプ
レイに比べて配線数が少なく、上下左右に配線を施す必要がないため、設置か
容易になる。そして、LED が連珠状になっているので、設置する時の自由度が
高くさまざまな形状にすることができる。また、メンテナンス性も従来のもの
に比べ高い。
連珠状にしたことにより、ディスプレイとしてだけでなく、イルミネーショ
ンなどにも使用することができる。そうした場合には、従来のように単純なパ
ターンだけでなく、フルカラーで比較的複雑なパターンが表示可能である。
48
終わりに
本研究では、連珠状 LED ディスプレイを設計し、テスト回路を製作した。外部から
のデータにより LED を点灯させるところまではできなかったが、任意のパターンを表
示させることができた。連珠状 LED ディスプレイの制御回路を設計することにより、デ
ィスプレの制御の基礎を学ぶと共に VHDL による回路設計を学ぶことができた。
今後の課題は、ディスプレイの制御について理解を深めると共に、問題点を改善
することである。
49
謝辞
本研究を進めるにあたり、日頃より懇切丁寧なご指導してくださいました、
高知工科大学工学部電子・光システム工学科 矢野政顕 教授に深く感謝いた
します。また、日頃から多くの助言を頂きお世話になりました原央教授、橘昌
良助教授、他各先生方に厚くお礼申し上げます。
本研究を進めるにあたり御協力、助言を頂きました松田圭弘氏、谷脇史高氏
をはじめ同研究室の先輩方、同学部生の仲間たちにも感謝いたします。
最後に、本研究のフルカラーLEDを提供してくださった日亜化学工業株式
会社殿に感謝します。
50
参考文献
[1]電子ディスプレイ
小林俊介著 電子情報通信学会 1994
[2]電子ディスプレイ
松本正一著 オーム社 1996
[3]光エレクトロニクスの基礎と活用法
トランジスタ技術編集部編 CQ 出版株式会社
[4]VHDL によるハードウェア設計入門
長谷川裕泰著 CQ 出版株式会社
51
付録
付録1 VHDL ソース
付録 1-1 データ転送回路の記述1
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity PC is
port(CLK_hight : in std_logic;
reset : in std_logic;
start : in std_logic;
count_out : out std_logic_vector(10 downto 0);
pcend_out : out std_logic;
PC : out std_logic);
end PC;
architecture BEHAVIOR of PC is
signal count : std_logic_vector(10 downto 0);
signal start_ff : std_logic;
signal for_reset : std_logic;
begin
process(clk,reset,start_ff)begin
if(CLK_hight'event and CLK_hight = '1')then
if(reset = '1')then
count <= "00000000000";
elsif(for_reset = '1' and count(2 downto 0) = "111" )then
count <= "00000000000";
else
if(start_FF = '1')then
count <= count + '1';
else
null;
end if;
end if;
end if;
end process;
52
付録 1-2 データ転送回路の記述2
process(clk_hight,reset)
begin
if (clk_hight'event and clk_hight = '1') then
if (reset = '1') then
for_reset <= '0';
elsif (count =
"10111111111") then
for_reset <= '0';
elsif (count =
"10111111101") then
for_reset <= '1';
else
Null;
end if;
end if;
end process;
process(clk_hight,reset,start)
begin
if(CLK_hight'event and CLK_hight = '1')then
if(reset = '1')then
start_ff <= '0';
elsif(for_reset = '1' and count(2 downto 0) = "111")then
start_ff <= '0';
elsif(start = '1')then
start_ff <= '1';
end if;
end if;
end process;
53
付録 1-3 データ転送回路の記述3
process(clk,reset)
begin
if (clk_hight'event and clk_hight = '1') then
if (reset = '1') then
pcend_out <= '0';
elsif (for_reset = '1' and count(2 downto 0) = "111") then
pcend_out <= '1';
else
pcend_out <= '0';
end if ;
end if ;
end process;
pc <= count(00);
count_out <= count(10 downto 0);
end BEHAVIOR;
54
付録 1-4 データ転送と LED 点灯切換回路の記述
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity QC is
port(clk_QC : in std_logic;
reset : in std_logic;
EN : in std_logic;
qcendout : out std_logic;
QC : out std_logic);
end QC;
architecture RTL of QC is
signal Qout : std_logic_vector(1 downto 0);
signal Din : std_logic;
begin
process(clk_QC,reset)
begin
if (reset = '1')then
Qout <= "00";
elsif (clk_QC 'event and clk_QC = '1') then
if(Qout(01) = '1') then
Qout <= "00";
else
case EN is
when '0' => Qout <= Qout(00) & Din;
when others => Qout <= Qout;
end case;
end if;
end if;
end process;
Din <=
(not Qout(1)) nand
Qout(0);
qcendout <= Qout(01);
QC <= Qout(00);
end RTL;
55
付録 1-5 点灯制御回路の記述1
library ieee;
use ieee.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity SHIFT_REG is
port(clk_SC : in std_logic;
clk_hight : in std_logic;
reset : in std_logic;
scendout
: out std_logic;
Yout : out std_logic);
end SHIFT_REG;
architecture BEHAVIOR of SHIFT_REG is
signal reg : std_logic_vector(11 downto 0);
signal count : std_logic_vector(5 downto 0);
signal scendin : std_logic;
signal scend_C : std_logic;
begin
process(clk_SC , reset ,scend_C)
begin
if(reset = '1')then
reg <= "111111111110";
count <= "000000";
elsif(scend_C = '1')then
scendin <= '0';
56
付録 1-6 点灯制御回路の記述 2
elsif( clk_SC'event and clk_SC = '1')then
if(count = "110001")then--count = "110001"
reg <= "111111111110";
scendin <= '1';
elsif(reg(11 downto 1) ="11111111111")then
reg <= "000100010001";
else
reg <= '1' & reg(11 downto 1);
end if;
if(count = "110001")then
count <= "000000";
else
count <= count + '1';
end if;
end if;
end process;
process(clk_hight,reset)
begin
if (clk_hight'event and clk_hight = '1' ) then
if (reset = '1')then
scend_C <= '0';
elsif (scendin = '1') then
scend_C <= '1';
elsif(reg(1 downto 0) = "10")then
scend_C <= '0';
end if;
end if ;
end process;
scendout <= scendin;
Yout <= reg(0);
end BEHAVIOR;
57
付録 1-7 SC のためのクロック分周回路の記述
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity clkout is
port(CLK_hight : in std_logic;
reset : in std_logic;
reset2 : in std_logic;
EN : in std_logic;
countout : out std_logic_vector(7 downto 0));
end clkout;
architecture BEHAVIOR of clkout is
signal count : std_logic_vector(7 downto 0);
begin
process(clk_hight,reset)
begin
if(reset = '1')then
count <= "00000000";
elsif (clk_hight 'event and clk_hight = '1') then
if (reset2 = '1') then
count <= "00000000";
elsif (EN = '1')then
NULL;
else
count <= count - '1';
end if;
end if;
end process;
countout <= count;
end BEHAVIOR;
58
付録 1-8 制御回路全体の記述1
library ieee;
use ieee.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity UNIT is
port(clk_hight , reset : in std_logic;
start : in std_logic;
lamp_test : in std_logic;
Invert_SW : in std_logic_vector(7 downto 0);
ROM_address : out std_logic_vector(9 downto 0);
ROM_clk : out std_logic;
SCO : out std_logic;
QCO : out std_logic;
PCO : out std_logic;
PDO : out std_logic
);
end UNIT;
architecture rtl of UNIT is
signal ROM_clkout : std_logic;
signal mode : std_logic_vector(1 downto 0);
signal clk_QC : std_logic;
signal clk_p8 : std_logic;
signal clk_px : std_logic_vector(3 downto 0);
signal qcendout : std_logic;
signal scendout : std_logic;
signal PCin : std_logic;
signal SCin : std_logic;
signal pcend_out : std_logic;
signal startin : std_logic;
signal start1 : std_logic;
signal start2 : std_logic;
signal run1 : std_logic;
signal run2 : std_logic;
59
付録 1-9 制御回路全体の記述2
signal clkoutEN : std_logic;
signal qcEN : std_logic;
signal clk_sc : std_logic;
signal countdata : std_logic_vector(2 downto 0);
signal countin : std_logic_vector(7 downto 0);
signal clkout_reset2 : std_logic;
signal PCcount_in : std_logic_vector(10 downto 0);
signal selcountout : std_logic_vector(7 downto 0);
signal countsel : std_logic_vector(2 downto 0);
signal r_pd_out : std_logic;
signal light_data : std_logic_vector(7 downto 0);
component QC
port(clk_QC : in std_logic;
reset : in std_logic;
EN : in std_logic;
qcendout : out std_logic;
QC : out std_logic);
end component;
component SHIFT_REG
port(clk_sc : in std_logic;
clk_hight : in std_logic;
reset : in std_logic;
scendout
: out std_logic;
Yout : out std_logic);
end component;
60
付録 1-10
制御回路全体の記述3
component clkout
port(CLK_p8 : in std_logic;
reset : in std_logic;
reset2 : in std_logic;
EN : in std_logic;
countout : out std_logic_vector(7 downto 0));
end component;
component PC
port(CLK_hight : in std_logic;
reset : in std_logic;
start : in std_logic;
countdata_in : in std_logic_vector(2 downto 0);
count_out : out std_logic_vector(10 downto 0);
pcend_out : out std_logic;
PC : out std_logic);
end component;
begin
DUT1 : clkout port map (clk => clk_p8 , reset , reset2 => scendout,
EN => clkoutEN , countout => countin) ;
DUT2 : PC port map (clk => clk_hight , reset , start => start1 ,
countdata_in => countdata , count_out => PCcount_in,
pcend_out , PC => PCin) ;
DUT3 : QC port map (clk => clk_Qc , reset => reset , EN => qcEN , qcendout , QC => QCO) ;
DUT4 : SHIFT_REG port map (clk => clk_SC , clk2 => clk_hight, reset , scendout ,
Yout => SCin) ;
61
付録 1-11 制御回路全体の記述4
mode_sel : process(clk_hight,reset)
begin
if (clk_hight'event and clk_hight = '1') then
if (reset = '1') then
mode <= "00";
else
case mode is
when "00" =>
if (start1 = '1') then
mode <= "01";
end if;
when "01" =>
if (pcend_out = '1') then
mode <= "10";
end if;
when "10" =>
if (qcendout = '1') then
mode <= "11";
end if;
when others =>
if (countdata = "111") then
if (scendout = '1') then
mode <= "00";
end if;
else
if (scendout = '1') then
mode <= "01";
end if;
end if;
end case;
end if;
end if;
end process;
62
付録 1-12
制御回路全体の記述5
process(clk_hight,reset)
begin
if(clk_hight'event and clk_hight = '1')then
if (reset = '1')then
clk_px <= "0000";
else
clk_px <=clk_px +1;
end if ;
end if ;
end process;
clk_QC <= clk_px(00);
clk_P8 <= clk_px(02);
clkout_C : process(clk_hight)
begin
if (clk_hight'event and clk_hight = '1') then
case mode is
when "11" =>
clkoutEN <= '0';
when others =>
clkoutEN <= '1';
end case;
end if;
end process;
63
付録 1-13
制御回路全体の記述6
clk_SC_SEL : process(clk_hight,reset)
begin
if(clk_hight'event and clk_hight = '1')then
if(reset = '1')then
clk_SC <= '0';
else
case countdata is
when "000" =>
clk_SC <= countin(00);
when "001" =>
clk_SC <= countin(01);
when "010" =>
clk_SC <= countin(02);
when "011" =>
clk_SC <= countin(03);
when "100" =>
clk_SC <= countin(04);
when "101" =>
clk_SC <= countin(05);
when "110" =>
clk_SC <= countin(06);
when others =>
clk_SC <= countin(07);
end case;
end if;
end if;
end process;
64
付録 1-14
制御回路全体の記述7
process(clk_hight,reset)
begin
if (reset = '1') then
startin <= '0';
elsif (clk_hight'event and clk_hight = '1') then
startin <= start and (not run2);
end if;
if (reset = '1') then
run1 <= '0';
run2 <= '0';
elsif clk_hight'event and clk_hight = '1' then
if start = '1' then
run1 <= '1';
else
run2 <= run1;
end if;
else
null;
end if;
end process;
PC_C : process(pcin,reset,scendout)
begin
if(reset = '1' or pcin = '1')then
start2 <= '0';
elsif(scendout'event and scendout = '1')then
start2 <= '1';
end if;
end process;
65
付録 1-15
制御回路全体の記述8
startin_P : process(clk_hight , reset)
begin
if (clk_hight'event and clk_hight = '1') then
if (reset = '1') then
start1 <= '0';
elsif(start2 = '1' or startin = '1')then
start1 <= '1';
else
start1 <= '0';
end if;
end if;
end process;
QC_C : process(clk_hight)
begin
if (clk_hight'event and clk_hight = '1') then
case mode is
when "10" =>
qcEN <= '0';
when others =>
qcEN <= '1';
end case;
end if;
end process;
66
付録 1-16
制御回路全体の記述9
light_data_SEL: process(clk_hight)
begin
if (clk_hight'event and clk_hight = '1')then
if(reset = '1')then
PDO <= '0';
elsif(lamp_test = '1')then
PDO <= '1';
else
case countdata is
when "000" => PDO <= light_data(00);
when "001" => PDO <= light_data(01);
when "010" => PDO <= light_data(02);
when "011" => PDO <= light_data(03);
when "100" => PDO <= light_data(04);
when "101" => PDO <= light_data(05);
when "110" => PDO <= light_data(06);
when others => PDO <= light_data(07);
end case;
end if;
end if;
end process;
process(scendout,reset) -- clk hight?
begin
if(reset = '1')then
countdata <= "000";
elsif(scendout'event and scendout = '1') then
if (countdata = "111") then
countdata <= "000";
else
countdata <= countdata + '1';
end if;
end if;
end process
67
付録 1-17
制御回路全体の記述10
process(clk_hight,reset)
begin
if(clk_hight'event and clk_hight = '0')then
if(reset = '1')then
pco <= '0';
else
pco <= not pcin;
end if;
end if;
end process;
SCO <= Scin;
ROM_clk <= PCin ;
rom_clkout <= PCin ;
ROM_address <= PCcount_in(10 downto 1);
selcountout <=
PCcount_in(10 downto 3);
countsel <= PCcount_in(2 downto 0);
68
付録2 シミュレーション波形
付録 2-1 データ送信時のシミュレーション波形
69
付録 2-2 LED 点灯時のシミュレーション波形1(輝度データ 1 ビット目)
70
付録 2-3 LED 点灯時のシミュレーション波形2(輝度データ 2 ビット目)
71
ダウンロード

連珠状LEDディスプレイ制御回路の設計と製作