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