摩爾定律指出,集成芯片可容納的晶體管數(shù)目約每18個(gè)月增加一倍,性能也將提升一倍。對(duì)于FPGA和數(shù)字IC設(shè)計(jì)開發(fā)的工程師們而言,感同身受的是,在龐大復(fù)雜的系統(tǒng)研發(fā)過程中,設(shè)計(jì)和驗(yàn)證幾乎同等重要,甚至驗(yàn)證工作將花費(fèi)整個(gè)周期的70%~80%。
如何進(jìn)行有效的功能驗(yàn)證,是我們必須面對(duì)的課題。隨著芯片設(shè)計(jì)驗(yàn)證技術(shù)的發(fā)展,SystemVerilog語言在業(yè)界獲得了廣泛應(yīng)用。本文將介紹常用的驗(yàn)證技術(shù)和方法。
無論是從事FPGA開發(fā),還是數(shù)字IC設(shè)計(jì),驗(yàn)證是一個(gè)無法逃避的問題,是整個(gè)項(xiàng)目周期中極為重要的一環(huán)。
驗(yàn)證是一個(gè)覆蓋面比較廣的課題,主要包括功能驗(yàn)證、物理驗(yàn)證、時(shí)序驗(yàn)證等。我們常常涉及功能驗(yàn)證,以確保設(shè)計(jì)能夠按照設(shè)計(jì)規(guī)范實(shí)現(xiàn)應(yīng)有功能。為了完成功能驗(yàn)證,我們需要搭建驗(yàn)證平臺(tái)testbench,這也是業(yè)界最常用的驗(yàn)證手段。
芯片設(shè)計(jì)流程
我們以專用芯片(ASIC)設(shè)計(jì)舉例,從設(shè)計(jì)規(guī)范到投片的設(shè)計(jì)流程,如圖:
與ASIC設(shè)計(jì)不同的是,在FPGA的設(shè)計(jì)流程中,沒有物理實(shí)現(xiàn)和版圖設(shè)計(jì)這一塊,因?yàn)镕PGA已經(jīng)是經(jīng)過測封后的成品,只需要按照設(shè)計(jì)架構(gòu)進(jìn)行開發(fā)和驗(yàn)證。因此,數(shù)字IC工程師與FPGA工程師常??上嗷マD(zhuǎn)換。
RTL設(shè)計(jì)是將設(shè)計(jì)規(guī)范進(jìn)行邏輯代碼實(shí)現(xiàn)的過程,我們常常使用verilog HDL或VHDL語言進(jìn)行設(shè)計(jì)。通過采用相對(duì)合理的設(shè)計(jì)方案,在資源消耗、處理速率和時(shí)延上進(jìn)行平衡。
功能驗(yàn)證作為一個(gè)獨(dú)立模塊,但驗(yàn)證過程卻相當(dāng)復(fù)雜:定義測試用例,搭建測試環(huán)境,運(yùn)行測試用例,以及保證功能覆蓋率。
怎樣進(jìn)行有效功能驗(yàn)證,確保設(shè)計(jì)可靠性,是我們最關(guān)心的課題。
驗(yàn)證平臺(tái)
以FPGA開發(fā)為例,當(dāng)我們完成功能模塊設(shè)計(jì)后,別急著進(jìn)行綜合與實(shí)現(xiàn),以及上板調(diào)試,進(jìn)行行為仿真或功能仿真驗(yàn)證是必要的。
在功能驗(yàn)證中,我們?cè)诒粶y設(shè)計(jì)(Design Under Test,DUT)外搭建驗(yàn)證平臺(tái),就像這樣:
驗(yàn)證平臺(tái)可以用來做什么,又應(yīng)該怎么做?
如上圖所示,對(duì)于DUT,我們需要通過testbench產(chǎn)生測試激勵(lì),然后把測試激勵(lì)應(yīng)用到DUT中,而DUT產(chǎn)生的輸出結(jié)果,我們需要進(jìn)行檢查,看驗(yàn)證測試是否通過,也就是,我們要確保輸出結(jié)果和期望一致。
產(chǎn)生用戶激勵(lì)常用方法:一種是提供確定輸入,進(jìn)行直接測試(direct test);另外就是產(chǎn)生隨機(jī)數(shù)據(jù),進(jìn)行隨機(jī)測試(random test)。
通常,我們需要產(chǎn)生必要的使能信號(hào)、測試數(shù)據(jù)、地址等,通過DUT接口送入。
在高級(jí)驗(yàn)證平臺(tái)種,激勵(lì)被工程師建模并封裝,進(jìn)行事務(wù)級(jí)驗(yàn)證(transaction based verification)。
驗(yàn)證的目的,在于檢查DUT的輸出是否和期望一致。常用發(fā)方法和途徑有以下三種。
(1)通過視圖(波形窗口)檢查。我們通過仿真器查看信號(hào)波形,這也是常用的方法,不過也存在缺點(diǎn),對(duì)于復(fù)雜的設(shè)計(jì),信號(hào)接口眾多,數(shù)據(jù)量大,人眼視覺容易出現(xiàn)錯(cuò)誤。
(2)自動(dòng)化后處理對(duì)比。記錄DUT的輸出,通過運(yùn)行腳本對(duì)比結(jié)果。我們可以將需要的結(jié)果寫為文件保存,導(dǎo)入MATLAB進(jìn)行對(duì)比分析。也可將期望得到的結(jié)果與DUT輸出的結(jié)果通過程序自動(dòng)對(duì)比分析。
(3)做一個(gè)實(shí)時(shí)監(jiān)測器自動(dòng)檢查。當(dāng)然,監(jiān)測器需要進(jìn)行開發(fā),當(dāng)對(duì)比發(fā)生錯(cuò)誤時(shí),通過設(shè)置錯(cuò)誤標(biāo)志和打印信息提示,便于快速發(fā)現(xiàn)錯(cuò)誤,節(jié)省仿真時(shí)間。
在功能驗(yàn)證時(shí),需要考慮主要功能點(diǎn),提供比較完備的測試用例。對(duì)于FPGA功能模塊的驗(yàn)證,或許用不上去搭建復(fù)雜的驗(yàn)證平臺(tái),但是這樣的驗(yàn)證方法和思想依然可借鑒。在芯片設(shè)計(jì)領(lǐng)域,驗(yàn)證工程師作為獨(dú)立崗位,承擔(dān)著設(shè)計(jì)把關(guān)的重任,一旦投片,基本就決定這款芯片的命運(yùn)了。
像筆者這樣的FPGA工程師新手而言,主要任務(wù)就是算法實(shí)現(xiàn)。算法工程師把算法模型交給你,你就開始制定功能模塊實(shí)現(xiàn)方案、與前后級(jí)商討接口、RTL設(shè)計(jì)、仿真驗(yàn)證到上板調(diào)試。相對(duì)于數(shù)字IC工程師的獨(dú)立性而言,FPGA工程師需要的技能也許更多:首先要懂算法,至少要理解算法處理流程;其次,常規(guī)技能要掌握,就是RTL設(shè)計(jì)能力;仿真驗(yàn)證能力,如何設(shè)計(jì)好的testbench來驗(yàn)證你的DUT,保證系統(tǒng)集成時(shí)不會(huì)有問題;最后還需要上板調(diào)試,需要掌握調(diào)試手段和驗(yàn)證分析能力,對(duì)整個(gè)系統(tǒng)需要比較熟悉,常常涉及射頻和協(xié)議棧。隔行如隔山,精力也有限,因此挑戰(zhàn)必然存在。
整個(gè)驗(yàn)證流程,我們通過下圖來說明。
這里上圖提到的回歸測試和覆蓋率收斂,對(duì)于小白或新手而言,可能比較陌生,尤其是對(duì)于我這樣的非驗(yàn)證崗人員。
一旦幾乎全部測試用例被成功執(zhí)行,那么驗(yàn)證就進(jìn)入了回歸測試(regression test)和覆蓋率收斂階段。
回歸測試要求能夠周期的批處理運(yùn)行,并且激勵(lì)能夠得到重現(xiàn),成功或失敗都能夠自動(dòng)檢查。
這個(gè)時(shí)候,所有測試應(yīng)該在每天或每周做回歸周期性運(yùn)行,查看覆蓋率,解決可能存在的bug,盡可能實(shí)現(xiàn)覆蓋率100%。
對(duì)于做FPGA的工程師而言,仿真時(shí)間太長,就不爽了。我們關(guān)心的是,功能驗(yàn)證和邏輯驗(yàn)證。覆蓋率沒有100%,也不要緊。不管是Vivado還是Quartus II自帶的仿真器,或者M(jìn)odelsim,都可用來做仿真。使用Modelsim做來聯(lián)合仿真時(shí),需要注意版本匹配和庫文件編譯。
驗(yàn)證技術(shù)和方法學(xué)
有三種常用驗(yàn)證手段:白盒、黑盒和灰盒驗(yàn)證。
三種主要驗(yàn)證技術(shù):形式驗(yàn)證、仿真驗(yàn)證和硬件加速驗(yàn)證。
三種主要驗(yàn)證方法學(xué):隨機(jī)激勵(lì)生成、斷言驗(yàn)證和覆蓋率驗(yàn)證。
做功能驗(yàn)證,目標(biāo)就是驗(yàn)證設(shè)計(jì)能否能夠像預(yù)期工作。然而,可能存在一些設(shè)計(jì)缺陷并沒有在輸出邊界暴露出來,檢測產(chǎn)生遺漏等。
黑盒驗(yàn)證:只通過其邊界信號(hào)來驗(yàn)證一個(gè)模塊或設(shè)計(jì)的功能。驗(yàn)證模型:
黑盒驗(yàn)證有優(yōu)點(diǎn),也有缺點(diǎn)。優(yōu)點(diǎn)就是看起來testbench搭建簡單,缺點(diǎn)就是DUT內(nèi)部錯(cuò)誤不好驗(yàn)證。FPGA仿真驗(yàn)證,就類似這樣。對(duì)于算法實(shí)現(xiàn)而言,常常利用FPGA仿真結(jié)果與MATLAB運(yùn)算結(jié)果對(duì)比,比如畫個(gè)圖,畫條線,數(shù)據(jù)相減,計(jì)算方差等等。內(nèi)部邏輯則可通過觀察波形來判斷,局限于復(fù)雜度不高的情況。
白盒驗(yàn)證和灰盒則通過在設(shè)計(jì)內(nèi)部或者外部輸出信號(hào)放置監(jiān)控器或斷言來保證設(shè)計(jì)操作的正確性,不需要參考模型。
?
關(guān)于驗(yàn)證技術(shù)中的形式驗(yàn)證、仿真驗(yàn)證和硬件輔助加速驗(yàn)證等,其概念和使用方法,咱們不詳細(xì)去討論了,有興趣的朋友,去找?guī)妆維ystemVerilog驗(yàn)證的參考書看看。
在功能驗(yàn)證中,驗(yàn)證工程師面臨著以下挑戰(zhàn):
完備性:最大限度驗(yàn)證DUT的行為,然而,怎樣去獲取必須被驗(yàn)證的場景,提高覆蓋率。
可重用性:考慮如何優(yōu)化驗(yàn)證環(huán)境架構(gòu),使其可在不同場景下重用。若每做一個(gè)工程或迭代更新一個(gè)版本,都需要重新去設(shè)計(jì)testbench,那會(huì)累死三軍。
可靠性:在驗(yàn)證中減少手工操作,以減少認(rèn)為錯(cuò)誤和節(jié)省時(shí)間,然而,搭建一個(gè)自動(dòng)化系統(tǒng)也并非易事,需仔細(xì)分析和搭建,同時(shí)采用約束隨機(jī)進(jìn)行驗(yàn)證。
效率:在給定時(shí)間內(nèi),對(duì)驗(yàn)證工作投入的產(chǎn)出最大化,提高驗(yàn)證的成功率。對(duì)于設(shè)計(jì)師而言,我們常常采用重用技術(shù),比如某個(gè)通用模塊,可在不同工程中使用,我們進(jìn)行簡單移植修改即可。然而驗(yàn)證就沒有這么幸運(yùn)了,場景不同,激勵(lì)也不同,產(chǎn)生的結(jié)果也不同。
性能:驗(yàn)證程序性能上的挑戰(zhàn)就是要如何最大化驗(yàn)證程序的效率。驗(yàn)證耗時(shí)費(fèi)力,所以,每年在秋招春招時(shí),大量芯片類企業(yè)招驗(yàn)證工程師。筆者去年秋招時(shí),本來投遞設(shè)計(jì)崗,然后當(dāng)你筆試或者面試的時(shí)候,給你安排驗(yàn)證的崗位。
功能驗(yàn)證方法學(xué),就是驗(yàn)證電子系統(tǒng)的技術(shù)和科學(xué)。
前面,筆者在《FPGA工程師的核心競爭力—方法篇(一、二)》中,總結(jié)了UltraFast設(shè)計(jì)方法學(xué),從而有效提高設(shè)計(jì)和效率。
而對(duì)于驗(yàn)證這一環(huán),也是有章法可循。
設(shè)計(jì)與驗(yàn)證,相輔相成,如下圖:
DUT能正常工作嗎?測試功能點(diǎn)是什么?怎么測?功能對(duì)不對(duì)?我們做完驗(yàn)證了嗎?簡直就是靈魂拷問。
在驗(yàn)證方法中,斷言驗(yàn)證(ABV)、約束隨機(jī)激勵(lì)測試(CR TB)、覆蓋率驅(qū)動(dòng)驗(yàn)證(CDV)等技術(shù)將會(huì)極大提高驗(yàn)證效率??s短驗(yàn)證周期,快速定位錯(cuò)誤,加速激勵(lì)生成和有效實(shí)現(xiàn)驗(yàn)證收斂。
對(duì)于FPGA工程師而言,在進(jìn)行設(shè)計(jì)和仿真驗(yàn)證中,最常用的語言是verilog HDL或VHDL,各有千秋。verilog HDL用起來比較靈活,有C語言基礎(chǔ)和硬件思維,就可以快速入門。VHDL語法嚴(yán)謹(jǐn),有利于大規(guī)模系統(tǒng)集成。
SystemVerilog是業(yè)界新興的工程語言,基于verilog HDL進(jìn)行了擴(kuò)展,包括對(duì)硬件建模的擴(kuò)展和驗(yàn)證斷言方面的擴(kuò)展。
SystemVerilog具有以下優(yōu)點(diǎn):
(1)單一,同時(shí)支持設(shè)計(jì)和驗(yàn)證的標(biāo)準(zhǔn)語言。
(2)支持約束隨機(jī)的產(chǎn)生。
(3)支持覆蓋率統(tǒng)計(jì)分析。
(4)支持?jǐn)嘌则?yàn)證。
(5)面向?qū)ο蟮?a target="_blank">編程結(jié)構(gòu),有助于采用事務(wù)級(jí)的驗(yàn)證和提高驗(yàn)證的重用性。
基于SystemVerilog的驗(yàn)證方法學(xué)有:OVM、VMM和UVM。目前,業(yè)界最流行的是UVM。相信你在或?qū)?huì)在今后的“金九銀十”的秋招時(shí),會(huì)被問到是否對(duì)UVM有所了解。如果你是看到本文了解到UVM這個(gè)概念,那么趕緊再深入了解一下。
下圖是驗(yàn)證方法學(xué)的發(fā)展時(shí)間線:
UVM (Universal Verification Methodology)通用驗(yàn)證方法學(xué)。它起源于 OVM(Open Verification Methdology),其正式版是在2011年2月由Accellera推出的,得到了Synopsys、Cadence和Mentor的一致支持。UVM幾乎完全繼承了OVM,同時(shí)又采納了Synopsys在VMM中的寄存器解決方案RAL。UVM繼承了OVM和VMM的優(yōu)點(diǎn),克服了各自的缺點(diǎn),代表了驗(yàn)證方法學(xué)的發(fā)展方向。
下圖是典型的UVM驗(yàn)證平臺(tái)框圖:
由于SystemVerilog可完全兼容Verilog,所以你在.sv文件中加入幾行Verilog語法的程序也不會(huì)出錯(cuò)。比如讀寫文件的操作,前幾天,筆者也不了解這個(gè)SystemVerilog的用法,就在微信群里問這種小兒科問題:
“SystemVerilog和Verilog在讀寫文件操作上,有什么區(qū)別?”
$fopen,$readmemh/$readmemb,$fwrite,$fclose依然可用。
SystemVerilog中可操作字符串,這對(duì)于存儲(chǔ)初始化文件(.mif)的讀操作比較友好,并且可跳過文件中的注釋。
SystemVerilog中信號(hào)定義,可用logic來代替Verilog中的reg和wire。
關(guān)于任務(wù)task的使用,文件指針等等,可以參閱SystemVerilog設(shè)計(jì)和驗(yàn)證的書籍,講得很詳細(xì)。
審核編輯:劉清
評(píng)論