數字芯片設計驗證經(jīng)驗分享系列文章(第四部分) 作者:Philipp Jacobsohn,SmartDV首席應用工程師 Sunil Kumar,SmartDV FPGA設計總監 本系列文章從數字芯片設計項目技術(shù)總監的角度出發(fā),介紹了如何將芯片的產(chǎn)品定義與設計和驗證規劃進(jìn)行結合,詳細講述了在FPGA上使用IP核來(lái)開(kāi)發(fā)ASIC原型項目時(shí),必須認真考慮的一些問(wèn)題。文章從介紹使用預先定制功能即IP核的必要性開(kāi)始,通過(guò)闡述開(kāi)發(fā)ASIC原型設計時(shí)需要考慮到的IP核相關(guān)因素,用八個(gè)重要主題詳細分享了利用ASIC IP來(lái)在FPGA上開(kāi)發(fā)原型驗證系統設計時(shí)需要考量的因素。 在上篇文章中,我們分享了第五到第六主題,介紹了我們如何確保在FPGA上實(shí)現所需的性能和在時(shí)鐘方面必須加以考量的因素有哪些。本篇文章是SmartDV數字芯片設計經(jīng)驗分享系列文章的第四篇,將繼續分享第七、第八主題,包括如果目標技術(shù)是FPGA,而不是ASIC,那么需要如何測試IP核的功能?設計團隊還應該牢記什么? 作為全球領(lǐng)先的驗證解決方案和設計IP提供商,SmartDV的產(chǎn)品研發(fā)及工程應用團隊具有豐富的設計和驗證經(jīng)驗。在國產(chǎn)大容量FPGA芯片和IP新品不斷面市,國內RISC-V CPU等IP提供商不斷發(fā)展壯大的今天,SmartDV及其中國全資子公司“智權半導體”愿意與國內FPGA芯片開(kāi)發(fā)商、RISC-V IP和其他IP提供商、集成電路設計中心(ICC)合作,共同為國內數字芯片設計公司開(kāi)發(fā)基于本地FPGA的驗證與設計平臺等創(chuàng )新技術(shù)與產(chǎn)品。 話(huà)題7:如果目標技術(shù)是FPGA,而不是ASIC,那么需要如何測試IP核的功能? 復雜電路的驗證通常必須在FPGA上進(jìn)行,其嚴格程度等同于A(yíng)SIC開(kāi)發(fā)的標準。眾所周知,在這方面是不允許有錯誤產(chǎn)生,因為后果很?chē)乐。ASIC的每個(gè)分岔(例如,由于在電路開(kāi)發(fā)期間產(chǎn)生的錯誤,而在驗證期間沒(méi)有發(fā)現)不僅會(huì )導致產(chǎn)品交付嚴重延遲,而且還會(huì )導致大量的額外成本。當然,在使用FPGA時(shí)不會(huì )出現這樣的問(wèn)題,因為在應用設計更改后,這些組件可以重新配置而無(wú)需浪費太多精力——但是,在使用可編程的組件時(shí),應該采取最大的謹慎態(tài)度。這是很好的工程精神! 最終,FPGA被用于消除早期開(kāi)發(fā)階段的設計錯誤,從而確保在A(yíng)SIC上實(shí)現的電路基本上是無(wú)錯誤的。遺憾的是,正是由于在可編程的組件上執行功能測試的簡(jiǎn)便性和速度,往往使人們不愿意首先通過(guò)仿真驗證RTL代碼的更改,而是在實(shí)際操作中測試電路設計。這里忽略的是,這種方法可能會(huì )忽略在仿真中所使用的測試臺可以發(fā)現的極端情況。在某些情況下,驗證覆蓋范圍會(huì )減少——盡管FPGA允許在相同的時(shí)間范圍內比仿真運行更多的驗證周期。如果使用FPGA認真地進(jìn)行功能測試,則這種驗證方法可提供比仿真驗證方法更多的可能性。 通常情況下,ASIC和SoC設計包含許多復雜的行業(yè)標準接口,用于與外部設備(USB、PCIe等)進(jìn)行通信或連接標準總線(xiàn)(AHB、AXI等)。在設計驗證過(guò)程中,這些接口還被用于連接測試環(huán)境(測試臺)。這種連接通過(guò)稱(chēng)為驗證IP(VIP)的模塊實(shí)現。驗證IP是一種特殊的IP核,它將給定接口的總線(xiàn)功能模型(BFM)的功能與測試臺中使用的測試用例框架功能相結合。驗證IP是一個(gè)可重復使用的IP核,可用于創(chuàng )建必要的測試,以縮短SoC驗證時(shí)間并增加覆蓋率。雖然驗證IP通常用于驗證標準總線(xiàn)協(xié)議,但它也可用于系統性能分析,并且越來(lái)越多地用于模擬、仿真和虛擬原型設計。 ![]() 圖7:帶有主接口、設備和集線(xiàn)器USB4的驗證基本工作原理圖,使用專(zhuān)用驗證IP(VIP)可以顯著(zhù)增加驗證覆蓋范圍。 驗證通常是電路創(chuàng )建過(guò)程中最耗時(shí)的部分。專(zhuān)用的驗證IP可以顯著(zhù)地增加驗證覆蓋范圍,可覆蓋極端情況,并可顯著(zhù)地減少設置仿真系統所需的總體工作量(例如,創(chuàng )建模擬刺激)。 測試通?梢酝ㄟ^(guò)使用FPGA來(lái)實(shí)時(shí)進(jìn)行。這意味著(zhù)直接與ASIC相比,FPGA可以相同或降低的時(shí)鐘頻率來(lái)運行設計。即使在使用FPGA時(shí)需要降低時(shí)鐘頻率,因為可編程性總是需要邏輯單元的冗余,因此需要較大的芯片面積(這反過(guò)來(lái)導致更高的延遲);但與純仿真相比,驗證速度仍然要高得多。這種加速型驗證使得發(fā)現在仿真中永遠不會(huì )發(fā)現的錯誤成為可能。 盡管使用FPGA進(jìn)行ASIC原型設計具有諸多優(yōu)點(diǎn),但將最初專(zhuān)為ASIC目標項目而開(kāi)發(fā)的電路移植到FPGA上并不是一件容易的事情,這一點(diǎn)怎么說(shuō)都不為過(guò)。 最重要的一點(diǎn)是,在FPGA中實(shí)現電路通常需要對電路本身進(jìn)行更改。在前面的主題部分中,我們已經(jīng)研究了可能需要實(shí)施的更改。每一次電路的改變都意味著(zhù),稍后將被映射到ASIC上的電路是已經(jīng)驗證的,但并不是完全相同的,而是經(jīng)過(guò)修改的版本。當然,有必要相應地調整仿真設置,例如ASIC電路開(kāi)發(fā)的測試臺。 關(guān)于測試結構,還有一些事情需要考慮。例如,掃描結構經(jīng)常出現在A(yíng)SIC RTL代碼中——關(guān)鍵字:DFT(面向測試的設計)——以便在交付前輕松識別有故障的ASIC組件并相應地對其進(jìn)行篩選。這種測試結構在FPGA中是不需要的,因為這些組件都是已經(jīng)過(guò)測試才交付給最終客戶(hù),因此不需要插入額外的測試結構。事實(shí)上,這些組件實(shí)際上是破壞性的,因為實(shí)現將導致組件利用率的增加,并且還需要更復雜的時(shí)鐘分布。有必要消除在FPGA邏輯綜合中為測試引入的預防措施(例如,掃描-FF),或將它們“隱藏”在邏輯綜合中。 “干凈”的設計實(shí)現使用“define”和“ifdef”指令根據期望的目標架構(ASIC或FPGA)來(lái)選擇這樣的測試結構,或者使它們對于邏輯綜合“不可見(jiàn)”。通過(guò)使用這些指令,也可以實(shí)現用于存儲器和時(shí)鐘生成或分配的特殊FPGA庫組件的集成,這使得IP核的用戶(hù)能夠簡(jiǎn)化電路以適應所需的目標架構。其目的是加快電路的創(chuàng )建,從而提高生產(chǎn)率。當然,應該指出的是,最終的實(shí)現并不是完全相同的。然而,由于目標元件也不相同,因此對電路進(jìn)行相應的調整是不可避免的。 對原始設計進(jìn)行更改是不可取的。原型設計的理念是將稍后在A(yíng)SIC中實(shí)現的功能映射到一個(gè)可編程組件中,而不需要進(jìn)行重大更改;即使有改動(dòng),最好也是同步相同的更改,以檢測可能的錯誤。但是,如果電路本身發(fā)生變化,則可能由于變化而引入誤差。由于實(shí)現不完全相同,不能保證ASIC電路中沒(méi)有更多的錯誤,因為它沒(méi)有事先經(jīng)過(guò)充分的測試。然而,如果在A(yíng)SIC實(shí)現之前根本沒(méi)有使用FPGA,則可以實(shí)現更高的驗證覆蓋率。畢竟,要驗證的電路只有部分區域是不同的,并且與仿真性驗證方法相比,允許更多的測試周期。 另一個(gè)需要考慮的要點(diǎn)是發(fā)送和接收數據的物理通信接口,諸如MIPI、USB、PCIe等接口IP通過(guò)差分接口傳輸串行或并行高速數據信號。為了在發(fā)射器和接收器之間建立連接,就需要一個(gè)PHY來(lái)傳輸差分數據流。這種PHY可以在A(yíng)SIC上作為模擬電路來(lái)實(shí)現,然而這在FPGA上是不可行的,或者如果行的話(huà),那么只能通過(guò)使用可提供的SerDes IO或高速收發(fā)器作為輔助。當然,這意味著(zhù)FPGA實(shí)現與ASIC電路完全不相同。在絕大多數情況下,有必要通過(guò)連接到FPGA的附加外部PHY組件來(lái)提供物理接口。如果電路在實(shí)際運行中進(jìn)行測試,其物理接口將與最終的ASIC實(shí)現之間存在差異。 總之,可以說(shuō)大多數驗證工具都可以同時(shí)用于A(yíng)SIC和FPGA目標(例如,仿真器、形式驗證等)。然而,在某些方面存在顯著(zhù)差異,例如RTL代碼中存在的測試結構或通過(guò)PHY接口將電路連接到“外部世界”。原則上來(lái)說(shuō),使用FPGA可在驗證覆蓋率方面提供顯著(zhù)的優(yōu)勢,但是移植專(zhuān)為ASIC開(kāi)發(fā)的電路部件總是需要相當多的額外工作。在這種情況下,使用驗證IP可以為簡(jiǎn)化復雜的功能測試、增加驗證覆蓋率和加速驗證做出重大貢獻。 主題8:設計團隊還應該牢記什么? 我們已經(jīng)涵蓋了很多領(lǐng)域,但是當這些IP最初是為ASIC目標架構創(chuàng )建的時(shí)候,在FPGA方向上移植電路時(shí)需要考慮更多。 正如已經(jīng)詳細解釋的那樣,可編程組件的使用適合于在實(shí)際操作中測試電路,從而確保它在很大程度上是無(wú)錯誤的。在項目的早期階段就有一個(gè)可用的功能電路具有許多價(jià)值:在其幫助下,不僅可以先進(jìn)行軟件和固件的設計,而且還可以在A(yíng)SIC仍處在流片過(guò)程中就使用基于FPGA的原型對它們進(jìn)行測試。 如果要使用FPGA,則應該在RTL創(chuàng )建期間就采用“專(zhuān)為原型而設計”的方法。這并不總是容易實(shí)現的。例如,如果ASIC電路設計的要求是盡可能將功耗保持到最低,那么除了對時(shí)鐘分布進(jìn)行操作(例如,通過(guò)插入門(mén)控時(shí)鐘結構)之外,還經(jīng)常使用基于鎖存器的設計方法。該想法是使用鎖存器而不是時(shí)鐘寄存器。時(shí)鐘控制元件簡(jiǎn)化了電路實(shí)現,因為時(shí)鐘也使“時(shí)間概念”可用。然而,寄存器邏輯的使用總是導致更高的功率需求,因為功耗與時(shí)鐘元件的數量及其時(shí)鐘頻率成比例地增加。 與ASIC不同,FPGA不是很適合基于鎖存器的電路實(shí)現,因為——正如前面主題6中提到的:在時(shí)鐘方面必須考慮什么?——只定義“最壞情況下”的時(shí)序信息。在FPGA時(shí)序分析中通常不計算最小時(shí)序和延遲。如果一種時(shí)鐘方法不能通過(guò)寄存器邏輯檢測,那么時(shí)間行為就不再是可預測的,并且可能導致所謂的“競爭條件”和其他問(wèn)題,這些都使得FPGA不可能可靠地運行。最后,這意味著(zhù)不同的電路實(shí)現對于各自的目標模塊是很有必要的。這里的目標是實(shí)現相同的功能,盡管在實(shí)現路徑上有所不同。 前面提到的電路設計方法應該在產(chǎn)品開(kāi)發(fā)的早期階段就應該考慮到目標架構之中的相關(guān)因素,不僅限于鎖存器的實(shí)現。在FPGA中也有必要注意同步電路的實(shí)現,和避免使用FPGA中不可用的電路(例如,雙邊沿時(shí)鐘FF)。目標架構還必須考慮到可實(shí)現的時(shí)鐘頻率。要避免長(cháng)組合路徑,因為可能會(huì )出現高時(shí)序違規。 在基于FPGA的原型中,驗證不僅僅指電路功能和實(shí)現所需的時(shí)間;通常還需要包括其他的測試,同樣重要的參數在開(kāi)發(fā)活動(dòng)中越快實(shí)現越好。例如,除了前面討論的軟件和固件的開(kāi)發(fā)之外,還應該提到ASIC組件的節能設計。 對于一個(gè)只實(shí)現純電路功能的原型來(lái)說(shuō),功率損耗實(shí)際上根本不起作用。然而,對于A(yíng)SIC的運行絕對有必要的降低功耗的方法,同樣也可以在FPGA中使用,并將其包含在原型設計活動(dòng)中,所以這是值得期待的。雖然不可能使用ASIC中可用的各種選項,但至少可以通過(guò)使用適當的工具和腳本來(lái)模擬它們的功能。這里的方法是至少估計通過(guò)不同方法可以實(shí)現功耗降低(例如,時(shí)鐘門(mén)控以降低寄存器切換率、關(guān)閉ASIC上的整個(gè)區域、在A(yíng)SIC的一些部分使用不同的電源電壓等)。 上述方法在FPGA上是不可用的,除了物理上可實(shí)現的時(shí)鐘門(mén)控,這也會(huì )對FPGA的可靠運行產(chǎn)生負面影響。通過(guò)讀取通用格式(UPF =統一功率格式;CPF =通用功率格式)的相應腳本,和使用可模擬支持這些格式的FPGA邏輯綜合工具,至少可以估算這些措施將如何影響ASIC的功耗。 在這種情況下,有一件事是明確的:電路功能越早可用,相應的測試就能越早進(jìn)行。因此,使用諸如IP核這樣的預先制作的模塊具有巨大的潛力,可以加速ASIC實(shí)現和驗證的各個(gè)階段。 本系列文章接下來(lái)將通過(guò)一個(gè)實(shí)際案例來(lái)回顧前面講到的八項關(guān)鍵設計考量因素:使用基于FPGA的方法來(lái)驗證USB 3.2 Gen2x1 Device IP,大家可以通過(guò)關(guān)注“智權半導體”微信公眾號閱讀該案例分析。 實(shí)現一個(gè)可工作的FPGA原型并不是一件容易的事。通常,我們的想法是使用適當的FPGA邏輯綜合和布局布線(xiàn)工具,將已經(jīng)可用于A(yíng)SIC技術(shù)的IP核映射到足夠大且快速的FPGA上就足夠了,以實(shí)現一個(gè)具有相關(guān)功能性FPGA。這里的要求是所需的功能應該即刻可用,并且無(wú)需進(jìn)行任何更改。IP核的制造商必須達到這一期望。畢竟,IP核應該能夠集成到現有設計中,且不會(huì )有任何重大的時(shí)間延遲。大家都假設IP核供應商已經(jīng)提前進(jìn)行了所有必要的測試,以致于將功能集成到現有電路中時(shí)間應該毫無(wú)困難。 然而,將IP核移植到FPGA架構中對于IP提供商來(lái)說(shuō)是一個(gè)具有挑戰性的目標——如果不付出相當大的努力,這幾乎是不可能的。接下來(lái)我們將通過(guò)一個(gè)實(shí)際案例,即使用基于FPGA的方法來(lái)驗證USB 3.2 Gen2x1 Device IP來(lái)說(shuō)明其中的困難和克服之道。 |