天天看點

DVT |自動重構    

DVT |自動重構    

設計和驗證一個大型、複雜的半導體器件都是與編碼有關。設計意味着繪制大量的原理圖,并使用手工指定的輸入值實時進行驗證,輸出結果以波形形式觀察的日子已經一去不複返了。當然,可能仍然有一個或兩個模拟功能的示意圖,并且波形在調試中仍然扮演着重要的角色。但是硬體設計、片上系統(SoC)中的嵌入式軟體以及大部分驗證測試平台都是編碼的。

一個典型的設計和驗證環境使用豐富的語言組合,包括SystemVerilog、Verilog、VHDL、E和C/C++,将所有的設計和驗證元素互連在一起。除了代碼的功能正确性之外,還有許多屬性決定了邏輯綜合、編譯器和其他工具對代碼的處理能力,以及工程師對其進行支援、調試和改進代碼的容易程度。即使是一緻對齊和縮進這樣的簡單屬性也可以使代碼更易于了解和維護,特别是當新工程師遇到它時。

為了讓工程師和工具更好地使用代碼,改進代碼的過程通常被稱為“重構”。這個過程不是為了發現或修複代碼中的錯誤,而是為了提高代碼的可了解性和可支援性。在實踐中,重構可以很好地揭示隐藏在“混亂”中的錯誤,并在更好的代碼中通過檢查變得可見。盡管傳統的重構主要是手工完成的,但是設計和驗證代碼的許多重構步驟現在可以在互動式環境中自動執行。

用IDE重構

內建開發環境(integrateddevelopmentenvironment,IDE)最初是為軟體開發而開發的,是一種幫助程式員以互動方式開發、測試和調試代碼的工具。IDEs的範圍已經擴充到支援硬體設計師和軟體工程師建立設計和驗證測試台的過程。IDE可以支援各種軟體程式設計語言、模組化語言、硬體描述語言(如Verilog和VHDL)、專用驗證語言(如e)以及SystemVerilog的設計和驗證功能。IDE可以:

  • 對代碼執行多種類型的檢查;
  • 根據使用者偏好突出顯示和格式化代碼;
  • 編寫代碼,給出完整的設計和測試平台結構;
  • 連接配接到模拟器以調試失敗的驗證測試用例;
  • 以及為代碼開發提供直覺的圖形使用者界面(GUI)。

在GUI背後有很多智能在起作用。IDE實際上會編譯源代碼并建構設計和驗證環境的内部資料庫。這允許使用所使用的語言和庫(如通用驗證方法(UVM))的知識在上下文中分析設計和驗證代碼。這個資料庫和提取的知識使代碼能夠自動更改和改進,所有這些都可以在使用IDE的工程師的輕松控制下進行。

自動重構的示例

使代碼看起來“漂亮”也許是IDE能夠執行的最明顯的改進。如前所述,即使是非常簡單的格式更改也會使代碼更易于了解、驗證和修改。盡管重新格式化不總是被認為是重構的一種形式,但其是合格的,因為它可以在不更改功能的情況下改進代碼。一些基本的重構操作包括:

  • 根據範圍自動縮進代碼;
  • 從行尾修剪空白;
  • 将空白壓縮為單個字元(當它不影響縮進時);
  • 在使用者指定的空格中混合多個制表符和空格;
  • 在指定的标記之前或之後添加空格;
  • 包裝線過長;
  • 以及換行多行注釋以适應行寬度。

雖然這些更改聽起來微不足道,但IDE的自動化可以為工程師節省許多時間,使他們在手動編輯上花費大量時間,以符合公司的編碼準則。對語言文法和語義的深入了解使IDE能夠進行更複雜的代碼操作,包括:

  • 如果語句可選,則插入“begin”–“end”塊;
  • 在新行上放置“if”和“else”結構;
  • 将子產品端口和參數、函數和任務參數以及類參數每行一個或多個放在一行上;
  • 縮進單行和/或多行注釋;
  • 以及縮進指定語言結構。

所有這些重構步驟以及本文中讨論的其他步驟都是自動化的,但完全由使用者控制。有些公司可能允許個别工程師選擇自己的格式首選項;有些公司可能需要使用公司範圍内的配置檔案,以便所有代碼看起來一緻。構件的垂直對齊是工程師通常有強烈偏好的另一個領域。表1顯示了幾種自動化的對齊方式,它們使設計和驗證代碼更易于了解和維護。所有這些都可以由IDE執行。

盡管本文中提供的示例集中在SystemVerilog代碼上,但是重構的原則同樣适用于所有的設計和驗證語言。

DVT |自動重構    

在這種最簡單的重構形式中,代碼既不在文法上也不在語義上發生變化。然而,有些重構操作在文法上改變了代碼而不改變其黑盒功能。任何設計或驗證工具的SystemVerilog前端都應該從重構前後的代碼中建構完全相同的内部模型。SystemVerilog是一種非常複雜的語言,有1300多頁的參考手冊。有許多方法可以指定等效功能。靈活性有時會滋生複雜性。其中一些方法比其他方法更緊湊、可讀和可維護。此外,由于不同的項目團隊可能有不同的編碼風格和規則,重構的能力對遵循編碼準則有很大幫助。

SystemVerilog的一個有用但有時令人困惑的靈活性特性是,子產品執行個體端口連接配接和函數調用參數可以通過位置或名稱指定。位置文法具有簡潔的優點,但是代碼可能很難讀取,特别是當包含許多相同類型的參數或端口時。命名文法提高了可讀性,并且對參數或端口順序不敏感。圖1顯示了IDE自動将命名參數綁定轉換為位置參數綁定的示例。這個螢幕截圖和下面示例中出現的其他截圖來自AMIQ EDA的設計和驗證工具(DVT)Eclipse IDE。

DVT |自動重構    

當進行代碼清理或重用遵循不同編碼規則的以前項目中的代碼時,能夠從一種形式的參數綁定切換到另一種形式,這是非常有用的。圖2顯示了IDE自動将位置參數綁定轉換為命名參數綁定的示例。此功能還可以用于統一編碼樣式,或者可以臨時用于檢查函數調用或執行個體化是否正确。

DVT |自動重構    

SystemVerilog還支援“.*”通配符運算符,這表示所有端口都隐式連接配接到執行個體化範圍内現有的同名信号。如果可能,這是一個非常緊湊的表單,但有時使用者可能希望将通配符擴充為完整的端口清單。圖3顯示了執行此重構的IDE。

DVT |自動重構    

SystemVerilog為靈活性提供了許多其他選項。例如,類方法可以在類本身中實作,也可以隻是使用塊外實作的原型。IDE可以自動重新組織代碼以在這兩個選項之間切換。圖4顯示了一個折疊到該類中的外部方法實作,而圖5顯示了一個拆分為外部的内部實作。

DVT |自動重構    
DVT |自動重構    

另一種導緻代碼更緊湊、更可讀的重構方法是用局部變量替換重複表達式。圖6顯示了使用IDE進行此類更改的示例。表達式“a+b”在同一個函數中出現多次,是以使用者指定建立一個新變量來替換此表達式,然後根據需要命名該變量。

DVT |自動重構    

類似地,使用者可能有一個代碼塊需要重複,是以将其轉換為新的函數或任務将建立更緊湊的代碼。有了一個精心挑選的名字,代碼也會更容易了解。圖7顯示了IDE從使用者指定的代碼部分建立函數。使用者還可以選擇新函數的名稱。

DVT |自動重構    

一旦建立了新函數,就可以在以後的編碼中使用它,隻要它有意義。工程師并不總是用定義明确的庫來啟動項目。他們可能會在編寫代碼時發現重用機會,并且動态重構和建立新的可重用任務和函數的能力非常有價值。

重命名代碼中的元素是最流行的重構操作之一。當使用純文字編輯器編寫代碼時,這個看似簡單的任務很難執行。例如,更改類型的名稱可能涉及到對許多檔案的編輯,而文本編輯器搜尋可能需要繁瑣的驗證,因為其他元素具有相似或相同的名稱。圖8顯示了這個過程如何在IDE中更好地工作。使用者選擇要更改的元素(在本例中為變量)并鍵入新名稱。IDE顯示所有将受名稱更改影響的檔案,使用者可以預覽每個檔案中建議的更改。準許後,所有相關檔案将自動修改,IDE的内部資料庫也将更新。IDE允許使用者輕松地重命名多種元素,包括子產品端口、類、函數、宏、變量和參數。

DVT |自動重構    

結論

SystemVerilog的複雜性以及設計和驗證代碼的不同規則意味着不同的團隊在他們的開發過程中可能會采取不同的方法。IDE的自動重構提供了一種有效的方法,可以将所有代碼轉換為遵循一組通用規則的通用格式。它還通過消除備援來生成更緊湊的代碼,進而使代碼更具可讀性和可維護性。這既節省了時間又節省了資源,這也是IDE成為設計和驗證項目必備的原因之一。

延伸閱讀

本文是系列文章中的第四篇;單擊此處檢視第一部分,單擊此處檢視第二部分,單擊此處檢視第三部分。單擊此處和此處了解有關使用hdl和Eclipse IDE工具重構的更多資訊。

原文連結:https://www.techdesignforums.com/practice/technique/refactoring-design-verification-code/

DVT工具對于學習SV/UVM和驗證環境開發具有很大的幫助,現已是V2Pro課程的一部分。掃描下方二維碼可直達課程頁面,馬上試聽。

DVT |自動重構    

掃描上圖二維碼可直達課程頁面,馬上試聽

往期精彩:

路科釋出| 穩中帶漲!25w成晶片校招薪資平均底!2020應屆秋招資料全面分析!

V2Pro 2020秋M1 我對你的迷惑和選擇都深以為然

V2Pro 2020秋M2 秋招即将結束,而你還在徘徊嗎

V2Pro春季班普遍學撐了,秋季班7月報名你還敢來麼

UVM RAL模型:用法和應用

我們準備做第二期線下教育訓練,依舊認真且嚴肅

如果你突然被裁員了,你的Plan B是什麼?

[彩虹糖帶你入門UVM]

了解UVM-1.2到IEEE1800.2的變化,掌握這3點就夠

DVT |自動重構    

繼續閱讀