M1 · drive strength on the dieM1 · 晶粒上的驅動強度
Every fight, graded by heat每一場對決,依熱度分級
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 where two drivers physically contend are lit up, straight from M1's geometry census (drive strength S = W/L, read out of the transdefs the engine always threw away). Unlike M4's pure-topology latches, M1 is a physical mechanism, so the highlights are a heatmap: the redder a cell, the closer the two drivers are in strength — and the less the engine's "a path to GND always wins" is anything more than a coin toss. Drag to pan, wheel to zoom, hover any cell for its name, strength ratio, and heat band. The census numbers (250 fight sites, 114 near dead-heat…) stop being numbers and become places — and they land squarely on the external data bus.
這是真實的 2C02 矽佈局 —— 開關級引擎模擬的同一批 segment 多邊形 —— 在你瀏覽器裡即時渲染。上面點亮的,是兩個驅動源在物理上互相對抗的節點,直接來自 M1 幾何普查(驅動強度 S = W/L,從引擎一向丟棄的 transdefs 幾何欄讀回來)。和 M4 的純拓撲閂鎖不同,M1 是物理機制,所以亮點是一張熱力圖:cell 愈紅,兩個驅動源的強度愈接近 —— 引擎那句「有一條路到 GND 就贏」也就愈接近擲銅板。拖曳平移、滾輪縮放、停在任一 cell 上看它的名字、強度比與熱度分級。那些普查數字(250 個對決點、114 個近乎勢均力敵⋯)不再是數字,而是位置 —— 而且它們正好落在對外資料匯流排上。
Faint background = the die's layers (diffusion / poly / metal). Coloured fills = M1 fight sites, graded hot → cold: red = within 2× strength (near dead-heat), amber = within 4×, blue = any driver-vs-driver fight. Hotter = the fiat is least justified. All 250 sites have silicon area, so all 250 are drawn.暗色背景 = 晶粒各層(擴散 / 多晶矽 / 金屬)。彩色填充 = M1 對決點,由熱到冷分級: 紅 = 強度在 2× 內(近乎勢均力敵)、 琥珀 = 4× 內、 藍 = 任何驅動對決。愈熱 = 那條裁決規則愈站不住腳。250 個點全都有矽面積,所以 250 個全部畫得出來。
How the detection works偵測演算法怎麼運作
M1 is the mirror image of M4. Where a latch is pure topology, a strength fight is pure physics: real NMOS is ratioed logic — every contested node is resolved by a race between conductances, and conductance is geometry, S = W/L, printed in plain sight in the transdefs geometry column [w1, w2, length, #segs, W·L]. The switch-level engines in this family read the connectivity and discarded that column; they treat every transistor as one ideal switch and resolve every group by a fixed priority — a path to GND always wins — without ever asking how strong. That fiat is correct when the fight is lopsided. It is a guess when it is not. m1_device_census.py reads the column back and finds the nodes where the guess is riskiest; the heatmap above is its output projected onto the layout.
M1 是 M4 的鏡像。閂鎖是純拓撲,強度對決則是純物理:真實 NMOS 是比例式(ratioed)邏輯 —— 每個被爭奪的節點都是電導之間的競速裁決出來的,而電導就是幾何,S = W/L,明明白白印在 transdefs 幾何欄 [w1, w2, length, #segs, W·L] 裡。這個家族的開關級引擎讀了連接性、卻丟掉了那一欄;它們把每顆電晶體當成一個理想開關,用固定優先序裁決每一組 —— 有一條路到 GND 就贏 —— 從不問到底多強。當對決一面倒時,這條裁決是對的;不一面倒時,它是猜的。m1_device_census.py 把那一欄讀回來,找出這個猜測最危險的節點;上面那張熱力圖就是它的輸出投影到佈局上。
A fight site is a node where a signal-gated pull-up (a to-VCC device) and a signal-gated pull-down (a to-GND device) can both drive at once. The census grades each by the strength ratio Sup : Sdown — the closer to 1:1, the hotter:
對決點是一個節點,上面同時有訊號閘控的上拉(通到 VCC 的器件)和訊號閘控的下拉(通到 GND 的器件),兩者都能同時驅動。普查用強度比 Sup : Sdown 給每個點分級 —— 愈接近 1:1 愈熱:
| Heat band熱度分級 | Strength ratio強度比 | What it means代表什麼 |
|---|---|---|
| near dead-heat近乎勢均力敵 | within 2× (0.5–2.0)2× 內(0.5–2.0) | the two drivers are nearly matched; the real silicon resolves by analog ratio, the engine by fiat — a coin toss it can lose. 114 sites.兩個驅動源幾乎相等;真實矽靠類比比例裁決,引擎靠一句規定 —— 一場它可能輸掉的擲銅板。114 個。 |
| close fight接近的對決 | within 4×4× 內 | still contestable — the stronger driver usually wins, but the margin is thin. 130 cumulative.仍有得爭 —— 較強者通常贏,但差距不大。累計 130 個。 |
| any fight任何對決 | all ratios任何比例 | every driver-vs-driver site, including the lopsided ones the fiat gets right. 250 total.每一個驅動對決點,包括那些一面倒、裁決剛好猜對的。共 250 個。 |
The bands are nested (2× ⊂ 4× ⊂ any) and drawn hottest-last, so a dead-heat cell ends up red on top. Toggle any band in the legend; hover a red cell and you will see it listed in all three.分級是巢狀的(2× ⊂ 4× ⊂ 任何),而且愈熱愈後畫,所以勢均力敵的 cell 最後蓋在最上層、顯示為紅。可在圖例點任一分級開關;停在紅色 cell 上,會看到它同時列在三個分級裡。
io_db0…7 (the CPU-facing data pads, both polarities), ale (address-latch enable), wr. 21 named neighbourhoods re-found from geometry alone. This is exactly where a ratioed bus fight lives — the same physics behind the 6502 family's notorious LXA/$AB "magic constant" opcode, where two comparable drivers share a bus wire and the digital "GND always wins" is a physical guess, not a law. Strength the engine discarded, recovered from the die — and pointed straight at the bus.
普查根本不知道什麼是「資料匯流排」。它只拿到電晶體幾何、別無其他 —— 最熱、近乎勢均力敵的那些對決,卻描出了 2C02 對外介面的輪廓:io_db0…7(面向 CPU 的資料接腳,正反極性都在)、ale(位址閂鎖致能)、wr。光靠幾何,就重新找回 21 個具名鄰域。這正是比例式匯流排對決的所在 —— 和 6502 家族那顆惡名昭彰的 LXA/$AB「魔術常數」指令背後是同一套物理:兩個強度相當的驅動源共用一條匯流排線,而數位式的「GND 一定贏」是物理上的猜測,不是定律。引擎丟掉的強度,從晶粒上被找回來 —— 而且直指匯流排。
Full write-up with the W/L histogram, the strength vocabulary, and the 4:1 audit: M1 · The die's strength vocabulary →完整內容,含 W/L 分布、強度詞彙與 4:1 稽核:M1 · 晶粒的強度詞彙 →
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/m1_device_census.py --dump-nodes.
即時佈局渲染改編自 Visual6502 的 wires.js(Brian & Barry Silverman,MIT)。佈局資料衍生自 Visual 2C02 網表(CC-BY-NC-SA)—— 修正版 data/system-def/。偵測:WebSite/s1a/py/m1_device_census.py --dump-nodes。