[FPGA博客大賽]ARM Soc芯片驗證手記 --基于Xilinx Virtex-51. 引子 近些年,隨著工藝的進步以及技術的發(fā)展,F(xiàn)PGA在越來越多的領域發(fā)揮這非常重要的作用。本篇博客,我主要描述的是在ARM Soc芯片的軟硬件協(xié)同驗證中,F(xiàn)PGA的所扮演的角色。本篇博客以作者親身經(jīng)歷的ARM Soc項目為背景來進行介紹,通過全面介紹ARM Soc軟硬協(xié)同驗證的全部過程,對比vcs仿真環(huán)境與FPGA環(huán)境的不同特點作用以及各種的利弊,來和大家分享一些我的經(jīng)驗和教訓,已經(jīng)和大家進一步探討 如何提高芯片驗證的效率和質量。為了避免泄密所導致的法律糾紛,這里隱去了公司名稱以及項目名稱。QingYangOS為作者于07年公布的一款嵌入式內(nèi) 核。后來在芯片驗證中,發(fā)揮了非常重要的作用,這里介紹這款內(nèi)核,主要是為了說明軟硬件協(xié)同驗證的方法和過程。
2. 項目整體介紹
公司準備上馬一款高性能的解碼視頻引擎,采用當前流行的ARM體系結構,使用ARM926-ejs內(nèi)核。經(jīng)過前期的系統(tǒng)評價,架構設計,以及必要的IP 購買,再加上公司自有的一些IP,已經(jīng)基本具備ARM Soc芯片開發(fā)所需要的條件,再加上臺灣某著名的后端公司和流片公司的支持,芯片很快進入了實際的開發(fā)階段。在芯片中,采用了支持Full HD的H.264解碼IP,以及高性能的2D引擎IP,Sprite描畫引擎IP,以及支持LVDS的Display引擎,DDR2 SDRAM等。當然,芯片中還有很多其他的IP,但是,由于與我們的驗證話題無關,這里不再詳細介紹。其中,一部分IP需要我們自己開發(fā),而購買的IP則 需要進行各種驗證。各個IP的單元驗證,不是我們討論的主要內(nèi)容。由于IP很多,不可能在單元驗證中,就使用FPGA來進行,只能通過仿真環(huán)境,通過各種 Test Bench來完成。FPGA的驗證方法,主要用于芯片的整體驗證,而這種方法,最終證明是非常正確的。
做過芯片的朋友,都會有這個體會,那就是永遠與時間為敵。首先要考慮競爭對手的研發(fā)速度,其次自身芯片結構相當?shù)膹碗s,芯片的驗證相當?shù)睦щy,而時間則是總是顯的那么的不夠,特別是進入TapeOut倒計時之后,更是如此。在進行一些IP的開發(fā)和單體驗證的同時,必須建立整體驗證環(huán)境,雙管齊下,并行進行。而這里,我們重點介紹整體驗證環(huán)境的建立過程。 3. 整體驗證平臺
整體驗證方法,主要有兩種,一種是基于仿真工具(比如Synopsys的vcs)以及ARM DSM(Design Simulation Model)的仿真模型(也有些公司使用基于RTL的ARM Core,但是不如DSM好用),建立起來的一套仿真環(huán)境平臺。另外一種,就是使用FPGA的驗證平臺。
這兩種環(huán)境,各有優(yōu)缺點。在實際的項目中,必須兩種方法都是不可或缺的,必須相互參考相互補充,才能較好的完成硬件的驗證工作。
基于VCS和DSM的仿真環(huán)境,主要是一些服務器的設置,腳本編寫的工作。之后,依賴于仿真環(huán)境以及各種IP的仿真模型,來達到系統(tǒng)驗證的目的。他的主要優(yōu)點,是能夠看到芯片中,每一個器件的運行情況,每一根信號線的變化,而缺點,則是速度太慢,在真實芯片中,一秒鐘的時間,在仿真環(huán)境里面,則通常要2,3個小時。而這個數(shù)值,是使用相當高端的64位服務器來加速運算的前提下得到的數(shù)字。真有天上一天,地上一年的感覺。另外,一些硬件的仿真模型,無法與實際的物理器件完全的一致,所以無法保證仿真結果的準確性。
而基于FPGA的驗證環(huán)境,則為我們提供了一個真實的運行環(huán)境。速度快,更加貼近實際的芯片的運行情況。而缺點,這里我們先賣個關子,到后面再慢慢道來。這里,我想說的一點,就是以我們的芯片400萬門電路的規(guī)模來說,能夠滿足我們驗證需求的FPGA實在屈指可數(shù)。這里,我們不得不佩服FPGA的發(fā)明者--Xilinx的優(yōu)秀技術。最終,我們選擇了采用Xilinx的Virtex-5系列的FPGA驗證平臺HAPS54以及HAPS51。HAPS54負責全體芯片的總驗證,幾塊HAPS51作為備用,可以用于一些特定IP的特殊驗證。HAPS系列驗證平臺,為Synplicity公司開發(fā),現(xiàn)在已經(jīng)被Synopsys公司收購,采用65nm工藝制造的Virtex-5 LX330芯片,支持1.25GHz的差分I/O,以及800Mbps的單端I/O,可以支持多達200百萬門電路。這一切,都使得FPGA的驗證看起來更加的美好。
4.建立FPGA驗證環(huán)境
HAPS54/51板子一到,我們就迅速進入了FPGA驗證環(huán)境的搭建工作。
最初的搭建工作,是使用HAPS51,建立一條ARM Core -> AHB Bus -> Bridge -> High Speed Internal Bus -> DDR2C -> DDR2 SDRAM通路。
ARM Core我們是購買了幾塊HAPS配套的帶有ARM926-EJS芯片的板卡。這種ARM Core芯片是專用芯片,生產(chǎn)的數(shù)量非常的少,因此可以算是天價。
另外的一個難點,算是DDR2 Controller了。由于無法將我們芯片實際使用的DDR2 Controller直接放入FPGA中,因此使用了Xilinx提供一個DDR2 Controller的模型。這里的主要問題,是DDR2C的PHY的問題。這種純模擬的器件,是很難使用FPGA來進行驗證的,因為在真正芯片進行后端合成的時候所生成的邏輯,根本是無法放到FPGA里面進行驗證,而只能用Xilinx提供的DDR模塊。即使是這樣,調(diào)通DDR2 Controller也是花費了很多的氣力,幸好設備還算精良,總算可以得到滿意的結果。另外,這里要說的是,我們芯片里面主要有兩個地方使用了內(nèi)部PHY,一個是這個DDR2 Controller,另外一個是LVDS。由于FPGA無法驗證這些PHY,在最終的芯片中,都出現(xiàn)了比較嚴重的問題,這里有天災也有人禍。我們一共做了4次ECO才算是徹底修復,而且基本是仰仗負責后端那邊的公司出色的技術實力。從此,對做模擬芯片的公司,也多了一層敬意。
經(jīng)過一頓折騰,這條通路終于完成,通過ICE可以成功讀寫DDR中的數(shù)據(jù),并且,可以通過ARM執(zhí)行代碼。于是,我們總算可以松了一口氣。
但是,接下來發(fā)生的問題,難倒了幾乎所有的人,也使我徹底明白什么叫做FPGA的Utility。
Utility說白了,就是燒進FPGA里面的Gate數(shù),占FPGA總體Gate數(shù)的比例。一般的FPGA都使用LE(邏輯單元)作為其容量的衡量單位,但是在驗證領域,還是更喜歡使用Gate這個單位,因為芯片的規(guī)模是以Gate來衡量的。
FPGA中,如果Utility在10%以下,這個FPGA可以跑在Full Speed,但是隨著Uitility的提高,timing就越來越無法滿足要求,因為無論是邏輯還是走線,在FPGA中,都要靠LUT來實現(xiàn),使得規(guī)模越大,延遲就越大。而如果Utility超過60%,那么基本就無法滿足實際使用的要求。
我們的芯片除去RAM,共有400萬Gates,其中H.264 140萬門,2D/Sprite Display大概120萬門。而一塊Virtex-5 LX330芯片,最大可以支持到200萬門,那么如果把H.264放入里面,Utility將達到140mil/200mil=70%。這樣的Utility,根本無法用于驗證。而2D/Sprite和Display也達到了60%,堪堪能夠滿足要求。由于這個問題的出現(xiàn),使得整個團隊,都籠罩在一種非常沉默的氛圍中。
經(jīng)過一周的討論,最終的方案,是把H.264按照功能畫分成兩個部分,分別放到不同的FPGA中,兩部分邏輯通過板間信號進行通訊。拆分H.264的過程是異常痛苦的,好好的一個IP,就這樣被一分兩段。但是隨后的問題接踵而至。H.264這兩個被分開的部分占用了過多的FPGA pin,使得本來充裕的I/O資源,一下子成為了緊缺資源,而且無論怎么規(guī)劃都不夠用。使得FPGA驗證環(huán)境的搭建工作,再次陷入僵局。
但是,我們的架構師,還是找到了解決方法--那就是共享pin。簡單來說,就是在兩個FPGA之間,通過一些握手信號,id標識以及數(shù)據(jù)線,使得幾個不同的模塊,可以共享使用這組pin,來進行通訊。這樣,本來是并行通訊的信號,就變成了串行。這種并變串的思路,在當今的硬件設計中比比皆是,像USB就是一個很好的例子。這里,我們活學活用,通過并變串來解決I/O資源不足的問題。而且,前面提到,這款FPGA可以支持1.25GHz的差分I/O,以及800Mbps的單端I/O,因此I/O的速率基本不成問題。
最終,我們很好的解決了I/O資源不足的問題,成功建立了FPGA的驗證環(huán)境。
但是,這樣的結構,使得FPGA的驗證環(huán)境,無法達到當初預想的速度,甚至連1MHz的Clock都無法到達.因此,只能采樣FPGA驗證環(huán)境,進行Function Test,而無法進行Performance Test。不得不成為一種遺憾。
5. 基于VCS仿真環(huán)境和FPGA驗證環(huán)境的軟硬協(xié)調(diào)驗證
就在FPGA驗證環(huán)境搭建成功大概相同的時間,vcs的仿真環(huán)境也基本完成。下面的所面臨的問題,就是這兩個驗證環(huán)境,到底如何協(xié)調(diào)工作,相互配合,從而取得驗證的最佳效果。在整體驗證環(huán)境,使用軟件測試程序,成為了必須的選擇,也就是必須進行軟硬件協(xié)調(diào)驗證。后面的驗證實踐也充分證明,僅僅在單體驗證中跑Test Banch的測試,根本無法覆蓋所有的問題,無論這個Test Banch設計的如何全面。特別是不同模塊之間的銜接部分,更加需要在整體的驗證環(huán)境來測試。而統(tǒng)一VCS仿真環(huán)境與FPGA驗證環(huán)境的最佳手段,是軟件層的統(tǒng)一。也就是VCS仿真環(huán)境和FPGA運行環(huán)境,盡量運行相同了邏輯,相似的框架,這樣當出現(xiàn)問題時,可以快速判斷到底是軟件問題還是硬件問題,進而明確問題點。前面提到VCS驗證環(huán)境,速度非常的慢,因此只能運行簡單的軟件測試Vector,而無法運行任何大型的軟件代碼。而FPGA則運行速度較快,可以跑一定復雜的代碼,可以提高發(fā)現(xiàn)硬件Bug的概率。因此在驗證的初期,我們使用FPGA為主,VCS為輔的策略。
在驗證初期,我們就導入了QingYangOS(www.qingyangos.org)的軟件平臺。平臺包含了Easy kernel和Main kernel。兩個內(nèi)核,具有相同的架構,相似代碼,Easy kernel用于VCS的仿真環(huán)境,Main Kernel則用于FPGA驗證。Easy Kernel結構非常簡單,可以縮短VCS的仿真時間,而Main Kernel則包含更多的功能,包括shell,Task Fork以及一些時間測量等實用的功能,來方便驗證人員的操作。與此同時,無論是Easy Kernel和Main Kernel,都可以運行通一套驗證代碼,這樣一旦在FPGA中發(fā)現(xiàn)問題,馬上可以把相同的代碼,拿到VCS環(huán)境中運行。相反VCS環(huán)境的代碼,也可以拿到FPGA環(huán)境中運行。此外,這些驗證代碼,一旦驗證成功,很快就可以變成類Linux的驅動程序,因為Main Kernel提供了類Linux的驅動框架。
在實際的驗證中,F(xiàn)PGA驗證所發(fā)現(xiàn)的問題點,大概占到了硬件Bug的80%以上。在實際驗證中,起到了非常重要的作用,特別是一些隱藏的很深的問題點,都是首先由FPGA首先發(fā)現(xiàn)的??梢哉fFPGA驗證成為了芯片驗證的眼鏡和耳朵。但是FPGA只能發(fā)現(xiàn)問題,而無法準確的定位問題的根源,和找到解決問題的方法。此時,就需要用到VCS仿真環(huán)境,來精確定位問題。一般的驗證,除了代碼邏輯需要共享之外,還需要一些數(shù)據(jù)的共享。有時數(shù)據(jù)很大,仿真往往要跑幾個小時,甚至十幾個小時。之后在浩如煙海的數(shù)據(jù)中,去發(fā)現(xiàn)導致問題的具體地點。有時需要在VCS中,采樣更加抽象的仿真模型,才能更去偽存真。但是無論如何,都離不開對軟硬件系統(tǒng)的理解和把握。
6.結束語
經(jīng)過大家的努力,最終芯片非常成功的TapeOut,并且經(jīng)過FPGA驗證過的部分,出現(xiàn)問題的比率幾乎為零。但是,由于各種限制,沒有驗證到的部分,特別是前面提到的兩個PHY,則多少出現(xiàn)了一些問題。但是由于沒有什么重大的設計缺陷和驗證漏洞,經(jīng)過幾次ECO之后,芯片基本100%達到了設計要求。
另外,前面說過FPGA無法進行Performance Test,但是,通過留片回來的芯片與VCS仿真環(huán)境的對比,發(fā)現(xiàn)VCS仿真環(huán)境下測試所得到的性能結果,與實際芯片的性能結果,幾乎一致,也說明了數(shù)字電路,依靠clock來工作的邏輯,可以達到相當?shù)囊恢滦院头€(wěn)定性。
|
|