2013年5月9日 星期四

十年一覺ESL夢

  很多事不寫下來就隨時間洪流消失了。我是憑記憶寫的,有錯誤的話麻煩巴菲特與AAA,Water與所有尖叫實驗室成員更正我一下。


ESL從今日看來已經是老掉牙,要變成書裡的東東了,一旦變成教材,我對他的興趣就開始缺缺了。最早1998-1999時,但是實際上的起點可能更早,老外開始思考要用C++之類的高階語言來模擬硬體,因為傳統模擬工具太慢,而軟體開發卻老是要等硬體做出來,沒辦法平行做讓整體開發延宕,老外是從系統層面開始,既要顧到硬體系統,模擬速度又要快到可以讓軟體先上再說。他們很會取名字,引領風潮, ESL就這樣出現在世人面前。那時這東西算是大公司,要不然就是大學校在玩的,Synopsys當時除了支持自己的System Verilog外,據說也弄一點C++的東西,後來的SystemC也算,昨日的CoWare今日變成Synopsys的一部分了。假如我的記憶正確,約2001前後,ST這家半導體大廠用這個系統層設計概念所倒出的設計流程成功產出H.263(or H.263+)的HW video codec,而且一次就work。那時台灣大概沒人知道ESL是甚麼碗糕。而據本系的林英超老師說,那時IBM內部也在弄ESL,只是他們不叫做 ESL,API也是IBM內部自己定的,不公開。林老師知道這件事是因為他在IBM上班時有用過這些工具。所以到底IBM裡要是有東西是用系統層開發出了來的也就不足為奇了。


SCREAM Lab是我到成大之後好一陣子後才取的名字,一剛開始叫什麼我忘了(巴菲特提醒我說是CMS Lab,CMS是哪三個字我也忘了。)。當時我到成大來,竟然第一次在成大任職時申請國科會計畫就沒有過,連我在成大第一屆收的碩士班學升學生的電腦與桌椅都是我去幫新竹科學園區一家公司寫了一些 code與回中華大學資訊系借才算弄齊。其他就什麼都沒有,要想做其他什麼的也不可能,只好依附在當時郭老大下面的華新麗華產學計畫下面,那時我被指派的工作就是做一顆HW MPEG4 Simple Profile的video decoder。以前在中華沒膽子做這麼大的設計,所以做沒多久,我就知道要用Verilog硬刻出來不算難,但是驗證根本沒辦法做完全,我對做一顆只能正確動一半的東西沒興趣。所以我那時想個方法,把DCT/MC之類比較Regular的電路先用C來做,建立驗證資料後,再用Verilog來實做,bitstream decode與系統控制暫時先交給C來做。可想而知,整個系統是必須要混合不同程式與模擬工具來做的。這算是接近ESL的第一步,如巴菲特說的,井底之蛙的我們那時是不知道這樣做該叫什麼名稱,只知道這樣做有助於設計與驗證。


再過一陣子,我發現這樣做模擬起來還是實在太慢了,所以計畫把FPGA弄進來,計畫讓設計好的電路跑在FPGA裡面,其他的還是維持在C裡面。也因此,我們自己從PCI的FPGA介面卡開始弄起,我記得那時跟幾位學長用邏輯分析儀硬是去量PC裡的PCI的動作timning,如今想來真是土法煉鋼兼膽大妄為,沒燒掉電腦真是學長們手腳俐落,一直到狠後來才敢用人家做的USB介面的 FPGA板用來取代最早的PCI版本,最早我們自己修改過的那片14萬台幣買的FPGA卡被那時還是大學部學生的玉琳跟小K做實驗時不小心把可樂倒上去給毀了。就這樣子,我們發現我們終於可以把電路做完,而且一下子就可以把整個video Sequence跑完。我記得當時原瑞學長有一個Sequence跑到700多張時才掛掉了,可是不到兩天bug就只找到且修好了。假如我沒記錯的話,後來應該是忠和學長做出一版很reliable的純HW codec(不必用up解bitstream),而且gate count很低,速度又快。同時,sequence可以從PC端不斷傳過去,解壓再傳回來播在PC的Monitor上。


從那時起,我們的demo就一向是可以一run就是一整天都不會當。套一句巴菲特的話,demo一定要炫,以當時來說,學校能做到這樣算少的了,尤其是我們沒有專人真的投入在codec本身的設計上,因為這codec只是眾多demo cases之一。同時,我們也有許多自己用來協助模擬的API可以用。那時毛寶也幫了不少忙,而且後來還是毛寶把Eclipse工具打通,這工具事實上也是許多軟體的骨架,包含CoWare以及我們的OpenESL在內。


後來,我們的野心變大了,Demo case一次就往H.264 HW Encoder邁進,那時由巴菲特領軍(但他不負責寫code,只負責工具開發與架構設計),Water跟另兩位電機系陳中和老師的學生一起弄,半年多的時間內,我們把多數的硬體都搬到FPGA了,demo還是維持跟過去一樣一下子就跑完一個sequence與超過24Hr不當機的方式。這也就是為何巴菲特的博士論文可以把H.264裡面的ME做這麼完整分析的原因,他的論文裡面跑過的各式各樣的ME與硬體架構的種類多到我都忘了有幾種組合了,可以說是文獻上可以看到最完整的系統分析報告,重要的是,QCIF一秒鐘可以正確encode好幾張。


應該是2005或2006,有一天AAA跟我說,SystemC正式標準化了,建議我們該把以前做破銅爛鐵收一收倒進垃圾桶,全面改到SystemC上面,這件事我們還討論好一陣子才決定,想起來我就心疼啊。老實說,我們聽過ESL,但是對 ESL該是什麼還不完全清楚,也就是說,我們已經在實施ESL設計流程而不自知,請原諒我那時太忙,忙到沒時間去查論文,還以為我們是全世界第一個這樣子亂搞的。我記得有一天開會時,AAA開示說,不是用C就叫ESL,所謂的ESL是由設計的思維來決定的。大哉言,那時,尖叫實驗室終於決定轉向支持 SystemC. 之後不久,我們讀了不少論文,終於知道ESL是甚麼碗糕了,也就舉起ESL的大纛揮舞起來。想來可笑,都這樣做了四年多才知道自己在做的方式叫什麼,老外真會取名字。也佩服老外能比我們早那麼多年開始想到(ㄟ!其實也才早沒幾年啦!)。


事實上,從某個時候開始,我漸漸不再對做應用電路感到興趣,做H.264只是為了經費,能動就好,其他時間就做工具,架平台吧! 這一點AAA就很不以為然,因為 AAA一直勸我應用才是王道,現在聽來真是真理,當時要是專心做codec,雖然不敢說會比那時中正大學郭教授做得好,但是起碼也不會輸太多。不過我意已決,能可做我覺得有趣的事再說。短短時間內,不到2008年底,我們可以把SystemC,C++, Java, Matlab Simulink, FPGA,ModelSim與忘了還有其他什麼各式各樣的工具各跑在幾台電腦共同完成一個HW設計的模擬,想來還真是瘋狂。

之後玉琳學姊甚至做了一個Codegen工具,把你要看的任意一個register資料包起來傳給一支SystemC Module,真正把所謂元件式軟體開發模式(Component Based Software Development CBSD),完全搬到數位硬體設計上來。而這個電路可以上 FPGA,跟一堆其他不同工具所實做的元件連起來一起跑模擬,因為她的 Codegen太好用了,整個的動作是半自動化的,組起一個這樣子的全系統模擬模型(Full System Simulator)花不到一個小時,要是你改了什麼模組,重新再來一次,假如你Script也寫好,幾分鐘就可以再來一次。玉琳的碩士論文的口試委員之一是台大吳安宇教授,他看了後大為讚賞,然後把玉琳學姊”借到”工研院去,一借兩年。玉琳學姊到工研院去,成功把OpenMax與工研院自己開發的 DSP連起來動作,一部份算是歸功於之前的ESL研究經驗。

後來甚至宗胤學長又把QEMU打通後跟之前所有的工具連起來一起運作,然後OpenESL的雛形也在宗胤的努力下成形。那個年代,我們為了對付這麼多異質工具的連結問題,在DNA學長與宗胤學長的協助下,用Python做了一堆codegen工具,舉例來說,連Wishbone元件都可以填填表就把Module產生出來。最後是DNA, 宗胤與敬倫把OpenESL真的架起來,而且把SystemC Kernel也平行化了。


靠這一大堆工具,巴菲特給這種設計方式取了個名字,叫做Progressive System Design Flow,也就是一開始的元件實做在很高階,沒有timning的環境,如Matlab,然後一步步,一個個改成SystemC Model,之後進ModelSim或乾脆直上 FPGA跟其他為完成的一起模擬,等到所有元件依次上了FPGA,數位設計就算完成了。過程中,在系統層的設計進階過程(ESL Design Flow)裡,前一個階段的模擬資料,例如小至一個Register的值,設計者不必改一行Verilog code就可以輕易被log下來,除了除錯用途之外還可以當作進一步的測試資料,等設計更接近後段時,模擬產生的資料就可以跟前一階段(或Level)被 log下來的資料相比,假如完全符合,代表至少新的設計與前一階段在這些部分的比對是相符的,如此Progressive下去,層層驗證,嚴密,一個個元件分別被搬上FPGA,而且跑的都是完整的測資,以video來說,就是300frames or 1200 frames的編碼過程的系統裡每一個暫存器的值都可以驗證到,最後電路全上了FPGA之後,跑個幾天都沒問題喔!也就是到了這個階段,FPGA被當成是Full Function Simulator來用了。套一句育典學長說的,FPGA這麼快,誰還要跑HDL Simulator!所以好長一段時間,除非真的遇到難題,實驗室裡是沒有人會願意用HDL Simulator的。

這樣子做有什麼好處呢?我舉一件巴菲特與很多人都聽到臭掉的往事,應該是2006年,我跟巴菲特應邀去大陸上海與西安交大,有一天晚上,Water在台灣實驗室用MSN跟我們說(奇怪,那時大陸可以用MSN?),H.264電路有一點問題,而那部分是巴菲特做的,她當時"直覺"是學長錯了,我們隔海在MSN上討論了一下,請Water加一點電路, Log某幾個值出來比對。然後我就去洗澡了,等巴菲特也洗完澡時, Water很不好意思的說她Bug找到了,不是巴菲特的錯,那時大約是晚上10點了,我們隔天還有演講,所以決定就先去睡覺再說。也不知道Water是熬夜改bug,還是隔天才改的,第二天下午,我們就收到 Water的好消息了。


回顧從2005年起,我開始在有些公司給talks,宣傳 ESL以及我們獨特的progressive設計方式的好處,聽過的表面都說讚,但是雨都沒真的下下來過,M公司的人說公司不給人力,F公司臨到頭打退堂鼓,H公司的主管抗拒上司想要嚐試的念頭,就這樣孤孤單單的過了幾年,但是奇怪的是也每年被找去演講,真不知道這些人想幹什麼。等了好久,直到2011年華為與海思不曉得從哪裡聽到尖叫實驗室的名字而給了個案子,案子都快簽約了才知道這是大陸公司,當時我真是灰心,氣餒與沮喪都有之。事實上,2010年以前,包含台交清中山中正也開始做ESL了,業界就A公司最積極在推,而到2010/2011後, 慢慢的ESL 已經到處都是,不希罕了。我自己在想,也該是到一段落的時候了。雖然SystemC Kernel平行還可以做,但是我想除非有一大筆經費給敬倫,還是Move On到其他議題吧!畢竟世界上有趣的事還很多。偏偏我又是個這麼愛三心二意的人。


多年來,我只是好奇,為什麼我這麼努力還是沒能讓台灣業界早一點用這個方式設計呢?威佐說我三心二意,這點我承認,因為這期間實驗室老實說做了許多跟電路與系統設計無關的其他研究。但是在ESL方面,我們可是有十年以上的時間都沒斷過。然後國內學界的SLD聯盟與AP聯盟在編ESL教材了。我還是必須慚愧的跟威佐說,要我改掉三心二意毛病大概要等我再老一點,身體再差一點。努力想有趣的研究議題已經變成我生命的一部分。至於現階段我還能做什麼,我已經開始考慮人生的極限了,會更Focus了,期待到想不動那天,還能完成什麼有意義的東西。至於以後對業界再能有甚麼貢獻的機會,我想不到了,花了十年努力,真的夠對得起這個國家了。


在此,我必須感謝巴菲特,沒有他,很多事都不可能。我也必須感謝AAA,AAA幾年來幫實驗室賺了不少經費,也在ESL上面引領我們走上對的路,在他的西雅圖華大之旅,著實給他們見識到什麼就做功力,我記得華大孫明廷教授(Prof. M.T. Sun)還跟我道謝,他說AAA一個人抵過大陸到華大念博班的三個學生加起來,我真是與有榮焉。也因為AAA,多核心平台有了起頭(BBB從Cell-BE/PS3開始玩起),哲榮學長把Multi-ARM給boot起來,不僅可以跑SPCP,連測MPI用的Netpipe都可以把速度ㄍ一ㄥ到業界水準,這兩年on-chip記憶體管理的研究正方興未艾,眼看我們要開始收割了。而最近,我們順利把OpenRISC 在FPGA架起來,Embedded的Tegra跟PC的 X86都可以跟FPGA上的好幾顆OpenRISC跑起來共同完成一個Computing job,不久,敬倫跟幾個夥伴要把OpenCL跟OpenRISC連起來了,而且連敬群學長(jserv)都願意進來幫忙。新的時代要開始了,但是同一個時間我所想到的是,江山代有才人出,套句歐陽修的話,我該避避鋒頭了。


講到這裡,已經不知所云,我想我要說的也許不是我們花了多少精神在ESL上面,回憶了這麼多事,我的心充滿溫暖與感謝。碰巧,前兩天有位老師問我,我是怎麼看待我自己的學術生涯(career),當時我不假思索的回答,學生(包含已畢業的)才是我的career。想來當然不會是 ESL,甚至連正夯的音樂研究與癲癇/ADHD等等都不能算是。

我笑看自己,原來,這才是我打了快5000個字所真正要說的。原諒我,你們知道的,我就是這麼囉嗦的一個人。

沒有留言: