AXI 總線功能建??珊喕痁ynq-7000 All Programmable SoC 組件及子系統(tǒng)的驗證工作。本文以賽靈思工具鏈為基礎(chǔ),通過逐步指導(dǎo)實例,詳細介紹了該驗證方法。
賽靈思在ZynqTM-7000 All Programmable SoC 中內(nèi)置了功能強大的雙核ARM?Cortex ? A9 處理器,能讓用戶使用單個芯片即可構(gòu)建自己的高性能片上系統(tǒng)。這樣軟件工程師可以充分利用包括GNU/Linux 在內(nèi)的豐富的ARM軟件生態(tài)系統(tǒng),而硬件設(shè)計人員則可以在可編程邏輯架構(gòu)中添加協(xié)處理器和數(shù)字信號處理功能。現(xiàn)在的問題在于驗證和調(diào)試這樣的片上系統(tǒng),尤其是軟硬件之間的接口。例如,接口一邊受器件驅(qū)動器控制,一邊受中斷服務(wù)程序控制。
隨著ARM CPU 的問世,高級微控制器總線架構(gòu)(AMBA?)以及更為重要的高級可擴展接口(AXI)已成為連接FPGA 內(nèi)部各組件的事實標準。AXI 并非傳統(tǒng)意義上的總線,而是使用交叉開關(guān)矩陣和仲裁,在多個主從機模塊間實現(xiàn)基于事務(wù)的互聯(lián)。AXI 有三種類型,分別是AXI4( 常規(guī)類型)、AXI4-Lite和AXI4-Stream。賽靈思ISE? 14.2 版本和Vivado ? 2012.2 版本設(shè)計工具套件配套提供v1.06a AXI 互聯(lián)功能,同時可與AXI3 和AXI4 相兼容。
總線功能建模(BFM)是一種非常適用于片上系統(tǒng)設(shè)計的電子系統(tǒng)級驗證方法。BFM 的價值在于能夠抽象總線互聯(lián)并提供高級API, 以實現(xiàn)用于激勵RTL 模塊的測試平臺,從而幫助用戶節(jié)省寶貴的時間。BFM 可幫助設(shè)計人員驗證與Zynq-7000 器件的處理系統(tǒng)相連接的RTL 模塊。在賽靈思ISim 這樣的RTL 仿真器內(nèi)部運行時,BFM 可幫助用戶按照自下而上的設(shè)計流程,一次驗證一個或多個模塊。賽靈思與Cadence 通力合作,提供了一種在業(yè)經(jīng)驗證的行業(yè)標準基礎(chǔ)上構(gòu)建的驗證環(huán)境(AXI BFM)。AXI BFM 已經(jīng)投入市場將近兩年時間,近期已升級到2.1 版本。
下面深入了解這種強大的系統(tǒng)級驗證方法及采用這種方法所涉及的步驟。首先列出構(gòu)建一個能夠工作的BFM 驗證環(huán)境所需的工具和組件,其中包括一個能夠為使用BFM 的新手提供幫助的文檔列表。然后介紹使用AXI BFM 驗證RTL模塊的驗證流程。
工程師掌握這種方法最好的方式就是參考實例,所以最后本文將一步一步地介紹使用賽靈思ISE 設(shè)計環(huán)境的詳細情況。本文選擇的實例是一個由一個AXI4 主模塊和一個連接BRAM 的存儲控制器組成的簡單設(shè)計,可作為下一個BFM 驗證項目的起點。這個實例可通過下列網(wǎng)址,從Missing Link Electronics的開發(fā)人員專區(qū)下載: 。
使用步驟
總線功能模型(BFM)能夠顯著降低SoC 設(shè)計驗證階段的工作量。這種方法可幫助您直接將RTL 模塊作為一個被測器件(DUT)連接到BFM,激勵并核對高抽象層面上DUT 的響應(yīng),整個過程無需探究AXI 互聯(lián)的細節(jié)。賽靈思和Cadence 共同推出的AXI BFM 的一大主要優(yōu)勢在于可以避免開發(fā)用于匹配AXI4-Lite IP 接口(IPIF)的代碼,也無需手動編寫RTL 模塊測試臺。AXI BFM緊密集成在FPGA 設(shè)計環(huán)境中。使用賽靈思Platform Studio(XPS)就可為嵌入式系統(tǒng)生成頂層HDL,并為BFM 仿真項目生成大部分必備文件。XPS 還可免除為DUT 正確連線的負擔。您可使用“fush.sh”腳本將BFM 項目與賽靈思ISim 集成在一起,完成最終測試程序的編寫。
DUT 由一個或多個構(gòu)成RTL 模塊的VHDL 或Verilog 文件組成。RTL 模塊的AXI4 接口( 可以是AXI4、AXI4-Stream 或AXI4 - Lite ) 通過Verilog“Testbench.v”內(nèi)部的AXI BFM連接,然后與頂層設(shè)計文件“Test.v”中的測試程序合并。該測試程序用于驅(qū)動和檢查DUT。這樣做的好處在于可以不探究AXI4 的所有細節(jié)。用戶可以使用分區(qū)在功能API 和通道API 兩個抽象層面上的簡便易用、豐富多樣的API 編寫自己的測試程序。
這種API 采用的是Verilog HDL 語言。不過很快就可以發(fā)現(xiàn),這種API 不僅適合HDL 設(shè)計人員,而且也非常適用于有固件或驅(qū)動程序開發(fā)經(jīng)驗的軟件工程師。甚至更好的是,由于AXI BFM 完全理解AXI4、AXI4-Lite 和AXI4-Stream協(xié)議,它會執(zhí)行額外的檢查,而且在仿真過程中,可以看到一旦RTL 模塊“誤解”AXI4,就會發(fā)出告警。這個過程能夠在很大程度上幫助用戶成長為AXI4專家。
AXI BFM 環(huán)境不局限于驗證單個RTL 模塊,而且能夠高效地驗證多個模塊。因此建議使用AXI BFM 驗證組件、子系統(tǒng)乃至整個片上系統(tǒng),并且使用AXI BFM 進行回歸測試。但是需要提醒一下的是,在所有復(fù)雜的驗證項目中,往往出現(xiàn)“只見樹木,不見森林”的情況,所以應(yīng)該和同事共同核查(或自己核查)仿真過程中測試的功能與硬件中使用的功能是否相同。
AXI4 BFM 和XPS
AXI4 BFM 不僅可用于驗證單個RTL 模塊內(nèi)核的總線接口,也適用于仿真整個嵌入式設(shè)計的總線事務(wù)。AXI BFM 為AXI3、AXI4、AXI3-Lite、AXI4-Lite 和AXI4-Streaming 主從模塊提供模型。
根據(jù)不同類型的RTL 模塊的需要,可定制不同的AXI 接口。雖然常規(guī)的AXI3 和AXI4 接口是基于突發(fā)模式,可允許使用不同的數(shù)據(jù)寬度和亂序事務(wù)處理,對只有來自軟件的寄存器式訪問的較簡單RTL 模塊,AXI3-Lite 版本足以使用。用于處理面向信息流的數(shù)據(jù)(比如來自攝像頭接口的視頻數(shù)據(jù))的硬件,往往采用AXI-Stream 協(xié)議,因這種協(xié)議與常規(guī)的AXI 接口相比,更適合管理流數(shù)據(jù)的特征。不過本文介紹的實例的重點是常規(guī)AXI4 接口以及AXI4 總線的BFM 的使用。在XPS 中使用其它類型的AXI 接口測試RTL 模塊的工作流程完全一樣,讀者可將本文的介紹當作使用這些接口進行測試的指南。
下面將展示如何在XPS 里設(shè)置
BFM,從而有效地生成HDL 代碼,用于實例化DUT 和BFM,并在她們之間建立互連。這種方法可以最大限度地減輕手動編寫互聯(lián)HDL 代碼的工作量,這種工作極為耗時。生成的測試系統(tǒng)由待測試的外設(shè)和提供總線激勵的BFM 共同組
成。這樣,使用BFM 主模塊,就可以仿真系統(tǒng)中總線主設(shè)備一般會發(fā)起的總線傳輸,然后檢查連接的RTL 從模塊,看是否行為正確。另一方面,可以使用從BFM 驗證采用AXI 主接口的RTL 模塊的行為正確與否。
在本文接下來的內(nèi)容中,將創(chuàng)建一個由一個從模塊和一個AXI4 Master BFM 組成的簡單系統(tǒng),后者用于為從模塊提供激勵。
AXI4 架構(gòu)簡介
在開始介紹實例之前,先簡單了解一下AXI4 總線架構(gòu),有關(guān)詳細介紹請參閱AXI 總線規(guī)范。[2] AXI4 總線系統(tǒng)分為五個獨立的事務(wù)通道:寫地址通道、寫數(shù)據(jù)通道、寫響應(yīng)通道、讀地址通道和讀數(shù)據(jù)通道。地址通道除了傳輸實際的源地址或目標地址外,還傳輸發(fā)生在相關(guān)數(shù)據(jù)通道上的突發(fā)傳輸?shù)念愋托畔?。信息的?nèi)容包括突發(fā)的傳輸數(shù)量、數(shù)據(jù)的大小和突發(fā)的ID。對每一次突發(fā),從模塊都會利用經(jīng)地址通道傳輸?shù)腎D 向主模塊發(fā)送響應(yīng),通知主模塊本次事務(wù)處理是否成功。
在這五條通道上, 由READY 和VALID 握手信號對來控制實際的數(shù)據(jù)傳輸。正如這兩個信號的名稱意義所示,當總線上的數(shù)據(jù)有效時,發(fā)送側(cè)斷言VALID。當接收側(cè)做好接收數(shù)據(jù)的準備時,接收側(cè)斷言READY。實際的事務(wù)處理發(fā)生在總線時鐘的上升沿,此時READY 和VALID 都處于高電平。在自行實現(xiàn)對AXI 總線的訪問時,務(wù)必記住VALID 信號的斷言不能取決于READY信號,否則會陷入死鎖。
在XPS 中創(chuàng)建簡單測試系統(tǒng)
現(xiàn)在我們已經(jīng)對AXI4 總線系統(tǒng)有了基本的理解,可以開始在XPS 中創(chuàng)建簡單測試系統(tǒng)了,并觀察BFM 和AXI總線的行為。這個系統(tǒng)由一個AXI4Master BFM、一個Block RAM控制器、一個Block RAM 和一個用于連接所有組件的AXI 互聯(lián)組成。下面是創(chuàng)建這個AXI BFM 實例所需的工具列表:
? 賽靈思ISE 14.2 版本或更高版本,配備XPS 14.2 版本
? 賽靈思ISim(14.2 版本)
? AXI BFM 的許可證密鑰(部件號碼DO-AXI-BFM)
? 賽靈思DS824,“AXI BFM2.1 版本”(替代賽靈思UG783)
? 賽靈思DS768,“LogiCORETM IP AXI 互聯(lián)(1.06a 版本)”
? AXI BFM 實例項目, 網(wǎng)址:
和用XPS 創(chuàng)建任何新的嵌入式設(shè)計一樣,先從創(chuàng)建一個新的空白項目開始,將其命名為“bfm_system”。不過這里沒有使用MicroBlaze? 處理器或Zynq-7000 All Programmable SoC,而是實例化一個AXI4 Master BFM,用于在AXI4 總線上發(fā)起事務(wù)處理任務(wù)??梢栽赬PS 中IP 內(nèi)核樹的驗證節(jié)點上找到AXI4 Master BFM。
下面添加一個在“Bus and Bridge”分類下的AXI4 Interconnect IP,再添加一個AXI BRAM Controller 和一個相關(guān)聯(lián)的Block RAM,你可以在XPS IP 標簽中“Memory and Memory Controller”分類下找到這兩個IP。在XPS 的Bus視圖中將這些IP 組件相互連接,讓系統(tǒng)看上去與圖2 所示的一樣。
在XPS 的Ports 標簽中,將AXI 互聯(lián)的時鐘和復(fù)位端口配置成external,將BRAM 控制器和Master BFM 的時鐘端口也連接到外部時鐘端口??勺孉XIBRAM 控制器的“ECC_Interrupt”和“ECC_UE”端口保持未連接,因為不需要使用ECC 功能。設(shè)置時鐘端口的頻率為100MHz。最終系統(tǒng)應(yīng)和圖3 所示的一樣。
接下來在XPS 的Addresses 標簽中設(shè)置BRAM 控制器的地址范圍。這樣還可以確定BRAM 模塊的大小。這里創(chuàng)建一個32K 的Block RAM,起始地址為0x00000000。
現(xiàn)在基本系統(tǒng)設(shè)置已經(jīng)完成,點擊工具條左邊的“Generate HDL Files”就可以讓XPS 生成HDL 代碼。這樣可以在XPS 項目文件夾中創(chuàng)建一個名為Simulation 的目錄。如果想在XPS 中修改系統(tǒng),重新生成HDL 代碼,務(wù)必將手工添加到文件夾中的文件進行備份,否則XPS 在生成仿真文件時,這些文件將被完全覆蓋。在Simulation 文件夾中名為 “behaviorial”的文件夾里,我們可以找到與XPS 設(shè)計名字完全相同的Verilog 或者VHDL 文件(根據(jù)配置設(shè)置中選擇的語言), 該文件名為“bfm_system.vhd”。這就是我們系統(tǒng)的頂層,其中包含剛剛在XPS 中實現(xiàn)的所有實例化組件和連接。
運行仿真
根據(jù)AXI BFM 說明書的建議,應(yīng)在提供了時鐘和復(fù)位信號的測試頂層模塊中例化該系統(tǒng),再從獨立的測試模塊發(fā)起AXI 總線上的事務(wù)處理任務(wù)。(這種方法的結(jié)構(gòu)見圖1 所示)。在總線上發(fā)起事務(wù)處理的方法是從AXI BFM API 調(diào)用對應(yīng)的Verilog 任務(wù)。API 分為通道層和功能層。使用通道層API 可在不同的通道上發(fā)起傳輸,比如讀地址和寫地址通道,這樣我們就能單獨控制寫突發(fā)或者讀突發(fā)的每一個階段。使用功能層API 可方便地啟動整個數(shù)據(jù)傳輸,比如讀突發(fā)或者寫突發(fā)。另外功能層API 還提供可改變BFM 設(shè)置的Verilog 功能,比如修改ISim 控制臺上的輸出冗余。DS824 詳細介紹了該API,并提供一個編程人員參考。
使用Verilog 的“。”運算符,通過引用BFM 實例,在測試程序中調(diào)用API的函數(shù)和任務(wù)。圖4 就是這種函數(shù)調(diào)用的例子。完整的代碼包含在與本文配套的項目包中,并提供shell 腳本,用于編譯實例并運行ISim 查看波形。請閱讀項目包中的README.txt 文件了解如何使用該腳本。運行該腳本即可打開ISim 主窗口。加載ISim 中的“axi_waveforms.wcfg”文件,仿真系統(tǒng)15 微秒,即可查看AXI 總線各通道上的信號。
測試程序首先對Block RAM 發(fā)起256 個32 位字符組成的寫突發(fā),然后讀回數(shù)據(jù)。通過搜索上升時鐘沿(在寫地址通道,s_axi_awready 和s_axi_awvalid 信號同時處于高電平),我們可以看到用于描述突發(fā)流向的信息被發(fā)送給Block RAM 控制器。主機通過斷言s_axi_wlast 信號為突發(fā)的最后一個字符做上標簽。跟隨寫突發(fā),從模塊——即這里的Block RAM 控制器——會通過寫響應(yīng)通道(圖5)發(fā)出事務(wù)處理成功的信號。
可針對讀突發(fā)檢查相同的結(jié)構(gòu)。描述突發(fā)的信息通過讀地址通道發(fā)送,實際數(shù)據(jù)通過讀數(shù)據(jù)通道發(fā)送。與寫突發(fā)不同,這里沒有單獨的讀取響應(yīng)通道。但從模塊會對讀傳輸中的每一個字斷言讀響應(yīng)信號s_axi_rresp,以說明目前的讀取是否成功。
當然,對這個使用現(xiàn)成組件的小型實例系統(tǒng)來說,所有的總線事務(wù)處理都是成功的。不過在開發(fā)RTL 模塊時,需要判斷RTL 模塊是否符合AXI 標準。BFM 提供協(xié)議檢查功能,用于確保連接的RTL 模塊行為的正確性。例如,主機BFM 會檢查連接的RTL 模塊是否在復(fù)位后為輸出端口應(yīng)用正確的復(fù)位值。在ISim 的控制臺可以檢查這一行為。總線控制模塊的協(xié)議檢查API 還能提供更多功能。AXIBFM 產(chǎn)品說明書 對此也有深入介紹。
強大的工具
賽靈思和Cadence 已經(jīng)為Zynq-7000 All Programmable SoC 設(shè)計人員提供了一種極為強大的片上系統(tǒng)驗證工具——
AXI4BFM。通過在方便的功能API 之上編寫測試程序,我們可以在設(shè)計之初和回歸測試中驗證RTL 模塊。
Missing Link Electronics 采用預(yù)先驗證的IP,在專家提供的應(yīng)用支持下,開發(fā)針對嵌入式系統(tǒng)的解決方案,可將市售FPGA 器件與開源軟件相結(jié)合。Missing Link Electronics 是賽靈思聯(lián)盟計劃的認證成員,也是Zynq-7000 系列All Programmable SoC 的早期使用合作伙伴。
評論