放課後の電子工作 HOME > Mandelbrot集合描画支援ハードウェア [ Pyxis ] > ハードウェア設計コンテスト 最終レポート [HTML版] > 付録5 回路階層と機能説明

[ 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:C生成回路
4.6 Xx:Zx2−Z2+Cx演算回路
4.7 Yy:2ZxZ+C演算回路
4.8 Rr:Zx2+Z2演算回路
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)


HOME

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生成用テンポラリレジスタ
実軸側の処理進行に合わせて、偶数側ピクセルP用のCxを保持する。レジスタ値は、ピクセルペアの処理終了時に、その時点でのCxにステップ幅Sを2回加算して生成される。
このレジスタの値が使われるのは、描画対象領域の左端以外の処理時である。その時に、OxAddに同期して下位側から8ビットずつ8回に分けて出力される。またその時、OxOrgからの出力は行われない。

07

Oy

C生成回路ブロック
ピクセルごとの虚軸座標を生成。C値は実軸のスキャンの終了ごとに更新される。
Oyブロック内にはパイプラインレジスタは存在しない。

08

OyAdd

C生成用加算回路
OyOrgまたはOyTmpに、ステップ幅S(OyStp)を加算して、Cを生成する。
64ビット幅のCを8ビットずつ8回に分けて加算する桁上げ保存加算器(Carry Saved Adder)。

09

OyStp

Cx,C生成用Sレジスタ
1ピクセル分の座標差分値(ステップ幅)。データは64ビット固定小数点(整数部4ビット+小数部60ビット)で、ホストによりCPUバスを通して設定される。
各ピクセルは正方形とみなされるので、CxとCの両方にこの値が使用される。
出力はOxAdd、OyAddに同期して、下位側から8ビットずつ8回に分けて出力される。

10

OyOrg

描画対象領域虚軸原点(b1)保持レジスタ
描画領域の左下隅の虚軸座標を保持する。データは64ビット固定小数点(整数部4ビット+小数部60ビット)で、ホストによりCPUバスを通して設定される。
C値には、OyOrgまたはOyTmpのどちらかが使用される。
OyOrgが使われるのは、描画対象領域最下端のピクセルの処理時のみ。その時に限りCとして出力される。出力はOyAddに同期して、下位側から8ビットずつ8回に分けて出力される。

11

OyTmp

C生成用テンポラリレジスタ
虚軸側の処理進行に合わせて、各ピクセル用のCを保持する。レジスタ値は、実軸のスキャン終了時に、その時点でのCにステップ幅Sを加算して生成される。
このレジスタの値が使われるのは、描画対象領域の最下端以外の処理時である。その時に、OyAddに同期して下位側から8ビットずつ8回に分けて出力される。またその時、OyOrgからの出力は行われない。

12

Xx

Zx2−Z2+Cx演算回路ブロック
ZxからZx2を計算する乗算ステージと、Zx2、Z2、CxからZx2−Z2+Cxを計算する加減算ステージの2つのステージで構成される。それぞれのステージはリング状のパイプラインになっており、PEとPDの2ピクセルを同時に処理する。
算出したZx2は、ここXxだけでなくRrブロックの加減算ステージへも送られて使用される。同様に、ここで使用するZ2の値は、Rrブロックの乗算ステージの計算結果である。

13

XxAsc

Zx2残留桁上げ加算回路
加減算ステージの最初の処理として、直前の乗算ステージの結果であるXxPcrPd1とXxPcrSc1を加算する。この加算結果が目的とするZ2であり、続く加減算ステージで使われると同時に、Rrでも使用される。
64ビット幅を8ビットずつ8回に分けて加算する桁上げ保存加算器(Carry Saved Adder)。

14

XxSub

Zx2−Z2用減算回路
XxAscの出力Z2から、RrAscの出力Z2を減算する。
桁上げ保存加算器に2の補数回路を付加したもの。図4−3参照。

15

XxAdd

(Zx2−Z2)+Cx用加算回路
XxSubの出力であるZ2−Z2と、Oxブロックの出力Cxを加算する。

16

XxChk

式(3−3)判定回路
Xxブロックにおける発散判定のために、(Zx2−Z2)+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

2ZxZ+C演算回路ブロック
ZxとZから2ZxZを計算する乗算ステージと、2ZxZとCから2ZxZ+Cxを計算する加減算ステージの2つのステージで構成される。それぞれのステージはリング状のパイプラインになっており、PEとPDの2ピクセルを同時に処理する。

29

YyAsc

2ZxZ残留桁上げ加算回路
加減算ステージの最初の処理として、直前の乗算ステージの結果であるYyPcrPd2とYyPcrSc2を加算する。この加算結果が目的とする2ZZである。

30

YyAdd

2ZxZ+C用加算回路
YyAscの出力である2ZZと、Oyブロックの出力Cを加算する。

31

YyChk

式(3−4)判定回路
Yyブロックにおける発散判定のために、2ZxZ+Cが式(3−4)を満たすかどうかを判定する。

32

YyMul

ZxZ用乗算回路ブロック
ZxとZからZxZを計算する乗算ステージ。64ビット固定小数点データ同士の乗算を32クロックで実行する。

33

YyMulMlt

ZxZ用2次Booth乗算器
被乗数YyMprMpdと乗数XxMprSfxの値から、2次のBoothのアルゴリズム(図4−4)にしたがって部分積を生成する。

34

YyMulAdd

ZxZ用部分積加算器、桁上げ保存シフトレジスタ
部分積の累和YyMulTmpに、新たな部分積YyMulMltを加算する。
68ビットの桁上げ保存加算器と32ビットの桁上げ保存レジスタで構成される。詳しい動作は図4−6を参照。

35

YyMulTmp

ZxZ用部分積レジスタ
部分積の累和を保存する66ビットのレジスタ。

36

YyMpr

Z用乗数、被乗数レジスタブロック
乗算のための乗数、被乗数レジスタ。両者とも、前段加減算ステージの最終結果を保存するパイプラインレジスタとしても機能している。

37

YyMprMpd

Z用被乗数レジスタ
被乗数Zを保持する64ビットのレジスタ。

38

YyMprRnd

2の補数用1生成回路
2次のBooth乗算ICであるLS261の出力は、それが負数の場合、1の補数でしかない。2の補数にするためには1を加える必要があるので、乗数の3ビットをデコードし、そのための1を生成する。生成した1はYyMulAddにて累和と同時に加算する。

39

YyMprSfy

Z用乗数シフトレジスタ
2次のBoothアルゴリズムを実行するための3ビット乗数を生成する。偶数番ビット用と奇数番ビット用の2つのシフトレジスタで構成されており、1クロックで2ビットずつシフトできる。
このシフト出力はYyブロックでは使用されず、Rrブロックへ送られる。

40

YyPcr

2ZxZ用乗算結果、残留桁上げレジスタブロック
乗算ステージの結果は、部分積32個の累和と、その桁上げ加算器に残った残留桁上げの2つに分離した状態で得られる。ここはその両者をそれぞれ保持するYyPcrPd2とYyPcrSc2で構成される。続く加減算ステージの先頭にて両者は加算され、所望の乗算結果となる。
このブロックはパイプラインレジスタとしても機能している。
YyPcrPd2、YyPcrSc2へ値をロードする際に、データを左へ1ビットシフトした値をロードさせている。これにより2ZxZにおける2倍を瞬時に実行している。

41

YyPcrPd2

2ZxZ用乗算結果レジスタ
部分積32個の累和を保持する64ビットのレジスタ。値のロードは64ビット同時に行われ、出力は続く加減算ステージの動作と同期して8ビットずつ8回に分けて行われる。

42

YyPcrSc2

2ZxZ用残留桁上げレジスタ
YyMulAddの桁上げ保存レジスタに残った残留桁上げを保存する32ビットのレジスタ。部分積の累和において、桁上げは1ビットおきにしか発生しないため、常に0となるビットを省いた32ビット構成となっている。
値のロードは32ビット同時に行われる。出力は、省略していた1ビットおきの0を挿入しながら、続く加減算ステージと同期して4ビットずつ8回に分けて行われる。

43

Rr

Zx2+Z2演算回路ブロック
ZからZ2を計算する乗算ステージと、Zx2、Z2からZx2+Z2を計算する加減算ステージの2つのステージで構成される。それぞれのステージはパイプラインになっており、PEとPDの2ピクセルを同時に処理するが、このブロックの計算結果は反復演算で使用されないため、XxやYyのようにリング状にはなっていない。
算出したZ2は、ここRrだけでなくXxブロックの加減算ステージへも送られて使用される。同様に、ここで使用するZ2の値は、Xxブロックの乗算ステージの計算結果である。

44

RrAsc

Z2残留桁上げ加算回路
加減算ステージの最初の処理として、直前の乗算ステージの結果であるRrPcrPd1とRrPcrSc1を加算する。この加算結果が目的とするZ2であり、続く加減算ステージで使われると同時に、Xxでも使用される。

45

RrAdd

Zx2+Z2用加算回路
XxAscの出力Z2と、RrAscの出力Z2を加算する。

46

RrCpr

式(3−2)判定回路
Rrブロックにおける発散判定のために、Zx2+Z2が式(3−2)を満たすかどうかを判定する。

47

RrSqr

Z2用乗算回路ブロック
ZからZ2を計算する乗算ステージ。64ビット固定小数点データ同士の乗算を32クロックで実行する。
Rrブロックに乗数、被乗数レジスタは無い。共にYyブロック内のデータを利用する。

48

RrMulMlt

Z2用2次Booth乗算器
被乗数YyMprMpdと乗数YyMprSfyの値から、2次のBoothのアルゴリズム(図4−4)にしたがって部分積を生成する。

49

RrMulAdd

Z2用部分積加算器、桁上げ保存シフトレジスタ
部分積の累和RrMulTmpに、新たな部分積RrMulMltを加算する。
68ビットの桁上げ保存加算器と32ビットの桁上げ保存レジスタで構成される。詳しい動作は図4−6を参照。

50

RrMulTmp

Z2用部分積レジスタ
部分積の累和を保存する66ビットのレジスタ。

51

RrPcr

Z2用乗算結果、残留桁上げレジスタブロック
乗算ステージの結果は、部分積32個の累和と、その桁上げ加算器に残った残留桁上げの2つに分離した状態で得られる。ここはその両者をそれぞれ保持するRrPcrPd1とRrPcrSc1で構成される。続く加減算ステージの先頭にて両者は加算され、所望の乗算結果となる。
このブロックはパイプラインレジスタとしても機能している。

52

RrPcrPd1

Z2用乗算結果レジスタ
部分積32個の累和を保持する64ビットのレジスタ。値のロードは64ビット同時に行われ、出力は続く加減算ステージの動作と同期して8ビットずつ8回に分けて行われる。

53

RrPcrSc1

Z2用残留桁上げレジスタ
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  ホームページ用に変更

△ページの先頭へ戻る