新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 基于OpenVera構建以太網MAC芯片驗證平臺

        基于OpenVera構建以太網MAC芯片驗證平臺

        ——
        作者:張冬青 張晉敏 時間:2006-10-04 來源:電子設計應用 收藏

        引言

        當芯片的設計規模越來越大,朝向SoC發展時,RTL級功能仿真時間還可以忍受,但門級仿真己經成為不可能繼續廣泛使用的技術了。對設計進行完備性驗證要求有足夠的測試向量,隨著設計規模的增大,需要的仿真向量也急劇增加。近十年來,芯片的設計規模增大了100倍,仿真向量增加了近10000倍。二者的共同作用使門級仿真所需的時間飛速增長。要找到如此龐大的能夠保證驗證完備性的仿真向量集也變得不太可能。

        另一方面,芯片設計又面臨著上市時間的巨大壓力,驗證的不足直接導致芯片不能通過測試,由此可能造成更大的損失。驗證,尤其是功能驗證必將影響集成電路的設計和開發進程。因此,縮短驗證時間、建立高效的驗證平臺已成為現代集成電路設計的關鍵。

        基于驗證平臺的結構

        實時以太網RTE 芯片是符合IEEE802.3(CSMA/CD)協議和IEEE1588精確時間同步協議的通信控制器。它不僅兼容商用以太網的功能,還增加了特殊工業中所必須的實時特性,將應用于高速工業以太網,以滿足工業以太網的實時要求。

                                          驗證平臺的發送部分架構
                                                          圖1 驗證平臺的發送部分架構

        本平臺就是為驗證RTE 芯片而搭建的。平臺采用語言,基于事務級建立。驗證平臺發送部分的架構如圖1所示,接收部分結構與此類似。它包括下面幾個部分:

        1) 調度:調度是整個平臺的頂層,用于協調各個模塊的工作。

        2) DUV(design under verification):待驗證的芯片,除此以外都是用語言編寫的測試軟件模塊。

        3) 測試事例:驗證中針對具體功能而采用不同的測試事例,這里采用帶約束的隨機驗證方式,通過對它的約束產生各種測試事例。

        4) Frame_gen:將測試事例按照CPU總線側的幀格式組成數據幀通過BFM輸出到芯片。

        5) Monitor:監視器,包括Bus_ Monitor和Ethernet_ Monitor。其中Bus_ Monitor監測總線的行為,可以監視存儲器讀寫,芯片的數據處理等事務;Ethernet_ Monitor可以監視輸出有效、沖突、載波等網路信息。

        6) Check_table:根據BFM側監視器檢測的數據以及相應的配置,將理想DUV的輸出存儲在數組中,check模塊可以把Check_table內的數據與DUV輸出進行對照,實現自動檢測。

        7) BFM:總線功能模型,用于模擬總線功能,驅動DUV。

        OpenVera驗證平臺的建立方法及特點

        該平臺基于事務級驗證,采用專門的驗證語言編寫,具有高度的可重用性、靈活性,體現著現代電路設計中驗證的發展潮流,下面將結合此平臺介紹現代驗證的特點和趨勢。

        驗證與設計并行

        傳統的設計首先進行設計的開發,完成RTL代碼的編寫后再進行驗證,整個產品開發時間接近于設計加上驗證的時間。而對于現在的項目開發,在根據具體的設計要求定義功能,并給出初步的設計文檔之后,就可以根據這些功能定義同時進行設計開發和驗證平臺的搭建。這一階段中驗證平臺的搭建主要是建模,因此需要引入高級驗證語言。高級驗證語言是芯片設計復雜度達到一定程度后的必然產物,如OpenVera ,SystemC ,System Verilog,都具有強大的建模功能。就OpenVera而言,它引入C++中類的概念,是一種面向對象的編程,并有強大的函數功能支持,不僅使得驗證與設計并行成為可能,還能加快驗證平臺的建立。

           總線的驅動時序

        圖2 總線的驅動時序

        基于事務級的驗證方法

        以往的驗證基于信號級,一個復雜芯片的信號數目非常多,包括大量的外部信號和內部信號,想要對它進行完整詳細的驗證,需要耗費很多的精力和時間,嚴重影響設計周期。基于事務的驗證方法可以在一個更高的層次上進行驗證,顯著地減輕了測試工作,并有助于統計測試覆蓋率。事務是一次性完成的一組操作或信號變化,在一個抽象概念上包括信號的傳送,數據的處理、變化,系統的狀態等。事務的概念很寬,可以簡單到存儲器的讀寫,復雜到很多數據的處理與傳輸。事務也可以由多個操作、多個時鐘周期組成。

        當一個設計在信號層經常要關注那些1或0時,設計者可以借助基于事務的方法很方便快捷地創建測試方法。系統結構設計人員可以不用費心去思考那些使能信號、地址總線等細節, 而是更多的關注數據的流向、處理、存儲,以及電路的狀態和動作等這類事務。基于事務的驗證方法可以說是自然驗證方法在設計更高抽象層的一種擴展,它也有利于平臺的可重用性。

        將發送數據寫入片內ram 


                                                    圖3 將發送數據寫入片內RAM

        驗證平臺的重用性

        具有重用性的驗證既可以被有相同特性的芯片所重用,比如當不同芯片基于同樣的總線時,總線的BFM以及監視器就可以重用在不同的設計里。很多公司也有自己的成型驗證庫,如Synopsys提供的DesignWare VIP就是一種。另外,具有重用性的驗證也可以在同一設計中被不同的測試事例所重用,本設計中的Frame_gen就是這樣的模塊。搭建可重用的平臺最重要的是各個部件相互獨立,并有層次性。下面對本平臺的BFM和監視器這兩大關鍵的可重用部件加以說明。

        BFM

        總線功能模型構建于較高的抽象層次,是總線功能的一種抽象描述,在基于特定總? 線的基礎上,為底層的各種總線操作建立直接同信號相聯系的模塊。這些模塊可以用函數的形式出現,這些函數的組合可以用來實現總線的功能,這就是總線功能模型。可見,它的作用是提供給上層測試激勵一個任務接口,而對底層的DUT,它提供具體的時序,完成從高層函數到具體帶時序功能的轉換。在設計測試激勵的時候,可以通過簡單地調用總線功能模型提供的任務以及函數對DUT進行驅動。

        發送開始 


                                                                    圖4 發送開始

        在本驗證任務中,只對單個芯片進行驗證,只需要對總線進行讀寫,可以完全采用任務的形式實現。BFM的程序中有一個cpu_port.vrh端口文件,是程序與芯片接口的文件之一,OpenVera通過它對DUV施加激勵。驅動任務可以用類封裝起來(這里是基于任務的BFM),這些任務模擬總線的功能,通過對類內任務調用可實現對DUV施加激勵。

        在平臺運行時可以例化這個類,并調用其任務,調用BFM任務實現對DUV驅動時的時序如圖2所示。圖中示出intel186寫周期的時序(wr為寫信號,低電壓有效,s_clk為時鐘,ALE為地址鎖存信號,data_addr為數據地址線),實現總線向芯片寫數據的功能。采用Vera與VCS工具,數據與地址總線分時復用值為0xffff 的部分是數據,0x0001與0x0002是寫操作的地址。

        監視器

        本設計中有兩個監視器,它的可重用性是提高驗證效率的重要原因,需要遵循一些基本的設計規則。首先,1個監視器只監視1個接口,這樣具有更大的靈活性,需要重用時可以不進行任何修改直接使用。 如果監視器要監視多個接口,當1個接口發生改變時就需要修改監視器,這不符合重用性的要求。其次,監視器可以被建立和取消。 在SoC設計中經常有復用I/O 的存在,隨著I/O功能的不同,可能要使用不同的監視器來監控,需要通過SoC設置的改變來進行選擇。一般來說,可以在監視器代碼中添加一個參數開關來滿足這個要求,在OpenVera中只需在調度中控制。最后還需要注意的是,監視器不能受其它設計或測試模塊影響, 其它模塊代碼如激勵驅動、運行環境或待測IP 的可配置寄存器的變化不能影響監視器工作。

        隨機測試


        隨機測試是必不可少的。因為對于一個系統而言,若期望使用直接測試激勵來覆蓋所有功能的測試,工作量是巨大的;對于模塊間交互工作的邊界情況的測試,使用直接測試激勵也力不從心。所以,相對于直接激勵測試而言,隨機測試的目的在于試圖花費較少的代價找出在某些極端情況或偶然巧合下才出現的設計錯誤。隨機是帶約束的隨機,它比完全的隨機測試更有針對性。對隨機的控制可以在類內部建立constraint模塊進行隨機約束,也可以調用類的對象randomize()函數,用with{}進行約束。以以太網幀為例,“ frame.randomize() with{data_length<100};”產生的隨機數據長度限定在100字節以內。另外,在隨機測試中,功能覆蓋率顯得尤為重要,它是隨機測試是否完成的標準。采用專門的語言和事務級的驗證,以及監視器的監視,能使統計功能覆蓋率變得很容易。比如檢測是否激勵經過了所有類別的幀,如超長幀、短幀、地址不匹配幀等。

        平臺靈活性和獨立性

        靈活的驗證平臺會大大提高驗證的效率。重用性在實現復雜功能的情況下,還要具有獨立性。從另一個角度看,獨立性也可以帶來平臺的靈活性。本文平臺中的配置模塊和軟件提供給check模塊特定的通道,從而在不影響其它模塊的情況下達到了最大的靈活性。自動檢測通過兩側監視器監視的事務,根據配置進行對照,然后產生錯誤提示,給出出錯的相關信息,這使得驗證人員可以根據錯誤報告準確定位錯誤發生地點。這些就是現代驗證的一個趨勢。

        實驗結果

        本平臺在UNIX工作站采用Synopsys的驗證開發環境,設計語言采用OpenVera,應用Vera和VCS仿真工具。發送部分波形如圖3和圖4所示,芯片有8k的片內RAM,首先把發送數據寫入RAM,當RAM中有數據或數據寫完后再進行發送。

        如圖,從15100ns開始向片內RAM寫入發送數據;從27220ns開始啟動發送數據并添加前導(premable)、前定界(sfd)、校驗碼(fcs)。

        結語

        本文中所討論的驗證平臺已在具體項目中得到應用,該結構在很大程度上提高了可重用性、靈活性和驗證的自動化程度。使用該驗證平臺, 能夠極大地提高驗證平臺開發效率,也加速了設計的最終實現。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 荣昌县| 精河县| 太白县| 抚顺县| 治县。| 廊坊市| 葵青区| 迁安市| 汪清县| 合阳县| 扎囊县| 天门市| 郑州市| 嘉定区| 政和县| 沛县| 三河市| 饶阳县| 灵丘县| 伊通| 安顺市| 济阳县| 阜城县| 亚东县| 武宣县| 满洲里市| 长岛县| 叶城县| 双峰县| 门源| 莒南县| 曲水县| 平阳县| 增城市| 合水县| 龙胜| 定襄县| 扬中市| 尉氏县| 南岸区| 璧山县|