數字芯片和FPGA的驗證。主要是其中的功能仿真和時序仿真。
驗證中通常要搭建一個完整的測試平台和寫所需要測試用例。而verilog這種硬件描述語言是出於可綜合成電路的目的設計出來的,所以它在書寫測試平台和測試用例是不夠方便的(測試平台和用例不需要綜合成電路)。而SV正是由於它不需要滿足可綜合性,所以它變得非常靈活,它引入了面向對象語言的概念。在驗證方面,如果說verilog是C語言的話,那SV就是C++,他不光有verilog的所有特性,還有自身面向對象的特性。如果你了解一點面向對象的概念的話,應該能夠更好地理解其中的差異。
但說到底SV實際上只是一種語言,它撐不起現在芯片龐大的驗證規模。就像英語,你光知道詞匯和語法是不夠的。你需要一種模版,來讓行文變得容易、流暢和優美,來應付各種復雜的場景。SV這種語言之上的就是UVM、OVM等方法學。
說是叫方法學,其實UVM更像是一種庫。你調用這種庫的時候,就可以使用庫中各種寫好的函數。更棒的是,你可以使用它預設好的成熟的框架體系。這樣大量的測試平台所需要的代碼都可以復用,作為驗證工程師,你只需要集中注意力去設計你所需的測試用例,考慮會發生故障的情形就可以了。
驗證中通常要搭建一個完整的測試平台和寫所需要測試用例。而verilog這種硬件描述語言是出於可綜合成電路的目的設計出來的,所以它在書寫測試平台和測試用例是不夠方便的(測試平台和用例不需要綜合成電路)。而SV正是由於它不需要滿足可綜合性,所以它變得非常靈活,它引入了面向對象語言的概念。在驗證方面,如果說verilog是C語言的話,那SV就是C++,他不光有verilog的所有特性,還有自身面向對象的特性。如果你了解一點面向對象的概念的話,應該能夠更好地理解其中的差異。
但說到底SV實際上只是一種語言,它撐不起現在芯片龐大的驗證規模。就像英語,你光知道詞匯和語法是不夠的。你需要一種模版,來讓行文變得容易、流暢和優美,來應付各種復雜的場景。SV這種語言之上的就是UVM、OVM等方法學。
說是叫方法學,其實UVM更像是一種庫。你調用這種庫的時候,就可以使用庫中各種寫好的函數。更棒的是,你可以使用它預設好的成熟的框架體系。這樣大量的測試平台所需要的代碼都可以復用,作為驗證工程師,你只需要集中注意力去設計你所需的測試用例,考慮會發生故障的情形就可以了。
SystemVerilog,ASIC front end verification 本質上還是仿真,需要提供輸入。SV能夠跟方便編寫輸入源,控制激勵在不同時鍾周期的變化,C只是一個輔助處理特殊任務函數。 C/systemC很多情況下用來編寫對照模型 計算對照參數,但是testbench還是基於SV的,而且TB需要Fcov/ Assertion, SV更方便。工業界流行的驗證方法UVM OVM在ASIC驗證上大多數也是由SV實現的。
C++的繼承、多態是基礎~SystemC是C++的一個類庫,是在C++面向對象基礎上實現了一個任務調度的kernel,再在其基礎上構建interface/port/channel等數據結構,之上還有TLM2.0,scv2.0!因為sc本身就是C++,所以它與系統軟件聯合建模驗證架構沒有任何障礙~
SystemVerilog主要適用於模塊級/IP級驗證,但感覺與上層軟件銜接的流暢度沒有SC好!雖然sv實現了UVM思想,但還是沒有充分體現UVM的統一二字~這一點有點硬傷~
SC的UVM庫馬上就要推出了~后面就有得一瞧了~如果綜合工具再給力一點,使用SC描述IC前段設計、驗證的所有階段也不是不可能~
其實學什么都是相通的~關鍵是要貼合項目去實踐。如果有大量的項目來喂你,效果會很好~^_^
SystemVerilog主要適用於模塊級/IP級驗證,但感覺與上層軟件銜接的流暢度沒有SC好!雖然sv實現了UVM思想,但還是沒有充分體現UVM的統一二字~這一點有點硬傷~
SC的UVM庫馬上就要推出了~后面就有得一瞧了~如果綜合工具再給力一點,使用SC描述IC前段設計、驗證的所有階段也不是不可能~
其實學什么都是相通的~關鍵是要貼合項目去實踐。如果有大量的項目來喂你,效果會很好~^_^
目前的IC驗證都是用SystemVerilog語言+UVM驗證方法學,C偶爾用來輔助編寫參考模型或者進行軟硬件協同仿真。所以學習SV和UVM就可以了,當然最好再學點Verilog的設計知識,這樣驗證工作會做的比較完善。
從剛接觸System Verilog以及后來的VMM,OVM,UVM已經有很多年了,隨着電子工業的逐步發展,國內對驗證人才的需求也會急劇增加,這從各大招聘網站貼出的職位上也可以看出來,不少朋友可能想盡快掌握這些知識,自學是一個好辦法,我結合自己的親身經歷和大家談談初學者如何能盡快入門,繼而成為一名合格的IC驗證師。
1.首先來談談仿真工具,無非就是Synopsys,Cacence Mentor三大公司的vcs, incisive, modelsim,其實還有些稍小一些公司象aldec公司的Riviera-PRO也不錯,如果能接觸到這些工具,再能有水平比較高的人提供一些指點就方便多了。如果手頭沒有工具,則要自己考慮在UNIX上安裝合適的工具,這我就不多說了,大家都懂的,哈哈。如果你也不會或者不願意安裝工具那么可以去這里EDA-playground看看,可以在線直接仿真出結果,如果你的網速比較快,這也不失為一個好注意。
2.現在市面上的參考資料比前幾年多多了,不能簡單地說是良莠不齊,至少要找到適合與自己當前情況的資料。不要東看看西瞅瞅,因為包含的內容太多了,當你搞懂這一塊的時候另一塊可能忽略了或者遺忘了,所以最好認真專注於一兩本書籍,千萬不要貪多,我推薦以下幾本:
如果Verilog基礎不好,應該加緊學習,畢竟是SystemVerilog的基礎,夏宇聞編寫的Verilog數字系統設計教程是首選。首先accellera的UniversalVerification Methodology User's Guide還是要讀一讀的,雖然寫的不生動,畢竟只是一個說明書。有關SystemVerilog的書籍市面上不多,Synopsys 的chrisspear10年前所著的《SystemVerilog for Verification》現在看來依然不錯。前幾年Cadence的kathleenA Meade寫了一本《A Practical Guide to Adopting the UniversalVerification Methodology(UVM)》,里面配有大量實際驗證中的例子,很有價值。這本身出版后反映不錯,所以有了后來的另一本書AdvancedVerification Topics主要介紹混合信號,低功耗,以及多語言驗證問題,有興趣的朋友可以參考一下。三大公司中的MentorGraphics也貢獻了《VERIFICATION METHODOLOGY ONLINECOOKBOOK》。國內新出版的《UVM實戰》也很有影響,不過它的第二部也就是源代碼部分實用性不大,就此我曾經詢問過UVM的communitymember中的高人,他們都不推薦去研讀代碼,因為其中有不少東西涉及到各公司以及各大用戶中的很多苟且之事,很多說不定下一版本就會更改甚至取消,和我們使用UVM驗證環境的工程師沒有多大的關系。很多公司對設計工程師的assertion有要求,其實設計工程師自己寫的斷言往往比驗證工程師更實用,《A Practial Guide for SystemVerilog Assertions》也有中文版,例子和翻譯都不錯。
3.我想鼓勵初學者的是不要被厚厚的說明書給嚇一跳,主要是掌握基礎概念。SystemVerilog中除了受限隨機,功能覆蓋率等以外,數據類型,運算符,類的概念都和C++類似,這些也往往是面試中的重點。相比SystemVerilog,UVM中的內容要少些但是牽扯到不少面向對象設計中比較專業的問題象factory,callback等,這需要通過仔細分析代碼來理解。總之,從基本概念入手不要妄圖一下子把所有問題都搞清楚,雖然不經過多年實際工作項目的考驗是無法真正掌握這些內容的,但是不排除經過短期的訓練迅速獲得敲門磚的可能。
4.其它資料,包括一些網站和論壇,像本站就有海量的資料,UVM的官方網站VerificationAcademy有UVM的介紹和視頻,甚至還可以就一些比較專業的問題向committeemember咨詢。
下面的鏈接是一個寫的不錯的基於UVM的FPGA驗證例子,共勉:http://www.cnblogs.com/bettty/p/5285785.html