阿里雲資深專家隱達分享了他十餘年工做經歷中的一段奇葩歷程。文章詼諧幽默,用玄幻小說的寫法分享技術問題,很是值得你們一讀。面試
2000年的時候,作設計基本都是使用Xilinx公司的Virtex和Virtex-E系列芯片。那時候Altera技術實力還比較弱,基於Altera的芯片作設計是要被你們diss的。某天晚上大概十點多了吧,我正如癡如醉的沉浸在編碼的快感當中。主管悄無聲息的站到了我身後,我從顯示器中看到了隱約的影子,轉頭一看果真是他老人家。app
主管神色凝重,眉頭緊蹙。我在腦子裏迅速回顧了一下本身最近的所做所爲,確信沒幹什麼罪大惡極、自絕於人民的壞事兒,用顫抖的語氣當心翼翼的問:老大,您找我?老大的神色迅速地轉換,分明在說:蠢貨,你又不是什麼萌妹子,要是沒事兒你覺得我老人家願意屈尊站到你這兒麼?after一個藍衣女子般的風情萬種的白眼以後,老大終於開腔了。工具
「咱們學理科的都不信鬼神對吧?」大哥,你這是什麼開場白?!我那會兒不過才工做兩年多,純潔的像一張黑不溜秋的白紙,根本識別不了您這是準備給我刨什麼坑好吧,爲啥你要給我出這樣的難題?老大露出了一些不耐煩:「幾個月以前到如今,有一批單板邪門兒了,有的工做正常,有的就不斷的出亂碼。通過你們夜以繼日沒白沒黑嘔心瀝血玩兒命的加班定位以後,你們一致認爲問題出在這塊單板上的FPGA上」。早說嘛,FPGA我熟啊。「老大,問題既然都定位了,那就解決嘛」。老大露出了詫異的神情:我X,你這貨是怎麼混進我司的?回頭老子要找當初面試你的人算帳!老大深吸了一口氣,帶着「老子再忍你十秒鐘的神情」繼續說:「這個FPGA一共9000多接近一萬行代碼,最關鍵的是,設計這個FPGA的同事三週前就離職了。如今雖然肯定了問題出在這個FPGA,可是到底是什麼問題還不知道。因此呢,你們商量了一下,決定暫時把你抽調出來,全力投入這個事情。一呢,要搞清楚究竟是什麼問題,二呢,把問題完全解決掉」。學習
要不怎麼說當年的我就是純潔啊,要是放到如今,這確定是一個絕佳的跟老大討價還價、多給本身爭取個仨瓜倆棗的好機會啊。彼時單純(其實就是弱智)的我卻以爲天大的展現本身身手的時刻終於到來了,因而欣然接受。老大神情輕鬆了一些,但還帶着少量疑惑:這貨不知道行不行,希望不要把老子也坑了。而後溜溜達達的走了。測試
我一晚上無眠,當心髒一直在忽冬忽冬滴亂跳。次日我一頭扎進了封閉的實驗室。實驗室裏堆了好多單板,好的一堆,壞的一堆,而後各類儀器和電腦。整整一週,我都在實驗室裏瞎折騰,除了一遍又一遍的證明了問題現象確實如老大所描述的,而後就是看那9000多行的HDL代碼。寫代碼的同事不知道是故意的仍是習慣如此:註釋少的可憐、設計文檔和實際代碼差別極大(文檔在說水果裏面桃子最好吃,代碼寫的是大飛機C919很威武)、變量的命名也毫無規律,後綴_addr的變量竟然是數據總線,然後綴_data的變量纔是地址總線。我心說:「哥啊,地球人都知道花花轎子人擡人。你我素昧生平、素不相識、萍水那個從未相逢,可爲神馬你就知道我要被派來收拾你的爛攤子,這麼多花樣來收拾我涅?」阿里雲
一週毫無進展,我很沮喪。渾渾噩噩的過了週末(其實也就是週日一天),週一繼續鑽進實驗室。開放辦公區裏鶯歌燕語,其樂融融,就我一我的傻兮兮的在實驗室裏古佛青燈兼顧影自憐,至關稱得上悽悽慘慘慼戚。中間老大時不時的過來關心我一下,其實就是監工外加檢查進度。但是沒進度可言:我根本不知道問題出在哪裏,這麼短的時間把小一萬行HDL代碼都看明白也不可能。若是我能的話,那我應該去作老大的老大了(那會兒你們都崇拜技術牛人,廣泛以爲誰技術牛誰就應該作老大)。編碼
一轉眼就到週五下午了,我在實驗室裏垂頭喪氣。雙手捂着臉,開始埋怨本身爲何接任務的時候纔出現智商餘額不足的fatal error。大顯身手是完全的forget about it了,弄很差倒可能所以把本身給葬送了。繼而開始埋怨主管:我一直是順民,挺聽話也挺出活,你爲啥要給我刨這麼大的一個坑涅?百撕不得騎姐啊。一頭霧水兼百無聊賴,我拿起一塊單板,盯着那片FPGA。嗯,這裏寫着Malaysia,沒想到Xilinx在大馬還有工廠。換一塊單板,嗯,仍是Malaysia。這不是廢話麼,買一批至少也是幾千片,固然都是Malaysia。正要仰天長嘆「天亡我也,非我不能也」,突然瞥見另外一塊單板的FPGA上印的彷佛不是Malaysia,拿起一看,果真印的是Taiwan。終於找到一點有意思的事情作了,因而再拿一塊,嗯,Taiwan,再拿一塊,嗯大馬。拿着拿着,突然發現一個規律:從那堆壞板子裏拿的都是印着Malaysia;從那堆好板子裏拿的都是印着Taiwan。spa
工程師都知道,尋找好板和壞板之間的「差別」是定位問題的利器之一啊。所以當時雖然沒有欣喜若狂,可是也隱隱看到了一絲曙光。設計
我衝出實驗室,一溜小跑去了焊板實驗室。找到了焊板的同事,讓他現場給我焊兩塊單板,一塊必須用產自大馬的FPGA,一塊必須用產自臺灣的FPGA。那個老兄很奇怪的看了我一眼,而後又一眼。後來我纔想明白估計我是第一個在意芯片產地的怪咖。生命週期
我就站在他旁邊,看着他工做,以爲時間過得奇慢無比。拿到了焊好的兩塊板子,又以百米衝刺的速度殺回實驗室,隱隱約約聽到有同事在抱怨:發哪門子神經,刮這麼大的風。我以迅雷不及掩耳盜鈴之勢,先把臺灣板子安裝好,上電啓動、加載、運行,果真是好的;拆掉臺灣,換上大馬板子,上電啓動、加載、運行,果真出誤碼了。問題確診了!爲了保險起見,我從壞板和好板堆裏各取了兩塊單板進行了驗證,現象是一致的。
此時距離下班也就十幾分鍾了,我趕忙去了老大的工位,強壓着雞凍滴當心情,向老大彙報:「老大,告訴生產那邊,發貨只能用產自臺灣的芯片,馬來西亞的堅定不能用。我懷疑產自馬來西亞的芯片的容差小,產自臺灣的芯片的容差比較大。而設計自己確定存在時序打擦邊球的狀況,致使使用產自馬來西亞芯片的單板會出誤碼,而使用產自臺灣的芯片則沒有問題。究竟是哪裏的時序存在擦邊球的隱患,我還須要進一步熟悉代碼,尋找之而修改之而長治久安也」。老大可貴的露出了笑容:「嗯,不錯不錯!這兩週辛苦了,回去好好休息,下週全力解決問題。啊,對了,你該刮鬍子了。」
週末跟老婆(那時候仍是女友)去搓了一頓大餐,逛街,看電影,累得半死,可是心情那是至關的愉快。
我從實驗室回到了工位,在感覺人間煙火氣的同時,全力看代碼。認真的看了一成天以後,我發現前同事對於「同步」、「組合邏輯嵌套層次不能過多」等設計原則徹底不care,隱患處處都是,要想完全的解決這些隱患,只有一個辦法:推倒重來。我去找老大說明了想法,老大說:「要不要這麼誇張?勞資派你去解決問題,你解決問題就是了,搞這麼大工程出來,有必要麼?」我說:「老大,我以一個工程師滴半生清譽擔保:若是不推倒重來,問題根本不能完全解決。」老大無奈的揮了揮手,說話的同時目露兇光兼咬牙切齒:「是否推倒你來定。但素,市場那邊給出的預測是最多三個月內,這塊單板就會迎來發貨高峯,到那時不管如何也要保證FPGA不出任何問題。你有信心滴乾活?」「餓夫考斯啊老大,沒有金剛鑽,不攬瓷器活啊」,我心說:「你要是答應給我加五百塊工資,沒準兒我敢承諾一半的時間就給你搞出來」。
結果不到三個月,個人全 套重寫的代碼就完成了,編譯、加載、測試:不管是產自臺灣的芯片仍是馬來西亞的芯片,徹底沒問題。老大不放心,特意多找了幾塊焊着馬來西亞芯片的板子一遍又一遍的測試,結果仍然是no problem at all。
老大笑靨如花(港版那個),眼睛眯成了一條縫兒:「小樣兒,行啊!」我只顧嘿嘿傻笑,結果忘了趁熱打鐵跟老大提加薪。曾經有一個機會擺在我面前,我沒有珍惜。若是有重來一次的機會,我特麼會加一個十萬光年的期限。
過了沒多久,Xilinx公司也發來了報告:因爲馬來工廠的某個車間頂部一個窗戶沒關嚴,致使車間純淨度不夠,因此那段時間生產的芯片儘管各項指標都在合格範圍內,可是都在邊緣,從而容差能力都比較低。公司已經發現並作了相應處理,以後生產的芯片從一致性方面跟臺灣產的芯片沒有區別了。
Well,這就是我從業生涯中碰到的「芯片也要看出身」的「靈異」事件。給個人印象是如此之深,18年後我仍然記得清清楚楚。問題解決是在2000年的9月份,第二年,我慘遭表揚,得到了某公司的最高榮譽:XXXX獎。
後記:
1. 真實問題定位的過程很痛苦,也比文中描述的要複雜,由於那批單板使用的FPGA芯片還有另一個產地:韓國。在定位問題的過程當中,臺灣和韓國的芯片加載原同事的設計都沒有問題,馬來產的就不行。因而比對、比對、再比對,最終肯定了問題出在馬來產的芯片上。
2. 我重寫後的設計徹底不區分芯片的產地。採用原同事設計、已經發貨的那批單板,使用產自臺灣、韓國的芯片而暫時沒出問題的,總量大概幾千塊吧,這些單板在條件發生變化時(好比溫度變化、電壓變化),出誤碼是必然的。好在那時候運營商對國產廠家都比較寬容,用服的同事找了各類機會,神不知鬼不覺的對這些單板上的FPGA從新加載了新版本,完全消除了隱患。
3. 9000多行代碼,我用了大概70個工做日進行了重寫,計算開發效率,大約是130行/人天。實際上,我作過我的職業生涯的不徹底統計:使用HDL開發FPGA,從全流程的角度來計算(從需求分析到最終發佈),效率不會超過20行/人天,跟軟件開發效率大體相似。固然,隨着新的設計語言以及工具等方面的進步,開發效率會逐步提高是毫無疑問的。
4. 文檔真的很重要、很重要、很重要。不少人會說:整個設計(模塊)我閉着眼睛都能知道哪行代碼是幹嗎的,文檔意義不大。但素,人的記憶是會衰退的。若是設計完美無缺、沒有任何問題,在整個生命週期裏沒有任何升級或者功能變更,那麼文檔也許沒那麼重要。但素,你們想想,對於FPGA來講,上述條件所有知足的機率是否是和行星撞地球差很少?我幾乎重寫了整個設計文檔,基本能保證文檔描述的是西施,而設計至少是鳳姐。
(完)
隱達,阿里雲資深專家,花名的意思就是作人隱,作事達。業餘時間喜歡看美劇和讀書,尤爲是歷史書;還喜歡喝點小酒侃大山,喝酒只喝啤酒和威士忌;酒量比較差,可是酒品還過得去。我在某通訊公司工做了18年,其中十年的大規模FPGA/ASIC開發和系統設計,剛剛加入阿里雲,負責FPGA/ASIC異構計算,So happy to be Ali Ren,很榮欣能在雲棲社區和你們一塊兒交流,學習!
本文做者:隱達
本文爲雲棲社區原創內容,未經容許不得轉載