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