閆 濤,申志飛,易茂祥,梅春雷
(合肥工業(yè)大學(xué)電子科學(xué)與應(yīng)用物理學(xué)院,安徽合肥 230009)
隨著SOC的快速發(fā)展,數(shù)字邏輯設(shè)計(jì)復(fù)雜度隨之提高,驗(yàn)證的難度也越來(lái)越大。調(diào)查顯示,有1/2以上的SOC項(xiàng)目在第一次流片失敗的主要原因是存在功能缺陷。
統(tǒng)計(jì)顯示,驗(yàn)證設(shè)計(jì)很大難度。將復(fù)雜模塊集成后,難以在驗(yàn)證中將芯片實(shí)際可能遇到的所有條件模擬執(zhí)行。發(fā)現(xiàn)設(shè)計(jì)中的邊界條件以及深層次的設(shè)計(jì)缺陷也是面臨的關(guān)鍵挑戰(zhàn),因此需要先進(jìn)的驗(yàn)證方法學(xué)研究和應(yīng)用。Synopsys公司推出基于Systemverilog語(yǔ)言的VMM(Verification Methodology Manual)驗(yàn)證方法學(xué)則是較突出的一種,在業(yè)界也有廣泛的應(yīng)用,并逐漸取代了Verilog語(yǔ)言的傳統(tǒng)驗(yàn)證方法,成為IC驗(yàn)證領(lǐng)域的一種發(fā)展趨勢(shì)[1-2]。
SystemVerilog建立在 Verilog語(yǔ)言的基礎(chǔ)上,是IEEE 1364 Verilog-2001標(biāo)準(zhǔn)的擴(kuò)展增強(qiáng),兼容Verilog 2001,并成為下一代硬件設(shè)計(jì)和驗(yàn)證的語(yǔ)言[3]。相對(duì)于傳統(tǒng)的Verilog語(yǔ)言,SysemVerilog具有豐富語(yǔ)言能力,能描述復(fù)雜驗(yàn)證環(huán)境,包括帶約束隨機(jī)激勵(lì)產(chǎn)生、面向?qū)ο缶幊毯凸δ芨采w統(tǒng)計(jì)。這些特點(diǎn)使用戶開(kāi)發(fā)出能自動(dòng)產(chǎn)生大量驗(yàn)證情節(jié)的測(cè)試平臺(tái)。文中介紹了基于SystemVerilog語(yǔ)言的驗(yàn)證平臺(tái),并在分析I2C總線協(xié)議的基礎(chǔ)上重點(diǎn)介紹事務(wù)產(chǎn)生及驅(qū)動(dòng)模塊的設(shè)計(jì)[4]。
驗(yàn)證平臺(tái)主要是為了生成激勵(lì)信號(hào)并將激勵(lì)信號(hào)提供給DUT,再進(jìn)一步分析DUT的響應(yīng)是否正確。包括以下步驟:(1)產(chǎn)生激勵(lì)。(2)把激勵(lì)施加到DUT上。(3)捕獲激勵(lì)。(4)檢驗(yàn)正確性。
傳統(tǒng)的Verilog驗(yàn)證方法是用Verilog語(yǔ)言搭建驗(yàn)證平臺(tái)。對(duì)DUT的功能驗(yàn)證只能用人工腳本編寫(xiě)Testcase來(lái)配置和控制DUT,以實(shí)現(xiàn)預(yù)定功能的測(cè)試。然而這需要消耗大量資源,而且還無(wú)法驗(yàn)證到?jīng)]有預(yù)料到的缺陷。當(dāng)驗(yàn)證完成后,仍只能依賴人工檢測(cè)驗(yàn)證是否完備,除了消耗資源以外,還無(wú)法得到理想的功能覆蓋率。顯而易見(jiàn),諸如此類的問(wèn)題在基于Verilog的傳統(tǒng)驗(yàn)證中是難以避免的[5]。
使用SystemVerilog語(yǔ)言建立的激勵(lì)生成器(generate),事務(wù)驅(qū)動(dòng)器(drive),監(jiān)控器(monitor),記分板(scoreboard)等完成上述步驟。
圖1展示了I2C的SystemVerilog驗(yàn)證環(huán)境架構(gòu),包括DUT、接口和驗(yàn)證平臺(tái)。其中驗(yàn)證平臺(tái)由激勵(lì)發(fā)生器、事務(wù)驅(qū)動(dòng)器、總線監(jiān)視、DUT監(jiān)視器和記事板等組成。
圖1 基于SystemVerilog的驗(yàn)證結(jié)構(gòu)圖
接口(interface)是SystemVerilog提供的一個(gè)新的、高層抽象的模塊連接。接口在關(guān)鍵字interface和endinterface之間定義,它獨(dú)立于模塊。接口在模塊中就像一個(gè)單一的端口一樣使用。在最簡(jiǎn)單的形式下,一個(gè)接口可以認(rèn)為是一組線網(wǎng)。通過(guò)使用接口,在進(jìn)行一個(gè)設(shè)計(jì)時(shí)可以不需要首先建立各模塊間的互連。隨著設(shè)計(jì)的深入,設(shè)計(jì)細(xì)節(jié)也會(huì)變得越來(lái)越清晰,而接口內(nèi)的信號(hào)也會(huì)表示出來(lái)。當(dāng)接口發(fā)生變化時(shí),這些變化會(huì)在使用該接口的所有模塊中反映出來(lái),而無(wú)需更改每個(gè)模塊。一個(gè)接口可以像模塊那樣例化,也可以像信號(hào)一樣連接到端口。SystemVerilog的接口還可以包含內(nèi)建的協(xié)議檢查以及被使用該接口的模塊所共用的功能。
激勵(lì)產(chǎn)生器是一個(gè)受約束的隨機(jī)激勵(lì)發(fā)生器,在驗(yàn)證環(huán)境開(kāi)始工作時(shí)創(chuàng)建一個(gè)事務(wù),隨機(jī)化其值,然后將其放入信箱傳遞給驅(qū)動(dòng)器。在SystemVerilog中可以用約束限制隨機(jī)值的范圍,使他們是有效的值,也可以通過(guò)其設(shè)置測(cè)試某些專用功能。
產(chǎn)生器和驅(qū)動(dòng)器通過(guò)信道交換數(shù)據(jù)。信道可以看成一個(gè)具有源端和收端的FIFO。源端把數(shù)據(jù)放進(jìn)信箱,收端從信箱獲取數(shù)據(jù)。信箱可以有容量限制,也可以沒(méi)有。當(dāng)源端線程試圖向容量飽和的信箱放入數(shù)值時(shí),會(huì)發(fā)生阻塞直到信箱里的數(shù)據(jù)被移走。驗(yàn)證平臺(tái)中信箱的容量為1,每次產(chǎn)生器只能放一筆數(shù)據(jù)在信箱,直到被驅(qū)動(dòng)器移走才放入下一筆,這樣就可以實(shí)現(xiàn)對(duì)象間通信的同步。
驅(qū)動(dòng)器從發(fā)生器接收事務(wù)信息,在經(jīng)過(guò)一定的處理后將其輸送給DUT。信號(hào)監(jiān)視器用于監(jiān)控DUT的輸入和輸出,將其輸送至記分板從而通過(guò)比較相關(guān)信號(hào)來(lái)驗(yàn)證DUT的設(shè)計(jì)是否正確。所有組件都是基于SystemVerilog設(shè)計(jì),SystemVerilog語(yǔ)言的面向?qū)ο蟮奶匦源蟠筇岣吡蓑?yàn)證IP核的可重用性。
圖2 I2C總線傳輸協(xié)議圖
文中要驗(yàn)證的DUT是7位尋址的I2C總線模塊,其傳輸協(xié)議如圖2所示。I2C總線用于連接微控制器及外圍設(shè)備。是微電子通信控制領(lǐng)域廣泛采用的一種總線標(biāo)準(zhǔn)。S代表START,P為STOP,在傳輸過(guò)程中第一個(gè)Byte的頭7位組成了從機(jī)地址,最低位(LSB)是第8位,它決定了傳輸?shù)钠胀ê蛶е貜?fù)開(kāi)始條件的7位地址格式方向。第一個(gè)Byte的最低位是“0”,表示主機(jī)會(huì)寫(xiě)信息到被選中的從機(jī);“1”表示主機(jī)會(huì)向從機(jī)讀信息,當(dāng)發(fā)送了一個(gè)地址后,系統(tǒng)中的每個(gè)器件都在起始條件后將頭7位與其地址比較,如果一樣,器件會(huì)判定其被主機(jī)尋址,至于是從機(jī)接收器還是從機(jī)發(fā)送器,都由R/W位決定。而在數(shù)據(jù)傳輸過(guò)程中,發(fā)送到SDA線上的每個(gè)Byte必須為8位,每次傳輸可以發(fā)送的Byte數(shù)量不受限制。每個(gè)Byte后必須跟一個(gè)響應(yīng)位,在響應(yīng)的時(shí)鐘脈沖期間發(fā)送器釋放SDA線(高),首先傳輸?shù)氖菙?shù)據(jù)的最高位(MSB)。
文中重點(diǎn)研究事務(wù)產(chǎn)生及事務(wù)驅(qū)動(dòng)器的設(shè)計(jì)。事務(wù)產(chǎn)生器通過(guò)約束隨機(jī)產(chǎn)生符合I2C協(xié)議的事務(wù)。在I2C總線模塊驗(yàn)證模塊中使用到的約束包括:
(1)合理的尋址范圍。(2)改變R/W位之前必須STOP再重新 START。(3)收到 ACK為“0”時(shí)必須STOP等,這些約束可以保證生成正確的事務(wù)。然而,(1)連續(xù)發(fā)送不同的數(shù)據(jù)。(2)按一定比例產(chǎn)生R/W,ACK位的“0”,“1”等。這些約束則可以驗(yàn)證更多邊沿特性,提高驗(yàn)證覆蓋率。
還可以約束配置條件,例如生成一定數(shù)目的事務(wù),以及發(fā)生錯(cuò)誤的處理方法。總之,采用受約束的隨機(jī)測(cè)試法自動(dòng)產(chǎn)生的測(cè)試集是產(chǎn)生驗(yàn)證負(fù)責(zé)設(shè)計(jì)所需激勵(lì)的唯一可行方法,SystemVerilog提供了多種產(chǎn)生隨機(jī)激勵(lì)的方法。圖3為本次設(shè)計(jì)中所用到的一些約束條件。
圖3 事務(wù)約束條件
事務(wù)驅(qū)動(dòng)模塊的工作,是通過(guò)信箱從事務(wù)產(chǎn)生器中取出事務(wù),并根據(jù)特定的DUT輸入信號(hào)的特性對(duì)其進(jìn)行處理,再通過(guò)接口輸送至DUT。因?yàn)轵?qū)動(dòng)器的結(jié)構(gòu)是取決于DUT,要根據(jù)此協(xié)議產(chǎn)生相應(yīng)的事務(wù),輸送至I2C總線。事務(wù)驅(qū)動(dòng)器相當(dāng)于DUT的軟核或者行為級(jí)描述。
驗(yàn)證環(huán)境作為主機(jī)時(shí),發(fā)送至總線的事務(wù)依次需要START位,7位尋址信號(hào)和R/W位,R/W位決定主機(jī)對(duì)總線的讀或?qū)?。收到響?yīng)的ACK位再寫(xiě)數(shù)據(jù)到總線或從總線上讀數(shù)據(jù),每次讀周期后主機(jī)會(huì)發(fā)送響應(yīng)ACK位,而每次寫(xiě)周期后會(huì)等待從機(jī)發(fā)送的響應(yīng)ACK位。ACK位為1時(shí),主機(jī)要發(fā)送STOP位,則傳輸終止。ACK為0則傳輸繼續(xù)。在R/W位要改變時(shí),傳輸必須重新開(kāi)始,即收到或發(fā)出的ACK位為1,然后主機(jī)發(fā)送STOP。
驗(yàn)證環(huán)境作為從機(jī)時(shí),DUT主機(jī)、START位、7位尋址信號(hào)和R/W位依次由DUT發(fā)出。而從機(jī)在發(fā)出對(duì)尋址信號(hào)的響應(yīng)ACK位后,DUT會(huì)做類似驗(yàn)證環(huán)境為主機(jī)時(shí)的操作。主機(jī)或從機(jī)在操縱總線時(shí),相應(yīng)的從機(jī)或主機(jī)必須釋放總線。
圖4為驗(yàn)證環(huán)境在實(shí)驗(yàn)中運(yùn)行的流程,首先需要生成配置條件并把驗(yàn)證環(huán)境中的各模塊像事務(wù)生成、驅(qū)動(dòng)及監(jiān)控器等連接起來(lái),DUT復(fù)位后將會(huì)按照配置條件的運(yùn)行。在測(cè)試結(jié)束后將會(huì)自動(dòng)生成測(cè)試記錄,通過(guò)此文本文件檢查是否通過(guò)驗(yàn)證。
圖4 驗(yàn)證環(huán)境流程圖
驗(yàn)證過(guò)程中產(chǎn)生的波形如圖5和圖6所示,圖5中 scl_bus、sda_bus為總線信號(hào),scl_loc、sda_loc 為驗(yàn)證環(huán)境的輸出信號(hào),sda_out、scl_out為DUT的輸出信號(hào)。在此波形中DUT為主機(jī),驗(yàn)證環(huán)境中的從機(jī)地址為0x66,則主機(jī)依次發(fā)送START位和7位尋址信號(hào)0x22時(shí)應(yīng)答位為1。重新發(fā)送尋址信號(hào)0x66及R/W位1后,主機(jī)與從機(jī)建立起連接并由從機(jī)寫(xiě)數(shù)據(jù)至主機(jī)。從波形可以看出,主機(jī)和從機(jī)的區(qū)別即是主機(jī)控制總線時(shí)鐘的生成。
圖5 DUT做主機(jī)仿真波形
圖6 DUT做從機(jī)仿真波形
在產(chǎn)生256個(gè)事務(wù)后,DUT的配置做相關(guān)改變,主要目的是把DUT的所有情況都遍歷一遍,在總共產(chǎn)生20 000個(gè)事務(wù)后停止仿真。通過(guò) VCS軟件中的Coverage功能可以看到此次驗(yàn)證覆蓋了所有的功能點(diǎn),其中 line_coverage,condition_coverage,fsm_coverage 達(dá)到100%,toggle_coverage也幾乎達(dá)到了100%。
從實(shí)驗(yàn)過(guò)程看出,基于SystemVerilog的方法在整個(gè)驗(yàn)證過(guò)程中不再需要人工干預(yù),實(shí)現(xiàn)了事務(wù)的自動(dòng)生成,驅(qū)動(dòng)、信號(hào)的監(jiān)控、比對(duì),最終生成報(bào)告并退出仿真。在仿真次數(shù)和運(yùn)行時(shí)間上,基于SystemVerilog的驗(yàn)證方法比使用Verilog的方法無(wú)論在仿真次數(shù)和運(yùn)行時(shí)間上都大大減少。
文中設(shè)計(jì)的驗(yàn)證平臺(tái)結(jié)構(gòu)清晰,模塊相對(duì)獨(dú)立。針對(duì)文中的DUT,在其IP復(fù)用到其他系統(tǒng)芯片時(shí),驗(yàn)證平臺(tái)中的事務(wù)驅(qū)動(dòng)器,監(jiān)控器等都可直接重用,而接口模型可針對(duì)DUT不同的特性稍加修改。這樣可以大大節(jié)省驗(yàn)證平臺(tái)的開(kāi)發(fā)時(shí)間,提高驗(yàn)證效率。
通過(guò)采用SystemVerilog方法設(shè)計(jì)的DUT驗(yàn)證平臺(tái)與傳統(tǒng)的驗(yàn)證平臺(tái)相比更具有抽象層次、結(jié)構(gòu)清晰,隨機(jī)約束的方法可以預(yù)期到更多情況?;赟ystemVerilog設(shè)計(jì)的驗(yàn)證平臺(tái),模塊性強(qiáng)、易于理解和重用,驗(yàn)證過(guò)程是一個(gè)自動(dòng)化過(guò)程,節(jié)省了人力資源和時(shí)間,提高了驗(yàn)證效率。
[1]賀珊,張多利,何偉.基于OpenVera的IIC總線接口功能驗(yàn)證平臺(tái)的搭建[J].合肥工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2007,30(3):261 -264.
[2]詹文法.測(cè)試平臺(tái)的可重用性研究[D].合肥:合肥工業(yè)大學(xué),2004.
[3]Aceellera.SystemVerilog 3.1a Language Reference Manual[M].Napa,California:Aceellera,2004.
[4]克里斯·斯皮爾.SystemVerilog驗(yàn)證—測(cè)試平臺(tái)編寫(xiě)指南[M].張春,麥宋平,趙益新,譯.北京:科學(xué)出版社,2009.
[5]夏宇聞.數(shù)字系統(tǒng)設(shè)計(jì)——Verilog實(shí)現(xiàn)[M].北京:高等教育出版社,2006.