龍芯,志願軍和毛澤東精神
送交者: ahf 2002年10月15日16:43:42 於 [軍事天地]http://www.cmilitary.com
2002年8月10日清晨6點零8分,“login:”的字樣如約而至地出現在用“龍芯-1”作CPU的計算機屏幕上。隨着一陣歡呼從中科院計算所北樓105房間傳出,中國人結束了只能用洋人的CPU造計算機的歷史。我抱着鍵盤,迫不及待地登錄進去,用vi編輯龍芯-1產生的第一個文件,其中兩段是這樣寫的。
The historical time of 6:08 on 2002.8.10 ends an era while begins a new one。The day in which we make computer with only foreign CPUs is gone with the wind of the morning of 2002.8.10。With tears and joys,we announce the successful running of LINUX (Kernel 2.4.17) with the Godson-1A CPU。
The great ecstasy at this moment makes all of our exhausting efforts of the past year be over paid。Though this is only a little step of a long march,it indicates the glorious future of our own CPU.
上述兩段話,表達了我們對龍芯的良好祝願和堅強信心。
如今,狗剩-1(還是這個名字叫起來比較順口)已經連續穩定運行一個多月。在這一個多月中,運行了完整的LINUX操作系統(內核版本為2.4)、gcc和f77編譯器、X-window、瀏覽器、Apache Web服務器、防火牆軟件、網關系統、mpeg播放器、基於LINUX的文本編輯工具Abiword、調試工具、SPEC CPU2000基準測試程序、用作NC的虛擬終端、以及VxWorks嵌入式操作系統等等。
本來以為狗剩-1的成功運行會稍微減輕一點過去半年多來令人難以喘氣的壓力。沒想到喜悅過後是更大的期盼和壓力。然而,在我們已經開始狗剩-2的設計的時候,回顧過去半年多所做的事情,總結一下經驗和教訓,對以後的工作無疑是有好處的。
應該說,從去年三、四月份唐志敏和我開始組建CPU設計的隊伍並全力投入CPU的設計,到今年八月第一個完全自己設計的通用CPU在200多MHz的主頻下跑起來,這個速度還是不慢的。究其原因,除了全組弟兄玩命以外,正確的技術路線是成功的關鍵。用唐志敏的話說,就是“苦幹加巧幹”。
在我去年寫的《我們的CPU》中,我曾經說過Godson設計的技術路線主要有三條。一是堅持高起點,從高性能通用處理器入手,走跨越式發展的技術路線。根據國外的成功經驗,CPU的發展是“先高后低”,即先發展計算機中使用的高性能通用CPU芯片,突破其中的關鍵技術,在此基礎上再發展嵌入式的應用。因此,在處理器設計上應以高性能通用CPU發展為龍頭,通過高端通用CPU的發展來帶動整個CPU產業的發展。具體實施時,在目前達到與國外相同主頻的的客觀條件不具備的情況下,應走通過優化處理器結構提高性能的道路,強調處理器中各個層次的並行性(包括指令級並行性、數據級並行性、以及線程級並行性)的開發以及軟硬件的協同來提高性能。二是堅持兼容性設計,把兼容當作通用處理器的生命。不管別人怎麼說,我堅定地認為不兼容設計是導致我國目前處理器設計技術落後的重要原因之一。由於現代計算機中軟件開發費用已經大大超過硬件開發費用,因此兼容性設計是Godson的重要目標。三是在實現上堅持穩紮穩打、步步為營。在處理器設計中,越上層的設計,調試越容易; 而越底層的設計,調試越困難。因此在Godson-1的邏輯設計階段,我們堅持穩紮穩打,從系統結構設計,到C模擬器設計、Verilog設計、以及FPGA驗證的每一步都經過反覆的驗證。
在上述技術路線指導下,我們在狗剩-1物理設計階段的具體技術路線有兩條,一是“以我為主”進行物理設計,二是堅持穩紮穩打。這是根據我們當時的處境提出的。
在去年10月我們基本完成狗剩-1的邏輯設計並在FPGA驗證平台成功運行通用操作系統以後,有很多人關心我們如何進行狗剩-1的物理設計。不少人建議我們完成RTL設計後,在國內尋找兄弟單位完成後續設計。有人說完成FPGA驗證只是完成了整個設計工作的10%,90%的工作還在後面,更有人說我們當時只是完成了國外學校中系統結構課程的一個大作業而已。但還是有人鼓勵說完成FPGA驗證已經很不容易,國外成功的設計也都是從FPGA驗證開始的。在那一段時間裡,在大多數朋友的鼓勵和建議中,或多或少都流露出對我們完成物理設計的能力的擔憂。因為計算所確實沒有做過大規模的芯片的物理設計,尤其是在深亞微米的工藝條件下。
但我堅信現代EDA工具的發展趨勢是不斷地讓做系統的人去完成物理設計,而不是讓做微電子的人來完成結構設計。因此,向室里和所里提出了“以我為主”並聯合有關單位進行物理設計的方針。李所長很快決定讓我們自己做下去,並在我們完成FPGA驗證之後的一段時間裡,在宏觀上提出一系列指導方針,包括他到國外考察了一圈後決定使用0.18的工藝進行流片(我原來傾向於用0.25的工藝,因為0.18的工藝信號完整性問題比較突出。現在看來,使用0.18的工藝無疑是一個英明的決定)。此外,他有針對性地請了一些精通物理設計的人與我們交流,使我們也受到不少啟發,尤其是認識到芯片設計是贏者通吃(Winner Take Over)的買賣,而且大家最後比的就是最後百分之一。在今年初的全所大會上,李所長把龍芯-1的流片作為今年全所的最重要任務。他說,在五十年代計算所做出中國第一台計算機103機時,張勁夫給這台計算機起了個名字叫“有了”,現在我們也要解決通用處理器“有了”的問題。
穩紮穩打的技術路線是和唐志敏商量後提出的。鑑於我們在物理設計上的空白,尤其是對深亞微米的物理設計沒有經驗,決定狗剩-1的流片分兩步走。第一步先交網表,委託有經驗的第三方物理設計公司進行物理設計,並把這個方案作為保證成功的保底方案。第二步,在與第三方交互的同時,組織自己的隊伍進行物理設計。結果,我們自己做的物理設計僅比第三方晚一個月交付流片,並且委託第三方做物理設計的流片和自己做物理設計的流片都是一次成功。
穩紮穩打的技術路線第二個含義是,在狗剩-1的流片中,採用標準單元進行物理設計。在以後的物理設計中,再自己定製一些宏單元,最後等條件具備再進行全定製設計。做通用處理器,遲早要自己進行全定製設計的。
狗剩-1的物理設計主要包括三個階段,2001年11月到2002年1月為啟動階段,主要完成環境的建立和工具的初步學習;2002年1月至4月為第二階段,在這個階段,RTL基本確定,對整個設計的流程有了初步了解;2002年4月至7月為第三階段,這是實質性設計階段。
我們是2001年11月8日開始學習狗剩-1的物理設計的,那天我們買的第一批EDA工具正式安裝到了我們的機器上。但那時候我們還沒有庫,EDA工具廠商在剛開始的時候給我們一個0.25的綜合庫以及10個臨時的license讓我們用於學習。在剛開始的一、兩個月,物理設計對我們來說確實是一個全新的領域。當一群熟悉指令流水線、多發射、亂序執行、動態調度、寄存器重命名、轉移猜測、CACHE、精確例外等等的人面對諸如Wireload model、綜合庫、物理庫、設計規則、掃描鏈、Steiner樹、頂層約束、時鐘樹、P diff、N diff、多晶、閘流效應、防靜電、串擾、電流密度、壓降等等物理設計的概念時,就象熟悉種地的劉姥姥剛進大觀園,覺得新鮮而不知所措。不過我們都很努力,大家抓緊時間看文檔,並找教科書補充微電子方面的基礎知識。在整個狗剩-1的物理設計過程中,我看過的文檔至少有上萬頁,有些看得很認真,反覆地讀,有些翻過去就算了。我們組的弟兄們看的比我多。
在開始的學習過程中,我們開始對狗剩-1的RTL的部分模塊進行初步的綜合以及布局布線並根據綜合及布局布線結果對RTL進行優化。每次修改都是先修改C模擬器再修改RTL並用FPGA驗證環境進行驗證。這時候顯示出我們前一階段建立起來的仿真驗證環境是多麼有用。2001年12月26日,收到來自廠家的正式的0.18綜合庫。雖然還缺一些特殊單元如鎖相環以及一些特殊的IO單元等,但可以比較正式地開始做設計了。用了0.18的庫以後,比起我們原來用的0.25的庫,關鍵路徑上的延遲一下子降低了很多。
在拿到正式的單元庫後的3個月內(2002年1月到3月),是我最着急熬的三個月,因為在這三個月內我們一直不能開始正式設計。RTL設計總是改了又改,聯繫第三方物理設計公司也沒有確定,可測性設計方案一直在調整,信號完整性問題也沒有經驗。每次解決一個問題,另一個問題就接踵而至。這些都是初學者難以逾越的過程,如果曾經做過,這三個月的工作(包括前面兩個月的學習)完全是可以避免的。但這三個月也是我們從不會做物理設計到會做物理設計的3個月,三個月後,我們不知不覺對物理設計有了初步的了解。到四月初的時候,我已經心裡比較塌實了。也就在這段時間裡,中科院微電子中心的黃令儀老師帶着幾個學生加盟到我們的物理設計中來。
黃老師是個干實事的人,六十多歲了,幹活比我還猛。每天早上7點多就來,晚上十點多我走的時候她還拖着鼠標坐在計算機前。黃老師是老計算所了,用她自己的話說,她在計算所的時間比在微電子中心的時間還長(她在計算所工作了二十多年,後來微電子中心成立時去的微電子中心)。從黃老師身上,我看到我們的前輩們獻身科研的優秀品質,這種品質是目前整個科研界急需的。黃老師說,她是聽說我們在做CPU主動找上門的,那時他們剛好完成一個物理設計的項目,下一個項目還沒有開始。我見過不少跨單位的合作項目,大都是把經費一分,各干各的,最後攢不到一起。但我們與微電子中心的合作是實質性的,因為合作單位的所有人員天天在一起干同一件活,統一指揮和調度。現在回想起來,如果沒有黃老師他們的參與,我們可能只完成委託給第三方物理設計公司的物理設計,不會自己做物理設計,即使做了,也沒這麼快。
在芯片設計中,RTL freeze是一個重要階段,即確定RTL級的設計,因為RTL一修改,後面的都得重做。而我們由於在前面設計RTL時沒有物理設計的經驗,在幾個月的時間內,一直對RTL進行調整。這種調整主要包括三個方面,一是性能的優化,包括平衡各級流水線的延遲等;二是功能的增加;三是可測性設計。在從1月初到4月初的三個多月內,我們一共對RTL做了一百多次修改,其中較大的修改有30多次。通過這些修改,我們積累了RTL設計的感性認識,為以後處理器的RTL設計提供了寶貴的經驗。
在RTL的修改過程中,最麻煩的是可測性設計。狗剩-1的可測性設計包括RAM的自測試設計、寄存器的全掃描設計、以及JTAG設計。好在計算所在這方面有很深的基礎,狗剩-1的可測性設計工作主要是網絡室的測試組完成的。我最得意的RTL修改是浮點除法的實現。在狗剩-1的FPGA設計階段,沒有實現浮點除法,處理器執行浮點除法指令時發出保留指令例外,由操作系統調用IEEE浮點模擬程序進行模擬。但我們在FPGA中運行SPEC CPU2000標準測試程序時發現,浮點除法指令雖然出現不多,但對性能影響很大。進一步的分析發現,操作系統模擬一條浮點指令平均需要3000多拍。那時候已經是三月份,而浮點除法部件的設計還是比較複雜的,重新設計浮點除法可能會延誤設計時間。但我還是下決心實現浮點除法,因為我剛好在前一階段參與定點除法和浮點乘法模塊的優化,對這兩個模塊都有一定了解,而浮點除法的尾數相除與定點除法類似,階碼處理以及例外處理與浮點乘法類似。我與張志敏老師打賭,三天之內搞不定浮點除法就繞整個北樓喊一圈“張志敏真厲害”。結果我組織定點除法和浮點乘法的設計人員兩天就把浮點除法設計完並在FPGA中跑起來。當然,這也取決於我們建立了完整的驗證環境和工具。
在這個階段,我們也把物理設計流程基本走了一遍,解決了其中一些關鍵技術問題,如信號完整性問題。
2002年春節我們好多人留下來加班。初四的時候所長和書記來看望我們,給我們帶來很多好吃的東西,使我們這班遠離家鄉的遊子覺得很溫暖。就在那天,所長明確提出我們必須在9月底之前完成流片的要求。這比起我們自己在年底完成流片的計劃提前了幾個月。從此之後,我們一直按照“後牆不倒”的要求進行進度安排,9月份就是我們的後牆。
到四月初時,我們基本確定了為我們做物理設計的第三方物理設計服務公司。並在四月底把網表交給物理設計公司。在四、五月份,我們工作的重點是對第三方做的設計進行參數提取和驗證。同時積極為自己做物理設計做準備。
在任何一個階段,仿真和驗證工作都是很重要的,我們一直在這方面投入比設計更多的力量。在4月份, 我做出了一個我自己認為在整個物理設計階段最滿意的三個決定之一,即由組織專門的隊伍進行仿真驗證工作並年輕員工許彤負責該組的工作。許彤責任心很強,而且非常細心,組織能力也強。他很快就在我們已有的環境基礎上建立起完整的驗證方法,並把仿真驗證和形式驗證結合起來。比起我自己來抓要高效得多。他們在我們交給第三方的網表sign off之前發現了一個與跨時鐘域信號傳送有關的一個危險錯誤,並在我們自己做物理設計GDSII版圖交出之前又發現一個與掃描鏈有關的危險錯誤,避免了重大損失。
我們真正拿到物理庫和設計規則是在6月份。當我們明確地知道具備自己完成物理設計的客觀條件時,組裡的空氣頓時緊張起來。由於委託第三方做物理設計的流片(我們稱為A方案)已經在6月份交出去,我們決定我們自己做物理設計的方案在7月份交出去流片,否則等到第三方做物理設計的流片回來我們自己的再交出去就沒什麼意義了。根據前一階段對信號完整性問題的摸索,我們決定我們自己同時做兩個物理設計(分別為B和C方案),它們面積不同,信號完整性的修複方法也不同。B方案是一個實驗性的流片,主要是為了取得參數和經驗,不是一個準備量產的方案,於7月份流片的截止日期前幾天就完成了。C方案是一個準備量產的正式方案,因此面積很小,比A方案小不少,布線時很難布通,花了一個多禮拜。這樣,詳細布線完成後還有不到一個禮拜就到截止日期了。馬上開始寄生參數提取、延遲分析、信號完整性分析。分析完後進行調整,包括手工調整。經過連續三天三夜的加班後,在7月3日終於完成了GDSII版圖並修復完天線和其他不符合物理設計規則的地方,通過了LVS檢查。這時候離截止日期還有兩天時間。正在這時,許彤報告說他們分析的最大延遲和我們做布線後分析出來的延遲不一樣,經檢查是由於兩邊的約束不一樣,我們對跨時鐘域的約束與實際情況不符,導致有幾個門的延遲太大。這時候,重做布線已經來不及了,於是決定手工改版圖,24小時後修改完畢,降低延遲0.6ns。這時候大家幾天沒有睡覺都很累了,離截止日期還有一天。
正當我準備把最後結果讓大家簽字時,一個巨大的挑戰突然出現。在下午5點時測試組發現整個處理器的一萬多個觸發器的掃描鏈由於掃描鏈重連時的一個失誤沒有根據要求連出來。我腦袋嗡的一下,一句話也沒說,就去了食堂吃飯,吃飯時想着在剩下的一天多時間內有沒有修復的可能以及放棄流片的後果。我實在不甘心放棄C方案的流片,雖然前面已經有A方案和B方案保底,但C方案是最完美的方案,面積最小因此成本最低、壓降和電流密度最小、抗靜電性能最好、防latch-up效應也做得最好,因此最有希望量產。延期一月流片也不行,李所長在春節來看我們時已經明確要求在9月份必須成功(意味着7月份必須交出去)。但目前已經沒有時間返工了,唯一的辦法是手工改版圖,而且時間不一定夠。在吃完飯回來的路上我很灰心,沒想到全組幾十個人幾個月的努力,花了上千萬納稅人的血汗錢竟然是這樣一個結果。我回到機房時全組都已經知道這件事,我看着他們經過連續熬夜的臉上除了眼睛外連嘴唇都沒有一絲血色,幾乎決定放棄,這樣大家今天晚上就可以回去休息了。我去跟唐志敏商量,他讓我自己定。我把負責物理設計的幾個人召集起來說了情況,沒想到負責後端版圖編輯的楊旭他們馬上就說我們可以手工再改版圖。我眼睛一熱,說晚上8點全組開會就回到自己的辦公室。半個小時後,我在機房進行了動員,我說的第一句話就是:“我們肩負的是歷史使命,因為我們要做出中國第一台不依賴于洋人CPU的計算機”。然後進行了工作部署,工作量確實很大,要手工修改網表用於對GDSII進行LVS檢查,要手工修改DEF用於參數提取和分析,當然還要手工修改GDSII。由於大家都十分疲憊,我要求任何一個修改都是一人操作,另外兩人在邊上看着。我們跟流片廠聯繫要求寬限一天,因為是周末,我們得到了多一天的期限。在接下來的兩天兩夜,我們終於把一萬多個觸發器分成十幾條掃描鏈連了出來,並且由於手工修改引起的一個單元延遲增加又手工優化了延遲。到7日凌晨3點多,完成最後交付流片的所有文件,大家簽字後陸續回去休息,我和黃老師坐在我的辦公室說,就這樣了,沒什麼可後悔了。這已經是我們連續加班的第7天。
在自己做了一遍物理設計候,回顧整個過程,覺得很象小學時候學的一篇《小馬過河》的文章。其中說小馬第一次過河但不知河水深淺,問水牛,水牛說水很淺剛到膝蓋,問松鼠,松鼠說水很深會淹死的。結果自己過的時候發現既沒有水牛說的那麼淺,也沒有松鼠說的那麼深。在整個設計過程中,我最滿意的決定有三個,一是在設計的後期果斷地把浮點除法加進去;二是把仿真驗證的隊伍從設計隊伍中獨立出來並讓許彤負責;三是在交出GDSII前發現掃描鏈問題時下決心手工進行修復並且很成功。好多人問我其中最困難的是什麼,技術上的困難很多,結構設計、可測性設計、信號完整性設計、布局布線、降低延遲等等都有很多困難。但最大的困難在於壓力太大。做處理器設計投入很多、周期很長,而且是一錘子買賣,不是100分就是0分。
在接下來的一個多月中我們一直在忐忑不安中度過。在三個物理設計都交出去流片的時候,我曾經對組裡的同學說,我覺得三個都能成,如果兩個成功也可以接受,如果只有一個成功我會覺得比較失敗,如果全部不成功那就沒有天理了。但畢竟我們是第一次流片,而對於通用處理器這樣的複雜系統,多次流片才能成功是很正常的,一次就成功的反而比較稀罕。長時間的等待使我變得有疑神疑鬼,經常自己嚇唬自己。有很多次,半夜被各種各樣的噩夢嚇醒,都是突然想起一個在設計上可能的疏忽,總也想不明白,一直想到天亮。到單位趕快從機器中翻出有關部分看看,才發現是虛驚一場。這樣的經歷至少有10次以上。有時候碰到黃老師,她的感覺居然和我一樣。在交出去流片後,我們對跨時鐘域的信號傳遞、信號完整性等一些最可能出錯的地方進行了反覆模擬,都沒有發現任何問題。
在我提心掉膽地等待的過程中,唐志敏倒是顯得十分胸有成竹,一點都不緊張,還老安慰我。
在我們做物理設計的同時,由張志敏老師負責的主板設計以及由王劍和張福新負責的系統軟件設計也基本調試完畢。由於我們芯片的兼容性,這些工作完全可以在現有的處理器上完成。在狗剩1號調通後的軟件開發過程中,我獲得了一個深刻的體會,就是系統開發比CPU設計工作量要大得多。
好不容易等到8月份,負責與廠家聯繫的陳嵐說,我們的芯片快回來了。8月初,我就成立了聯調小組,由主板設計、軟件設計、結構設計、以及物理設計的人員組成。9日中午,我吃完中午飯看到傳達室通知欄上有陳嵐的名字,回來就叫陳嵐去取。取回來果真是我要的東西。我挑了其中的三個芯片和張志敏老師一起用萬用表對芯片進行了靜態測試,主要是看看電源地有沒有短路,引腳的阻抗特徵是否正常。在9日下午三點多鐘時把這三個芯片交給許彤、范寶峽、和鄭為民他們拿到焊芯片的廠家把芯片焊接到子卡上。由於沒有把握,這些事情除了聯調組成員以及唐志敏外,對其他人都暫時保密。
六點多鐘吃完晚飯,我和張志敏老師一起往回走,走到北樓二樓時剛好碰見李所長和徐所長,李所長見我就問芯片到了沒有,我不好瞞他告訴他已經到了幾片,他說:“趕快調試,有結果馬上告訴我”。由於芯片還沒有焊回來,我和張老師等得很着急,就繞着計算所一圈圈地轉圈。到8點多的時候許彤他們終於回來了,叫許彤他們去吃飯的同時我挑出一片再用萬用表測一下。九點半,一切就緒,把帶有龍芯1號CPU的子卡插到主板上,先運行一個簡單的測試程序。我屏住呼吸按下電源鍵,主板的數碼管上瞬間就顯示出預期的“Godson-1”字樣,引起我們一陣歡呼。這時候我心裡有了點底。下面接着運行LINUX操作系統,開機後調試終端上呼呼地往上冒啟動信息。我們正高興,屏幕上卻停了下來,搞得我們好緊張。經過分析後發現是BIOS的問題,原來我們用另外一個兼容處理器調軟件但我們的處理器沒有實現四條訪存不對齊的指令而是用操作系統例外來模擬它們,在BIOS中例外入口沒有初始化之前這幾條指令執行不了。本來以為把這幾條指令去掉很容易,因為我們已經在gcc後端把它們去掉了。但由於系統軟件組準備不足,他們沒有想到這麼快就能開始聯調,因此我們折騰了一個晚上才把這個問題搞定。
8月10日早上6點8分,“godson login:”的字樣終於出現在顯示器上,我們高興得長時間的歡呼。我登錄進去,用vi寫下了文章開頭的文字。然後,我們用測試IEEE 754兼容性的測試程序運行了一遍,沒有出錯。這時候我覺得我們已經成功了,把主頻調到200多MHz也一切正常,感覺比我們原來在FPGA上的操作快多了,十分的爽。玩了近半個小時,快到7點的時候我覺得沒問題了上樓到辦公室給李老師和唐志敏打電話。撥通李老師的電話後我說:“李老師,我是胡偉武”。他問:“怎麼樣”。我說:“成了”。他說:“我馬上來”。沒等我把地點告訴他,就把電話掛了。倒是跟唐志敏說得比較多,他正在北京的一個郊縣開會,撥通後我說:“跑起來了”。他說:“什麼跑起來了”。我說:“都跑起來了”。他說:“LINUX也跑起來了”?我說:“那當然。”他小孩似的興奮,說:“太好了太好了太好了”。然後馬上就往回趕。我與唐志敏共事10多年,他既是我的師兄也是我的老師,互相非常了解,從來沒有見過他今天這樣高興得象小孩似的。
不到10分鐘,李老師來了。不出所料,他還以為我們在三樓調試,沒有找到地方,剛好張福新上樓拿東西碰上了。他說了很多鼓勵的話,但也提了很多要求,臨走時叫我們早點回去休息。可是我們一點也不困。一起出去吃了早飯回來剛好唐志敏到。他看了一會到9點了。我們那股喜悅的勁頭沒過,還是不想回去。本來昨晚說好調通後去天安門廣場看升國旗,可是現在國旗早升起來了。我就說咱們還是去天安們去向毛主席報告去。我們組平時聚會每次都唱《打靶歸來》那首歌,歌中戰士們取得好成績後通過歌聲向毛主席報告的心態於我們是非常自然的。於是我們一起打車去天安門,那天是禮拜六又是暑假,人特別多,紀念堂門前的隊伍拐了七、八個彎一直延伸到前門。我們排了一個多小時的隊終於得償心願,於是大家回去睡覺。
8月10日調通的是A方案,即委託第三方做物理設計的方案。高興了兩天之後,我們又開始擔心我們自己做物理設計的方案能不能成功,從A方案中排除了跨時鐘域信號傳輸出錯的可能性,因此主要的擔心又集中在信號完整性問題上。我讓讓趙繼業重新分析一下信號完整性,並讓鍾石強通過設計規則檢查在版圖中把凡是相鄰500微米以上的平行線都找出來進行分析,覺得問題不大。8月29日,我們終於拿到了C方案的首批芯片。打開包裝一看嚇我一跳,可能是在海關檢查時沒有包裝嚴密的緣故,芯片的引腳在運輸過程中歪得不成樣子。黃老師來看以後回去就病了。我從中挑出幾片好點的出來,把引腳掰直,經過萬用表測試後讓許彤、范寶峽、和鄭為民去焊接到子卡上去。把他們送走時我就擔心他們會在焊接的現場進行聯調(因為那裡有一台我們的調試環境),因此中間還打電話要求他們儘快回來。可是晚上8點來鍾,他們打電話回來說已經在現場把LINUX啟動起來了。我在電話裡面說要處罰他們違反工程規範擅自提前聯調的行為,但心裡很高興。後來又讓他們提高主頻到200多兆(因為我們聯調頻率是50MHz),他們說已經是200多兆了。我這半年多來一直懸着的心才真正地放了下來。他們回來後,我又讓張福新對調通的樣機進行了更多的測試,主要是浮點測試。到晚上12點左右測完,沒有發現問題。我馬上給黃老師打電話,黃老師聽到這個消息後,第二天病就好了。然後,我給全組發了個郵件告知我們自己做物理設計的流片成功的消息。
發完郵件後,我靠在辦公室的沙發上,覺得出奇的累,但又睡不着覺就在那裡瞎想。我想起一些網友去年對我們“只要能做出來,再貴也要買”的鼓勵,想起在我們向院黨組匯報龍芯的工作出來後江院長追出來跟李老師說:“李院士,我就把這個寶壓在你身上了”;想起在年初的全所大會上李老師把龍芯1號的設計列為今年全所的第一件大事;想起我們花了上千萬納稅人的錢終於沒有浪費。我想起在過去的半年多中我們在不可承受的壓力下在機房度過的無數個不眠之夜;想起女兒每每要求我下班後跟她一起坐班車回家而我一次也沒能滿足她;想起我們在最後交出流片的前兩天所面臨的巨大挑戰;想起最後連續加班六天六夜的每一個細節,每一個累得毫無血色卻執着不改的面孔,在我的有生之年,永遠都不會忘記。那一刻,我淚水滿眶。
第二天早上,我們終於如願到天安門廣場看到了升國旗。
接下來來是應用的開發以及大量的測試,包括可靠性測試(如高低溫測試、電壓拉偏測試)、功耗測試以及性能測試等。我們每次使用或測試龍芯樣機時,就象自己的孩子一樣。對他取得的一點點成績而高興。我們8月10日調通的第一台樣機,已經連續運行40多天,沒有出現過任何異常。我有時也詫異於他的穩定,象X Window這樣的 大型程序,光源代碼就500MB以上,居然一點也沒有找出狗剩的錯。後來我想明白了一個道理,我只要把一拍做對了,那麼任何多拍也就對了。
CPU真正的成功不是在測試台上,而是在市場。對於潛在用戶提出的應用要求我們是積極配合的。在龍芯1號聯調成功的短短幾十天內,我們已經配合有關單位或公司在狗剩上移植了大量應用軟件,包括網絡防火牆、指紋識別系統、VOD播放、NC等等。
在測試和使用過程中,我們也發現了很值得我們以後吸取的教訓,一是CACHE太小(指令CACHE和數據CACHE都是8KB,二路組相連),CACHE訪問策略也過於保守,導致對於一些大型應用難以發揮他的運算性能。尤其是對於象SPEC CPU2000的ref規模的程序,在200MHz時,狗剩取得的最好值是56,最差值才11。對於SPEC CPU2000的train的規模,狗剩的成績就好得多。二是編譯優化不夠,我們沒有對gcc編譯器專門針對狗剩1號的後端進行優化,而實際的機器廠家都有針對自己處理器的編譯器。三是有4條訪存不對齊的指令沒有硬件實現,而是通過操作系統模擬來執行,這樣做除了對部分程序的性能有影響外,對於象VxWorks這樣只有目標碼的程序確實讓我們花費了一翻心血。以上幾點,是狗剩1號設計的教訓,但教訓比經驗更可貴。
9月20日,是我的母校中國科技大學44歲生日,那天我們通過了測試組的測試。22日通過了由中國科學院組織的鑑定委員會的鑑定。9月28日,中國科學院舉行了龍芯1號的發布會。當有關領導在媒體的光芒以及滿場的掌聲中把我們的龍芯1號展示出來時,我在台下想起過去一年多的經歷,又一次禁不住熱淚盈眶。那天我的恩師夏培肅院士專門來看我,並和我合影,我給她做了專門的演示,她很高興我們做出CPU來。由於夏老師的愛人楊院士住院,我才一個多月不見她,發現這次夏老師消瘦了很多,白髮也多了很多,我心裡十分難受。我們CPU組大多數都是夏老師的徒子徒孫,秉承她的“先做人再做做學問”的思想,用她教給我們的方法和精神做學問。今年是夏老師從事計算機事業50周年,我把龍芯1號的設計獻給她。在龍芯1號的物理版圖中,每一層金屬上都有“夏50”的字樣。50年前,在華羅庚先生的倡議下,夏老師和另外兩位同志組成了中國第一個計算機研究小組。看看計算所的歷史,比起前輩們轟轟烈烈的艱苦創業,我們的條件要好得多,工作卻渺小得多。
龍芯1號的流片成功,離不開計算所的環境。我覺得我的運氣比較好,遇上了很多好人。客觀地說,如果沒有我,李老師和唐志敏找別人做也能做出來,但我離開計算所就很難做出來。我可能是一個比較不好合作的人,尤其是最討厭開會,心裡想什麼就想馬上去做。但所領導和室領導都很寬容。在龍芯1號的設計過程中,我做了好多越權的事情,最過分的一次,為了搭建比較獨立的一個EDA設計機房,在24小時之內把機房裡原來的工位全部拆掉,買了幾十台微機以及終端桌搭建了一個比較獨立的EDA設計機房。因為是在禮拜天干的,事先沒有任何請示就做了,後來也就是挨一下說。現在所里做的戰略規劃,我是很贊同的。比如說其中有一條是關於計算所要成為“龍頭、源頭、領頭雁”。有一次一個地方政府要和我們一起在集成電路方面合作,對方希望以合作辦公司的方式進行合作。李老師說,如果辦公司,即使產值一個億,也就是在你幾百億的基礎上增加一個億,計算所要做的是源頭技術,計算所可以一分錢都不賺,但計算所的技術能帶動幾百億的產值,這幾百億少不了計算所的源頭技術,這才是計算所要做的事。我當時在場,聽了以後覺得就是一個字:高。因此,我自己覺得計算所戰略規劃中的幾十條,我理解這三分之一條就夠了,並要努力實踐它。
計算所高效的後勤服務也使我們得益非淺。有一次,由於我們辦公場地比較緊張,臨時找了一個地方調試主板,結果很不方便,經常把主板燒壞。需要一個比較獨立的房間有良好的接地來調試。萬般無奈我去找書記說借一間房子用幾個月,結果我回來後不到半小時,王凡就打電話來說,一樓一間原來放檔案的房間(就是後來我們聯調的那間105房間)已經騰出來了,叫我去看看。我和張志敏老師去看時,已經開始打掃了。第二天,我們要求的沿牆一圈的地線已經接上。另外一件事情是我們的EDA機房由於負載較大,夏天電壓不是很穩定,我給王凡發了EMAIL說明情況,第二天,電工師傅就來給我們拉了一條10000瓦的專線。那天天很熱,機房裡放服務器的屋子沒有空調,我們所的電工師傅都是老計算所的,上了年紀了。看着他們在那裡揮汗如雨,我和我們組負責管理機房的鄭保建都很過意不去。計算所如此的辦事效率,能不出活嗎?
在2002年5月份的時候,我們在設計龍芯1號的同時就開始了龍芯2號的設計。先是安虹老師領着幾個人做些大方案的設計。在7月我們交出去流片的同時,我也加入到龍芯2號的設計中來。現在龍芯2號的結構設計已經基本結束。龍芯2號將是一個全64位設計,4發射超流水,最多同時有70多條指令在不同的流水階段進行。在轉移猜測、CACHE容量和結構、寄存器器重命名等方面都比龍芯1號有很大改進。同時給編譯器提供了很多支持。龍芯2號是在我們仔細研究了Alpha 21264、Ultra Sparc III、Power 4、HP 8700、P4、IA64等主流處理器結構後設計出來的。我自己認為,就單處理器結構來說,已經到位了。龍芯2號將有由低端到高端的多個流片。龍芯2號的較後版本應支持片內多線程並支持類似於SMP的並行處理,即在一塊主板上做多個處理器(需要CACHE一致性的支持,這是唐志敏和我原來的本行),再把這些處理器做在片內形成龍芯3號的片內多處理器。因此,龍芯2號將是一個結構較為穩定並不斷增強的系列,而不僅僅是單個芯片。主頻也將不斷提高。
在9月28日的發布會上,一位搜狐的記者跟我說,有些人把我們當作民族英雄,這個我是大大地不敢當的。今年正是上甘嶺戰役50周年,前幾天看了一些有關的資料,那些志願軍們才是真正的民族英雄,比起他們所創造的奇蹟,我們真是太渺小了。因此,如果夠格,我希望能以此文,獻給50年前參加上甘嶺戰役的所有志願軍戰士。
在龍芯1號的調試和應用移植過程中,我們有一個深刻的體會,那就是系統開發比CPU設計工作量要大得多,這決不是幾十個人可以搞定的。因此,我們需要很多人無私的幫助。狗剩還是個孩子,需要我們一起來撫養他,好讓他報效我們五千年來生生不息的祖國,為中華民族的偉大復興做貢獻。真誠地希望有志於我們自己信息產業核心技術突破的人,不管你身在何方,伸出你無私的手,一起來設計我們自己的CPU的未來。如果願意與我們一起把狗剩養大,對系統(如LINUX、編譯器)以及系統級應用(如流媒體)感興趣的人,請發EMAIL給jw@ict.ac.cn,對處理器物理設計有經驗的人,請發EMAIL給jasonzjy@ict.ac.cn(物理設計方面)。我們將提供一個基於龍芯處理器的機群,供大家遠程登錄來使用;並在我們能力之內,建立一定的激勵機制。如果對狗剩的未來發展有任何建議,請直接告訴我(EMAIL: hww@ict.ac.cn)。我堅信,只要我們中華兒女眾志成城,中國的信息產業總有龍騰於世界之日!