分層驗證法在基于AMBA系統(tǒng)中的應(yīng)用
在基于AMBA(Advanced Microcontroller Bus Architecture,先進的微控制器總線體系結(jié)構(gòu))的系統(tǒng)中,用戶設(shè)計的模塊和第三方IP模塊與AMBA AHB(Advanced High-performance Bus)和AMBA APB(Advance Peripheral Bus)總線相連,如圖1所示。分層驗證方法能夠跨越總線邊界應(yīng)用于AHB和APB兩種總線系統(tǒng)。同樣的方法還可以用于多層設(shè)計以及新的先進可擴展接口(Advanced eXtensible Interface,AXI)。下面主要討論與AHB連接的用戶設(shè)計的模塊。
驗證環(huán)境目標:
* 支持單一模塊級組件驗證;
* 支持子系統(tǒng)組件集成和子系統(tǒng)驗證;
* 支持全系統(tǒng)范圍的集成和全系統(tǒng)驗證;
* 全面改善覆蓋范圍;
* 提供第三方IP模塊的快速集成。
驗證環(huán)境本身也應(yīng)是可升級的,以便在后續(xù)的驗證項目重用。
分層驗證
為了完成既定目標,需要一種分層的方法驗證。分層法用于單個模塊級驗證以及子系統(tǒng)級和全系統(tǒng)級驗證。每一層測試都建立在其它層之上,因此從層與層之間的轉(zhuǎn)移只需做很少的工作。每一層的測試可在后續(xù)的層或新的驗證項目中重用。
將系統(tǒng)分為三層(見圖2),第一層的測試目標是接口協(xié)議的驗證。第二、三層的目標是用真實數(shù)據(jù)流驗證專用邏輯。
第一層
第一層的目標是測試物理總線接口,確保其不違反總線協(xié)議。接口必須遵守在這部分定義的AMBA AHB或APB協(xié)議。第一層測試是一組直接測試,它確保所有不同的總線周期都能被正確執(zhí)行。每一項測試都創(chuàng)建成檢查總線協(xié)議的專門區(qū)域。所有的基本事務(wù)都被測試后,就可以進入第二層。
第二層
第二層的目標是產(chǎn)生一個事務(wù)序列,不僅重點測試總線接口邏輯,而且還要測試專用邏輯。第二層測試產(chǎn)生真實設(shè)計數(shù)據(jù)流。為了完全實現(xiàn)第二層目標,在驗證環(huán)境中必須引入條件隨機技術(shù)(constrained random techniques)。
用條件隨機技術(shù)實現(xiàn)第二層目標的主要益處是很容易完成第一個測試。用幾個簡單的功能命令,就能產(chǎn)生總線周期。高位總線周期和功能區(qū)完成也很快,并且還能發(fā)現(xiàn)更多的難點。將更多的運用統(tǒng)計概念而非僅用直接測試。這種條件隨機環(huán)境能夠從少量的基準測試碼中產(chǎn)生大量的激勵。由于對設(shè)計需求是有條件的,因此仿真周期不會因疏忽而浪費在子系統(tǒng)中無關(guān)緊要的部分。條件隨機數(shù)據(jù)流將使驗證著重針對設(shè)計模塊而非直接測試。實際的數(shù)據(jù)流將完全測試模塊專用邏輯,在某種意義上,更接近物理硅的情況。
條件隨機激勵應(yīng)用于簡單的AMBA AHB周期,也即條件隨機事務(wù)(CRT)功能(見圖3),可以簡單而迅速地產(chǎn)生擴展周期。對于一個給定的AHB事務(wù),傳輸類型、地址、大小和脈沖類型都是有條件的。
例如,AHB主機能產(chǎn)生一個大小和脈沖寬度都可變的讀寫周期。在這個周期中,讀操作占10%,寫操作占70%,空閑狀態(tài)占20%。用傳統(tǒng)的HDL語言是很難描述的。
一個完整的條件隨機環(huán)境定義為一組事務(wù),上面是序列層,中間是選擇層,最后是事務(wù)條件層。有效載荷反饋進系統(tǒng)中,形成一個自激的激勵信號發(fā)生器。單個事務(wù)綜合到一起形成一個序列,多組序列綜合到一起形成一個選擇,多個選擇產(chǎn)生廣泛的事務(wù)周期和響應(yīng)。
第三層:專用測試
第三層的測試用于提高設(shè)計穩(wěn)定性。所有部件都將工作起來,包括系統(tǒng)和應(yīng)用引導序列。在這一層檢查軟件與軟件的接口,測試最終API和驅(qū)動,以及更重要的系統(tǒng)性能。至此,一個完整的層次關(guān)系被確定下來。第三層測試目標是單個模塊或系統(tǒng)的高級功能。第三層還有一個特點,即能夠發(fā)現(xiàn)錯誤(bug)。而傳統(tǒng)的方法只能在實驗室里,產(chǎn)品在投入應(yīng)用的過程中才會發(fā)現(xiàn)。
層目標
第一層的目標是測試模塊的接口,第二、三層的目標不僅測試接口,更重要的是測試模塊專用邏輯(見圖4)。測試時的所有訪問都通過AMBA總線。層被應(yīng)用于設(shè)計驗證處理的每一級,從模塊級驗證,到子系統(tǒng),到最終的全系統(tǒng)驗證。
用分層驗證方法進行模塊級驗證
在基于AMBA系統(tǒng)構(gòu)建之前,每一個模塊都必須進行功能測試。每一個模塊都在獨立的環(huán)境中驗證,并且在每一層都要進行測試。這就是子系統(tǒng)綜合前的設(shè)計,它是為了發(fā)現(xiàn)基本功能性錯誤。在這一級,基準測試序列既可以用傳統(tǒng)的硬件描述語言如VHDL或Vrilog編寫,也可以用硬件驗證語言如OpenVera編寫。OpenVera在設(shè)計時就考慮到易于創(chuàng)建基準測試序列,并且在構(gòu)建時考慮到便于運用象Synopsys Vera一樣的工具進行自動驗證,因此很容易完成驗證任務(wù)。
在模塊級驗證階段,第一層測試檢查模塊能否經(jīng)由定義的AMBA接口被訪問。在子系統(tǒng)集成開始前,模塊必須符合AMBA協(xié)議要求。所有總線周期必須被檢查以確保模塊與AMBA系統(tǒng)中的其它模塊連接時正確運行。在最短時間內(nèi)和最大程度上完成這項工作的最好方法就是用驗證IP,如Synopsys的DesignWare驗證IP,驅(qū)動用戶邏輯模塊。
AHB主機驗證IP用于產(chǎn)生直接讀寫測試,它將全面檢查用戶模塊的AHB總線接口(見圖5)。有一個監(jiān)控器用于檢查是否違反AMBA協(xié)議,并捕捉總線周期的各種信息。監(jiān)控器可以讓驗證工程師知道總線接口已經(jīng)測試了多少。在第一層,若用直接測試的方法實現(xiàn)100%總線測試是不太可能的。而實際上,第一層的目標就是100%的總線周期或事務(wù)范圍測試。這個目標確保模塊在最短時間內(nèi)響應(yīng)絕大多數(shù)AMBA周期。
為了實現(xiàn)更廣泛的功能范圍,第一層的測試環(huán)境能迅速擴展到支持第二層測試。在第二層要用更多的真實總線數(shù)據(jù)流測試模塊功能。為了完全實現(xiàn)第二層目標,必須應(yīng)用條件隨機技術(shù)。在第二層產(chǎn)生隨機數(shù)據(jù)流是很重要的,因為它特別強調(diào)總線操作,能揭示那些被忽視的情況。用直接測試完成這件事情,不僅需要大量的時間,而且并不能仿真真正的AMBA環(huán)境。這些事務(wù)序列開始測試用戶模塊的專用功能。
用更完全的形式測試用戶模塊就是進行大量的AMBA訪問,同時檢查模塊到模塊的數(shù)據(jù)完整性。還應(yīng)該產(chǎn)生一些事務(wù)序列,檢查用戶模塊處在更完全系統(tǒng)中的功能。
當?shù)谝粚訙y試與AMBA協(xié)議一致時,它在第二層仍然有效。第二層測試將產(chǎn)生更全面的AMBA AHB協(xié)議。在條件隨機激勵作用下,測試將接近100%總線事務(wù)目標。
同樣的方法可以建立第三層專用測試。創(chuàng)建一個測試,模擬實際的應(yīng)用功能,如高速緩存接入、DMA傳輸和器件引導配置。引導和應(yīng)用配置時唯一的限制因素是仿真周期和時鐘時間本身。在第三層用傳統(tǒng)的全功能CPU模式測試將需要數(shù)百萬個時鐘周期。用AHB主機驗證IP方式則會減少時鐘周期,并使測試很容易管理。第三層測試的整體優(yōu)勢是模塊接近最終的應(yīng)用形式。例如,在引導過程中測試寄存器負載能徹底清除在引導中可能導致系統(tǒng)崩潰的功能錯誤。
用分層驗證方法進行子系統(tǒng)級驗證
當單個模塊全部驗證完成后,它們就可以集成到子系統(tǒng)環(huán)境中。每一級與模塊級驗證中的一樣,應(yīng)用于子系統(tǒng)環(huán)境中。每一層的驗證目標也是一樣的,例如第一層的協(xié)議檢查,第二層的事務(wù)序列產(chǎn)生,第三層的專用測試。將每一個模塊組合到子系統(tǒng)中,測試的不僅是單個模塊,還包括子系統(tǒng)結(jié)構(gòu)本身。
子系統(tǒng)包括實際的數(shù)據(jù)流發(fā)生器,如PCI、USB和物理存儲器以及存儲器控制模塊。圖6中第三方IP模塊是已經(jīng)發(fā)布的可配置預(yù)驗證IP。預(yù)驗證IP模塊并不需要單獨的模塊級驗證,因為IP提供者已經(jīng)完成這項工作,但是它在子系統(tǒng)中還是應(yīng)驗證其與其它模塊的連接關(guān)系。
第一層測試檢查子系統(tǒng)是否正確連接,是否違反AMBA協(xié)議。在第一層中為模塊級驗證任務(wù)創(chuàng)建的測試可以在子系統(tǒng)驗證中重用。在檢查子系統(tǒng)協(xié)議時,測試修改很方便,就像檢查子系統(tǒng)中的單一單元一樣。
第二層的模塊級條件隨機處理也可以重用。在子系統(tǒng)中,測試的產(chǎn)生是執(zhí)行同樣的AHB主機條件隨機任務(wù)。增加的AHB主機,如新增加的PCI和USB模塊承擔著最多的創(chuàng)建總線數(shù)據(jù)流的任務(wù)。這些模塊就是DesignWare驗證IP,因此在第一次測試前只須花很少的時間。條件隨機技術(shù)應(yīng)該用于這些實際的數(shù)據(jù)流發(fā)生器,就象它應(yīng)用于模塊級測試中的AHB主機一樣。這個子系統(tǒng)驗證環(huán)境很快將產(chǎn)生大量的設(shè)計數(shù)據(jù),這些數(shù)據(jù)將全面測試每個模塊的接口和所有應(yīng)用。
再次驗證在這一級是很重要的。因為所驗證的設(shè)計越來越大,實現(xiàn)目標變得越來越困難。在子系統(tǒng)級,直接測試幾乎是不可能的,即使是最簡單的AMBA子系統(tǒng),也要激勵所有可能的系統(tǒng)配置。條件隨機事務(wù)產(chǎn)生是唯一的方法,只有它能產(chǎn)生足夠的子系統(tǒng)測試來完成整個目標。
子系統(tǒng)級是工程師第一個設(shè)置監(jiān)控器的地方,因此可以了解用戶模塊與其它子系統(tǒng)組件的相互連接關(guān)系,發(fā)現(xiàn)接口邏輯和專用邏輯中的錯誤。第二和第三層的測試能迅速發(fā)現(xiàn)錯誤。第一層協(xié)議只注意協(xié)議規(guī)則,第二、三層測試檢查所有子系統(tǒng)組件工作正確與否。
第三層專用測試工作在模塊級,也可以在子系統(tǒng)內(nèi)擴展到多個組件。例如通過測試PCI和存儲器控制IP的配置,查看PCI接口數(shù)據(jù)傳輸情況和外部存儲器數(shù)據(jù)存儲情況。開始和末端的數(shù)據(jù)映像用于驗證數(shù)據(jù)是否被存放在正確的地址里。這種測試還特別注重總線結(jié)構(gòu)和仲裁邏輯。
最終系統(tǒng)級驗證
在系統(tǒng)級仍然可以用分層的方法,但是現(xiàn)在相當多的驗證負擔要由實際的系統(tǒng)級組件承擔。已經(jīng)存在的來自子系統(tǒng)驗證環(huán)境的第一、二和三層測試都可以在正確創(chuàng)立的系統(tǒng)環(huán)境中重用。
在系統(tǒng)級中,已預(yù)驗證的第三方IP模塊可被用來建造一個完整的系統(tǒng)??芍赜肐P模塊減少了創(chuàng)建系統(tǒng)環(huán)境的工作量,從而讓設(shè)計者將更多的時間集中到核心組件上。
在系統(tǒng)級,驗證目標是檢查為專門應(yīng)用而設(shè)計的整個系統(tǒng)??偩€協(xié)議的驗證不僅要做,更需要注意的是高一級的應(yīng)用測試。在系統(tǒng)級,實際的應(yīng)用軟件用于測試。這個軟件運行在全功能軟件模型上,而不是低級別的AHB主機模型上。
運行實際應(yīng)用編碼的優(yōu)點是創(chuàng)建一個與真實系統(tǒng)盡可能接近的環(huán)境。缺點是當執(zhí)行軟件編碼時很難控制總線周期。編碼不能產(chǎn)生測試所有總線事務(wù)協(xié)議的一整套總線周期,這是系統(tǒng)級環(huán)境中重新運行第一、二層測試的重要原因。第三層測試模擬引導序列和全系統(tǒng)配置。
在系統(tǒng)級仿真環(huán)境中運行的測試軟件都應(yīng)在實際的硅級上再運行,以驗證其功能。實際硅級的操作都應(yīng)在系統(tǒng)級仿真中再現(xiàn),以方便調(diào)試?!?nbsp; (陳鋮譯)
評論