程式碼Linting是什麼?進階Linting檢測與系統單晶片設計

隨著裝置日趨智慧化,再加上晶片與軟體結合所驅動的一系列互聯應用發展,眾所周知,晶片設計團隊總是在思考如何向客戶提供創新且差異化的產品。在半導體領域,設計晶片的過程至關重要,但許多人忽視了設計和測試平台程式碼(code)品質對於專案成功的關鍵性。

面對多種編碼風格、下游工具的挑戰,以及與上市時程(time-to-market)競賽,工程師們面臨著各種晶片設計缺陷及其導致的功能瑕疵、設計迭代(iteration),甚至是重新設計晶片(respin)等更糟糕的情況。市場上雖然有工具能夠在設計開發過程中識別 RTL 的效率問題,但這通常發生在晶片設計周期的晚期,而此時已經投入了相當多的時間和精力。

在暫存器傳輸層(RTL)設計階段進行深入的早期分析,對於團隊來說是識別和修復複雜晶片 RTL 問題,並盡早採用真正左移(shift left)方法的關鍵。Linting檢測提供全方位的檢測流程,讓團隊能夠及早發現基本問題,並從系統單晶片(SoC)設計之初就建立其功能安全(functional safety)、可靠性和可移植性(portability)。

在本系列三個章節的第一章中,我們將探討Linting檢測的演變、擁有導引方法論和規則的好處、如何處理白雜訊(white noise),以及最終團隊在無論設計複雜性如何的情況下都能順利地找到設計錯誤。

程式碼Linting基礎:我們是如何走到這一步的?

Linting技術已經存在了數十年。過去,團隊使用Lint工具進行兩種檢查:語法(syntactic)檢查係用來驗證程式碼中的關鍵字、對象名稱等是否準確放置,而語義(semantic)檢查則是用以確定程式碼中的參考(reference)是否有效。當時的根本目標是幫助客戶解決繁瑣的可移植性挑戰,最基礎的檢查被認為是最先進的做法,舉例來說,將 RTL 從一個系統單晶片移植到另一個系統單晶片,需要結構良好且模塊化的 RTL 程式碼,而這些程式碼應該要直觀、易於理解,且不需要額外維護。

然而,隨著上市時程年復一年的縮短,設計團隊一直在尋找提高產能和系統性驗證錯誤的新方法。有鑑於此,Linting檢測這種可以及早消除複雜錯誤的有效技術開始廣受歡迎,尤其在設計周期的模擬合成(simulation synthesis)或佈局繞線(place-and-route)階段。

根據 Rollbar 的調查,開發人員在使用錯誤的監控工具時感到十分力不從心。這些工具不僅無法達到預期效果而導致某些錯誤(error)成為漏網之魚,甚至還被客戶公開指出該疏漏。超過 40% 的開發者認為,修復缺陷(bug)和錯誤(error)是他們最大的痛點。簡而言之,晶片規模或複雜性越大,問題就越多。

為了與產業趨勢和市場變化保持同步,新思科技(Synopsys)積極整合先進演算法(algorithm)和分析技術,為設計人員提供有關設計的詳細資訊和洞察見解(insight)。隨著時間的推移,我們開始增加更複雜的檢測功能,以處理模擬合成(simulation synthesis)複雜性,讓設計人員使用Synopsys Design Compiler® 全方位RTL合成解決方案核心所檢測到的錯誤,能與所有錯誤保持一致。此舉為設計人員提供了實時(real-time)通知,讓他們瞭解在合成階段後期可能會遇到的問題,優化了團隊的工作效率,並朝向「無瑕疵(clean)」且準備好交付簽核(signoff)的程式碼邁進。

正確構建:以預定義規則導引晶片設計社群

那麼,Linting工具是如何運作的呢?它們依賴一套基於最新行業標準的規則來運行,並根據其應用領域進行分類。這些規則降低了成本,幫助設計團隊快速啟動硬體開發,加速Lint工作流程的建立。儘管聽起來令人印象深刻,但這些規則集大多需要數十年時間來製作、維護和掌握要領。

為此新思科技(Synopsys)創建了 GuideWare 方法論文檔和規則集(可至新思科技SolvNetPlus 知識庫存取相關內容),為全世界的設計團隊提供循序漸進的框架(framework)以滿足正確性和一致性,並最大限度地減少建立、管理和整理(curate)每條規則所需的時間。舉例來說,現今業界大約有 1500 套規則。除了這些規則集,我們的團隊不遺餘力地驗證了特定市場細分(market segment)的額外規則,如航空和國防領域的 DO-254,以及汽車市場的 ISO 26262。

通過使用推薦的Lint檢測規則,設計團隊節省了原本用來確認所選規則是否符合其問題需求,以及思考是否有其他規則可以提供更適切解方的大量時間。這些最低限度且強制性的檢測使設計人員能夠進行進階Lint檢查,運行無瑕疵的 RTL 程式碼,並從程式碼編寫的那一刻起就識別出設計故障(design fault),對半導體產業來說可謂一大躍進。

Synopsys VC SpyGlass Lint 解決方案涵蓋Synopsys Design Compiler 兼容性規則,可實現左移方法,讓用戶預先知道某些 RTL 結構在合成期間是否會被妥善處理。另外,Synopsys VC SpyGlass Lint 中的 Synopsys Formality® 等效性檢測(equivalence checking)規則,也能幫助用戶在流程早期確定階段檢測編碼風格是否會導致模擬合成結果不一致(simulation and synthesis mismatch)的問題。

進階程式碼Linting檢測與消除白雜訊(white noise)

良好的Linting檢測工具不僅需要識別語法(syntax)、風格(style)、錯誤(bug)或安全性問題,還必須提供有用的線索以進一步說明此問題為何、為什麼會造成損害,以及應該如何解決。隨著半導體公司爭相實現更快的上市時程,晶片投片(tape-out)的速度已成為此挑戰的關鍵一環。

在投片過程中進行手動偵錯不僅耗時,還需要大量的領域知識。晶片設計人員希望能夠在設計過程早期執行許多複雜任務。此外,進行多次Lint檢測不僅會產生太多白雜訊,還會增加設計人員遺漏關鍵違規(violation)的機率,並耗費時間試圖解決該問題。這也意味著將花費更多時間來判斷該違規是否屬實。

隨著設計團隊地理位置越發分散,設計目的的一致性和準確性成為晶片整合團隊的一大障礙。新思科技(Synopsys)意識到,我們勢必要提供一個整合型解決方案以實現智慧化、快速低雜訊檢測的需求。有鑑於此,新思科技將最新一代的 Synopsys VC SpyGlass™與機器學習(machine learning)技術結合,讓用戶得以找到違規的主要根本原因(root cause)——這在檢測領域中實屬一大突破。此整合將白雜訊減少了 10 倍,大大加快了Lint分析收斂的速度,並幫助設計師快速找到並修復Lint問題。

處理晶片設計的複雜性

隨著系統單晶片(SoC)的複雜性不斷增加,RTL 程式碼需要與不同的等效性檢測器(equivalence checker)和模擬器(simulator)交互操作,並且讓用戶易於使用。雖然之前的Lint檢測可以提前識別出幾種結構性問題,但仍然存在一些並不容易識別的「功能性(functional)」問題。功能Linting分析透過簡單的按鍵式流程(push-button flow),幫助用戶在測試平台可用之前提早測試功能性問題,以節省時間和資源。

時至今日,傳統Linting檢測已發展到涵蓋功能簽核、有限狀態機(FSM)分析以及程式碼複雜性分析,而 Synopsys VC SpyGlass 等解決方案得以進一步捕捉各種錯誤,並運用高效且詳盡的程式碼Lint檢測真正實現「左移(shift left)」設計流程。隨著新流程導入,晶片設計領域將擁有一套全面性解方以解決結構(structural)和電性(electrical)問題,這些都與設計的RTL敘述相關聯,並能更快地識別出根本原因。

在本系列的第二章節,我們將深入探討團隊如何使用 Synopsys GuideWare 方法論,協助新手快速掌握各種靜態工具,在下一個設計上快速起步。