M6 · where phase can hurt, on the dieM6 · 相位會咬人的地方,在晶粒上
Where phase can hurt, lit up相位會咬人的地方,點亮
This is the real 2C02 silicon layout — the same segment polygons the switch-level engine simulates — rendered live in your browser. On top of it, the nodes that M6's cross-chip interface census flags are highlighted by category. Drag to pan, wheel to zoom, hover any cell for its name and which set it belongs to. The funnel numbers (173 interface-entry nodes, 203 counter-comparators, 66 phase-sensitive sites) stop being numbers and become places: the interface arriving at the die edge (blue), the position counter sitting in its own block (green), the comparators that ask "are we there yet?" (orange), and — lit red on top — the exact 66 sites where an arrival one dot early would flip a per-dot decision. 這是真實的 2C02 矽佈局 —— 開關級引擎模擬的同一批 segment 多邊形 —— 在你瀏覽器裡即時渲染。上面疊著 M6 跨晶片介面普查標記的節點,依類別著色。拖曳平移、滾輪縮放、停在任一 cell 上看它的名字與所屬集合。那些漏斗數字(173 個介面入口節點、203 個計數器比較器、66 個相位敏感站點)不再是數字,而是位置:介面在晶粒邊緣抵達(藍)、位置計數器坐在自己的區塊裡(綠)、問「到了嗎?」的比較器(橘),以及疊在最上層點成紅色的那 66 個站點 —— 抵達早一個 dot 就會翻掉一個 per-dot 決策的確切位置。
Faint background = the die's layers (diffusion / poly / metal). Bright fills = M6-flagged nodes. Every one of the 388 flagged nodes has a polygon — none are pure-logic phantoms — so the whole census is visible. The hot red set is drawn last, on top of the orange comparators it is a subset of; toggle a legend chip to isolate a set.暗色背景 = 晶粒各層(擴散 / 多晶矽 / 金屬)。亮色填充 = M6 標記的節點。388 個被標記節點每一個都有多邊形 —— 沒有純邏輯的幽靈節點 —— 所以整份普查都看得見。熱紅集合畫在最上層,疊在它所屬子集的橘色比較器之上;點圖例色塊可單獨隔離某個集合。
How the detection works偵測演算法怎麼運作
The whole cross-chip timing family — dot-339, even_odd, ALERead, BGSerialIn — is one shape: a CPU write, delayed on the die by ~24 hc, meets a 2C02 comparison against a position counter, and the zero-delay engine, having erased the delay, compares it one dot early. M6 enumerates every such site with a four-stage funnel over the transistor connectivity the netlist states exactly — no physical priors, just the graph. This is what m6_interface_census.py computes; the highlights above are its output projected onto the layout.
整個跨晶片時序家族 —— dot-339、even_odd、ALERead、BGSerialIn —— 是同一個形狀:一個 CPU 寫入,在晶粒上被延遲 ~24 hc,撞上 2C02 對位置計數器的比較,而抹掉延遲的零延遲引擎早一個 dot 就比了。M6 用四階段漏斗在網表明確描述的電晶體連接性上列舉每一個這樣的站點 —— 沒有物理先驗,只有圖。這就是 m6_interface_census.py 算的東西;上面的亮點就是它的輸出投影到佈局上。
| Funnel stage漏斗階段 | The graph rule圖規則 | Count · colour數量 · 顏色 |
|---|---|---|
| 1 · interface entry1 · 介面入口 | the cross-chip nets (io_ce / io_ab / io_db / io_rw) plus the write-latched enables a $2001/$2007 write sets (rendering, bkg/spr_enable) — the signals whose arrival timing the delay island governs跨晶片網(io_ce / io_ab / io_db / io_rw)加上 $2001/$2007 寫入設定的閂鎖致能(rendering、bkg/spr_enable)—— 抵達時機由延遲島掌管的訊號 | 173 · blue173 · 藍 |
| 2 · position counters2 · 位置計數器 | every node named hpos* / vpos* — the dot/scanline counter the die compares against. Shown as its own set so you can see it as a compact register block on the die每個名為 hpos* / vpos* 的節點 —— 晶粒拿來比的 dot/掃描線計數器。單獨畫成一個集合,好讓你在晶粒上看見它是一塊緊湊的暫存器區 | 56 · green56 · 綠 |
| 3 · counter-comparator cone3 · 計數器比較器錐 | any node whose 1–2 hop fan-in support includes a counter bit — the places the die asks "are we at dot N yet?" (found by a bounded BFS: 173 interface nodes reach 8,092 downstream, and 203 of the chip's comparators touch a counter)任何 1–2 跳 fan-in 支撐含計數器位元的節點 —— 晶粒問「到 dot N 了嗎?」的地方(用有界 BFS 找:173 介面節點往下游抵達 8,092 個,其中 203 個比較器碰到計數器) | 203 · orange203 · 橘 |
| 4 · phase-sensitive = the intersection4 · 相位敏感 = 交集 | a comparator that is also interface-fed: an early/late arrival changes a per-dot decision. This is the hot set — the delay island's exact perimeter同時被介面餵到的比較器:抵達早/晚會改變一個 per-dot 決策。這就是熱集合 —— 延遲島的精確周界 | 66 · red66 · 紅 |
hpos_eq_339_and_rendering (dot-339, the StaleSprite boss, node #789), hpos_mod_8_eq_0_or_1_and_rendering (BGSerialIn, the shifter-reload boundary, node #836), and io_ce (ALERead's $2007 interface, node #5) — the three highlighted in the validated list. The fourth, even_odd (skip_dot), sits correctly just outside: its trigger is frame parity, not an interface arrival, so it is the one family member the enable×counter shape does not cover. Structure alone re-drew the delay island's perimeter — the pattern is the physics.
掃描器根本不知道什麼是「dot 339」。它只拿到連接性、以及哪些網跨越封裝 —— 別無其他 —— 但介面餵到 ∩ 計數器比較器這個交集,靠純結構重新找到四個戰役魔王的三個:hpos_eq_339_and_rendering(dot-339,StaleSprite 魔王,節點 #789)、hpos_mod_8_eq_0_or_1_and_rendering(BGSerialIn,移位器 reload 邊界,節點 #836)、以及 io_ce(ALERead 的 $2007 介面,節點 #5)—— 就是 validated 清單裡標出來的三個。第四個 even_odd(skip_dot)正確地落在外面一點點:它的觸發是幀奇偶、不是介面抵達,所以它是唯一一個不在 致能×計數器 形狀裡的家族成員。純結構就重畫了延遲島的周界 —— pattern 就是物理。
Full write-up with the funnel figures, the ranked phase-sensitive table, and the boss validation: M6 · Where phase can hurt →完整寫作、漏斗圖、相位敏感排序表與魔王驗證:M6 · 相位會咬人的地方 →
Live layout rendering adapted from Visual6502's wires.js (Brian & Barry Silverman, MIT). Layout data derived from the Visual 2C02 netlist (CC-BY-NC-SA) — the corrected data/system-def/. Detection: WebSite/s1a/py/m6_interface_census.py --dump-nodes.
即時佈局渲染改編自 Visual6502 的 wires.js(Brian & Barry Silverman,MIT)。佈局資料衍生自 Visual 2C02 網表(CC-BY-NC-SA)—— 修正版 data/system-def/。偵測:WebSite/s1a/py/m6_interface_census.py --dump-nodes。