[ Pyxis ]
ハードウェア設計コンテスト
最終レポート
|
付録5 回路階層と機能説明
|
表紙
目次
1. 製作の目的
1.1 対象
1.2 問題点
1.3 解決法
1.4 略記号について
2. システム概要
2.1 設計方針
2.2 システム的機能
2.3 動作の概要
3. システム設計
3.1 演算フローの検討
3.2 数値のデータ表現
3.3 式(1-5)の判定法
4. 機能ブロックの解説
4.1 システムブロック
4.2 加算・減算回路
4.3 乗算回路
4.4 Ox:Cx生成回路
4.5 Oy:Cy生成回路
4.6 Xx:Zx2−Zy2+Cx演算回路
4.7 Yy:2ZxZy+Cy演算回路
4.8 Rr:Zx2+Zy2演算回路
4.9 Cn:制御回路
4.10 回路図の構成
5. タイミング設計
5.1 タイムチャートの表記法
5.2 タイムチャート
6. 使用部品
7. 実装設計
7.1 基板
7.2 レイアウト
8. 製作
9. ハンドリングソフトウェア
10. 結果
10.1 実行時間
10.2 設計目標との対比
11. 終わりに
付録1 制御信号と出力条件
付録2 タイムチャート
付録3 部品表
付録4 部品レイアウト図 (約240KB)
付録5 回路階層と機能説明
付録6 全回路図 (約1.7MB)
Copyright 2003-2006
Chiaki Nakajima.
All rights reserved.
|
Pyxisの回路図は、機能ブロックごとに分割された4階層、全67枚で構成されています。
第1章〜第4章の解説と併せてご覧ください。
なお、以下のリンクは全てTIFF形式の回路図です。
|
No.
|
第1階層
|
第2階層
|
第3階層
|
第4階層
|
機能説明
|
01
|
Pyxis
|
|
|
|
最上位階層
8ビット幅のデータバスを通してホストと接続される。
|
02
|
|
Ox
|
|
|
Cx生成回路ブロック
ピクセルごとの実軸座標を生成。
反復計算中は、パイプラインで同時に計算されている2ピクセル分の実軸座標をパイプラインに同期して生成する。
反復計算において、同一ピクセルに対するCxは定数であり、また奇数側ピクセルPD用のCxは偶数側ピクセルPE用のCxからリアルタイムに生成されるので、Oxブロック内にはパイプラインレジスタは存在しない。
|
03
|
|
|
OxAdd
|
|
Cx生成用加算回路
OxOrgまたはOxTmpに、ステップ幅S(OyStp)を加算して、Cxを生成する。
64ビット幅のCxを8ビットずつ8回に分けて加算する桁上げ保存加算器(Carry Saved Adder)。
|
04
|
|
|
OxAnd
|
|
Cx生成用データゲート
OxAddとOyStpの間に位置し、パイプラインに同期して、ステップ幅Sを加算するかしないかを制御する。
パイプラインが偶数側ピクセルPEの時には、ゲートを閉じてOxAddへの入力値を0にし、OxOrgまたはOxTmpの値がそのままPE用のCxとして使用されるようにする。一方奇数側ピクセルPDの場合には、ゲートを開けてOxAddへOyStpを入力させ、OxOrgまたはOxTmpの値にステップ幅Sを加算した値がPD用のCxとして使用されるように制御する。
ピクセルペアの処理が終了して次のピクセルペアへ移行する際にも、ゲートを開けて新しいCxが生成されるように制御する。
|
05
|
|
|
OxOrg
|
|
描画対象領域実軸原点(a1)保持レジスタ
描画領域の左下隅の実軸座標を保持する。データは64ビット固定小数点(整数部4ビット+小数部60ビット)で、ホストによりCPUバスを通して設定される。
Cx値には、OxOrgまたはOxTmpのどちらかが使用される。
このOxOrgが使われるのは、描画対象領域の左端のピクセルペアの処理時のみ。その時に限り、偶数側ピクセルPE用のCxとして出力される。出力はOxAddに同期して、下位側から8ビットずつ8回に分けて出力される。
|
06
|
|
|
OxTmp
|
|
Cx生成用テンポラリレジスタ
実軸側の処理進行に合わせて、偶数側ピクセルPE用のCxを保持する。レジスタ値は、ピクセルペアの処理終了時に、その時点でのCxにステップ幅Sを2回加算して生成される。
このレジスタの値が使われるのは、描画対象領域の左端以外の処理時である。その時に、OxAddに同期して下位側から8ビットずつ8回に分けて出力される。またその時、OxOrgからの出力は行われない。
|
07
|
|
Oy
|
|
|
Cy生成回路ブロック
ピクセルごとの虚軸座標を生成。Cy値は実軸のスキャンの終了ごとに更新される。
Oyブロック内にはパイプラインレジスタは存在しない。
|
08
|
|
|
OyAdd
|
|
Cy生成用加算回路
OyOrgまたはOyTmpに、ステップ幅S(OyStp)を加算して、Cyを生成する。
64ビット幅のCyを8ビットずつ8回に分けて加算する桁上げ保存加算器(Carry Saved Adder)。
|
09
|
|
|
OyStp
|
|
Cx,Cy生成用Sレジスタ
1ピクセル分の座標差分値(ステップ幅)。データは64ビット固定小数点(整数部4ビット+小数部60ビット)で、ホストによりCPUバスを通して設定される。
各ピクセルは正方形とみなされるので、CxとCyの両方にこの値が使用される。
出力はOxAdd、OyAddに同期して、下位側から8ビットずつ8回に分けて出力される。
|
10
|
|
|
OyOrg
|
|
描画対象領域虚軸原点(b1)保持レジスタ
描画領域の左下隅の虚軸座標を保持する。データは64ビット固定小数点(整数部4ビット+小数部60ビット)で、ホストによりCPUバスを通して設定される。
Cy値には、OyOrgまたはOyTmpのどちらかが使用される。
OyOrgが使われるのは、描画対象領域最下端のピクセルの処理時のみ。その時に限りCyとして出力される。出力はOyAddに同期して、下位側から8ビットずつ8回に分けて出力される。
|
11
|
|
|
OyTmp
|
|
Cy生成用テンポラリレジスタ
虚軸側の処理進行に合わせて、各ピクセル用のCyを保持する。レジスタ値は、実軸のスキャン終了時に、その時点でのCyにステップ幅Sを加算して生成される。
このレジスタの値が使われるのは、描画対象領域の最下端以外の処理時である。その時に、OyAddに同期して下位側から8ビットずつ8回に分けて出力される。またその時、OyOrgからの出力は行われない。
|
12
|
|
Xx
|
|
|
Zx2−Zy2+Cx演算回路ブロック
ZxからZx2を計算する乗算ステージと、Zx2、Zy2、CxからZx2−Zy2+Cxを計算する加減算ステージの2つのステージで構成される。それぞれのステージはリング状のパイプラインになっており、PEとPDの2ピクセルを同時に処理する。
算出したZx2は、ここXxだけでなくRrブロックの加減算ステージへも送られて使用される。同様に、ここで使用するZy2の値は、Rrブロックの乗算ステージの計算結果である。
|
13
|
|
|
XxAsc
|
|
Zx2残留桁上げ加算回路
加減算ステージの最初の処理として、直前の乗算ステージの結果であるXxPcrPd1とXxPcrSc1を加算する。この加算結果が目的とするZx2であり、続く加減算ステージで使われると同時に、Rrでも使用される。
64ビット幅を8ビットずつ8回に分けて加算する桁上げ保存加算器(Carry Saved
Adder)。
|
14
|
|
|
XxSub
|
|
Zx2−Zy2用減算回路
XxAscの出力Zx2から、RrAscの出力Zy2を減算する。
桁上げ保存加算器に2の補数回路を付加したもの。図4−3参照。
|
15
|
|
|
XxAdd
|
|
(Zx2−Zy2)+Cx用加算回路
XxSubの出力であるZx2−Zy2と、Oxブロックの出力Cxを加算する。
|
16
|
|
|
XxChk
|
|
式(3−3)判定回路
Xxブロックにおける発散判定のために、(Zx2−Zy2)+Cxが式(3−3)を満たすかどうかを判定する。
|
17
|
|
|
XxSqr
|
|
Zx2用乗算回路ブロック
ZxからZx2を計算する乗算ステージ。64ビット固定小数点データ同士の乗算を32クロックで実行する。
|
18
|
|
|
|
XxMulMlt
|
Zx2用2次Booth乗算器
被乗数XxMprMpdと乗数XxMprSfxの値から、2次のBoothのアルゴリズム(図4−4)にしたがって部分積を生成する。
|
19
|
|
|
|
XxMulAdd
|
Zx2用部分積加算器、桁上げ保存シフトレジスタ
部分積の累和XxMulTmpに、新たな部分積XxMulMltを加算する。
68ビットの桁上げ保存加算器と32ビットの桁上げ保存レジスタで構成される。詳しい動作は図4−6を参照。
|
20
|
|
|
|
XxMulTmp
|
Zx2用部分積レジスタ
部分積の累和を保存する66ビットのレジスタ。
|
21
|
|
|
XxMpr
|
|
Zx用乗数、被乗数レジスタブロック
乗算のための乗数、被乗数レジスタ。両者とも、前段加減算ステージの最終結果を保存するパイプラインレジスタとしても機能している。Zx2を求めるため、両者とも同じ値Zxがロードされる。
|
22
|
|
|
|
XxMprMpd
|
Zx2用被乗数レジスタ
被乗数Zxを保持する64ビットのレジスタ。
|
23
|
|
|
|
XxMprRnd
|
2の補数用1生成回路
2次のBooth乗算ICであるLS261の出力は、それが負数の場合、1の補数でしかない。2の補数にするためには1を加える必要があるので、乗数の3ビットをデコードし、そのための1を生成する。生成した1はXxMulAddにて累和と同時に加算する。
|
24
|
|
|
|
XxMprSfx
|
Zx2用乗数シフトレジスタ
2次のBoothアルゴリズムを実行するための3ビット乗数を生成する。偶数番ビット用と奇数番ビット用の2つのシフトレジスタで構成されており、1クロックで2ビットずつシフトできる。
このシフト出力は同時にYyブロックでも使用される。
|
25
|
|
|
XxPcr
|
|
Zx2用乗算結果、残留桁上げレジスタブロック
乗算ステージの結果は、部分積32個の累和と、その桁上げ加算器に残った残留桁上げの2つに分離した状態で得られる。ここはその両者をそれぞれ保持するXxPcrPd1とXxPcrSc1で構成される。続く加減算ステージの先頭にて両者は加算され、所望の乗算結果となる。
このブロックはパイプラインレジスタとしても機能している。
|
26
|
|
|
|
XxPcrPd1
|
Zx2用乗算結果レジスタ
部分積32個の累和を保持する64ビットのレジスタ。値のロードは64ビット同時に行われ、出力は続く加減算ステージの動作と同期して8ビットずつ8回に分けて行われる。
|
27
|
|
|
|
XxPcrSc1
|
Zx2用残留桁上げレジスタ
XxMulAddの桁上げ保存レジスタに残った残留桁上げを保存する32ビットのレジスタ。部分積の累和において、桁上げは1ビットおきにしか発生しないため、常に0となるビットを省いた32ビット構成となっている。
値のロードは32ビット同時に行われる。出力は、省略していた1ビットおきの0を挿入しながら、続く加減算ステージと同期して4ビットずつ8回に分けて行われる。
|
28
|
|
Yy
|
|
|
2ZxZy+Cy演算回路ブロック
ZxとZyから2ZxZyを計算する乗算ステージと、2ZxZyとCyから2ZxZy+Cxを計算する加減算ステージの2つのステージで構成される。それぞれのステージはリング状のパイプラインになっており、PEとPDの2ピクセルを同時に処理する。
|
29
|
|
|
YyAsc
|
|
2ZxZy残留桁上げ加算回路
加減算ステージの最初の処理として、直前の乗算ステージの結果であるYyPcrPd2とYyPcrSc2を加算する。この加算結果が目的とする2ZxZyである。
|
30
|
|
|
YyAdd
|
|
2ZxZy+Cy用加算回路
YyAscの出力である2ZxZyと、Oyブロックの出力Cyを加算する。
|
31
|
|
|
YyChk
|
|
式(3−4)判定回路
Yyブロックにおける発散判定のために、2ZxZy+Cyが式(3−4)を満たすかどうかを判定する。
|
32
|
|
|
YyMul
|
|
ZxZy用乗算回路ブロック
ZxとZyからZxZyを計算する乗算ステージ。64ビット固定小数点データ同士の乗算を32クロックで実行する。
|
33
|
|
|
|
YyMulMlt
|
ZxZy用2次Booth乗算器
被乗数YyMprMpdと乗数XxMprSfxの値から、2次のBoothのアルゴリズム(図4−4)にしたがって部分積を生成する。
|
34
|
|
|
|
YyMulAdd
|
ZxZy用部分積加算器、桁上げ保存シフトレジスタ
部分積の累和YyMulTmpに、新たな部分積YyMulMltを加算する。
68ビットの桁上げ保存加算器と32ビットの桁上げ保存レジスタで構成される。詳しい動作は図4−6を参照。
|
35
|
|
|
|
YyMulTmp
|
ZxZy用部分積レジスタ
部分積の累和を保存する66ビットのレジスタ。
|
36
|
|
|
YyMpr
|
|
Zy用乗数、被乗数レジスタブロック
乗算のための乗数、被乗数レジスタ。両者とも、前段加減算ステージの最終結果を保存するパイプラインレジスタとしても機能している。
|
37
|
|
|
|
YyMprMpd
|
Zy用被乗数レジスタ
被乗数Zyを保持する64ビットのレジスタ。
|
38
|
|
|
|
YyMprRnd
|
2の補数用1生成回路
2次のBooth乗算ICであるLS261の出力は、それが負数の場合、1の補数でしかない。2の補数にするためには1を加える必要があるので、乗数の3ビットをデコードし、そのための1を生成する。生成した1はYyMulAddにて累和と同時に加算する。
|
39
|
|
|
|
YyMprSfy
|
Zy用乗数シフトレジスタ
2次のBoothアルゴリズムを実行するための3ビット乗数を生成する。偶数番ビット用と奇数番ビット用の2つのシフトレジスタで構成されており、1クロックで2ビットずつシフトできる。
このシフト出力はYyブロックでは使用されず、Rrブロックへ送られる。
|
40
|
|
|
YyPcr
|
|
2ZxZy用乗算結果、残留桁上げレジスタブロック
乗算ステージの結果は、部分積32個の累和と、その桁上げ加算器に残った残留桁上げの2つに分離した状態で得られる。ここはその両者をそれぞれ保持するYyPcrPd2とYyPcrSc2で構成される。続く加減算ステージの先頭にて両者は加算され、所望の乗算結果となる。
このブロックはパイプラインレジスタとしても機能している。
YyPcrPd2、YyPcrSc2へ値をロードする際に、データを左へ1ビットシフトした値をロードさせている。これにより2ZxZyにおける2倍を瞬時に実行している。
|
41
|
|
|
|
YyPcrPd2
|
2ZxZy用乗算結果レジスタ
部分積32個の累和を保持する64ビットのレジスタ。値のロードは64ビット同時に行われ、出力は続く加減算ステージの動作と同期して8ビットずつ8回に分けて行われる。
|
42
|
|
|
|
YyPcrSc2
|
2ZxZy用残留桁上げレジスタ
YyMulAddの桁上げ保存レジスタに残った残留桁上げを保存する32ビットのレジスタ。部分積の累和において、桁上げは1ビットおきにしか発生しないため、常に0となるビットを省いた32ビット構成となっている。
値のロードは32ビット同時に行われる。出力は、省略していた1ビットおきの0を挿入しながら、続く加減算ステージと同期して4ビットずつ8回に分けて行われる。
|
43
|
|
Rr
|
|
|
Zx2+Zy2演算回路ブロック
ZyからZy2を計算する乗算ステージと、Zx2、Zy2からZx2+Zy2を計算する加減算ステージの2つのステージで構成される。それぞれのステージはパイプラインになっており、PEとPDの2ピクセルを同時に処理するが、このブロックの計算結果は反復演算で使用されないため、XxやYyのようにリング状にはなっていない。
算出したZy2は、ここRrだけでなくXxブロックの加減算ステージへも送られて使用される。同様に、ここで使用するZx2の値は、Xxブロックの乗算ステージの計算結果である。
|
44
|
|
|
RrAsc
|
|
Zy2残留桁上げ加算回路
加減算ステージの最初の処理として、直前の乗算ステージの結果であるRrPcrPd1とRrPcrSc1を加算する。この加算結果が目的とするZy2であり、続く加減算ステージで使われると同時に、Xxでも使用される。
|
45
|
|
|
RrAdd
|
|
Zx2+Zy2用加算回路
XxAscの出力Zx2と、RrAscの出力Zy2を加算する。
|
46
|
|
|
RrCpr
|
|
式(3−2)判定回路
Rrブロックにおける発散判定のために、Zx2+Zy2が式(3−2)を満たすかどうかを判定する。
|
47
|
|
|
RrSqr
|
|
Zy2用乗算回路ブロック
ZyからZy2を計算する乗算ステージ。64ビット固定小数点データ同士の乗算を32クロックで実行する。
Rrブロックに乗数、被乗数レジスタは無い。共にYyブロック内のデータを利用する。
|
48
|
|
|
|
RrMulMlt
|
Zy2用2次Booth乗算器
被乗数YyMprMpdと乗数YyMprSfyの値から、2次のBoothのアルゴリズム(図4−4)にしたがって部分積を生成する。
|
49
|
|
|
|
RrMulAdd
|
Zy2用部分積加算器、桁上げ保存シフトレジスタ
部分積の累和RrMulTmpに、新たな部分積RrMulMltを加算する。
68ビットの桁上げ保存加算器と32ビットの桁上げ保存レジスタで構成される。詳しい動作は図4−6を参照。
|
50
|
|
|
|
RrMulTmp
|
Zy2用部分積レジスタ
部分積の累和を保存する66ビットのレジスタ。
|
51
|
|
|
RrPcr
|
|
Zy2用乗算結果、残留桁上げレジスタブロック
乗算ステージの結果は、部分積32個の累和と、その桁上げ加算器に残った残留桁上げの2つに分離した状態で得られる。ここはその両者をそれぞれ保持するRrPcrPd1とRrPcrSc1で構成される。続く加減算ステージの先頭にて両者は加算され、所望の乗算結果となる。
このブロックはパイプラインレジスタとしても機能している。
|
52
|
|
|
|
RrPcrPd1
|
Zy2用乗算結果レジスタ
部分積32個の累和を保持する64ビットのレジスタ。値のロードは64ビット同時に行われ、出力は続く加減算ステージの動作と同期して8ビットずつ8回に分けて行われる。
|
53
|
|
|
|
RrPcrSc1
|
Zy2用残留桁上げレジスタ
RrMulAddの桁上げ保存レジスタに残った残留桁上げを保存する32ビットのレジスタ。部分積の累和において、桁上げは1ビットおきにしか発生しないため、常に0となるビットを省いた32ビット構成となっている。
値のロードは32ビット同時に行われる。出力は、省略していた1ビットおきの0を挿入しながら、続く加減算ステージと同期して4ビットずつ8回に分けて行われる。
|
54
|
|
Cn
|
|
|
制御回路ブロック
システムの各種制御信号を生成するブロック。ホストインターフェースを含む。
|
55
|
|
|
CnGen
|
|
制御信号生成回路ブロック
25MHzのクロックから各種制御信号を生成するブロック。
|
56
|
|
|
|
CnGenSyn
|
パイプライン制御回路
主に反復演算の終了制御を司る。反復演算の終了シーケンスには、ホストの読み出しが遅い場合の一時停止の有無や式(1-5)判定3回路からの信号パターン、PEが先に終了、PDが先に終了などの組み合わせにより10通りの場合があり、そのそれぞれにおける終了シーケンスを制御する。
|
57
|
|
|
|
CnGenCnr
|
演算結果レジスタ
ピクセルペアPE、PDそれぞれの演算結果が格納される2本の16ビットレジスタ。ホストの処理を軽減するため、発散の有無を示す1ビットのフラグMAXCNTがMSBにアサインされている。よって最大反復回数は15ビット、32767回まで計算可能。
|
58
|
|
|
|
CnGenGn1
|
制御信号生成回路1
CnCntの状態を受けて、各種制御信号を生成する。
|
59
|
|
|
|
CnGenGn2
|
制御信号生成回路2
CnCntの状態を受けて、各種制御信号を生成する。
|
60
|
|
|
|
CnGenGn3
|
制御信号生成回路3
CnCntの状態を受けて、各種制御信号を生成する。
|
61
|
|
|
|
CnGenGn4
|
制御信号生成回路4
CnCntの状態を受けて、各種制御信号を生成する。
|
62
|
|
|
CnCnt
|
|
制御信号生成用同期カウンタブロック
システムの内部状態を規定し、各種制御信号を生成するための52ビット完全同期カウンタ。
桁上げ先見回路を付加することにより、13個のLS161を12.5MHz単一クロックで動作する同期カウンタとして構成。
|
63
|
|
|
|
CnCntCtc
|
部分積加算クロックカウンタおよびピクセルペア区別用カウンタ
部分積加算クロックカウンタは5ビット。
ピクセルペア区別用カウンタは1ビット。
|
64
|
|
|
|
CnCntCtl
|
反復回数カウンタ
20ビット。
|
65
|
|
|
|
CnCntCtx
|
xカウンタ
描画領域の実軸方向ピクセルカウンタ。12ビット。
|
66
|
|
|
|
CnCntCty
|
yカウンタ
描画領域の虚軸方向ピクセルカウンタ。12ビット。
|
67
|
|
|
CnCpu
|
|
ホストインターフェース
内部レジスタやステータスへアクセスするための、8ビットCPUバスに直結できるインターフェース回路。
|
【履歴】
Oct 09, 2006 ホームページ用に変更
|