互連匯流排的產品生命週期 : 可攜式刺激源方法建構效能模型、設計驗證、以及後晶片驗證
作者:ADI主任工程師 Gaurav Bhatnagar 與 Courtney Fricano
摘要
可攜式刺激源標準(PSS)是最新的業界標準,其用來規範測試意圖與行為,讓測試刺激源可重複套用到不同的目標平台。PSS不僅改變系統單晶片(SoC)傳統的確認與驗證方法,也帶來了許多優點以及衍生不少挑戰。本文探討這些流程演變,以及從SystemC效能分析探索互連匯流排架構的生命週期,藉以透過通用型PSS流量產生器進行確認與驗證。
背景介紹
隨著設計要求日趨複雜,驗證技巧與方法也隨之不斷演進。可攜式刺激源標準(PSS)是演進的最新產物,它的目的是因應測試可攜性的挑戰。新型PSS允許用戶建立測試意圖,藉以重複套用到不同的目標平台。除了可攜性之外,PSS驗證技巧還提供多方面的價值,包括視覺測試代表性、限制設定、資料流程隨機性、以及更高的測試品質。後續的流程演變包括SoC確認與驗證流程,以及採用PSS技巧,這對瞭解其衝擊相當重要。本文探討這些演變,提出一項互連匯流排架構的案例研究,進行SystemC效能分析解說確認與驗證過程。
詳細描述
隨著設計複雜度持續攀升,包括SystemC模型分析、架構探索、以及高階合成(HLS)等流程演進在傳統設計與整合流程中越來越常見。這些流程演變衍生出許多要求,其中包括檢查是否符合系統設計的要求。參與這些流程的團隊會用使用不同類型的平台與語言來推動這些演變。儘管存在這些差異,後續流程的基本規格都是相同,因此導致出現許多重複工作。
架構研發團隊針對使用SystemC與架構探索與TLM模型分析法建立虛擬平台,藉以執行架構探索與軟體開發。元件設計團隊則會在模塊層級設計Verilog元件並加以整合,再以人工或自動化程序建立系統。IP層級的驗證通常採用UVM驗證在IP層級進行,而在系統層級方面則使用C語言與以UVM方法。UVM環境讓檢查元件(checker)從IP層級到系統層級都能輕易重複使用,但測試刺激源通常會重新撰寫,藉以在頂層UVM環境運行,或使用C語言撰寫藉以在晶片層級的處理器上運行。建立測試元件驗證startup類別/組態以及模塊的基本模式運行,在實際晶片測試過程中會重複執行,因為測試平台需要新測試程序或是必須在評估板上運行。因此軟體團隊必須針對客戶的介面撰寫驅動程式。
當各團隊使用不同語言與技巧執行重複性工作,經常導致出現假性bug通報,並大幅拖慢上市時程。因此業界需要更好的解決方案,讓整個專案所有撰寫測試碼的人員都用一套共通語言,並讓大部分的功能驗證測試在橫向與縱向方面都能無縫重複利用。這種不同以往的方法正是PSS驗證技巧帶來的優勢。
PSS定義出新的測試撰寫語言,它將讓業界能自動產生測試程序,運用單一測試源套用到不同平台。除了橫向的可重複使用性(模擬、仿真、機板層級、測試器等),新語言還允許測試程序的縱向重複使用性。在IP層級開發的測試程序在SoC層級上可更輕易整合與重複使用。
可攜式刺激源在更高的抽象層上運行,它和目標平台的種類完全獨立。這裡的目標平台可以是UVM式驗證環境、C/C++與SoC型環境、C語言與Python®晶片後評估平台等。
PSS應用提供建立通用型應用的卓越機會,用來在各種層級進行檢驗與測試意圖。在多處理器SoC中使用互連匯流排,也會出現類似的機會。我們需要在不同層級檢驗與評估功能及效能。
由於必須根據SoC的特定需求明智挑選互連匯流排架構,因此需要進行初期效能分析,這方面可使用系統模型分析(通常以C/SystemC語言撰寫)。這方面必須建立可檢驗系統模型的測試程序。選好組態以及產生RTL之後,就需要執行IP層級的檢驗。這方面需要執行UVM驗證以及UBM程序。因此,產生的RTL除了在SoC系統層級進行整合,還需執行在SoC層級的驗證。這方面通常是撰寫C/C++執行程式的驗證與確認
所有這些互連驗證應用都可採用PS技巧建立可重複使用的測試程序。要完成這種工作,會針對通用流量產生器建立PSS模型,這種模型會針對不同主控器(master)數量建立不同的讀取與寫入模式。流量產生器會針對每種主控器產生不同分佈的流量,藉以仿真(emulated)高速與慢速的主控器。
此外,我們還能單獨控制哪個主控器在什麼頻率下產生流量,以及建立連續(back-to-back)與延遲的交易。圖1顯示運用PSS流量產生器的流程。紫色模塊代表含有通用從屬端與主控器的互連匯流排,綠色模塊則代表RTL,或是驅動匯流排交易的行為模型。PSS式流量產生器(粉紅色)整合與控制這些模塊,用來驅動與收集交易。流量產生器除了應付不同種類的流量產生需求,還針對SystemC應用、UVM、以及C語言測試等各種目標建立測試。每種程序在整合與測試方面的處理方式都不相同,我們會在後面詳細介紹。

圖 1. 互連匯流排在效能分析與驗證的PSS流程
互連匯流排的SystemC效能分析
互連匯流排的效能分析是在SoC開發流程中盡可能在初期對系統效能與功率進行定量量測。互連匯流排的效能必須針對各種類型應用、平台、以及互連組態(拓撲、功能、組態)進行評估。過程中涉及蒐集需求、建立規格、歸納出這些規格、最終轉化為符合效能/功率/面積要求的內聚設計。疊代程序在設計過程中持續進行。每次疊代都必須蒐集規格,並和設計與研發團隊進行交流。
這方面是採用SystemC代表TLM模型,藉以反映SoC規格,這些規格可用來精準預測系統行為。圖2顯示這種流程,一開始是從設定工具開始,工具用來產生SystemC模型。這些模型是工具套件的一部分,我們設定套件使其配合設計的各項需求。它可用來產生精準週期,或針對AMBA主控器與從屬端、時脈產生器、以及刺激源建立粗略模型。產生模型後,必須撰寫這個層級的流量模式,可選擇以人工撰寫或使用自動程序檔將規格轉換成實際模擬與產生結果。之後運用特定模擬器來模擬模型,提供解決方案進行效能的量化分析。

圖2. 使用SystemC建模法分析效能
儘管已有模型與分析工具,但使用這些工具來處理多項候選設計,耗費時間會相當可觀。使用描述式(scripts)來產生流量雖然可以提供某些類型的流量模式,但繁複的情境產生程序仍會是一項問題。此外,由於各項模擬非常費時,因此在模擬結束後進行分析,勢必會增加試驗的數量,藉以達到預期的數據。另外再加上設計以及效能建模程序中花在規格管理的時間,可看出我們需要更趨自動化的流程,這種流程應以單一來源做為起點。PSS技巧是因應這些挑戰的有效方法。PSS工具的隨機化機制,一開始是抽象描述DUT高階狀態的合法交易,然後自動列舉覆蓋測試所需的最小測試組合,涵蓋整個狀態空間的各路徑。PSS工具的覆蓋機制能衡量在特定狀態空間中已覆蓋多少狀態。這種能力讓系統在產生任何刺激源之前就能量測覆蓋狀況,因此能節省執行此程序的時間。PSS覆蓋數據讓使用者能檢視橫向(transverse)路徑以及產生測試程序,藉以覆蓋最大長度的圖像。因此能以遠低於一般受限隨機驗證程序耗費的週期,藉以達到更高的覆蓋率。
PSS工具亦提供測試意圖的視覺代表,藉以提供更好的情境圖像表徵。指向式測試涵蓋特定的測試條件,可透過這項功能輕易轉移。此外它亦能限制某些條件組合,因此能針對特定功能組合建立受限制隨機情境。PSS技巧基本上能維持如圖2所示的流程,但路線產生程序會有明顯的改變。
流量產生器的核心是通用PSS模型,模型容納的演算法負責產生不同類型的流量模式。這是刺激源與測試情境的單一表徵方式。這種模型可用多種方法進行設定,產生的測試程序可包含許多可能產生流量組合的其中一項。它包含三個部分:
執行模塊(Exec blocks): 執行模塊是從外部程式碼擷取的陳述,這些陳述位於目標平台的PSS包裝函式(wrapper)。對於SystemC程式,客製化程式碼會執行不同類型的讀取與寫入作業,將資料寫入底層環境。在UVM SV部分,它也有衍生至工具提供巨集(收發器產生)的邏輯,並透過PLI系統呼叫來和SV世界進行互動。另外還有一個部分(C語言產生)能執行轉譯與運用C語言進行互動,在不同平台之間無縫重複備使用。
- PSS 模型 : 根據整組規格建立的實際使用案例模型。它包含的功能組合,涵蓋執行一系列動作的高階程序。流量產生器包含不同的演算法組合,代表各種簡單與複合動作。這些功能最終會呼叫執行模塊的函式,用來在SV端執行指令。
- PSS 組態: 模型一般需要特定資訊來產生特定測試。這些資訊和驗證有關連,像是AMBA主控器、從屬端、主控器種類、來源與目的地位址、存取種類、平均頻寬、突發大小、資料量、頻率、以及頻寬需求等。這項資訊必須取自規範,藉以產生測試意圖的正確表徵。
圖3 代表PSS流量模式產生流程,最先是從剖析規格開始。Python語言撰寫的描述式用來剖析試算表格式的規格,擷取出特定格式的資料可透過PSS模型與組態加以讀取。之後利用PSS工具剖析PSS模型與組態,產生測試意圖的視覺表徵。圖4顯示一部分的測試意圖視覺表徵。圖中有代表寫入與讀取作業的條件、單一或Burst Mode®,以及不同匯流排大小,可加以控制以產生不同類型的流量模式。紫色的部分代表能轉移(transverse)的條件,藍色則屬於不被納入考慮的部分。這種安排能協助使用者圖像化,以及限制部分的流量。倘若使用者沒有加入限制條件,PSS工具會隨機選取某些組態,然後建立受限制的隨機測試。在這個階段還可以蒐集工具覆蓋範圍,以及提早分析完整性(completeness)。工具執行的覆蓋分析方法,可在工具產生測試中衡量測試意圖的覆蓋狀況。圖4代表PSS工具產生的PSS覆蓋範圍。粉紅色模塊代表未覆蓋的條件,綠色則代表已覆蓋的條件。使用者可觀察這種代表圖,針對未覆蓋的條件建立測試。

圖3. 運用PSS流程產生流量模式

圖4. 測試意圖與PSS覆蓋範圍的視覺代表圖
在產生測試程序後,再執行後置處理描述式以建立流量模式,這種模式相容於效能分析模擬工具的客製化格式。接著下一步是 執行模擬並產生流量,產生大量的未處理資料,這些資料之後經過處理,匯整出不同標準的數據與視覺圖像,對結果進行有效分析。表1顯示幾個例子,這些產生報告內含各項參數,用來針對含有多個主控器與從屬端的SoC對其除錯器進行效能分析,再對獲得的數據進行計算。這種分析可以是一(主控器)對一(從屬端)與多對一模擬(稱為實驗),根據平台規格產生結果。系統是根據時脈頻率的靜態分析以及平台規格定義的資料寬度產生這些實驗,設定用來讓系統在理論最高頻寬運行。一般而言,PSS流量允許更好地配置隨機情境,鎖定特定的匯流排組態。此外,測試意圖的視覺表徵有助於產生更好的限制。視覺化覆蓋促成更好的流量模式,因此在特定的主控器-從屬端系統中,只需較少次數的疊代就能達到最高的可行頻寬。
Experiment ID | Master | Slave | Direction | Mean Simulated Bandwidth | Mean Static Bandwidth | Mean Simulated Latency |
5000 | Core | SMMR | Read | 1199.72 | 6000 | 24 |
5001 | Core | SMMR | Write | 999.79 | 6000 | 24 |
5002 | Core | L2 mem | Write | 99.92 | 100 | 24 |
5003 | Core | L2 mem | Read | 99.92 | 100 | 21.34 |
我們看到實質的改善,包括運用PSS技巧,在經過次數的疊代後就能達到最高平均模擬頻寬,進而節省模擬週期與分析時間。
藉由減少建立互連架構效能模型所需的工作量,以及在統一規格下的單一真值來源(single source of truth),任何重新設定時間都能大幅縮短。這樣的流程讓我們能探索許多設計候選方案,然後選用其中一項執行時序收斂以及RTL流程。
互連匯流排的UVM式驗證
互連架構的效能分析可歸納出效能、功率、以及空間的最佳組態。確定互連組態後,即可用來產生AMBA互連RTL以及可設定的自動化流程。但這種流程由於存在組態、軟體結構、以及人工解讀組態等方面的限制因此容易出錯,所以需要進行驗證,確保無瑕疵的產生流程。在以往這方面都是採用業界標準UVM方法。
圖5顯示用來驗證互連匯流排的UVM環境,當中包含不同類型的AMBA(AXI、AHB、APB)主控器與UVC從屬端,以客製化組態分別連到DUT從屬端與主控器。這個環境可用通用組態進行設定。記分板(scoreboard)不僅會記錄交易,還會顯示任何資料不匹配的AI。

圖 5. 對互連匯流排進行UVM式IP驗證
測試包含一系列程序以及虛擬程序,用來控制底層UVC與介面的功能。測試程序依循的測試計畫,是源自針對性與隨機性測試案例。功能覆蓋點亦是依據驗證計畫所建立,藉以確保符合規格。在此之後會執行多項模擬與建立一個覆蓋資料庫,藉以蒐集程式碼與功能覆蓋範圍。接著會分析資料庫並檢驗覆蓋區的死角。接下來進行回歸測試,然後產生報告並分析結果。這個流程會不斷重複,直到達到想要的覆蓋目標,以確保高品質的驗證。
連同做為驗證計畫一部分的導引式測試(directed test),UVM技巧依賴隨機測試來達到覆蓋目標。它從隨機刺激源開始,之後逐漸限縮限制條件,直到達成覆蓋目標為止,依賴隨機化的與運算主機群的蠻力來覆蓋狀態空間。程式碼覆蓋率是定量衡量數據,但功能覆蓋則是DUT程式碼執行的定性衡量。通常這項品質受限於人們執行驗證計畫以及分析覆蓋報告方面的勤奮與堅持程度。另一項決定驗證品質的因素是高效率的自動化檢查。結合利用記分板進行封包比較,以及判定檢查點,可在流程後段判定後晶片bug瑕疵的數量。UVM式驗證技巧是自給自足且有效的方法,可確保高品質的驗證。然而,PSS技巧可透過各種功能進一步改善驗證流程。
PSS式驗證一開始是針對每項設計規格建立驗證計畫,然後設立驗證環境。之後針對可攜式刺激源模型、限制條件、以及組態檔案擷取出測試意圖。支援這項標準的工具之後可為特定種類的驗證環境產生測試程序,以及蒐集圖像式覆蓋圖表。分析這種類型的覆蓋範圍,可顯示在測試限制條件與組態下的覆蓋漏洞,以及重新檢討流程。
圖6顯示驗證流程以及介紹PSS模型。這裡要提的重點是PSS模型不會取代UVM環境。實際上它是加到現有UVM環境以增強其功能。UVM驗證環境仍會有主控器與從屬端UVC,以及SB與組態,而虛擬程序則會繞過UVM SV基礎架構。這個環境是由頂層UVM測試來控制,一方面呼叫虛擬程序來控制UVC作業,另一方面與可攜式刺激源互動並透過PLI與DPI式系統呼叫產生格式。PSS模型完全可重複用在SystemC式效能建模程序。由PSS模型產生的測試邏輯會控制各UVC之間的作業。IP層級的模擬則會使用產生的測試來執行,並蒐集覆蓋數據。

圖6. 互連匯流排進行PSS式IP驗證
表2顯示在PSS與UVM驗證環境中進行回歸檢驗的結果。由於採用UVM方法,讓達到最高覆蓋範圍(套用豁免條件)需執行的受限隨機測試的次數大幅降低。PSS驗證的隨機機制一開始是執行抽象描述,描述DUT高層級狀態之間的合法交易,以及自動仿真覆蓋這個狀態空間所需的最少測試。圖像覆蓋範圍讓使用者能檢視橫向傳遞路徑以及產生測試,藉以覆蓋最大長度的圖像。
測試運行(Tests Run) | 通過 | 失敗 | 不執行 | 整體程式碼覆蓋率 |
(僅UVM) 125 | 125 | 0 | 0 | 298034/388949 (76.6%) |
(UVM PSS)75 | 75 | 0 | 0 | 298034/388949 (76.6%) |
可攜式刺激源驗證方法可以控制的另一項因素就是測試品質。由於可透過圖像看到測試狀況,讓使用者可以更好地瞭解控制以及資料流程。此外,相同的工具還能用來在執行階段進行主動檢查,允許有效的自動檢查。這方面還能結合記分板檢查以及判定檢查點,藉以改善驗證品質。
可攜式刺激源方法是在更高的抽象層上執行,之後會整合底層的驗證流程。因此儘管在測試或刺激源產生流程方面有明確的改善,這種驗證方法仍以原始型態侷限在底層流程。在和UVM環境整合方面,一方面它受益於重複使用驗證元件,另一方面它也會受限於本身的複雜性。類似的狀況,在UVM方面,驗證的品質受限於驗證計畫的品質以及覆蓋報告的分析。
互連匯流排的SoC驗證
當互連整合成SoC的一部分,就必須檢查它與系統中各主控器與從屬端之間的整合狀況。這方面通常是在處理器上執行C語言測試,藉以檢查互連匯流排的整合狀況。IP層級上的通用主控器會變換成特定匯流排主控器,像是多重處理器、DSP、DMA控制器、各種序列協定的主控器,像是SPI、I2C、CAN等協定,以及各種客製化主控器與從屬端。這會引發特定程序或巨集,藉以控制SoC中的不同主控器與從屬端。巨集或程序通常會進行暫存器程式化,藉以從包括DMA控制器、記憶體等主控器接收與發送交易。在這個層級並沒有受限的隨機化,因此每種情境都必須探索以及進行人工撰寫程式。在重複使用方面,IP層級的某些UVM監視器可用來監視協定或利用記分板來檢查任何特定的興趣點。但一旦轉移關注焦點,就必須重新執行涵蓋主要部分的測試與程序。
PSS驗證技巧是為SoC測試重複使用的IP所設計。圖7顯示在SoC層級驗證方面重複使用流量產生器PSS模型。在IP層級撰寫的模型,係針對不同位址映射進行設定,配合每種SoC規格與針對C測試產生程序。模型中幾乎所有程序 – 除整合執行程式碼的部分以外 – 都可重複使用在為處理器應用撰寫模型上。也就是說,這類執行程式碼遠遠較為複雜,包括各種主控器爭奪啟動與關閉巨集,包括像DMA與記憶體控制器,它們能啟動互連匯流排上的單一或突發交易。對於每個通用主控器,需要重新撰寫執行程式碼,藉以讓它們能和SoC中各種主控器進行整合。工具的隨機性允許多種主控器與從屬端交易的組合。SoC層級上針對整合檢查建立目標測試的限制,可配合測試的視覺表徵妥善管理。在產生C語言測試後,它們會和SoC設定以及一些系統標準基礎架構進行整合。C語言測試之後會進行編譯,然後在處理器執行,用來產生交易。

圖7. 互連匯流排的PSS式SoC驗證流程
圖7還顯示運用PSS工具建立多核心測試,這類測試很難以人工撰寫出來。測試意圖的不同部分可設定在核心上執行,藉以建立有趣的情境。在含有多個匯流排主控器的狀況,上述功能特別有用。由於有這種功能組合,對不同主控器進行程式化就變得可行。能夠重新產生SoC層級的圖像化受限隨機測試,但又不需實際重寫這些情境,也是一項重大優勢。另外它也允許測試產生,利用不同的位址映射檢查相同IP的不同執行例(instances)。此外,當我們在SoC層級上,在SoC層級為不同IP結合不同種類的PSS模型,就可以創建出各種複雜情境,若是以人工撰寫的方式就很難創建。
互連匯流排的驗證
業者需要執行驗證才能確定產品合規性,確保符合客戶的規格、可用性、以及符合允收(acceptance)測試的要求。傳統上,評估板需要執行C語言測試,通常都是根據原始規格以人工撰寫程式碼。這種重複性的工作可利用PSS方法大幅精減,讓系統自動產生相容於評估軟體的C語言測試碼。
圖8代表PSS方法的驗證流程。流量產生器的PSS模型可根據每種SoC規格以及配合Eval-C測試產生流程,針對不同位址映射進行設定。PSS工具通常能夠針對多個核心產生測試程序,支援特定情境的測試。產生的C測試程序經過除錯器的編譯,程式碼會透過像JTAG的介面載入到評估板。執行測試程式碼之後,結果就會顯示在評估板與除錯器介面。在SoC層級撰寫的程序結合圖型限制的隨機性,這種成品完全具備重複使用的能力。此外,測試意圖的視覺代表性,以及方便套用限制的能力,讓使用者能建構方向性明確的流程。這種獨特且具控制性的方法在驗證過程中可建立各項測試,而這在以往通常都是完全以人工作業來進行。

圖 8. 互連匯流排的PSS晶片驗證流程
這裡的執行程式碼也必須針對晶片驗證的相關規範重新撰寫。驗證平台的基本驅動程式用來控制匯流排上的不同主控器,像是這類應用經常用到的DMA以及記憶體控制器。產生的C程式碼也需要進行整合,並採用評估平台接受的格式。通常這方面的流程包括重複使用表頭(header),擷取預寫驗證碼的檔案,然後重複套用到產生的整合程式碼。程式碼之後進行編譯,並和目標除錯器一起執行,藉以確保在這個層級進行妥善的測試。
PSS工具通常能夠分析後處理應用跑出的結果。結果數據的視覺分析除了反映測試通過或失敗(pass or fail)的狀況,還能將產生結果的程式碼區段一同顯示出來。這在驗證程序方面特別有用,因為傳統除錯功能在這方面的能力相當有限。
雖然我們還在後晶片應用針對流量產生器模型重複使用C測試流程,但我們有信心可能運用C語言測試法套用在任何評估平台上。事實上,將SoC型PSS模型重複套用在後晶片評估板,這種模型已證實可用在其他處理器類型的應用。這類應用的可重複利用性,係可攜式刺激源方法的獨有特性。
總結
PSS類型的通用流量產生器支援可重複使用的測試方案,透過SystemC執行效能分析測試互連匯流排,藉以執行驗證與確認(verification and validation)。其中每項流程都需要進行整合以及基礎架構的開發。不過這些一次性流程有機會在後續應用中重複使用。除了可重複使用外,PSS類型的方法在特定隨機性(specific randomization)、測試意圖的視覺代表性、以及初期覆蓋範圍分析等方面提供許多優勢,使其價值進一步增加。能夠建構通用型應用的彈性,讓廠商有機會開發隨插即用型解決方案,進一步加速驗證與確認的流程。
參考電路
Ajamian, Tom. "AMBA Interconnect Design Flow Automation." Synopsys, Inc., 2015.
Bhatnagar, Gaurav and David Brownell. "Portable Stimulus vs. Formal vs. UVM: A Comparative Analysis of Verification Methodologies Throughout the Life of an IP Block." DVCon, 2018.
Portable Stimulus Working Group. Accellera Systems Initiative, 2019.
TrekUVM™: Eliminating UVM Overhead. Breker Verification Systems, 2019.
UVM (Standard Universal Verification Methodology). Accellera Systems Initiative, 2019.