六月二十三日,晚上六點整。
米勒準時從三號樓二層下來。
他捂著肚子,對傳達室的門衛擺了擺手。
「拉肚子,回宿舍了。」
門衛翻著報紙,根本沒抬頭。
米勒走出大門後,拐進了計算機所對面的小飯館。
要了一碗炸醬麵,坐在角落裡,臉朝著牆。
六點十五分。
地下室的鐵門被推開。
司徒淵走在前面。
右手拎著一個帆布袋,裡面裝著一盒SPICE2G6的磁帶和兩沓打孔卡片。
林希跟在後面,手裡拿著周副所長給的鑰匙。
張秉謙最後進來。
他從津門坐了兩個小時火車趕到帝都。
褲子膝蓋上的白印子還沒洗掉。
三個人站在玻璃房外面。
攝像頭的紅燈已經滅了。
司徒淵用米勒給的管理員口令登錄系統。
花了四分鐘關閉底層日誌記錄模塊。
屏幕上跳出一行確認碼。
他核對了兩遍,按下回車。
「乾淨了。」
林希搬了兩把摺疊椅進來。
張秉謙把手繪版圖的數據本攤開在膝蓋上。
司徒淵將磁帶插入驅動器,機器發出低沉的轉動聲。
綠色光標在黑色屏幕上跳了兩下。
他開始敲鍵盤。
......
第一個晚上。
仿真程序跑了四十七分鐘。
屏幕上刷出密密麻麻的紅色字符。
`Timing Violation: Node A7→D3, Delay = 287ns (Max Allowed: 200ns)`
`Timing Violation: Node B2→CLK, Setup Time Insufficient`
`Timing Violation: …`
紅色的報錯信息刷了整整三屏。
張秉謙湊到屏幕前,老花鏡幾乎貼在顯示器上。
「兩百八十七納秒……」
他的聲音很輕。
李工用計算尺,算了七十二個小時沒算清楚的東西。
機器四十分鐘給出了答案。
超標八十七納秒。
差距比人腦估算的還要大。
張秉謙沒說話。
他把報錯的節點編號一個一個抄在本子上。
握筆的手很穩,但寫字的速度明顯比白天慢。
司徒淵靠在椅背上,盯著屏幕看了半分鐘。
「A7到D3這條路徑,邏輯門串了九級。」
他站起來,走到張秉謙身邊。
指著版圖數據本上的一處走線。
「這裡,地址解碼器的輸出經過兩級緩衝再進字庫ROM的片選端。」
「多了一級。」
「能砍掉嗎?」張秉謙抬頭。
「不能直接砍,會影響驅動能力。」
司徒淵拿起鉛筆,在數據本空白處畫了一個簡圖。
「換一種拓撲結構。」
「把解碼和片選合併成一級複合門。」
「同時給關鍵路徑上的走線加寬零點五個單位,降低RC延遲。」
張秉謙盯著那個簡圖看了十秒鐘。
「明天白天改。」
林希看了一眼表。
凌晨一點十二分。
「收工。」
......
這是第一晚。
白天,津門二廠的車間裡。
張秉謙帶著年輕技術員們跪在坐標紙上。
按照前一晚仿真結果反饋的問題。
一條一條撕掉舊的膠帶走線,重新貼新的。
撕掉,量尺,貼下去。
再撕,再量,再貼。
每改一處,旁邊的人就在修改記錄表上打一個勾。
有時候改到一半,發現牽一髮動全身。
一條走線挪了位置,相鄰的三條都得跟著調。
最長的一次,一個修改點從上午八點改到晚上七點。
中間吃飯都是蹲在坐標紙旁邊扒拉的。
到了傍晚,林希和司徒淵坐火車回帝都。
有時候張秉謙也跟著來。
六點,米勒準時「拉肚子」。
六點十五,三個人進玻璃房。
輸入新數據,跑仿真。
紅色報錯一屏一屏地刷。
但每一天,紅色的行數都在減少。
【第一晚:34個】
【第二晚:19個】
【第三晚:12個】
【第四晚:8個】
【第五晚:3個】
直播間的觀眾們跟著熬了五天。
彈幕從最初的【不忍看】【這也太肝了】。
慢慢變成了【又少了兩個!】【穩住穩住!】。
有人甚至做了一張折線圖,每天更新報錯數量。
配文「華國晶片倒計時」。
第六個晚上,剩兩個違規。
一個是時鐘信號的偏移。
司徒淵用了一個在仙童內部都算高階技巧的「時鐘樹平衡」方法解決。
張秉謙看懂原理後,連說了三個「妙」字。
最後一個,卡在ISA總線的地址映射上。
問題出在CPU發出讀信號後。
晶片內部的字庫尋址路徑還是比200納秒多了11納秒。
十一納秒。
張秉謙坐在玻璃房的摺疊椅上,盯著屏幕上那個數字看了很久。
「我們的走線已經沒有優化空間了。」
他說,
「物理極限。」
司徒淵沒接話。
他閉著眼靠在牆上,手指無意識地敲著膝蓋。
林希坐在邊上,腦海里彈幕正在瘋狂滾動。
【11納秒!就差11納秒!】
【加流水線?上緩衝?不行,ISA總線不支持等待周期......】
【等等,有個思路!386以前的ISA總線其實有一個隱藏特性——I/O Recovery Time!8088的ISA時序里,連續兩次I/O讀取之間有一個強制恢復間隔,大約一微秒!】
【對對對!這意味著CPU不可能背靠背地連續讀取,晶片有時間「喘口氣」!所以只要把字庫的預取邏輯改成「讀當前字的同時,預加載下一個字的首字節」,真正需要響應的時間就不是200納秒,而是更寬裕!】
林希睜開眼。
「司徒總工。」
司徒淵的手指停了。
「ISA總線連續讀取之間,有強制恢復間隔。」
「如果在晶片裡加一個預取緩衝寄存器。」
「當前請求返回數據的同時。」
「提前把下一個地址的字模從ROM里讀出來存著。」
「實際響應時間可以攤薄。」
司徒淵愣了兩秒。
然後他猛地從牆上彈起來。
「預取!」
他抓過鉛筆,直接在數據本的封底上畫電路。
畫完,他盯著看了五秒,把鉛筆往桌上一拍。
「能過。」