獵獵秋風,吹著紅星所院牆上的五星紅旗。
1969年的國慶節,呂辰依然忙碌。
一大早,呂辰就到了辦公室。
把殘茶倒進紙垃圾桶,重新捏了一撮鐵觀音續上水,門就被推開了。
萬人手裡抱著一摞圖紙,用麻繩捆著,碼得整整齊齊,他抱得有些吃力,進門的時候側著身子才擠過來。
李工跟在後面,手裡同樣抱著一摞圖紙,二人把圖紙放在呂辰辦公桌上,摞起來足有半人高。
萬人敵直起腰,長長地吐了一口氣,從兜裡掏出一塊手帕擦了擦額頭上的汗。
呂辰起身,給二人倒了一杯水。
萬人敵接過喝了一口,從帆布包裡拿出一個牛皮紙檔案袋,鼓鼓囊囊的。
“呂工,板卡的設計圖,全部完成了。”
他把檔案袋往桌上一放,解開綁繩,從裡面抽出一沓圖紙,A0幅面的硫酸紙,折得四四方方,邊角處用紅藍鉛筆標註著修改痕跡。
“電源板、時鐘板、匯流排背板、I/O板、儲存板,五大類,23個型號,全部設計完畢。圖紙、物料清單、裝配圖,一樣不缺。”
他如釋重負:“呂工,這活兒,總算交了。”
呂辰走到桌前,翻開最上面一張圖紙。
那是一塊電源板的設計圖,A0幅面,硫酸紙,墨線描得工工整整。
整流橋、濾波電容、DC-DC變換器、過壓保護電路、電流取樣電路……
每一個元件都用標準符號畫出,引腳標註清晰,走線流暢,密密麻麻的線條從圖紙的左上角延伸到右下角,像一座微縮城市的交通圖。
他看了一會兒,又翻開另一張,是一塊運算板的設計圖。
這塊板子比電源板複雜得多,16個晶片插座整齊排列成四乘四的矩陣,每個插座周圍密密麻麻地環繞著去耦電容、電阻排、測試點。
資料匯流排從插座邊緣引出,匯聚成一組粗線,通往板卡邊緣的金手指。
地址匯流排、控制匯流排各自分開,在板卡的不同層之間穿梭。
“李工,辛苦了。”呂辰把圖紙放下,抬起頭。
“應該的。”李工擺了擺手,從兜裡掏出煙,給萬人敵和呂辰各發了一根。
“現在圖都畫完了,這些板卡,我們都反覆檢查過,但自己畫的圖,自己看不出毛病,得找別人看,得用東西測。”
萬人敵把煙點上,吸了一口,慢慢吐出來:“李工說得對。圖紙畫得再漂亮,不上機跑一遍,心裡沒底。手工畫圖,線寬夠不夠、間距夠不夠、有沒有虛焊、有沒有短路,全靠眼睛看。眼睛有時候會騙人。”
呂辰端著搪瓷缸子喝了一口水,他腦子裡在轉。
板卡設計圖出來了,按流程,下一步應該是送紅星軋鋼廠的掐絲琺琅生產線加工。
不過,呂辰有些新的想法,在生產之前,能否上星河CAD跑一遍模擬驗證。
板卡不是晶片,但比晶片更復雜。
晶片裡是幾百個門、幾千個電晶體,邏輯相對規整。
板卡上是大電流的電源線、高速的資料匯流排、敏感的時鐘訊號、脆弱的復位線,還有那些離散的電阻電容、電感變壓器,每一個元件都有自己的脾器。
手工畫圖,畫得再仔細,也難免有疏漏。
電源線畫細了,IR Drop超標,遠端晶片電壓不足;訊號線間距畫小了,串擾毛刺,資料傳錯;去耦電容放遠了,高頻噪聲濾不掉,晶片工作不穩定。
這些問題,眼睛看不出來,萬用表量不出來,只有上機跑模擬才能發現。
“李工、萬工,圖紙先放我這兒。”呂辰把搪瓷缸子放下,“板卡的事,不能急。我安排一下,上星河CAD跑一遍模擬。沒問題了,再送加工。”
萬人敵眼睛一亮:“呂工,星河CAD能排上號?”
呂辰點點頭:“我跟宋教授協調過了,工業計算機已經送流片,其他任務往後推五天,從明天開始,專門跑板卡模擬。”
“能測?”
“能,我已經和汪教授溝透過,他派工程師過來幫助配置驗證環境。”
李工臉上露出了一絲緊張:“四天,夠嗎?”
“夠不夠,跑了才知道。”呂辰合上筆記本,“下午,汪教授的工程師就到。李工,你把所有板卡的數字化設計檔案整理好,按型號分類,統一命名。萬工,你那邊把《元器件庫》和《測試向量庫》的最新版調出來,一起拷到星河CAD上。”
“行,我們這就去!”
萬人敵和李工也不多話,提著包就走。
下午兩點,萬人敵和李工一人拿著一個灰色的金屬盒子,就來到紅星所。
盒子比飯盒大一圈,表面是銀灰色的,邊緣有散熱孔,能看見裡面墨綠色的電路板。
“呂工,板卡的設計資料,全在這兒了。”
萬人敵把金屬盒子往桌上一放,發出沉悶的一聲響。
他掀開盒蓋,露出裡面的電路板。
那是板卡設計系統的儲存模組。
一塊掐絲琺琅工藝的陶瓷板,比A4紙小一圈,上面整整齊齊地插著八顆儲存晶片,銀灰色的陶瓷封裝,表面印著白色的絲印字。
晶片周圍環繞著一圈去耦電容,密密麻麻,像列隊計程車兵。
李工把另一個盒子也放在桌上,掀開蓋:“這是備份。兩塊板子,資料一模一樣。一塊跑模擬,一塊留著,萬一出了問題,還有個底。”
呂辰低下頭,仔細看了看那塊儲存板。
走線在釉面下若隱若現,銅線泛著溫潤的金色光澤。
金手指邊緣光亮,鍍層均勻,每個焊點都飽滿光滑。
他伸出手,輕輕摸了摸其中一顆晶片的封裝表面。
光滑,平整,沒有毛刺。
“資料都在裡面?”
“都在。”萬人敵從兜裡掏出一張折了好幾折的紙,展開,上面密密麻麻寫著目錄,“所有板卡型號的數字化設計檔案,包括元件位置、網路連線、走線幾何資訊,全部存在這八顆晶片裡。格式按照汪教授定的規範,直接能匯入星河CAD。”
呂辰看了萬人敵一眼:“萬工,直接從板卡設計系統上摳儲存板,這主意誰想的?”
萬人敵把煙叼在嘴角:“錄磁帶太慢,存二維卡怕要存幾百張,打紙帶也能打一屋子,時間緊急,我直接把儲存板摳過來,插到星河CAD的儲存櫃上,資料直接調,省時省力。”
李工在旁邊補充了一句:“而且磁帶容易失真,紙帶容易出錯。儲存晶片不一樣,資料寫在裡面,不會丟不會錯。”
呂辰點了點頭,合上盒蓋,把兩個金屬盒子摞在一起,夾在腋下。
“走,去機房。”
三人出了辦公室,下樓往星河CAD的機房走。
機房的門口,一個穿著白襯衫的年輕工程師已經等在那裡了。
三十出頭,瘦高個,戴一副黑框眼鏡,手裡夾著一個黑皮本子。
這是汪涵教授的學生,衛知南,程式設計院的骨幹,星河CAD的核心開發者之一,負責儲存介面模組的微程式編寫。
雖然年輕,但已經是星河CAD系統最熟悉的人之一了。
“衛老師,等久了吧?”呂辰迎上去。
“剛到。”衛知南推了推眼鏡,目光落在呂辰腋下的兩個金屬盒子上,“汪教授讓我過來配合你們。這就是板卡設計系統的儲存板?”
“對。”呂辰把盒子遞給他,“資料全在裡面,衛老師,能不能直接掛到儲存櫃上?”
衛知南接過盒子,開啟看了一眼,又關上,點了點頭。
“能,午馬機的儲存模組都是一樣的,只需要插入中央儲存櫃的擴充套件槽就可以了。”
“行。那先去看看。”
推開機房的門,衛知南走到儲存櫃前面,蹲下來,開啟一個副櫃的門。
櫃門內側貼著一張電路圖,是儲存櫃背板的走線圖,密密麻麻,看了讓人眼花。
他用手指在背板上點了幾下:“這個儲存櫃有十六個插槽,現在只用了八個,還剩八個插槽空著。”
他把板卡設計系統的儲存板從盒子裡取出來,插到儲存櫃背板的一個空插槽上,擰緊螺絲。
“上電試試。”
衛知南走到管理員終端前,敲了一行命令。
DB> MOUNT DEVICE
螢幕上一行字跳出來。
DEVICE MOUNTED. READING DIRECTORY…
幾秒後,目錄顯示出來了。
五大類,23個型號,527塊板卡的目錄,整整齊齊。
萬人敵站起來,湊到螢幕前看了看,眼睛亮了。
“成了。”
李工在旁邊搓了搓手,臉上露出如釋重負的表情。
呂辰敲了一行命令,隨便調出一塊板卡的設計檔案目錄。
DB> LIST
螢幕上一行行檔名跳出來:
POWER_V1_——112KB
POWER_V1_——86KB
POWER_V1_——234KB
POWER_V1_——178KB
POWER_V1_——165KB
POWER_V1_——12KB
資料都在,文字格式,每一行都是一個元件、一條連線、一個座標引數。
沒有圖形,只有數字和文字。
呂辰點了點頭。
“衛老師,這兩天先把環境搭好。後天一早開始跑模擬。我把清單列一下。”
他從兜裡掏出筆記本,翻開,上面用鋼筆工工整整寫了幾行字。
“第一,匯入板卡設計檔案和元件庫。資料已經在儲存櫃裡了,明天直接調。但元件庫的關聯要確認,每顆晶片、每個電阻電容的電氣模型,要從《元器件庫》裡調出來,跟設計檔案裡的元件標號一一對應。”
衛知南記下:“元件庫關聯校驗,明天跑模擬前先做一遍。”
“第二,配置模擬引數。”呂辰繼續念,“溫度設三檔,常溫25度,高溫85度,低溫零下40度。電源電壓設標稱值正負5%兩檔。訊號翻轉率設20%和100%兩檔。這些引數要寫成配置檔案,放在儲存櫃的根目錄下,每個模擬任務呼叫同一份配置,保證條件一致。”
“第三,設定測試向量。萬工,《測試向量庫》帶來了嗎?”
萬人敵從檔案袋裡抽出一本冊子,遞給衛知南。
衛知南接過冊子翻了翻,每一條測試向量都有編號、功能描述、輸入輸出定義、預期結果,條目清晰,格式規範。
他翻到最後一頁,是一張總表,列著所有測試用例的編號和對應的板卡型號。
他把冊子放在桌上:“明天匯入系統,自動跑就行。我寫一個批處理微程式,按順序載入測試向量,不用手動一條一條敲。”
“第四,”呂辰豎起第四根手指,“問題記錄和結果輸出。模擬過程中發現的問題,自動記錄到日誌檔案,按嚴重程度分級。跑完之後,生成彙總報告,列印出來。每一條失敗或警告,至少要輸出:板卡型號、網路名或元件標號、實測值、閾值、偏差百分比。”
衛知南點了點頭,又補了一句:“還得再加一個斷點續跑。板卡模擬比晶片模擬複雜,一次跑完可能要幾個小時。如果跑到一半出了問題,中斷了,從頭再跑浪費時間。我寫一個微程式,每跑完一個測試項,自動儲存現場狀態。中斷之後,從斷點繼續跑,不浪費已經跑完的時間。”
呂辰眼睛一亮:“這個好。衛老師,多久能寫好?”
衛知南推了推眼鏡:“這套微程式我之前在晶片模擬上寫過,移植過來改幾個引數就行。”
“那就謝謝衛老師了。”
呂辰他轉過身,看著萬人敵和李工。
“萬工、李工,後天跑模擬的時候,你們倆在邊上看著。系統輸出的資料,你們要過一遍。有些問題,系統不一定能判斷出來,但你們憑經驗能看出來。”
萬人敵把煙點上,吸了一口:“行,我後天一早過來,帶著《元器件庫》的參數列,一一核對。”
李工也跟著點了點頭:“我把圖紙帶來,攤在旁邊。系統報一個資料,我對一個圖紙。哪裡不對,當場圈出來。”
呂辰又轉向衛知南。
“衛老師,跑模擬的時候,能不能把結果實時列印出來?不是等跑完了再看報告,是跑的過程中,每完成一個測試項,就把結果打出來。哪條線串擾超標、哪個節點電壓跌落,一目瞭然。”
衛知南想了想,從鍵盤上抬起頭。
“能。每完成一個測試項,自動生成一行輸出,寫到電傳打字機上。”
“行。那就這樣。衛老師,這兩天辛苦一下,後天一早我們過來,開始跑。”
衛知南點了點頭,又轉回螢幕前,繼續敲程式碼。
呂辰走到萬人敵和李工旁邊,發了一圈煙。
“萬工、李工,後天是關鍵。500多塊板卡,能一次跑通最好,跑不通也正常。咱們一塊一塊地過,不急。”
萬人敵眯著眼睛:“電源板、時鐘板、匯流排背板、I/O板、儲存板,五塊核心板卡。這五塊跑通了,剩下的就是修修改改。這五塊跑不通,後面的就不用跑了。”
呂辰點了點頭:“那就先跑這五塊。其他的,等這五塊定版了再說。”
三人又聊了幾句,萬人敵和李工先走了。
呂辰站在白板前,把那五個型號又看了一遍。
然後他轉過身,走到衛知南身後。
衛知南正在寫配置檔案。螢幕上一行行的引數:
TEMP=-40
VOLTAGE=NOM,NOM+5PCT,NOM-5PCT
TOGGLE_RATE=0.2,1.0
VECTOR_DIR=
OUTPUT_DIR=
=600
呂辰看了一會兒:“衛老師,辛苦了。今晚早點回去休息,明天還要盯一天。”
衛知南搖了搖頭:“不回去了,機房湊合一宿。斷點續跑的那個微程式還沒寫完,寫完再說。”
呂辰看了他一眼,從兜裡掏出兩包煙,放在桌上。
“煙放這兒了,你抽。”
衛知南笑了笑,把煙收進兜裡,轉回螢幕前,繼續敲。
10月3日,早上七點,呂辰就到了機房。
衛知南正坐在管理員終端前面,面前攤著一本開啟的黑皮本子,本子上密密麻麻寫滿了微程式指令。
搪瓷缸子裡的茶冒著熱氣,茶葉梗浮在水面上,散發出一股茉莉花香。
他眼睛下面有一圈青黑,但精神還好,手指搭在鍵盤上,隨時準備敲。
萬人敵和李工一人手裡拿著一個筆記本,腋下夾著那本厚厚的《測試向量庫》,在靠牆的位置坐下,翻開本子,把鋼筆帽擰開,擱在本子旁邊。
“開始吧。”呂辰走到管理員終端前,衛知南站起來,把位置讓給他。
呂辰坐下來,深吸一口氣。
螢幕上的游標一閃一閃的,等著他敲命令。
他的手指搭在鍵盤上,停了一瞬。
527塊板卡,幾十萬個焊點,幾百萬條連線。
手工畫了幾個月,現在要在計算機上跑一遍驗證。
跑通了,送加工;跑不通,改,改完再跑,跑到通為止。
他敲下第一行命令。
DB> RUN SIMULATION /TEMP:25
螢幕上一行綠色的字元跳出來。
SIMULATION STARTED. 16 NODES ALLOCATED. ETA
十六臺午馬機嗡嗡地響了起來,指示燈從綠色變成黃色,表示正在計算。
中央儲存櫃的指示燈也開始閃爍,讀寫的頻率越來越快,像某種急促的心跳。
呂辰靠在椅背上,手指在桌面上輕輕叩著。
衛知南站在他身後,雙手抱在胸前,眼睛盯著螢幕上的進度條。
萬人敵端著搪瓷缸子,一口一口地喝著茶,目光在螢幕和筆記本之間來回移動。
機房裡安靜得能聽見空調的嗡嗡聲和磁帶機偶爾轉動的機械聲。
進度條走了3%,停了。
螢幕上跳出一行警告:WARNING: NODE 07 TIMEOUT. CHECK NETWORK CONNECTION.
呂辰眉頭一皺。
衛知南已經走到第七臺午馬機前面,蹲下來,檢查網線插頭。
“鬆了。”他把插頭拔下來,重新插緊,聽到“咔嗒”一聲,確認鎖釦卡住了,才站起來。
“再試一次。”
呂辰敲了一行命令:
DB> RESUME SIMULATION
螢幕上,第七臺午馬機的狀態從紅色變成黃色,又從黃色變成綠色。
進度條繼續往前走。
5%,10%,20%。
進度條走到32%,螢幕上跳出一行字元:INFO: IR DROP DETECTED ON POWER_V1. NODE 12 VOLTAGE= (NOMINAL ). THRESHOLD=.
萬人敵手裡的搪瓷缸子停了一下,慢慢放到桌上。
呂辰敲了一行命令,調出詳細資訊。
DB> DISPLAY IRDROP POWER_V1 NODE12
螢幕上一行行資料跳出來:
NODE: KL-PWR_04
X_COORD: 2450
Y_COORD: 1870
6.4
STATUS: FAIL
萬人敵站起來,湊到螢幕前,把那幾行資料看了兩遍。
他的嘴唇抿成一條線,眉頭擰成一個疙瘩。
“,比標稱值低了6.4%。規格書要求電壓波動不超過正負5%。這顆晶片離電源入口最遠,電源線畫細了。”他的聲音不大,但每個字都很清楚,“不解決,這塊板子焊好了也不能用。遠端晶片電壓不足,會間歇性宕機,而且極難復現。”
李工翻開筆記本:“得加寬電源主幹道,遠端增加去耦電容(100μF+0.1μF並聯)。”
呂辰敲了一行命令,把這個問題記錄到日誌裡。
DB> LOG ISSUE POWER_V1 “IR DROP ON KL-PWR_04, VOLTAGE ” SEVERITY:3
然後他敲了CONTINUE,模擬繼續。
進度條走到58%。
這一次跳出來的是一行警告。
ALERT: CROSSTALK ON CLOCK_V1. SIGNAL LINE CLK_OUT_4 =,= (THRESHOLD )
衛知南“嘶”了一聲,嘴裡唸叨著:“,超過閾值。這已經不是警告了,是警報。”
呂辰敲了一行命令,調出這條線的詳細資訊。
DB> DISPLAY CROSSTALK CLOCK_V1 CLK_OUT_4
螢幕上一行行資料跳出來:
SIGNAL: CLK_OUT_4
TYPE: CLOCK
DATA_BUS_7
TYPE: DATA
SPACING:
THRESHOLD:
STATUS: FAIL
萬人敵湊過來看了一眼,搖了搖頭。
“間距只有毫米,要求是0.5毫米。兩條線靠得太近,資料線翻轉的時候,耦合電容在時鐘線上感應出的毛刺。在TTL電平裡,兩伏就算高電平了。這個毛刺會被觸發器誤認為是有效時鐘沿,導致系統不定時宕機,而且極難復現。”
李工在筆記本上又寫了一行:“得加大間距至,中間插入地線隔離。”
呂辰把這個三級問題也記錄到日誌裡。
進度條走到71%,螢幕上跳出一大片字元,一行一行往下滾。
WARNING: TIMING VIOLATION ON STORAGE_V1. A12 DELAY= (REQUIRED )
WARNING: TIMING VIOLATION ON STORAGE_V1. D7 SETUP= (REQUIRED )
WARNING: TIMING VIOLATION ON STORAGE_V1. CS PROP_DELAY= (REQUIRED )
呂辰敲了一行命令,調出第一條時序違例的詳細資訊。
DB> DISPLAY TIMING STORAGE_V1 A12
螢幕上一行行資料跳出來:
NET: A12
FROM:
TO:
LENGTH: um
MIN_LENGTH: 9800um
DELAY_CALC:
DELAY_REQ:
SLACK:
STATUS: FAIL
萬人敵把搪瓷缸子往桌上一墩,茶水濺出來幾滴。
“這條地址線從儲存控制器到遠端晶片,走了微米,最短路徑只有9800微米,繞了將近一倍。為了繞開那些電容電阻,自動佈線器把關鍵路徑繞遠了。延遲超標3.4納秒,時序收不住。”
李工在筆記本上寫:“這個要手動拉直,得重新佈局周圍元件。”
衛知南在旁邊補了一句:“不只這一條。儲存板有好幾條地址線和資料線都有類似問題。佈線演算法的目標函式是‘總連線長度最短’,不是‘單條關鍵路徑延遲最小’。為了省幾毫米的普通線,把關鍵路徑繞遠了。演算法層面的問題。”
呂辰把這些警告一條一條地記錄到日誌裡。
進度條走到89%。
這一次跳出來的雖然不算警告,但也不是好訊息。
INFO: REFLECTION ON IMPEDANCE=135Ω (TARGET 120Ω)
呂辰調出詳細資訊。
DB> DISPLAY REFLECTION
NET:
135Ω
120Ω
DEVIATION: 12.5%
STATUS: PASS (MARGINAL)
萬人敵看了一眼:“終端匹配電阻選大了。135歐姆,目標是120歐姆。反射係數,不算大,但在高頻訊號裡會有影響。100兆赫茲以上的訊號,這種反射會累積,造成訊號質量下降。”
李工在筆記本上寫:“這個要更換電阻,控制在±5%以內。”
進度條走到95%,97%,97%,螢幕上的字元猛地一刷,整屏綠色。
SIMULATION COMPLETED.
TOTAL TIME
PASS: 342
FAIL: 18
WARNING: 27
萬人敵盯著那行數字看了好幾秒,緊緊皺著眉頭。
18個FAIL。27個WARNING。
衛知南敲了一行命令,生成彙總報告。
DB> PRINT
印表機在角落裡咔嗒咔嗒地響了起來。
針頭打在複寫紙上,一行一行地輸出。
紙帶從印表機裡慢慢吐出來,軟塌塌地垂下來,拖在地上。
呂辰走過去,撕下第一頁。
那是一張總表,密密麻麻列著所有失敗和警告的測試項,按嚴重程度排序。
最上面是SEVERITY:3(致命)的,兩條。
POWER_V1: IR DROP on KL-PWR_04, (THRESHOLD )
CLOCK_V1: CROSSTALK on CLK_OUT_4, (THRESHOLD )
萬人敵把那頁紙接過去看了兩遍:“這兩個三級,必須改。不改,板子焊好了也是廢品。”
李工點了點頭,在筆記本上把這兩個問題圈了起來,旁邊畫了兩個大大的感嘆號。
衛知南繼續翻報告。
SEVERITY:2(嚴重)的5條。SEVERITY:1(一般)的11條。
呂辰把列印出的報告從頭到尾翻了一遍,每翻一頁停一下,目光在那些數字上掃過:“萬工、李工,這兩塊板子,今天改完。明天一早再跑一遍模擬。透過了,送加工;通不過,再改。其他的板子,一級和二級的問題,也一併改完。”
萬人敵點點頭:“行,我馬上去通知所裡改,明天之前改完。”
李工站起來,把鋼筆插回兜裡,筆記本夾在腋下。
“萬工你在這邊看著,我回去看著他們改。”
呂辰道:“李工不要急,所裡先改著,咱們一鼓作氣,把模擬走一遍,然後再回去盯著。”
接下來,大家又開始了其他板卡的模擬。
直到深夜,白天,又一個深夜。