6502tinymachines

チップアトラス: すべての部品に住所を

web/{groups,graph,schematic,timing}.json から tools/export-atlas-doc.py が 生成している。以下のどれも手で打ったものではない。ダイデータか導出を変えたら 作り直せば、この文書が付いてくる。

このダイの上のノード、トランジスタ、ワイヤはそれぞれちょうど一つのアドレスを 持ち、アドレスの接頭辞はその下にある集合を名指す正当なやり方になる。狙いは ホスト名ではなく IP アドレスだ: 前が経路を決め、後ろが同定する。

8365 アドレス: ノード 1547、トランジスタ 3510、ワイヤ 3308。すべて一意で、 すべて解析できる。このファイルが書かれる前に生成器が検査している。

書き方の規則

<container> : <class> : <slot>

右から解析する。 スロットは最後のコロンの後、クラスはその一つ前、そして コンテナは残り全部だ。フィールド数を固定するやり方は使えない: コンテナのキー は正当にコロンを含むことがあり (alat:ADL/ABL)、束は二つのコンテナを名指す (regs:a~sbus:sb)。

区切りがコロンである理由

これを決めたのは趣味ではなく、ダイだ。707 個の名前にわたって使われている 約物は # ( ) + - . / _ で、コンテナのキーが : を足す。ダイの名前にコロンは 一つも現れないし、kind:id はこのプロジェクトが他のどこでもコンテナを 綴るやり方でもある。. と / はどちらも落ちた: . は 33 個の名前と 14 個の キーに、/ は 47 個と 5 個にある。

三つのフィールド

フィールド何か出どころ
containerその部品が属する導出されたグループチップマップの分割: 23 種類にまたがる 132 グループ、どのノードもちょうど一度
classプルダウン網の形。NMOS ではそれがそのままブール関数だschematic.json が認識したゲート
slotその部品に対するダイ自身の番号読み取り専用のサブモジュール経由の segdefs.js / transdefs.js

スロットはダイの番号であり、そこが荷重を受けている決定

他のフィールドはどれも導出であり、ここでの導出は動く: チップマップは、争わ れているノードをどの種類が持つかを既に変えているし、割り込みの歩き方は その所有の規則を既に変えている。最後のフィールドが導出であるようなアドレスは、 そうした改善のたびに壊れることになる。

生成器はその性質を主張する代わりに証明する。種類の所有順を逆にすると 1547 ノードのうち 88 の持ち主が変わり、スロットは 0 個動く。

だから接頭辞は改められる主張であり、スロットはそうではない。アドレスを最後の フィールドまで削っても、その部品はまだ見つかる。

クラスの語彙は閉じていて、34 語ある

NMOS に AND ゲートは無く、OR ゲートも無い。プルアップが出力を high に保ち、 接地へのプルダウン網がそれに勝つので、どの静的ゲートも積和の反転だ: 並列な脚 が OR、直列なトランジスタが AND になる。だから脚の内訳は、ゲートに付けた札 ではなく、そのゲートが計算するものの完全な記述だ。aoi2.1 は NOT((A AND B) OR C) である。

クラス個数読み方
inv534インバータ
bus386どのゲートも駆動していない: バスの 1 ビットか、通過だけのノード
nor21652 入力 NOR
dyn173プリチャージ、脚 1 本、プルアップ無し
nor3533 入力 NOR
aoi2.146AND-OR-invert、脚の深さ 2 と 1
nand2392 入力の NAND
dyn336プリチャージ、脚 3 本、プルアップ無し
nor5335 入力 NOR
nor8308 入力 NOR
nor4264 入力 NOR
nor7257 入力 NOR
aoi2.225AND-OR-invert、脚の深さ 2 と 2
nor6206 入力 NOR
dyn49プリチャージ、脚 4 本、プルアップ無し
dyn77プリチャージ、脚 7 本、プルアップ無し
dyn56プリチャージ、脚 5 本、プルアップ無し
dyn94プリチャージ、脚 9 本、プルアップ無し
dyn23プリチャージ、脚 2 本、プルアップ無し
dyn83プリチャージ、脚 8 本、プルアップ無し
aoi2.2.23AND-OR-invert、脚の深さ 2 と 2 と 2
aoi2.1.1.1.1.12AND-OR-invert、脚の深さ 2 と 1 と 1 と 1 と 1 と 1
aoi2.2.2.12AND-OR-invert、脚の深さ 2 と 2 と 2 と 1
aoi2.2.2.2.12AND-OR-invert、脚の深さ 2 と 2 と 2 と 2 と 1
aoi2.2.12AND-OR-invert、脚の深さ 2 と 2 と 1
aoi2.2.2.22AND-OR-invert、脚の深さ 2 と 2 と 2 と 2
aoi2.1.12AND-OR-invert、脚の深さ 2 と 1 と 1
aoi2.2.1.1.1.1.12AND-OR-invert、脚の深さ 2 と 2 と 1 と 1 と 1 と 1 と 1
nor929 入力 NOR
aoi2.1.1.1.11AND-OR-invert、脚の深さ 2 と 1 と 1 と 1 と 1
aoi2.1.1.11AND-OR-invert、脚の深さ 2 と 1 と 1 と 1
dyn61プリチャージ、脚 6 本、プルアップ無し
aoi2.1.1.1.1.1.11AND-OR-invert、脚の深さ 2 と 1 と 1 と 1 と 1 と 1 と 1
inert1駆動もスイッチも無い: 観測できないと証明できる

尾は長く、それは規則が緩いのではなくダイが不規則だということだ: 34 クラスの うち 17 はそれぞれ 5 個未満のゲートしか持たず、そのうち 11 は ALU とフラグの 論理が一度だけ組む AOI の形だ。残りは dyn2、dyn6、dyn8、dyn9、 inert、nor9。

事実はタグとして乗り、フィールドにはならない

アドレスに要る識別子はちょうど一つで、それは不変でなければならない。部品に ついて他に真であることは、すべてタグだ: 問い合わせられて、順序を持たず、何も 動かさずに変わっていい。

sbus:sb:bus:#1188                  name=sb3  bit=3@sb  depth=6
regs:x.SBX:dyn3:#1186              name=dpc3_SBX  opens=8  precharged  phase=phi1  depth=5  also=sbus:off  also=dpc:phi1
regs:a:bus:#737                    name=a0  bit=0@a  depth=7
clock:gen:dyn5:#943                name=cclk  opens=243  precharged  depth=4

bit= はトレーサが実測したバスの幹の規則 (文字だけ、not の補数は無し、 ビット 0 に名前があり、ビット 0..7 のうち少なくとも七つ) を使い、24 本の幹 に落ち着く。depth= は最も近いピンからのホップ数。phase= はチップを走らせて 実測している。also= は、重なり合う層ではこのノードを自分のものだと言うが、 分割では取り負けたコンテナを名指す。

名前はどこから来たか

どれも私たちのものではないので、述べておく価値がある。答えは三段深い。出どころ は保存アーカイブの 6502_datapath.wiki だ。

体系例何か
HansonY/SB, SB/XSOURCE/DEST。MOS の設計図から描かれたブロック図のもの
BalazsR1x7, Dkx2位置の格子。彼自身のダイ写真から
JSSim、そして私たちのものdpc4_SSB位置の接頭辞に、Hanson の名前を足したもの

だから制御線の名前は、半分が座標で半分が機能だ。接頭辞は本物の順序になって いる: 線を dpc の番号で並べるとダイを左から右へ並ぶ順になり、43 本のうち 6 箇所の逆転はすべて隣どうしの組だ。番号が負のものが二つ、dpc-1_ADL/ABL と dpc-2_ADH/ABH があるのは、アドレスラッチのロードがデータパスの番号が始まる 場所より左に座っているからだ。

tools/check-dpc-vs-wiki.py は wiki の主張をチップに問い直す。

項目

23 種類にまたがる 132 グループが、1547 ノードのすべてをちょうど一度覆い、 それに意図して重なる 138 個のコンテナが加わる。n はノード数。id に . が 入っているグループは、その上のグループの子だ。

regs: レジスタ

アドレスの接頭辞nラベル
regs:s32S
regs:s.SS5SS
regs:s.SBS4SBS
regs:s.SADL5SADL
regs:s.SSB5SSB
regs:a24A
regs:a.SBAC5SBAC
regs:a.ACDB5ACDB
regs:a.ACSB5ACSB
regs:x24X
regs:x.SBX5SBX
regs:x.XSB5XSB
regs:y24Y
regs:y.SBY5SBY
regs:y.YSB5YSB
regs:shared.s.SS-s.SBS-a.SBAC-x.SBX-y.SBY1s.SS, s.SBS, a.SBAC, x.SBX, y.SBY が共有
regs:shared.s.SS-s.SBS-a.SBAC-a.ACDB-a.ACSB-x.SBX-x.XSB-y.SBY-y.YSB1s.SS, s.SBS, a.SBAC, a.ACDB, a.ACSB, x.SBX, x.XSB, y.SBY, y.YSB が共有
regs:shared.s.SS-s.SBS1s.SS, s.SBS が共有

flags: ステータスフラグ

アドレスの接頭辞nラベル
flags:C14C フラグ
flags:Z11Z フラグ
flags:I9I フラグ
flags:D9D フラグ
flags:B2B フラグ
flags:V24V フラグ
flags:N7N フラグ
flags:shared3共有のフラグ論理
flags:out6P の読み出し

alat: アドレスラッチ

アドレスの接頭辞nラベル
alat:abl56ABL
alat:abh56ABH
alat:ADL/ABL18ADL/ABL
alat:ADH/ABH5ADH/ABH
alat:low4ADL の定数
alat:high8ADH の定数

dbus: データバス

アドレスの接頭辞nラベル
dbus:idl32idl
dbus:dor48dor
dbus:idb8idb
dbus:DL/ADH17DL/ADH
dbus:DL/DB5DL/DB
dbus:DL/ADL4DL/ADL
dbus:SBDB5SBDB
dbus:PCLDB7PCLDB
dbus:PCHDB5PCHDB
dbus:rw20rw

irp: 命令レジスタ

アドレスの接頭辞nラベル
irp:pd24pd
irp:load24load
irp:ir16ir
irp:pre7pre
irp:irline32irline3
irp:clear1clear
irp:fetch2fetch

sbus: 特殊バス

アドレスの接頭辞nラベル
sbus:sb8sb
sbus:dasb12dasb
sbus:SBADH7SBADH
sbus:onto2onto
sbus:off1off

sdp: ストアのパイプライン

アドレスの接頭辞nラベル
sdp:detect4DETECT

rdy: レディ論理

アドレスの接頭辞nラベル
rdy:in4RDY の受け
rdy:master1master
rdy:copies8copies

pcr: プログラムカウンタ

アドレスの接頭辞nラベル
pcr:pcl8pcl
pcr:pch8pch
pcr:pclp8pclp
pcr:pchp8pchp
pcr:PCLPCL6PCLPCL
pcr:ADLPCL4ADLPCL
pcr:PCLADL5PCLADL
pcr:PCHPCH6PCHPCH
pcr:ADHPCH4ADHPCH
pcr:PCHADH6PCHADH

pipe: パイプラインのラッチ

アドレスの接頭辞nラベル
pipe:named12名前付きのパイプラインラッチ
pipe:unk19pipeUNK のラッチ

sync: SYNC

アドレスの接頭辞nラベル
sync:sync4SYNC の生成器

clock: クロック生成器

アドレスの接頭辞nラベル
clock:gen16クロック生成器

intr: 割り込み

アドレスの接頭辞nラベル
intr:irq6IRQ の経路
intr:nmi18NMI の経路
intr:res6RES の経路
intr:shared4共有の割り込み経路
intr:vector3ベクタの選択

branch: 分岐の論理

アドレスの接頭辞nラベル
branch:cross2分岐: ページ越え
branch:direction8分岐: 向き
branch:taken7分岐: 成立

decimal: 十進補正

アドレスの接頭辞nラベル
decimal:bcd51十進補正

alu: ALU

アドレスの接頭辞nラベル
alu:bit010bit0
alu:bit111bit1
alu:bit211bit2
alu:bit311bit3
alu:bit410bit4
alu:bit511bit5
alu:bit611bit6
alu:bit711bit7
alu:shared7shared
alu:a8a
alu:b16b
alu:cin14cin
alu:cout7cout
alu:vout4vout
alu:in23in
alu:fn25fn
alu:out35out

incr: PC のインクリメンタ

アドレスの接頭辞nラベル
incr:pc86PC のインクリメンタ

chain: タイミングチェーン

アドレスの接頭辞nラベル
chain:T09T0 のセル (clock1)
chain:T11T1 のセル (clock2)
chain:T24T2 のセル (t2)
chain:T34T3 のセル (t3)
chain:T44T4 のセル (t4)
chain:T54T5 のセル (t5)
chain:shared3共有のチェーン論理

bus: 内部バス

アドレスの接頭辞nラベル
bus:adl8adl
bus:adh8adh

stage: デコードの項

アドレスの接頭辞nラベル
stage:T033T0 の項
stage:T217T2 の項
stage:T310T3 の項
stage:T49T4 の項
stage:T58T5 の項
stage:T+11T+ の項
stage:any33any の項

pins: ピン

アドレスの接頭辞nラベル
pins:input6入力ピン
pins:output16出力ピン
pins:bidirectional8双方向ピン

rest: ブロックの残り

アドレスの接頭辞nラベル
rest:04Unaccounted の残り
rest:326Decode PLA の残り
rest:410Control pipeline の残り
rest:54Timing chain の残り
rest:67Interrupts & vectors の残り
rest:83ALU の残り

logic: 静的な論理

アドレスの接頭辞nラベル
logic:040共有の静的論理
logic:36Decode PLA を駆動するゲート
logic:427Control pipeline を駆動するゲート
logic:52Timing chain を駆動するゲート
logic:69Interrupts & vectors を駆動するゲート
logic:87ALU を駆動するゲート
logic:129Data bus を駆動するゲート

重なり合う層にしか存在しないコンテナ

これらは分割ではノードを一つも自分のものにしていない。中にあるものはすべて、 もっと限定的な導出がすでに持っているからだ。それでも、「このノードは何の一部 なのか」に対する正直な答えではある。

コンテナnなぜ吸収されるか
sbus:link1特殊バスが丸ごと吸収する
sdp:sd14アドレスラッチの ADL/ABL の円錐がこれを読み、順位で勝つ
sdp:sd27同じ。1 サイクル後
dpc:phi118クロック位相は配線についての事実ではないので、最後に足される
dpc:both26同じ
dpc:unreached2同じ。プローブのプログラムが一度も上げない線のぶん

122 ノードは複数のコンテナに入っていて、最大で 5 個だ。この数は欠陥では ない: 十進補正にあるノードは ALU の一枚にもあり、そのうち一つだけだと言うのは、 図が互いに素な箱を必要とすることの結果にすぎない。

アドレスが教えてくれないこと

  • 向き。 パス・トランジスタは両方向に導通するので、トポロジだけではどちら の端がソースなのかを言えない。Hanson の SOURCE/DEST の名前だけがその記録 であり、あれは書き下ろしで、実測ではない。
  • 近所。 depth= はピンからのホップ数で、距離であって近所ではない。 「2 ホップ以内に何があるか」は問い合わせであって、座標ではない。
  • どのコンテナがいちばん面白いか。 分割は箱を描けるように持ち主を一つ 選ぶ。残りは also= が運ぶ。
  • ノード 866 について何でも。 これは inert に分類され、それは正しい: トランジスタ一つをゲートしているが、チップの中のどれもそれを駆動できない ので、どんな走行も決してそれを観測できない。