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