時間飛快,轉眼就到了11月。
崑崙1機的晶片、元器件、機櫃均如期交付,板卡也陸續完成設計。
硬體板卡整合小組啟動了火車頭測試。
紅星軋鋼廠的防靜電車間裡,呂辰站在機櫃前,手裡拿著一個棕色封皮的本子。
他今天負責記錄,親眼看著這臺機器活過來。
吳國華手裡拿著示波器的探頭,蹲在機櫃後面,地線夾已經牢牢固定在接地銅排上。
宇文坤德站在配電盒旁邊,手裡握著一支電筆,大拇指搭在開關上。
旁邊的桌子上,擺滿了各種工具和元件。
螺絲刀、鑷子、萬用表、酒精棉籤、備用晶片、一小卷細銅線。
崑崙1機的第一塊電源板、第一塊時鐘板和匯流排背板,已經被小心翼翼地插進了第一臺測試機櫃的插槽裡。
金手指與背板插槽的簧片接觸時,發出輕微的“咔嗒”聲讓人安心,像是骨頭歸位。
“就這三塊。”呂辰看著面前這臺孤零零的機櫃,“電源、時鐘、背板。先讓心臟跳起來,其他的等會兒再說。”
吳國華和宇文坤德在做著最後的檢查。
示波器的探頭點在電源板遠端的電源引腳上,螢幕上跳出一條綠色水平線,隨後一個方波出現又消失,吳國華微微點了點頭。
宇文坤德走到機櫃側面的配電盒前,左手搭在空氣開關上,右手拿著電筆點了點幾個測試點,確認接線無誤。
“上電。”
電磁接觸器“嘭”地一聲吸合,聲音沉悶有力,像一頭沉睡的野獸被拍醒。
機櫃前面板的幾個指示燈相繼亮起,綠色的電源正常燈亮得最快,黃色的匯流排空閒燈閃了兩下也穩住了,紅色的故障燈沒有亮。
示波器螢幕上的波形跳了起來。
先是一個不太乾淨的尖峰,那是上電瞬間的浪湧,誰家機器都免不了,然後穩定在5伏直流電平上,像一條被拉直的線。
吳國華盯著螢幕看了三秒,然後把時基調大,觀察了十幾個週期,確認沒有異常抖動,才開口:“+5V正常。”
他把探頭移到另一根線:“+12V也穩了,紋波在規格內。”
宇文坤德蹲在機櫃後面,把萬用表的表筆插在電源板的測試點上。
他看錶的速度很慢,每一組讀數都要默唸兩遍才往本子上記。
呂辰站在機櫃正面,盯著前面板上的指示燈。
電源正常燈亮著,綠色的光在昏暗的車間裡顯得很踏實。
匯流排空閒燈也亮著,黃色的,像一盞待機的訊號。
故障燈沒有亮,這是今天最好的訊息。
他從兜裡掏出一支菸,點上,吸了一口。
煙霧在潔淨室的氣流裡被迅速抽走,消失得無影無蹤,過濾器的嗡鳴聲始終沒停過。
“行了,先讓它跑一個小時。”呂辰看了看手錶。
車間裡安靜下來,只有機櫃裡散熱風扇的低頻嗡嗡聲,和示波器螢幕上那根穩定的綠色水平線。
宇文坤德蹲在機櫃後面,手裡的萬用表一直沒有收起來。
他每隔十分鐘測一組資料,記在本子上,字跡工整,每一行都標註了時間和測試點。
他的動作很慢,但很穩,像在給一個病人量體溫。
吳國華把探頭放在臺面上,擰開保溫杯喝了一口水,他的眼睛沒離開過示波器螢幕。
半個小時過去了,一切正常。
40分鐘的時候,宇文坤德忽然開口了。
“呂工,過來看一下。”
語氣裡,一種“你最好來看看”的意味。
呂辰三步並作兩步走到機櫃後面。
宇文坤德把萬用表的讀數轉過來給他看。
。
“這顆晶片離電源入口最遠。”宇文坤德用表筆點了點那顆晶片的位置,“標稱是5V。跌了將近4%。”
呂辰盯著那行數字看了兩秒,沒說話。
吳國華已經把示波器探頭移了過來。
螢幕上的5V電平線平穩,但仔細看,確實比電源入口處低了大約一格。
“線畫細了。”吳國華搖頭,語氣裡帶著一種“我就知道”的無奈,“現在的電壓還能撐住,指標內。但如果後面加更多晶片,電流再大一點,肯定要跌破伏的紅線。”
呂辰翻開本子,用鋼筆寫了一行字。
他寫得很慢,像是在斟酌每一個字:電源板遠端壓降4%,建議加粗主幹道或增加去耦電容。
他在旁邊畫了一個三角形,表示“需要跟蹤,非緊急”。
“先不管。”呂辰合上本子,聲音很平靜,“能跑就行。繼續觀察。”
現在不是停下來改板子的時候,火車頭測試的目標是讓最小系統轉起來,證明這條路走得通。
毛病記下來,回頭一併改,這是工程,不是實驗室裡的完美主義。
又過了十幾分鍾。
示波器的螢幕閃了一下。
吳國華的眼睛猛地瞪大了。
“毛刺!”
他的聲音拔高了半度,整個人從靠著的姿態一下子直起來,手指已經搭在了示波器的旋鈕上。
呂辰湊過去看。
時鐘訊號線上,那本該是整齊方波的地方,在正常的邊沿旁邊,偶爾會出現一個尖銳的毛刺,像一根針紮在波形上。
幅度大約1.8伏,持續時間極短,短到示波器的游標都很難鎖住。
“哪來的?”呂辰皺眉。
吳國華把示波器的時基調大,開始掃描更長時間視窗。
螢幕上的波形緩緩移動,像一條緩慢流淌的河。
毛刺出現的頻率不高,大約每兩三秒一次,間歇性出現,沒有規律。
宇文坤德走到機櫃前面,彎下腰,湊近時鐘板的位置。
這塊板子上有一顆KL-CLK時鐘分配晶片,旁邊圍著幾隻晶體和幾個電容。
他看了幾秒,又抬起頭看了看從背板下來的那幾束線纜。
他的眼睛眯了起來。
“線走得太近了。”他指著從背板下來的幾條資料線,“時鐘線跟資料線在背板上並行走了一段。間距——”
他沒有說完,但意思已經很明顯了。
吳國華拿起邏輯分析儀的探頭,夾在了那條時鐘線和最近的一條資料線上。
分析儀的螢幕上一行行數字跳出來,速度很快,但他一眼就捕捉到了規律。
“確認了。串擾。”吳國華把螢幕轉向呂辰,用手指點著上面的幾行資料,“每當資料線從0翻轉到1的時候,時鐘線上就會出現一個毛刺。時序剛好卡在那個點上。”
他聲音凝重:“這個毛刺幅度1.8伏。TTL電平裡,2伏就算高電平了。雖然還沒到閾值,但如果再多一點干擾,或者溫度升高、晶片老化,它就會變成真正的誤觸發。”
宇文坤德直起腰,目光從線纜移到呂辰臉上,沒有催促,只是在等一個決定。
呂辰盯著螢幕看了幾秒。
加遮蔽地線要改板卡設計,加大間距也要改板卡設計,這些都是下一版的事。
現在要做的,是確認這個毛刺會不會讓今天的測試跑不下去。
“頻率高嗎?”他問。
吳國華又看了一眼分析儀:“不高。平均兩三秒一次。沒有造成實際的邏輯錯誤,至少目前沒有。”
“那就先記著。”
呂辰翻開本子,又寫了一行:
時鐘與資料線串擾,毛刺,間距不足,需加地線隔離或加大間距。
旁邊畫了兩個三角形,優先順序更高。
他合上本子:“電壓和時鐘能撐住就繼續。今天的任務是讓最小系統轉起來,毛病先記著,回頭一併改。”
吳國華點了點頭,把探頭的夾子重新夾穩。
宇文坤德把手從萬用表上移開,站直了身子,活動了一下有些僵硬的腰。
一個小時跑完了。
電壓最低點。
時鐘毛刺最大幅度。
沒有造成實際故障。
呂辰合上本子,伸了個懶腰。
他看著機櫃上那些還在亮著的指示燈:“加I/O板。讓指令跑起來。”
吳國華從防靜電盒裡取出一塊I/O板。
這塊板子比電源板小一圈,正面只有幾顆晶片插座和一小排指示燈,背面是一排金手指。
他雙手握住板卡邊緣,對準抽屜裡的插槽導軌,輕輕推了進去。
“咔嗒”。
板卡到位,鎖緊機構彈起,聲音清脆,讓人安心。
呂辰走到工作臺前,從抽屜裡拿出已經燒錄好測試程式的二維卡。
那張淺黃色的卡片不大,打滿了密密麻麻的孔,在燈光下看像某種密碼本。
他在讀卡機前面蹲下來,把卡片塞進讀卡槽,推到底,然後按下了啟動按鈕。
讀卡機開始工作,探針矩陣掃描電路,一行行微指令被讀入,轉化成電訊號,沿著資料匯流排送進板卡。
機櫃上的指示燈開始閃爍。
黃色的匯流排空閒燈滅了,綠色的執行燈亮了起來。
呂辰站起來,盯著前面板。
測試程式很簡單,讀撥碼開關的狀態,然後點亮對應的指示燈。
撥碼開關就裝在I/O板的前面板上,8個撥碼,8個指示燈,一一對應。
他撥動了第一個開關。
指示燈沒有亮。
等了兩秒,還是沒有亮。
吳國華已經走到I/O板前面,把示波器探頭點在輸出引腳上。
螢幕上的波形跳出來,訊號有,但幅度只有1.2伏,遠低於TTL高電平的2伏閾值。
“輸出驅動不夠。”吳國華的聲音有些發緊,“要麼驅動晶片選型不對,要麼插座虛接!”
宇文坤德把板卡抽了出來。
翻過來看背面,晶片插座的每一個引腳上,緊固的螺絲閃著銀光,他用指甲颳了過去。
一連串清脆的“叮叮”聲響起,聲音圓潤,沒有破音。
沒有虛焊。!
他又翻回去看正面的晶片插座,一顆一顆檢查,手指輕輕按壓。
按到第三顆的時候,晶片動了一下。
“沒卡到底,虛接!”
把晶片從插座裡拔出來,用酒精棉籤擦了擦引腳,其實引腳看著不髒,但這是規矩,又重新插進去,用力壓到底。
這一次,晶片穩穩地卡在插座裡,沒有絲毫晃動。
他把I/O板重新插回機櫃,鎖緊。
動作一氣呵成,像是在灶臺前顛了一萬次勺。
呂辰再次撥動撥碼開關。
指示燈亮了。
明亮的綠色,在車間裡格外醒目。
吳國華沒有笑,但他的肩膀鬆了下來。
他繼續撥動剩下的七個開關,每個開關對應的指示燈都依次亮了起來,沒有延遲,沒有閃爍,沒有遲疑。
“I/O板通了。”
呂辰翻開本子,寫:
I/O板輸出正常,前期故障為晶片插座虛接。
他想了想,又在後面加了一行:
插座安裝後須逐顆按壓確認。寫入裝配規範。
“下一個。加儲存板。”
儲存板比前面兩塊板子都大,上面整整齊齊排列著十六顆晶片插座,每個插座周圍環繞著幾隻去耦電容,密密麻麻像列隊計程車兵。
吳國華雙手託著板卡邊緣,把它推進了機櫃的第四個插槽。
鎖緊機構彈起,“咔嗒”一聲。
“上電。”
宇文坤德再次推上開關。
這一次,機櫃的指示燈亮起來之後,儲存板的幾個狀態燈也亮了,綠色,自檢透過。
呂辰換了一張測試卡,塞進讀卡機。
這次的測試程式更復雜,向儲存器的某一段地址寫入一組資料,然後讀回來比較。
一致就點亮I/O板的第一個指示燈,不一致就點亮第二個。
讀卡機“咔嗒咔嗒”地響了一陣。
程式開始執行。
第一個指示燈亮了。
呂辰沒有動。
等了兩秒,還是亮的。
“再寫一組。”
吳國華在終端上敲了幾行命令,換了另一組資料。
讀卡機再次啟動,第一個指示燈還是亮的。
連續重複了十幾組,全部一致。
“儲存板基本功能正常。”吳國華的聲音裡帶著一絲自信。
“不急。”呂辰從抽屜裡拿出另一張測試卡,“跑一個邊界的。”
這張卡的測試程式不是讀寫正常地址,而是讀寫地址的邊界值,全0地址、全1地址、地址線翻轉的臨界點。
這些地方最容易暴露出地址譯碼或資料匯流排的隱藏問題,正常能跑的不算數,邊界能跑才算。
讀卡機再次啟動。
測試跑了不到半分鐘。
第二個指示燈亮了。
車間裡的空氣又一次安靜下來。
吳國華把邏輯分析儀接在儲存板的地址線和資料線上,開始抓取資料。
螢幕上的數字飛速跳動。
他盯著看了幾秒,然後用手指點住螢幕上兩條几乎重合的波形。
“地址線A7和A8的輸出波形不對。A8的翻轉時刻比A7晚了大約10納秒。導致在某一個瞬間,地址線組合錯誤,讀到了錯誤的記憶體單元。”
宇文坤德從工具箱裡拿出一把極細的鑷子,在板卡背面測量了兩根地址線的走線長度。
他的眼睛眯成一條縫,鑷子尖在銅線上輕輕劃過。
直起腰,比劃了一下長度。
“A8比A7多繞了一段。長了大約15毫米。”
時序問題,硬體工程師的噩夢。
不是說功能錯了,功能沒錯,是訊號在路上跑的時間不一樣,導致在某個納秒級的視窗裡,邏輯亂了。
那種問題最難復現,最難定位,最磨人。
呂辰在本子上重重地寫了一行:
地址線長度不匹配,A8繞遠,建議下一版做等長佈線。
他畫了三個三角形,最高的優先順序。
他看著宇文坤德。
“飛線試試!”
宇文坤德從線圈上剪下一根極細的絕緣導線,比頭髮絲粗不了多少。
用鑷子剝開兩端的絕緣皮,露出銅芯。
在板卡背面找到了A8訊號的起點和終點,不是正式焊盤,而是晶片插座引腳的根部。
他用鑷子尖輕輕挑起那條走線的末端,把飛線的一端焊上去,然後沿著板卡邊緣把線繞過去,繞開那些電容電阻,在終點處焊好。
動作很輕,呼吸很穩。
他焊完最後一處,用萬用表測了測通斷,“嘀”一聲,通路。
然後把板卡重新插回機櫃。
吳國華在看邏輯分析儀的螢幕。
A8的波形提前了大約7納秒。
雖然沒有完全對齊,但已經不在臨界區了。
“試試。”
測試程式重新執行。
第二個指示燈沒有再亮過。
10組。
20組。
50組。
全部透過。
吳國華吐了一口氣:“算過了。”
呂辰看了看錶。
從第一塊電源板上電到現在,已經過去了五個小時。
外面天早就黑透了,車間裡的工人們早已下班。
“還有最後一關。”
他從工具臺上拿起熱風槍,那把槍不大,出風口可以調溫,最高能到150度。
吳國華的眉頭皺了起來:“現在就烤?系統才跑通不到一個小時。”
“就是要現在就烤。”
呂辰把熱風槍調到80度,對準儲存板上的一顆晶片,那顆晶片旁邊沒有散熱片,沒有風扇,孤零零地暴露在空氣裡。
“剛跑通的時候是最脆弱的。熱脹冷縮一下,甚麼毛病都出來了。”
他直接扣下了扳機。
熱風槍的扇葉嗡嗡地轉著,熱風從出風口湧出,打在晶片的陶瓷封裝上。
一股微弱的、熱烘烘的氣流在板卡表面散開。
吳國華盯著示波器和邏輯分析儀,眼睛一眨不眨。
宇文坤德看著萬用表和機櫃的指示燈,手裡的電筆沒有放下。
呂辰看著熱風槍的溫度表,手很穩。
3分鐘……
5分鐘……
第8分鐘,示波器螢幕上的時鐘波形開始出現不規則的抖動。
原本乾淨的方波,邊緣開始毛糙,像被甚麼東西啃過。
毛刺的幅度從1.8伏慢慢往上爬,1.9、2.0、2.1……
到了2.3伏。
吳國華聲音發緊:“時序在惡化,高溫下晶片內部延遲變大,原來能收斂的時序現在收不住了。”
呂辰把風口移開一點,讓熱風打在那顆晶片旁邊的空地上,繼續觀察。
宇文坤德把手按在機櫃的外殼上,感受了一下溫度。
鋁型材的外殼已經有些燙手了。
他鬆開手,走到旁邊的物料架上,取下一臺小型軸流風扇。
從工具箱裡找了兩根紮帶,三下五除二,風扇固定在機櫃的側板上,電源線插到I/O板的一個閒置插座上。
風扇轉了起來,呼呼地吹著,把熱風槍吹來的熱氣吹散了大半。
示波器螢幕上的波形慢慢穩定下來,毛刺幅度降回了1.9伏,時序勉強收住。
宇文坤德把手從機櫃上移開:“風扇能頂住,但機櫃裡那麼多抽屜,不可能每個抽屜都加風扇,散熱設計要從根上改。”
呂辰關掉熱風槍,熱風槍的扇葉慢慢停下來。
他把本子翻到新的一頁,從頭開始寫總結。筆尖在紙上沙沙地響:
火車頭測試(電源+時鐘+背板+I/O+儲存)初步透過。
發現問題:
1. 電源遠端壓降4%(建議加粗主幹道/增加去耦電容)
2. 時鐘串擾毛刺最大(建議加大間距/加地線隔離)
3. I/O板晶片插座虛接(已修復,建議寫入裝配規範)
4. 儲存板地址線長度不匹配(飛線臨時解決,下一版做等長佈線)
5. 高溫下時序惡化(散熱設計需重新評估)
五類問題,全部記錄在案,待下一版設計修正。
他寫完最後一個字,把本子遞給吳國華。
“簽字。”
吳國華接過本子,一頁一頁地看他記的那些內容。
每一條都有現象描述、根因分析、臨時對策和後續建議。
字跡工整,條理清晰。
他從口袋裡掏出鋼筆,在本子上籤了自己的名字。
宇文坤德接著簽了。
呂辰把本子合上,他轉過頭,看著機櫃。
綠色的指示燈還在亮著,系統還在跑。
那塊被熱風槍吹過的晶片,現在溫度已經降下來了,波形穩得像甚麼都沒發生過。
他用指關節輕輕敲了敲機櫃的鋁型材立柱,發出清脆的響聲。
“行了。今天就到這兒。明天加運算板。後天加溫度迴圈。”
宇文坤德開始拆風扇、拔板卡、關電源,每一塊板卡都用防靜電袋裝好,封口,放回架子上。
吳國華收拾示波器和邏輯分析儀,把探頭一根一根地繞好,放回工具箱。
他把示波器的電源線也拔了,繞著機器纏了兩圈。
三個人在防靜電車間的門口站了一會兒。
深秋的夜風吹過來,帶著軋鋼廠冷卻塔的水汽和遠處煙囪的煤煙味。
車間裡的暖氣到了門口就被冷風截住了,站在門口能感覺到一股涼意從腳底升起來。
呂辰把本子夾穩,轉過頭看著吳國華和宇文坤德。
“國華,宇文工。最近你們要多盯著。我家裡,曉娥要生了。有時候可能顧不上。”
吳國華拍了拍呂辰的肩膀:“火車頭能跑。後面就是修修補補的事。家裡的事你放心。”
他頓了頓,又補了一句:“我已經和李娟說好了。等孩子生了,她和明婕去陪曉娥說話。你不用操心那邊。”
宇文坤德從兜裡掏出三根菸,一人發了一根。
“呂工,恭喜。板卡測試這一關有我守著。出不了問題。等你回來,開始整合衝刺。”
呂辰接過煙,從口袋裡摸出打火機,“啪”地點著。
火光照亮了他半張臉,能看見眼角那幾條這兩年才長出來的細紋。
三團火星在夜色裡明滅不定。
遠處,軋鋼廠高爐的火光把天邊映成一片暗紅。
那火光很安靜,很沉穩,像某種古老的、永遠不會熄滅的承諾。