一、測試的基本概念
IC驗證,一般也稱“功能驗證”,我們今天要講的,不是這個,是它的簡化版:模塊測試,是設(shè)計工程師完成代碼設(shè)計后,需要自己做的這部分驗證工作。IC驗證,我們將會在后續(xù)文章中,專門講解。
為什么說設(shè)計工程師做的模塊測試是IC驗證的簡化版?
在回答這個問題之前,我們先了解幾個概念:
這個幾個概念在軟件工程中都有介紹,IC設(shè)計驗證中一樣存在這幾個概念涉及的工作,所以直接借用。
白盒測試,一般是針對代碼結(jié)構(gòu)進(jìn)行的測試,所以也有稱白盒測試為“結(jié)構(gòu)測試”。
黑盒測試,一般是行為測試,把設(shè)計當(dāng)黑盒子,不用看代碼不用針對代碼結(jié)構(gòu)進(jìn)行測試。我們前面提到的IC驗證,通常指的“功能驗證”,就屬于“黑盒測試”。
灰盒測試,介于白盒測試和黑盒測試之間,兼顧兩者優(yōu)點。
在實際工作中,設(shè)計工程師完成代碼設(shè)計之后,交給驗證工程師之前,除了檢查語法、可綜合性之外(當(dāng)然還有其他檢查,設(shè)計剛?cè)腴T,不用關(guān)心這么多),還需要進(jìn)行基本的測試,這個基本的測試,原則上應(yīng)該是白盒測試。
實際上,因為全靠設(shè)計工程師構(gòu)造測試?yán)齺碜龈采w完成白盒測試的工作量太大,一般都用更實際的做法:簡單的功能測試。
做法:確認(rèn)設(shè)計的代碼基本可以工作,基本的讀寫沒有問題后,就交給驗證工程師來做“IC驗證”,也就是功能驗證。當(dāng)然,不同的團(tuán)隊對設(shè)計交付代碼質(zhì)量的要求不一樣,那么測試的內(nèi)容和工作量也有差異。
二、Timer測試方案
Timer的測試方案涵蓋的內(nèi)容包括:測試內(nèi)容、測試?yán)y試平臺結(jié)構(gòu),在實際操作中,有些團(tuán)隊略去了測試內(nèi)容的梳理和測試平臺結(jié)構(gòu)的設(shè)計,僅僅構(gòu)造了一些這對基本功能的測試?yán)覀冞@部分保留這些內(nèi)容,但是做了精簡。
1.測試內(nèi)容
Timer模塊的白盒測試,簡化為基本的功能測試,如:
- 對總線接口的讀寫檢查
- 對模塊寄存器的復(fù)位值的檢查;
- 對寄存器讀寫的檢查;
- 對計數(shù)基本功能的檢查;
- 對代碼行、if語句各分支的執(zhí)行檢查等;
針對這些功能,構(gòu)造相應(yīng)的測試?yán)M(jìn)行測試。
2.測試?yán)?/strong>
根據(jù)規(guī)格書上梳理待測試的功能。實際操作時有的工程師會簡化,經(jīng)測試基本功能,確認(rèn)設(shè)計可以動起來。如下表格是測試?yán)钠巍?/p>
3.測試平臺結(jié)構(gòu)
完成待測試功能的梳理和測試?yán)臉?gòu)造,我們接著要做是,設(shè)計構(gòu)造測試平臺(Testbench)。
DUT:待測試對象(Device Under Test),也就是我們前面用Verilog或VHDL寫的RTL設(shè)計代碼。
激勵:DUT和testbench之間只能通過頂層接口連接,所以,所有的測試數(shù)據(jù)都必須按照頂層接口的時序要求,輸入進(jìn)DUT中。這里的測試數(shù)據(jù)也叫測試?yán)蛘邷y試向量。測試?yán)话闶遣捎弥苯訙y試?yán)M(jìn)行測試,這種測試方式針對性強,能夠快速將模塊驅(qū)動起來。
結(jié)果比較:等待DUT輸出結(jié)果(DUT會有標(biāo)識,或通過主機(jī)輪詢,或DUT自己有標(biāo)識接口),testbench必須按照頂層接口的時序要求,取出DUT的輸出結(jié)果,再與期望值比較,最后將比較結(jié)果打印出來,便于查看。
三、Timer測試平臺實現(xiàn)
實現(xiàn)語言: 可以用verilog語言,或者VHDL語言,或者SystemVerilog語言等。
仿真工具 :Modelsim、VCS、NC-Verilog/NC-VHDL
下面是平臺代碼實現(xiàn)的片段。
1. 頂層文件代碼
頂層包含:
- 時鐘和復(fù)位信號的定義;
- 時鐘周期的參數(shù)定義;
- 驗證環(huán)境文件的導(dǎo)入;
- 時鐘的產(chǎn)生;
- 復(fù)位信號的產(chǎn)生;
- 模塊的例化;
- 在初始化中運行測試?yán)蝿?wù);
2 .總線激勵
假定Timer的總線接口是Z總線,下面的代碼就是實現(xiàn)一個Z總線的寫操作,將wdata寫入zaddr這個地址里面。
3.測試?yán)?/strong>
測試?yán)饕菍⑸厦娴目偩€驅(qū)動task調(diào)用起來對模塊進(jìn)行驅(qū)動,讓模塊正常工作起來。同時設(shè)定一定的循環(huán)次數(shù),每一次新的運行需要等待中斷到來之后進(jìn)行新的寄存器配置。
4.結(jié)果比較
為了提高debug效率,將從DUT出來的結(jié)果和理想結(jié)果進(jìn)行自動對比,并將對比結(jié)果打印出來。
結(jié)果比較一般流程是等待DUT的中斷到來,然后讀取Timer的寄存器的值與期望值做比較。
四、測試平臺Debug注意事項
- 在對整個testbench進(jìn)行編譯時候,初期語法錯誤較多,這時候需要多聯(lián)系上下文來check,很多時候工具報的問題不在出錯誤的地方。
- Debug經(jīng)常遇到的問題是測試?yán)芩溃@種情況一般是等待的事件沒有等到,或者寄存器配置錯誤。
-
寄存器
+關(guān)注
關(guān)注
31文章
5363瀏覽量
121198 -
IC設(shè)計
+關(guān)注
關(guān)注
38文章
1302瀏覽量
104292 -
VHDL語言
+關(guān)注
關(guān)注
1文章
113瀏覽量
18091 -
RTL
+關(guān)注
關(guān)注
1文章
385瀏覽量
59954 -
DUT
+關(guān)注
關(guān)注
0文章
189瀏覽量
12491
發(fā)布評論請先 登錄
相關(guān)推薦
評論