閆 濤,申志飛,易茂祥,梅春雷
(合肥工業大學電子科學與應用物理學院,安徽合肥 230009)
隨著SOC的快速發展,數字邏輯設計復雜度隨之提高,驗證的難度也越來越大。調查顯示,有1/2以上的SOC項目在第一次流片失敗的主要原因是存在功能缺陷。
統計顯示,驗證設計很大難度。將復雜模塊集成后,難以在驗證中將芯片實際可能遇到的所有條件模擬執行。發現設計中的邊界條件以及深層次的設計缺陷也是面臨的關鍵挑戰,因此需要先進的驗證方法學研究和應用。Synopsys公司推出基于Systemverilog語言的VMM(Verification Methodology Manual)驗證方法學則是較突出的一種,在業界也有廣泛的應用,并逐漸取代了Verilog語言的傳統驗證方法,成為IC驗證領域的一種發展趨勢[1-2]。
SystemVerilog建立在 Verilog語言的基礎上,是IEEE 1364 Verilog-2001標準的擴展增強,兼容Verilog 2001,并成為下一代硬件設計和驗證的語言[3]。相對于傳統的Verilog語言,SysemVerilog具有豐富語言能力,能描述復雜驗證環境,包括帶約束隨機激勵產生、面向對象編程和功能覆蓋統計。這些特點使用戶開發出能自動產生大量驗證情節的測試平臺。文中介紹了基于SystemVerilog語言的驗證平臺,并在分析I2C總線協議的基礎上重點介紹事務產生及驅動模塊的設計[4]。
驗證平臺主要是為了生成激勵信號并將激勵信號提供給DUT,再進一步分析DUT的響應是否正確。包括以下步驟:(1)產生激勵。(2)把激勵施加到DUT上。(3)捕獲激勵。(4)檢驗正確性。
傳統的Verilog驗證方法是用Verilog語言搭建驗證平臺。對DUT的功能驗證只能用人工腳本編寫Testcase來配置和控制DUT,以實現預定功能的測試。然而這需要消耗大量資源,而且還無法驗證到沒有預料到的缺陷。當驗證完成后,仍只能依賴人工檢測驗證是否完備,除了消耗資源以外,還無法得到理想的功能覆蓋率。顯而易見,諸如此類的問題在基于Verilog的傳統驗證中是難以避免的[5]。
使用SystemVerilog語言建立的激勵生成器(generate),事務驅動器(drive),監控器(monitor),記分板(scoreboard)等完成上述步驟。
圖1展示了I2C的SystemVerilog驗證環境架構,包括DUT、接口和驗證平臺。其中驗證平臺由激勵發生器、事務驅動器、總線監視、DUT監視器和記事板等組成。

圖1 基于SystemVerilog的驗證結構圖
接口(interface)是SystemVerilog提供的一個新的、高層抽象的模塊連接。接口在關鍵字interface和endinterface之間定義,它獨立于模塊。接口在模塊中就像一個單一的端口一樣使用。在最簡單的形式下,一個接口可以認為是一組線網。通過使用接口,在進行一個設計時可以不需要首先建立各模塊間的互連。隨著設計的深入,設計細節也會變得越來越清晰,而接口內的信號也會表示出來。當接口發生變化時,這些變化會在使用該接口的所有模塊中反映出來,而無需更改每個模塊。一個接口可以像模塊那樣例化,也可以像信號一樣連接到端口。SystemVerilog的接口還可以包含內建的協議檢查以及被使用該接口的模塊所共用的功能。
激勵產生器是一個受約束的隨機激勵發生器,在驗證環境開始工作時創建一個事務,隨機化其值,然后將其放入信箱傳遞給驅動器。在SystemVerilog中可以用約束限制隨機值的范圍,使他們是有效的值,也可以通過其設置測試某些專用功能。
產生器和驅動器通過信道交換數據。信道可以看成一個具有源端和收端的FIFO。源端把數據放進信箱,收端從信箱獲取數據。信箱可以有容量限制,也可以沒有。當源端線程試圖向容量飽和的信箱放入數值時,會發生阻塞直到信箱里的數據被移走。驗證平臺中信箱的容量為1,每次產生器只能放一筆數據在信箱,直到被驅動器移走才放入下一筆,這樣就可以實現對象間通信的同步。
驅動器從發生器接收事務信息,在經過一定的處理后將其輸送給DUT。信號監視器用于監控DUT的輸入和輸出,將其輸送至記分板從而通過比較相關信號來驗證DUT的設計是否正確。所有組件都是基于SystemVerilog設計,SystemVerilog語言的面向對象的特性大大提高了驗證IP核的可重用性。

圖2 I2C總線傳輸協議圖
文中要驗證的DUT是7位尋址的I2C總線模塊,其傳輸協議如圖2所示。I2C總線用于連接微控制器及外圍設備。是微電子通信控制領域廣泛采用的一種總線標準。S代表START,P為STOP,在傳輸過程中第一個Byte的頭7位組成了從機地址,最低位(LSB)是第8位,它決定了傳輸的普通和帶重復開始條件的7位地址格式方向。第一個Byte的最低位是“0”,表示主機會寫信息到被選中的從機;“1”表示主機會向從機讀信息,當發送了一個地址后,系統中的每個器件都在起始條件后將頭7位與其地址比較,如果一樣,器件會判定其被主機尋址,至于是從機接收器還是從機發送器,都由R/W位決定。而在數據傳輸過程中,發送到SDA線上的每個Byte必須為8位,每次傳輸可以發送的Byte數量不受限制。每個Byte后必須跟一個響應位,在響應的時鐘脈沖期間發送器釋放SDA線(高),首先傳輸的是數據的最高位(MSB)。
文中重點研究事務產生及事務驅動器的設計。事務產生器通過約束隨機產生符合I2C協議的事務。在I2C總線模塊驗證模塊中使用到的約束包括:
(1)合理的尋址范圍。(2)改變R/W位之前必須STOP再重新 START。(3)收到 ACK為“0”時必須STOP等,這些約束可以保證生成正確的事務。然而,(1)連續發送不同的數據。(2)按一定比例產生R/W,ACK位的“0”,“1”等。這些約束則可以驗證更多邊沿特性,提高驗證覆蓋率。
還可以約束配置條件,例如生成一定數目的事務,以及發生錯誤的處理方法。總之,采用受約束的隨機測試法自動產生的測試集是產生驗證負責設計所需激勵的唯一可行方法,SystemVerilog提供了多種產生隨機激勵的方法。圖3為本次設計中所用到的一些約束條件。

圖3 事務約束條件
事務驅動模塊的工作,是通過信箱從事務產生器中取出事務,并根據特定的DUT輸入信號的特性對其進行處理,再通過接口輸送至DUT。因為驅動器的結構是取決于DUT,要根據此協議產生相應的事務,輸送至I2C總線。事務驅動器相當于DUT的軟核或者行為級描述。
驗證環境作為主機時,發送至總線的事務依次需要START位,7位尋址信號和R/W位,R/W位決定主機對總線的讀或寫。收到響應的ACK位再寫數據到總線或從總線上讀數據,每次讀周期后主機會發送響應ACK位,而每次寫周期后會等待從機發送的響應ACK位。ACK位為1時,主機要發送STOP位,則傳輸終止。ACK為0則傳輸繼續。在R/W位要改變時,傳輸必須重新開始,即收到或發出的ACK位為1,然后主機發送STOP。
驗證環境作為從機時,DUT主機、START位、7位尋址信號和R/W位依次由DUT發出。而從機在發出對尋址信號的響應ACK位后,DUT會做類似驗證環境為主機時的操作。主機或從機在操縱總線時,相應的從機或主機必須釋放總線。
圖4為驗證環境在實驗中運行的流程,首先需要生成配置條件并把驗證環境中的各模塊像事務生成、驅動及監控器等連接起來,DUT復位后將會按照配置條件的運行。在測試結束后將會自動生成測試記錄,通過此文本文件檢查是否通過驗證。

圖4 驗證環境流程圖
驗證過程中產生的波形如圖5和圖6所示,圖5中 scl_bus、sda_bus為總線信號,scl_loc、sda_loc 為驗證環境的輸出信號,sda_out、scl_out為DUT的輸出信號。在此波形中DUT為主機,驗證環境中的從機地址為0x66,則主機依次發送START位和7位尋址信號0x22時應答位為1。重新發送尋址信號0x66及R/W位1后,主機與從機建立起連接并由從機寫數據至主機。從波形可以看出,主機和從機的區別即是主機控制總線時鐘的生成。

圖5 DUT做主機仿真波形

圖6 DUT做從機仿真波形
在產生256個事務后,DUT的配置做相關改變,主要目的是把DUT的所有情況都遍歷一遍,在總共產生20 000個事務后停止仿真。通過 VCS軟件中的Coverage功能可以看到此次驗證覆蓋了所有的功能點,其中 line_coverage,condition_coverage,fsm_coverage 達到100%,toggle_coverage也幾乎達到了100%。
從實驗過程看出,基于SystemVerilog的方法在整個驗證過程中不再需要人工干預,實現了事務的自動生成,驅動、信號的監控、比對,最終生成報告并退出仿真。在仿真次數和運行時間上,基于SystemVerilog的驗證方法比使用Verilog的方法無論在仿真次數和運行時間上都大大減少。
文中設計的驗證平臺結構清晰,模塊相對獨立。針對文中的DUT,在其IP復用到其他系統芯片時,驗證平臺中的事務驅動器,監控器等都可直接重用,而接口模型可針對DUT不同的特性稍加修改。這樣可以大大節省驗證平臺的開發時間,提高驗證效率。
通過采用SystemVerilog方法設計的DUT驗證平臺與傳統的驗證平臺相比更具有抽象層次、結構清晰,隨機約束的方法可以預期到更多情況。基于SystemVerilog設計的驗證平臺,模塊性強、易于理解和重用,驗證過程是一個自動化過程,節省了人力資源和時間,提高了驗證效率。
[1]賀珊,張多利,何偉.基于OpenVera的IIC總線接口功能驗證平臺的搭建[J].合肥工業大學學報:自然科學版,2007,30(3):261 -264.
[2]詹文法.測試平臺的可重用性研究[D].合肥:合肥工業大學,2004.
[3]Aceellera.SystemVerilog 3.1a Language Reference Manual[M].Napa,California:Aceellera,2004.
[4]克里斯·斯皮爾.SystemVerilog驗證—測試平臺編寫指南[M].張春,麥宋平,趙益新,譯.北京:科學出版社,2009.
[5]夏宇聞.數字系統設計——Verilog實現[M].北京:高等教育出版社,2006.