呂辰、諸葛彪、錢蘭三人帶著汪涵教授,從第八組的設計室出來,下到一樓,往星河CAD的機房走。
錢蘭在前面引著,呂辰、諸葛彪在左右護著,汪涵教授把黑皮本子夾在腋下,背挺得很直。
他一句話沒說,但呂辰看得出來,這位老教授心裡壓著一股火。
雙軌對比的結果,手工版的問題固然不少,但CAD版的問題同樣扎眼。
那些問題,關鍵路徑繞遠、特殊結構不智慧、冗餘過孔過多、缺乏模擬直覺,每一條都像是打在汪涵教授臉上的巴掌。
星河CAD是他的成果,他帶著人,沒日沒夜的不知熬了多少夜,白了多少頭髮。
現在被人一條一條地挑出毛病,擱誰心裡都不好受。
機房的門口,兩個穿著防靜電工裝的年輕技術員正蹲在地上拆一個紙箱,裡面是一臺剛送來的磁帶機。
看見呂辰等人過來,他們站起來,讓開門口。
“汪教授,您請。”錢蘭推開門。
機房裡的溫度比走廊低了好幾度,空調吹出來的風帶著一股乾燥的涼意。
墨綠色的機櫃在日光燈下泛著冷光,指示燈一排一排地閃爍著,綠的、黃的、紅的,像是某種沉默的語言。
牆上掛著一塊大白板,上面用紅藍鉛筆寫著各臺機器的任務分配和當前狀態,密密麻麻。
汪涵教授走到管理員終端前,轉身看著呂辰。
“調出來吧。讓我看看,你們說的那些問題,到底長甚麼樣。”
呂辰在終端前坐下,手指在鍵盤上敲了幾行命令。
螢幕上跳出一個檔案列表,他選了一個檔名,“”,回車。
螢幕上開始載入版圖資料,綠色的字元在黑色背景上交織,像奔騰的瀑布。
呂辰站起來,把位置讓給汪涵教授。
汪涵教授拉過椅子坐下,眯著眼睛看螢幕。
他手指在鍵盤上飛速敲擊,一會看單元庫調出某個標準單元,一會又查邏輯、看版圖。
螢幕上一會是字元,一會是短線連線的線路,一會是看整體,一會又顯示區域性。
他看了大約十分鐘,停在了16位加法器的進位鏈位置,輸入列印。
繪圖機啟動,不一會兒,16位加法器就畫了出來。
汪教授拿起圖,那條線,從晶片的一端繞到另一端,歪歪扭扭,繞過了一大堆標準單元,總長目測接近3毫米。
汪涵教授盯著那條線看了幾秒,聲音裡但帶著一種承認事實之後的平靜。
“這條線,確實繞遠了。”
諸葛彪把煙從耳朵上取下來,在指間轉了一圈。
“汪教授,這不是您演算法的問題,是咱們當初定的目標就有問題。”
他用手指在圖紙上點了一下那條進位鏈的位置。
“您當初寫佈線微程式的時候,目標函式是‘總連線長度最短’和‘佈線率最高’。這個目標,對普通訊號線是對的,但對關鍵路徑,不對。”
他轉過身,看著汪涵教授。
“關鍵路徑要的不是總長最短,是單條路徑延遲最小。總長最短,可能讓一百條普通線各短了0.1毫米,但讓一條關鍵路徑長了1毫米。算總賬是賺了,但時序收不住了。”
汪涵教授盯著圖紙又看了一會兒。
“你說得對。”他點了點頭,“目標函式要改。”
錢蘭接了一句:“不只要改目標函式。佈線的時候,演算法不知道哪條線是關鍵路徑,哪條線不是。得在佈線之前,先把關鍵路徑標記出來。”
汪涵教授轉過頭看著她。
錢蘭繼續說:“設計師在做邏輯設計的時候,心裡是有數的。這條加法器進位鏈,從模擬就能看出來是時序關鍵。他可以在佈局階段就把這條路徑標記為‘關鍵路徑組’,告訴佈線器‘這幾條線,優先順序最高,不惜代價拉直’。”
汪涵教授拿出筆記本,寫了一行虛擬碼,思路清晰地表達了出來:
“設計師標記關鍵路徑組→佈局器優先放置相關單元,縮短距離→佈線器為這些路徑分配最短走線,允許繞過標準單元、允許犧牲周邊線長→佈線完成後自動檢查延遲,不達標則區域性重布。”
他寫完,盯著看了兩秒,然後點了點頭。
“這個可以做。”
諸葛彪把煙叼在嘴角,含混地說:“還有串擾的問題。CAD版沒自動加遮蔽地線,相鄰線間距全按同一規則。您那個佈線演算法裡,串擾約束只有一條‘間距不小於最小間距’。但敏感訊號和普通訊號,不能一個待遇。”
汪涵教授又寫了一行虛擬碼:
“敏感訊號標記→佈線時自動增加間距、兩側插入地線、禁止臨近大電流開關訊號。”
他寫到一半,停下來,想了想,又加了一行:
“佈線完成後自動執行串擾分析,高風險區域區域性重布。”
他把這行字又看了一遍,然後抬起頭,看著呂辰。
“你說的敏感訊號,具體指哪些?”
呂辰走到白板前,拿起紅筆,寫了幾行字。
“時鐘訊號。時鐘沿的抖動和毛刺直接影響全系統時序,必須隔離。”
“復位訊號。復位線上的毛刺可能導致系統誤復位,整機宕機。”
“模擬訊號。ADC、DAC的輸入輸出,對噪聲極其敏感。”
“高速並行匯流排。資料匯流排的相鄰線串擾會導致資料錯誤。”
他放下筆,轉過身。
“這四類訊號,只要設計師在原理圖上做了標記,佈線器就應該特殊對待。”
汪涵教授把這四類訊號抄在黑皮本子上,鋼筆沙沙地響。
這時,錢蘭走到白板前面,拿起藍筆,在上面寫了幾個字:電源網格。
“手工版IR Drop超標的問題,CAD版雖然沒有手工版那麼嚴重,但汪教授,您的電源網格綜合,是基於平均電流估算的。”
她在白板上畫了一個簡圖。
“每個門區域的電流消耗不是恆定的。輸出緩衝器翻轉的時候,電流尖峰可能達到平均值的十倍。您用平均值算出來的電源線寬度,在峰值電流的時候不夠。”
她轉過身,看著汪涵教授。
“要基於瞬態電流波形來設計電源網格。門級模擬的時候,記錄每個門區域的電流隨時間變化的波形,找出峰值。然後根據峰值電流來算電源線寬度。”
汪涵教授的眉頭皺了一下:“門級模擬的資料量很大。16位加法器同時翻轉,幾千個門在同一時刻產生電流尖峰。要把所有這些資料都存下來,儲存櫃不夠用。”
錢蘭想了想:“不需要存全部波形。只存每個門區域的峰值電流,以及峰值出現的時間視窗。佈線器根據這個來加寬電源線、插入去耦電容。”
汪涵教授在黑皮本子上記了一筆,又抬起頭:“去耦電容的插入,你剛才也提到了。這個可以自動化。在高電流跳變區域附近,自動新增片上去耦電容。電容的值根據電流尖峰的幅度和持續時間來算。”
他在本子上寫了幾行公式,然後合上本子。
“電源網格的問題,不只是自動加寬走線。還要把分析結果視覺化。設計師不能只看一串數字,他要能看見哪兒是災區。”
他頓了頓:“升級2.0的時候,我嘗試寫過熱力圖的程式碼,但當時覺得算得太慢,跑一顆晶片要三四個小時,就沒有加上去。”
他沉默了兩秒:“現在看,慢也得跑。設計師看見熱力圖,就知道這裡要加寬電源線。”
呂辰問道:“汪教授,這個熱力圖,能不能做到互動式的?設計師改了電源網格之後,熱力圖實時重新整理,不用重新跑幾個小時?”
汪涵教授想了想:“實時重新整理做不到,計算量太大。但可以做到‘增量更新’。設計師只改了一小塊區域,系統只重新算那一塊,其他區域用快取資料。這樣十幾分鍾就能出結果。”
他頓了頓,又補了一句:“但這需要改儲存結構,原來的資料格式不支援增量更新。”
呂辰點了點頭:“那就改。儲存結構是底層的事,現在不改,以後改更麻煩。”
汪涵教授看了他一眼,沒說話,但在本子上又記了一筆。
諸葛彪把煙點著了,吸了一口,慢慢吐出來。
“汪教授,還有一個事兒,可製造性規則自動檢查與修復。手工版有銳角、接觸孔尺寸不一致;CAD版雖然避免了基礎錯誤,但對金屬密度、拐角圓滑度這些‘軟規則’沒做最佳化。”
他走到白板前,拿起粉筆,在上面寫了幾行字。
“禁止小於135度的銳角拐彎,遇到銳角自動切成兩個135度角或者弧線。”
“拐角處自動加粗,線寬增加50%,長度是線寬的兩倍。”
在金屬密度不均勻的地方自動插入dummy metal,讓密度均勻化,目標密度50%±10%
接觸孔尺寸標準化,同一工藝節點下,所有接觸孔直徑偏差不超過±微米
他在每一條後面都畫了一個問號,看著汪涵教授。
“這些,CAD能不能自動做?”
汪涵教授盯著那幾行字看了幾秒,然後站起來,走到白板前,拿起粉筆,在諸葛彪的字下面加了幾行。
“銳角檢測。佈線完成後自動掃描所有拐角,發現<135°的自動修正。”
“拐角加粗。在金屬拐角處自動新增一個補丁圖形,增加線寬。這個補丁的形狀和尺寸做成引數化單元,DRC自動認。”
“Dummy Metal填充。先計算區域性金屬密度,低於45%的區域自動新增方塊形dummy,尺寸和間距可配置。填充後重新檢查密度,迭代直到達標。”
他放下粉筆,轉過身,看著呂辰。
“這些東西,技術上都能做。但有一個前提。”
他豎起一根手指。
“要有足夠精確的工藝模型。拐角加粗多少?dummy metal的最小尺寸是多少?接觸孔的標準化公差是多少?這些引數不是我能定的,是6305廠工藝線給的。他們沒有,我寫不了。”
呂辰點了點頭:“這個我去協調。6305廠那邊一直在收集工藝資料,應該已經積累了不少。我下週去找他,把參數列格要過來。”
汪涵教授沒再說甚麼,坐回終端前。
錢蘭走到白板前,拿起粉筆,又加了一行字:混合訊號與定製模組的“保留區”設計。
“汪教授,雙軌對比的時候我發現,CAD版在儲存陣列、鎖相環、模擬比較器這些定製模組上表現很差。自動佈線破壞了它們的對稱性和匹配性。”
她在白板上畫了一個簡圖,一個大方框,裡面畫了幾個小方框,小方框周圍畫了一圈虛線。
“我的想法是,引入定製模組邊界鎖。設計師可以把一塊區域標記為保留區,自動佈線只允許指定引腳連線,不觸碰內部結構。”
她頓了頓,又在旁邊畫了一個圖。
“在保留區內,設計師手工畫關鍵匹配線,比如差分對、電流鏡。CAD自動完成外圍連線和填充。”
“對於儲存單元、運放、比較器這些常用定製模組,建立專用器件庫。設計師輸入尺寸引數,系統自動生成版圖,不需要手工畫,也不需要CAD亂布。”
汪涵教授聽完,沉默了幾秒。
“保留區的想法,技術上可以實現。佈線器在佈局階段,把標記為‘保留區’的區域當成障礙物,走線不進去。只從邊界上的指定引腳引出連線線。”
他在黑皮本子上飛快地寫了幾行:
“檔案格式要加一個新屬性,REGION_TYPE,可設為CORE、BLOCKAGE、RESERVED。佈線器遇到RESERVED,跳過內部,只處理邊界引腳。”
他寫完,抬起頭看著錢蘭。
“但專用器件庫的事,不是我能做的。那需要有人專門畫引數化單元的版圖,不同工藝節點要重新畫。6305廠那邊現在5微米和2微米兩套工藝,每套都要做。”
錢蘭點了點頭:“這個我來組織人做。”
汪涵教授繼續在本子上寫,寫完又停下來,看著白板上那滿滿一板的字。
時鐘樹綜合、串擾感知佈線、電源網格熱力圖、可製造性規則、保留區設計、專用器件庫……
每一項都是一座山。
他把鋼筆帽擰上,面無表情道:“呂辰,我問你一個事。”
“您說。”
“你們說的這些東西,全部做出來,需要多長時間?”
“如果人手夠,兩年。”
“兩年?”汪涵教授哼了一聲,“我程式設計院現在滿打滿算才幾個人,我們要支援崑崙1的微程式庫,要幫全國各單位定製演算法,要做指令集,你讓我這幾個人再去搞3.0,你以為我們是生產隊的驢?”
他站起來,手指在桌面上敲了兩下。
“呂辰,我跟你交個底。你要我做的這些東西,需要的是專門的人,演算法工程師、計算幾何專家、圖形學程式設計師、資料庫工程師。這些人,我一個都沒有。”
他看著呂辰:“你讓我寫微程式,我能寫。你讓我寫解析器、編譯器,我也能寫。但你讓我搞計算幾何、搞圖論演算法、搞大規模數值最佳化,我不是幹這個的。我手底下那些人也不是幹這個的。”
他頓了頓,聲音低了一些。
“你要我做,可以。拿人來。”
機房裡的空氣凝滯了幾秒。
諸葛彪把煙掐滅在菸灰缸裡,走過來拍了拍汪涵教授的肩膀。
“汪教授,您別激動。我們不是在逼您。這些問題,是大家坐下來一起想的。能做多少做多少,做不了的,咱們想辦法。”
汪涵教授沒理他,看著呂辰。
呂辰沉默了幾秒,然後說:“汪教授,您說個數。要多少人?”
汪涵教授豎起兩根手指。
“200。再給我200個人,我保證把星河CAD3.0做出來,你們說的這些,一件不落。”
呂辰還沒開口,諸葛彪先倒吸了一口涼氣。
“200百?汪教授,您這不是要人,是要一個研究所。”
汪涵教授看著他,表情沒有任何變化。
“你以為這些東西是好做的?時鐘樹綜合要搞H樹平衡演算法,串擾感知佈線要解電磁場方程,電源網格熱力圖要跑瞬態電流模擬,可製造性規則要跟工藝線的統計資料對接,保留區設計要改檔案格式和佈線器核心架構。哪一樣是三五個人能啃下來的?”
他掰著手指頭數。
“演算法組,至少40人。寫時鐘樹綜合、串擾感知、熱力圖核心演算法的。”
“圖形組,至少30人。做版圖瀏覽器、問題視覺化、互動式編輯的。”
“資料庫組,至少20人。改儲存結構、支援增量更新、做資料版本管理的。”
“測試組,至少20人。寫測試用例、跑回歸驗證、做效能分析的。”
“架構組,至少10人。定總體方案、寫介面規範、協調各組進度的。”
“應用組,至少30人。做使用者體驗、寫培訓文件、搞技術支援的要算在裡邊?還要跟6305廠對接工藝引數、跟各設計組對接需求……”
他放下手,看著諸葛彪。
“兩百個人,我還覺得緊。”
諸葛彪張了張嘴,沒說出話來。
錢蘭在旁邊輕聲說了一句:“汪教授,200個人,星河計劃那邊能批嗎?現在形勢不太好,各單位都在壓縮。”
汪涵教授看了她一眼,沒說話。
呂辰有點麻爪,200個人,一個工程師的工資、津貼、住房、醫療、子女入學……
加上裝置、耗材、機時、軟體工具的採購和開發,一年下來不是小數目。
但他也知道,汪涵教授說的沒錯。
星河CAD是晶片設計的基礎工具,已經證明了價值,雖然有這樣那樣的問題,但它的效率是手工的十倍以上。
現在要搞3.0,要解決手工版和CAD版各自暴露出來的問題,200個人,真的不算多。
他想了想:“汪教授,200個人的事,我去找劉教授談。今天之內給您答覆。”
說完,他轉身出了機房。
來到劉星海教授的辦公室,呂辰敲了敲門框,裡面傳來一聲“進來”。
劉星海坐在辦公桌後面,面前攤著一本開啟的黑皮本子,手裡握著一支鋼筆,正在寫甚麼。
他抬起頭,看見呂辰:“怎麼了?臉色不太好看。”
呂辰在他對面坐下,把事情從頭到尾說了一遍。
雙軌對比的結果,手工版的問題、CAD版的問題,汪涵教授在機房發的那通火,還有那200個人的需求。
他說的很客觀,沒有添油加醋,也沒有隱瞞甚麼。
劉星海教授聽完,沉默了一會兒:“星河CAD,是我們在不會到會這個階段交的答卷。能用,有缺點,效率不高,但能用。”
他看著呂辰:“3.0,是要解決好不好的問題。時序收斂、訊號完整性、電源完整性、可製造性、混合訊號支援,這些不是錦上添花,是晶片設計從手工走向自動化的必經之路。”
他走拿起鋼筆,在黑皮本子上寫了一行字。
“200個人,我給。星河計劃下一批人才招募,編制還沒用完。我會去跟國防科委對接,以星河CAD系統研發為課題,面向全國高校和科研院所定向招聘。演算法、圖形、資料庫、編譯器方向,200人,分批到位,一年內招滿。”
他在本子上又寫了一行字,然後抬起頭看著呂辰。
“你回去跟汪教授說,人我給他。但有一條……”
他想了想:“算了,我跟一起去。”
兩人一前一後出了辦公室,往機房走。
汪涵教授站在白板前,白板上又多了幾行字,是他在這段時間裡想到的新功能。
聽見腳步聲,他轉過頭,看見劉星海,愣了一下。
“劉教授。”
劉星海走到他面前,伸出手。
汪涵教授握住他的手,兩個人的手掌都很瘦,指節分明,握在一起的時候,像兩根老樹根糾纏在一起。
劉星海笑呵呵道:“老汪,年輕人辦事,難免經驗不足。不過沖勁是有的,出發點也不錯,就是有些毛躁,咱們多教育就是了,你別往心裡去。”
他頓了頓:“200個人,我給你。一年之內,分批到位。”
汪涵教授的手微微抖了一下。
他鬆開手,然後說了一句讓在場所有人都沒料到的話。
“老劉,話都說到這份了,就別說甚麼年輕人急躁,赤子情懷我也有,咱們要做就做徹底一點!”
他站起來,走到白板前,拿起筆,在最下面寫了一行字:圖形化互動與問題視覺化。
“星河CAD 2.0,還是命令列為主。設計師敲命令、看文字輸出、自己算、自己猜。設計師不是程式設計師,他不應該看那些數字。”
他在白板上畫了一個方框,代表螢幕。
“3.0,我要做一個圖形化版圖瀏覽器。支援縮放、層切換、測量距離、高亮顯示特定線網。所有分析結果,時序違例路徑、串擾高風險區、IR Drop熱點,用不同顏色疊加在版圖上顯示。”
他在方框裡畫了幾個色塊,綠的、黃的、紅的。
“設計師開啟版圖,一眼就能看見哪裡有問題。紅色的區域,說明時序違例;黃色的線,說明串擾風險;暗紅色的塊,說明IR Drop超標。”
他轉過身,看著劉星海。
“還要做一個問題導航功能。系統自動列出所有警告和違例,設計師點一下,版圖自動定位到對應位置,旁邊彈出一個對話方塊,給出建議修復操作,建議加寬電源線至40微米’、‘建議在相鄰線間插入地線’、‘建議將拐角改為135度’。”
他頓了頓,聲音提高了一些。
“還要支援雙版圖比對。設計師可以同時載入手工版和CAD版,並排顯示,或者疊加對比。系統自動計算差異區域,標出哪裡手工版畫得好、哪裡CAD版畫得好。”
他放下筆,拍了拍手,轉過身,看著劉星海和呂辰。
“也別縫縫補補了,要做,就做讓人看得見、摸得著、喊得動的CAD。你們把硬體解決了,軟體就沒問題。但你們要把人給我。”
劉星海看著他,搖了搖頭。
“我說了,200個人,一年之內到位。”
他聲音低了一些。
“老汪,星河CAD 3.0的事,不是程式設計院一家的事。積體電路實驗室要派人參與需求定義廠要提供工藝引數和測試反饋,計算機所要配合做檔案格式和介面規範。這是全星河計劃的會戰,不是你一個人的事。”
他看著汪涵教授,目光裡帶著一種只有老一輩知識分子之間才懂的東西。
“你放手去做。缺甚麼,直接找我。”
汪涵教授站在那裡,看著劉星海,嘴唇動了動,想說甚麼,沒說出來。
他轉過身,走到白板前面,看著那滿滿一板的字。
時鐘樹綜合、串擾感知佈線、電源網格熱力圖、可製造性規則、保留區設計、專用器件庫、圖形化互動、問題導航、雙版圖比對……
“老劉,你放心。這套系統做出來,中國晶片設計,就再也不用靠手工畫了。”
劉星海沒說話,只是拍了拍他的肩膀。
呂辰站在機房門口,看著白板上那行字,心裡有一種說不清的踏實。
200個人,星河CAD 3.0,從今天起,不再是想法了。