UVM学习笔记—快速入门篇
UVM指的是驗證方法學,是學習數字驗證的入門課程。它是至關重要的,有不少人往IC驗證方向發展的,多多少少都會去了解UVM。但UVM并不是簡單的翻個書就可以學會的,還是要掌握學習方法或者跟著老師學習的。
UVM介紹
UVM是一個以SystemVerilog為主體的驗證平臺開發框架,驗證工程師利用其可重用組件可以構建具有標準化層次結構和接口的功能驗證環境。
UVM是一個庫,在這個庫中,幾乎所有的東西都是使用類(class)來實現的。類是面向對象編程語言中最偉大的發明之一,是面向對象的精髓所在。
使用UVM的第一條原則是:驗證平臺中所有的組件都應該派生自UVM中的類。當要實現一個功能時,首先應該想到的就是從UVM的某個類派生出一個新的類,類中可以有成員變量,也可以有函數和任務,通過成員變量、函數或任務實現所期望的功能。
對于驗證方法學來說,分層的測試平臺是一個關鍵的概念。雖然分層似乎會使測試平臺變得更復雜,但它能夠把代碼分而治之,有助于減輕工作負擔,而且重復利用效率提升。基于UVM的驗證平臺可以類似分為五個層次:信號層、命令層、功能層、場景層和測試層。
如何學習UVM
UVM1.2版本包含121個文件,311個類。從經驗來說,我們搭建一個普通的UVM驗證環境,大約需要編寫10個文件,20個類左右。這里分享一下對初學者的個人建議:
第一階段-基礎:
學習UVM之前熟悉SV是必須的,關于SV的系統學習首推“綠皮書”。工作中“asic-world”這個網站可以作為我們的查詢手冊。
第二階段-學習:
有了SV的基礎和OOP的思想,我們就可以開始學習UVM了(很多人入門是看《UVM實戰》-張強著 )。這時我們需要了解UVM構架,各種component, phase管理機制等。最好配合實例代碼一邊看書一邊敲代碼做練習。
第三階段-應用:
當然我們有的朋友會說:“我現在的公司還沒有用UVM來搭環境呀,怎么應用啊?” 但是,沒有條件我們可以創造條件呀! 網上這么多開源的IP,找一個自己感興趣的,把自己當成驗證主管,自己玩兒唄。或者把已經做過的項目再用UVM搭一遍。
第四階段-研究:
這個時候你已經是熟手,并能夠獨立搭建復用性很強的UVM環境了。
這時可以去看看UVM源碼,幫助同事解決實際工作中的各種問題。研究一下UVM代碼自動生成,UVMF是什么等等。
1.什么是UVM?UVM的優勢有哪些?
(NXP、百度面試題)
UVM(通用驗證方法)是一種用于驗證數字設計標準化的簡單方法。
優勢:
第一種自動化方法和第二種自動化類庫的集合
貫穿于驗證平臺的可重用性
即插即用的驗證IP
通用的驗證平臺開發
供應商和模擬器獨立
高智能的驗證平臺(即從預先設計的覆蓋計劃中產生合法的激勵)
支持CDV(覆蓋率驅動)驗證
支持CRV(受限隨機)驗證
UVM在Accelerate System Initiative下標準化
支持寄存器模型
2.uvm_component和uvm_object之間有何區別?
或者我們已經擁uvm_object,為什么我們需要uvm_component這種實際派生自的uvm_object類?(比特大陸、寒武紀面試題)
uvm_component:
準靜態實體(在構建階段之后,它在整個模擬過程中可用)
始終連接到給定硬件(DUT接口)或TLM端口
具有用于控制仿真行為的phase機制
配置組件拓撲結構
uvm_object:
動態實體(在需要時創建,從一個組件轉移到另一個組件然后取消引用)
不連接到給定的硬件或任何TLM端口
沒有phase機制
3.UVM phase中top-down(自頂而下)、down-top(自底而上)以及并行執行的phase分別有哪些?
(寒武紀、樂鑫面試題)
只有build_phase是自頂而下的,除了run_phase,其他phased都是自底而上的。run_phase自頂而下工作,可以配置測試工作臺層次結構,因此我們需要在構建葉子之前構建分支。
4.為什么build_phase是自頂而下而connect_phase是自底而上?
connect_phase旨在用于在組件之間建立TLM類型的連接,這就是它在構建階段之后發生的原因。它自底而上工作,以便在設計層次結構中獲得正確的實現,如果從上到下工作,這是不可能的。
5.UVM中的function phase和task phase分別有哪些?
只有run_phase(及其并行的12個phase)是task phase(消耗仿真時間的phase),其他phase都是function phase(不消耗仿真時間的非阻塞類型phase)。
6.哪個phase花費了更多時間以及為什么?
(比特大陸面試題)
如前所述,run_phase作為task phase,剩下的都是function phase。run_phase將從仿真(run)開始到仿真結束執行。run_phase非常耗時,測試用例產生激勵正是在run_phase中實現。
7.UVM phase如何啟動?
通過在頂層模塊中調用run test(“test1”)來啟動UVM phase。當調用run test()方法時,它首先會創建一個test_top的對象然后調用所有phase。
8.測試用例如何從仿真的命令行啟動?
在top模塊中寫run test(),即不要在變量中提供任何內容。然后在命令行中添加:+UVM_TESTNAME =test1,啟動測試用例名為test1的測試用例。
9.模塊和基于class的tb的區別有哪些?
(樂鑫面試題)
模塊是在仿真期間始終存在的靜態對象。
class是一個動態對象,因為它們可以在仿真的生命周期中來去。
特別指出:interface是靜態對象,因此只能用于top、模塊等靜態對象中,driver為動態的對像類,因此driver等類中使用的為virtual interface,通過虛的指針指向實際的interface。
10.什么是uvm_config_db?uvm_config_db和uvm_resource_db之間有什么區別?
(比特大陸面試題)
uvm_config_db是一個參數化類,用于將不同類型的參數配置到uvm數據庫中,如此它可以被任何較低級別層次結構中的組件使用。
uvm_config_db是一個構建在uvm_resource_db之上的便利層,但這種便利非常重要。特別是,uvm_resource_db使用“最后寫入獲勝”方法。另一方面,uvm_config_db通過end_of_elaboration查看層次結構中的內容,因此“父獲勝”。一旦啟動start_of_simulation,config_db就會變成“最后寫入獲勝”。
uvm_config_db#(T)中的所有函數都是靜態的,因此必須使用::運算符調用它們。uvm_config_db#(T)是從uvm_resource_db#(T)擴展而來的,所以它是uvm_resource_db#(T)的子類。
以上就是IC修真院分享的關于UVM的學習方法,UVM的學習難度非常大,想要學好建議找個靠譜的老師跟著學習,這樣才能事半功倍。
《IC入行指導建議》快來參與吧!(https://www.wenjuan.com/s/3EBZB3H/#)
總結
以上是生活随笔為你收集整理的UVM学习笔记—快速入门篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nexus 5X 使用Zxing扫描倒立
- 下一篇: 扇形束CT重建快速生成系统矩阵(syst