謝樹平,毛源豪
(湖南艾科諾維科技有限公司,長沙 410000)
現場可編程邏輯門陣列(FPGA,field programmable gate array)是一種半定制芯片,因其獨特的電路可編程特性區(qū)別于其他器件。隨著近年FPGA芯片的快速發(fā)展,其內部的資源數量與豐富度顯著提升[1]。FPGA在通信、圖像處理[2]、深度學習[3]、人工智能[4]與數據中心[5]等領域發(fā)揮著重要的作用。雙倍數據傳輸速率同步動態(tài)隨機存儲器(DDR SDRAM,double data rate synchronous dynamic random access memory)是FPGA板卡中最常用的高速緩存解決方案。DDR SDRAM的工作情況直接影響到整個設備能否正常運作,所以DDR SDRAM測試也是FPGA板卡測試中最重要的測試項目之一。此前對DDR SDRAM的測試主要通過DDR SDRAM控制器的調試端口進行。然而這種測試方案存在操作人員學習門檻高、測試流程不靈活、無法自動生成測試報告等缺點。操作人員在測試前需要充分了解調試端口中約200個信號的定義、各控制信號間的邏輯關系以及操作DDR SDRAM的相關知識。此類方案在生成比特流后測試內容相對固定,可在線配置的測試參數有限,無法設置測試隊列并自動完成。且沒有生成測試報告的功能,相關數據需要操作人員手動記錄。降低了工作效率,增加了出錯風險。
在FPGA與DDR SDRAM的數據交互設計中,設計者通常使用FPGA廠家提供的DDR SDRAM控制器。比如Xilinx公司為旗下的FPGA提供了成熟的存儲器接口生成器(MIG,memory interface generator)。MIG內包含控制器和物理層,設計者可以通過用戶接口或先進可擴展接口(AXI,advanced eXtensible interface)訪問DDR SDRAM。文獻[6]提出了一種基于MIG用戶接口的應用,在MIG用戶接口的基礎上設計了先入先出(FIFO,first in first out)接口,使其既擁有FIFO緩存簡單易用的特點,又有DDR SDRAM存儲空間大的優(yōu)勢。文獻[7]在數據FIFO接口的基礎上增設了一個命令/地址FIFO,實現了隨機讀寫功能。
在DDR SDRAM控制器的測試技術中,通常使用的方案是向DDR SDRAM寫入特定的pattern,然后讀取數據并校驗數據一致性。文獻[8]提出了一種包含內部自測(BIST,built-in self-test)模塊的DDR SDRAM控制器。該模塊將來自隨機數發(fā)生器的數據寫入DDR SDRAM中,并將讀出的數據與寫入的數據在數據比較器中進行對比,從而實現自監(jiān)測的功能。文獻[9]提出了一種基于在線邏輯分析儀(ILA,integrated logic analyzer)知識產權(IP,intellectual property)核驗證DDR SDRAM控制器的方法。使用AXI Trafficgen IP核產生AXI總線的讀寫事務,并用ILA抓取AXI總線上的信號,分析其時序與數據正確性。
實際應用中,通常使用標準JTAG接口實現PC上位機與FPGA之間的通信。文獻[10]設計了一種基于FPGA的DDR SDRAM通用測試電路。該設計使用JTAG接口啟動測試電路,電路自動完成整個測試過程并將測試結果從JTAG接口傳回PC上位機。文獻[11]提出了一種使用工具命令語言(TCL,tool command language)腳本語言測試數字電路的方法。該方法通過在Vivado軟件中執(zhí)行TCL腳本實現自動對調試核虛擬輸入輸出(VIO,virtual input output)的修改與讀取,從而達成高效率的測試。文獻[12]提出了一種基于LabVIEW軟件調用TCL腳本的測試方法,將Vivado軟件的啟動與執(zhí)行TCL腳本的命令封裝為批處理文件,實現了自動化測試與生成報表。文獻[13]提出了一種FPGA的AXI總線接口調試方法,通過使用JTAG to AXI IP核,允許用戶通過執(zhí)行TCL腳本來對AXI總線上的從設備進行訪問。
為了解決當前FPGA板卡中DDR SDRAM測試工作復雜及效率低下的問題,本設計做了如下工作:
1)設計了DDR SDRAM控制器的測試器IP核MIG Tester。該IP核具有生成讀寫事務、校驗數據、記錄數據讀寫用時等功能。同時MIG Tester支持對數據位寬、pattern類型、起始地址、測試地址范圍、突發(fā)長度等參數的在線配置,具有高度的靈活性。
2)設計了TCL腳本。用于控制VIO、ILA、JTAG to AXI 等IP核,從而實現對整個測試流程的控制以及測試結果信息的讀取。
3)設計了上位機圖形界面程序。將測試流程中各個階段需要執(zhí)行的TCL腳本封裝。通過文本框打印測試信息,同時自動生成測試報告,便于操作人員使用。
測試平臺架構主要由兩個部分構成:FPGA板卡與PC上位機。FPGA板卡內包含FPGA與DDR SDRAM,二者通過板卡上的DDR SDRAM接口相連接。PC上位機與FPGA通過JTAG接口實現通訊。用戶在PC上位機操作圖形界面程序,完成測試流程與輸出測試結果[14-15]。所述架構如圖1所示。
圖1 測試平臺架構框圖
DDR SDRAM是待測的目標器件,由FPGA中的MIG控制。在對DDR SDRAM的測試中,重點關注的是DDR SDRAM的讀寫正確性與帶寬兩項性能[16]。
FPGA與DDR SDRAM通過DDR SDRAM接口相連接,FPGA內例化的MIG控制DDR SDRAM的初始化與數據讀寫。MIG Tester可以通過MIG的AXI slave接口對DDR SDRAM進行數據讀寫。MIG Tester的功能是測試讀寫正確性與帶寬。MIG Tester有兩個主要接口:一個是AXI slave接口,作為控制接口與JTAG to AXI相連,TCL腳本控制JTAG to AXI來與MIG Tester進行通信,控制測試流程與讀回測試結果;另一個是AXI master接口,作為數據讀寫接口與MIG相連,測試過程中對MIG的數據傳輸均由此接口實現。此外MIG Tester還有一個塊隨機存取存儲器(BRAM,block random access memory)主接口,用于向BRAM寫入錯誤數據對應的地址信息,便于后續(xù)對錯誤數據的溯源分析。FPGA內例化的VIO、JTAG to AXI和ILA調試核互相配合下起到控制MIG初始化、控制MIG Tester、抓取AXI總線信號的作用,這些調試核均受PC上位機控制[17-18]。
PC上位機通過JTAG接口與FPGA進行通信。通過在PC上位機的VivadoTcl Shell程序中執(zhí)行TCL腳本,可以對FPGA中調試核的信息讀取與控制。圖形界面程序將VivadoTcl Shell作為子進程運行,并將測試相關的TCL腳本封裝為對應的按鈕。操作人員可以通過圖形界面程序便捷地控制整個測試流程,提高了測試效率,降低了學習門檻[19-20]。
測試板卡使用的FPGA產自Xilinx公司,型號為xc7k325tffg900-2,使用的DDR SDRAM型號為MT8JTF2-5664HZ-1G6M1。
工程主要包含JTAG to AXI、MIG Tester、AXI Smart-Connect、MIG、AXI Bram Controller等IP。模塊之間主要通過AXI總線進行連接,所有AXI總線通過AXI SmartConnect互聯IP連接在一起。地址空間分配中,MIG基地址被設為0x80000000,可被MIG Tester和JTAG to AXI訪問。MIG Tester基地址設為0x44A00000,AXI BRAM Controller基地址設為0x00000000,兩者都只能被JTAG to AXI訪問。BRAM的類型為真雙口BRAM,其中一個接口受AXI BRAM Controller控制,另一個接口供MIG Tester的BRAM主接口寫入數據[21-22]。
MIG是由Xilinx官方提供的存儲器接口成熟的解決方案,是可靠的DDR SDRAM控制器。MIG由一個控制器與DDR物理層接口組成。MIG將復雜的DDR物理接口封裝為被廣泛使用的AXI接口,簡化了用戶的設計。在FPGA工程設計中,MIG的AXI slave接口與MIG Tester的AXI master接口相連接,在測試過程中完成數據傳輸。MIG的復位信號控制著MIG初始化的開始,由VIO驅動。MIG的初始化完成信號是高電平時表示MIG完成了初始化,由VIO監(jiān)聽。
根據DDR SDRAM型號與具體電路,對MIG進行了如下配置:使能AXI接口,并設置數據位寬為512,以適配MIG Tester的AXI主接口;工作時鐘頻率設為800 MHz,參考時鐘輸入設為200 MHz,以適配板卡上的參考時鐘晶振。
MIG Tester是自主設計的MIG專用測試IP核,主要包含以下模塊:AXI slave接口、控制器、寫數據生成器、AXI master接口、數據校驗器、預期數據生成器、錯誤計數器、計時器與BRAM主接口。MIG Tester的框架如圖2所示。
圖2 MIG Tester框架圖
AXI slave接口是控制接口,通過AXI slave接口可以讀寫控制器中寄存器的值,各寄存器與地址的映射關系與詳細描述如表1所示。
表1 AXI slave接口寄存器地址映射關系
AXI slave接口的寄存器位寬均為32位。其中偏移為0x0~0x18的寄存器是可讀可寫的,主要包括可配置的測試參數與測試控制。偏移為0x20~0x34的寄存器是只讀的,主要包括測試結果以及固定測試參數。
寫數據生成器在控制器的控制下,生成所設地址范圍與所設pattern的寫數據事務。DDR SDRAM測試的地址范圍由測試起始地址、讀寫突發(fā)長度、單次測試突發(fā)數量與MIG數據位寬4個參數共同確定。公式如下:
(1)
Ahigh=Abase+Stest
(2)
式中,Stest是測試地址范圍大小,Ahigh是測試終止地址,Abast是測試起始地址,Wdata是數據位寬,Lburst是突發(fā)長度,Nburst是突發(fā)數量。測試中寫入DDR SDRAM的數據默認是8bit長的遞增數pattern,當固定pattern開關被使能后,DDR SDRAM寫入的pattern將和0x18地址寄存器內的數據保持一致。
AXI master接口是數據傳輸接口,與MIG的AXI slave接口相連接。寫數據生成器生成的寫數據事務和數據校驗器生成的讀數據事務均由此接口完成具體的數據傳輸。
數據校驗器用于校驗讀回的數據與預期數據的一致性。當兩者數據不相符時,錯誤標志信號error_flag置“1”,使錯誤計數器計數加一,并將錯誤數據對應的地址寫入BRAM。
錯誤計數器接收數據校驗器的錯誤標志信號進行計數。在完成測試后把錯誤計數寫入ErrorNumber寄存器。每次開始測試時錯誤計數器清零。
計時器用于計算AXI總線讀寫數據所用時鐘周期。在完成測試過程后計時器會將讀寫數據用時分別寫入ReadCycle寄存器與WriteCycle寄存器。根據這兩項測試結果以及計時時鐘頻率得出讀寫數據用時以及平均帶寬。公式如下:
(3)
(4)
式中,Twrite是寫數據實際所用時長,Cwrite是從寄存器中讀取的寫數據所用時鐘周期數,Ftimer是計時器頻率,Bwrite是寫數據平均帶寬。讀數據所用時間和平均帶寬的計算方式類似,不再贅述。
圖3為MIG Tester控制器的狀態(tài)機示意圖。當TestControl寄存器的啟動位被寫入“1”時,處于空閑狀態(tài)下的控制器進入寫數據狀態(tài)。AXI master接口開始對指定地址范圍寫入所設pattern。在完成指定地址范圍的數據寫入后,控制器進入讀數據與數據校驗狀態(tài)。AXI master接口讀取指定地址范圍的數據并校驗。在完成指定范圍數據的讀取與比較后,進入測試完成狀態(tài),測試結果被寫入AXI slave接口的測試結果寄存器中,同時完成中斷信號置“1”。測試結果寫入完成后,控制器回到空閑狀態(tài)。
圖3 控制器狀態(tài)機
Block Memory Generator可以使用FPGA內的BRAM資源生成性能優(yōu)秀的存儲器,這類存儲器一般就被稱為BRAM。在設計中BRAM被設置為真雙口模式,用于存儲讀寫校驗發(fā)生錯誤的錯誤數據對應的地址信息。
AXI BRAM Controller提供了可供訪問本地BRAM的AXI slave接口,支持突發(fā)事務,性能優(yōu)秀。在設計中AXI BRAM Controller控制真雙口BRAM的其中一個端口。JTAG to AXI可以通過此IP讀取BRAM中的數據。
VIO用于在線監(jiān)測或驅動FPGA內部的信號。本設計中主要使用VIO驅動MIG的復位信號,以及監(jiān)測MIG的初始化完成信號。VIO由PC上位機通過JTAG接口控制。
AXI to JTAG用于生成AXI接口事務。本設計中主要使用AXI to JTAG控制MIG Tester,并讀回測試結果。AXI to JTAG由PC上位機通過JTAG接口控制。
ILA用于捕獲FPGA內部信號。本設計中主要使用ILA捕獲讀寫數據校驗錯誤時MIG的AXI接口的數據,并通過TCL命令將數據保存至PC上位機。ILA由PC上位機通過JTAG接口控制。
AXI SmartConnect是由Xilinx官方提供的AXI總線互聯IP,可以將一個或多個AXI內存映射主設備連接到一個或多個AXI內存映射從設備。本設計中主要使用AXI SmartConnect將各AXI設備互聯。
PC上位機軟件的設計主要包括TCL腳本設計與圖形界面程序設計兩個部分。
TCL作為一門具有簡明高效、便于移植的腳本語言,應用于眾多EDA軟件。Vivado軟件在TCL語言的基礎上增添了許多命令,以幫助開發(fā)者提高生產力。在本設計中,通過TCL腳本編程控制FPGA中的3個調試IP,配合完成初始化測試與讀寫測試兩種測試功能。
3.1.1 VIO控制腳本
通過在Vivado軟件中執(zhí)行TCL腳本,PC上位機可以控制VIO的驅動值或讀取VIO探針的電平。需要修改VIO輸出探針驅動值時,使用set_property命令修改對應探針的OUTPUT_VALUE值,之后使用commit_hw_vio命令執(zhí)行驅動值的修改。需要讀取VIO輸入探針電平時,使用refresh_hw_vio命令刷新VIO輸入探針的電平,然后使用get_property命令獲取對應探針的INPUT_VALUE數值。
3.1.2 AXI to JTAG控制腳本
PC上位機可以通過執(zhí)行TCL腳本來控制AXI to JTAG發(fā)起AXI總線讀寫事務,從而訪問目標設備。當需要對AXI設備進行讀操作時,使用create_hw_axi_txn命令創(chuàng)建讀數據事務,執(zhí)行run_hw_axi命令運行該事務。隨后使用report_hw_axi_txn命令報告讀取數據。在完成傳輸數據事務后,使用delete_hw_axi_txn命令刪除該事務。寫AXI設備數據的過程與讀數據過程類似,區(qū)別在于生成寫事務時需要指定事務類型為寫,并增加一個寫入數據作為參數。
3.1.3 ILA控制腳本
TCL腳本可以控制ILA執(zhí)行信號抓取任務,并將抓取的數據展示或保存下來。需要通過ILA抓取特定信號時,首先使用set_property命令修改需要抓取的信號以及觸發(fā)方式,然后使用run_hw_ila命令開始執(zhí)行抓取信號。抓取到信號后,使用upload_hw_ila_data命令更新數據,并用write_hw_ila_data命令將抓取到的信號數據保存為ila文件和csv文件,便于后續(xù)進行分析。
3.1.4 初始化測試腳本
初始化測試的原理是,對MIG重復進行復位與初始化,記錄該過程中MIG是否能在限定時間內完成初始化。
TCL腳本編程的DDR SDRAM初始化測試流程如圖4所示。在開始DDR SDRAM初始化測試后,首先控制VIO驅動MIG復位信號mig_rst_n為0,以確保MIG處于復位狀態(tài)。之后控制VIO驅動MIG復位信號mig_rst_n為1,MIG開始一次初始化過程。之后VIO監(jiān)測的init_complete信號的值,如果在指定時間內檢測到高電平,則視為初始化成功,反之則視為初始化失敗。完成測試結果記錄后,判斷已測試次數是否已達到指定的測試次數,如果已滿足則輸出測試結果,反之則返回第一步繼續(xù)進行測試。
3.1.5 讀寫測試腳本
讀寫測試的原理是,將測試參數寫入MIG Tester,控制MIG Tester開始讀寫測試,并將每次測試結果進行記錄與統計。
TCL腳本控制的讀寫測試流程如圖5所示。首先控制JTAG to AXI向MIG Tester寫入讀寫測試的起止地址、寫操作的pattern與讀寫的突發(fā)數等測試參數。隨后設置ILA的觸發(fā)信號為錯誤標志信號error_flag信號的高電平。寫TestControl寄存器啟動MIG Tester。通過VIO監(jiān)控測試完成信號intr_done直到它變?yōu)楦唠娖健V链艘淮螠y試完成,由JTAG to AXI讀出測試結果并保存。隨后判斷測試次數是否以達到目標,若已達到則統計所有測試結果并輸出,反之則再次啟動測試。
圖5 讀寫測試流程圖
圖形界面程序在PyQt5框架下進行開發(fā)。PyQt5衍生自C++的QT庫,具有能夠跨平臺兼容多種環(huán)境,功能強大,開源免費等優(yōu)勢。圖形界面程序通過創(chuàng)建子進程的方式運行命令行程序,并在命令行程序中打開TCL模式的Vivado。點擊程序中的功能按鈕即可執(zhí)行對應的Vivado指令或者TCL腳本。圖形界面程序的界面如圖6所示,主要功能包括:
圖6 應用程序界面
1)人機交互:操作人員可以根據測試需求,在圖形界面程序中調整測試參數、執(zhí)行測試任務和讀取測試信息。
2)器件控制:程序可以通過JTAG接口完成連接FPGA器件、狀態(tài)檢測、下載比特流、控制調試核等操作。
3)統計結果:程序自動重復并統計測試結果,在測試循環(huán)完成后輸出測試統計報告并保存為日志文件。
程序界面主要分為4個區(qū)域。區(qū)域1主要包括連接器件以及下載比特流文件功能。區(qū)域2包括初始化測試的參數設置與執(zhí)行。區(qū)域3包括讀寫測試的參數設置與執(zhí)行。區(qū)域4是一個文本框,輸出文本信息。
首先需要在區(qū)域1中完成器件的連接與比特流文件的下載。程序啟動后將自動運行Vivado子進程,并在文本框處提示“Vivado啟動中”。待Vivado啟動完成,文本框處打印“啟動完成”信息,“連接器件”按鈕變?yōu)榭捎?。點擊“連接器件”,Vivado進程將打開硬件管理器,并嘗試連接FPGA器件。如果未檢測到FPGA器件,則打印“連接失敗”信息,如果檢測到FPGA器件,則在“當前器件”標簽處顯示檢測到的器件型號、連接狀態(tài)與編程狀態(tài)?!捌骷吞枴毕吕x項和“比特流選擇”下拉選項會自動篩選出符合當前器件的選項。用戶需要在這一步自行選擇適用的比特流文件并點擊“下載比特流”按鈕。等待文本框提示“比特流下載完成”,即可在區(qū)域2或區(qū)域3中執(zhí)行后續(xù)測試。
區(qū)域2中,初始化時間限制即是TCL腳本中判定初始化是否成功的界限,初始化測試次數是本次執(zhí)行初始化測試的總測試數。執(zhí)行測試后,測試結果打印在文本框中,并在完成一輪測試后生成日志文件。日志文件內容如圖7所示,日志內容包括:測試日期、測試項目名、測試序號、初始化測試結果以及完成本輪次的測試后的統計數據。
圖7 初始化測試結果輸出
區(qū)域3中,軟件將根據設置的起始地址、結束地址以及AXI總線突發(fā)數量等參數,計算出對應的配置參數,并寫入到MIG Tester的配置寄存器中??梢怨催x下方的測試pattern復選框來選定本次測試需要測試的pattern。勾選了自定義pattern的情況下需要將自定義的pattern填入后方的文本框內。設置好pattern測試次數后點擊“執(zhí)行讀寫測試”按鈕,軟件將依次執(zhí)行每個選定pattern的測試。測試結果將打印在下方的文本框中,并在一輪測試完成后將生成日志文件。日志文件內容如圖8所示,輸出的內容包括:測試日期、測試項目名、測試序號、讀寫平均帶寬、錯誤數據數量以及本輪次的測試的統計數據。
圖8 讀寫測試結果輸出
如果在讀寫測試過程中發(fā)生了讀數據與預期數據不符的情況,ILA將抓取錯誤發(fā)生時AXI總線上的信號并保存到硬盤上。在需要分析信號時,可以在Vivado程序中使用read_hw_ila_data命令讀取數據,并用display_hw_ila_data命令繪制信號波形圖。如圖9所示,圖中標記的部分error_flag信號為“1”,表示該位置出現了讀寫錯誤。
圖9 數據錯誤發(fā)生時的信號波形圖
同時BRAM接口寫使能,將錯誤數據對應的地址信息寫入BRAM中。程序可以通過JTAG to AXI訪問MIG中這些地址并讀回數據,從而生成錯誤數據列表。如圖10所示,addr是錯誤數據對應的地址。ex_data是期望數據,也就是讀寫功能正常情況下應讀回的數據。rd_data則是實際讀回的數據。操作人員可以根據該報告分析可能存在的問題。
圖10 錯誤數據記錄文件
使用Vivado軟件的仿真功能對MIG Tester進行功能驗證。配置AXI Verification IP為從模式,連接至MIG Tester的AXI master接口,在仿真中關注AXI總線的讀寫事務以及相關信號的變化。
在單次讀寫測試中,AXI總線上先后發(fā)生的寫事務與讀事務。為了縮短仿真時間,測試的地址范圍設置為0x0~0x63FFF。在通過控制接口啟動測試后,MIG Tester先對整個測試地址范圍順序寫入一次pattern,然后進入讀取數據狀態(tài),并將讀取的數據與預期數據進行校驗。完成整個過程后,完成中斷信號將被置“1”。
在AXI總線的寫通道中,寫地址awaddr在每次握手寫入后增加突發(fā)傳輸所占的地址大小,實現對測試地址范圍內所有地址的寫入。當設置的pattern是遞增數時,寫數據wdata每寫入一次數據后遞增1。寫突發(fā)結束計數器wlast_counter在wlast信號置位時計數加一,用于控制數據的突發(fā)傳輸。write_timer信號是寫狀態(tài)計時器,從測試進入寫pattern過程開始計時,直到進入讀數據狀態(tài)停止計時。
在AXI總線的讀通道中,讀地址araddr在每次握手寫入后增加突發(fā)傳輸所占的地址大小,實現對測試地址范圍內所有地址的讀取。讀數據rdata是讀回的數據。當設置的pattern是遞增數,預期數據expected_data每寫入一次數據后發(fā)生遞增。錯誤標志信號error_flag的特征是在預期數據與讀取數據rdata不同時置1,由于讀取過程中預期數據與讀取數據相符,所以錯誤標志保持為0。讀突發(fā)結束計數器rlast_conter在每次rlast信號置位時計數加一,用于控制狀態(tài)機的轉換。read_timer是讀狀態(tài)計時器,從狀態(tài)機進入讀數據狀態(tài)開始計時,直到進入測試完成狀態(tài)停止計時。
然后人為插入錯誤數據驗證數據校驗模塊功能是否正常。插入錯誤數據的方式如下:選擇pattern為遞增數,并且當寫入數據為A5時,將其替換為5A。在讀數據時,讀回數據rdata為5A,與其對應的預期數據A5不符合,所以錯誤標志信號error_flag置“1”,且錯誤計數器加一。證明數據校驗功能正常。
經過上述功能驗證,可以確認測試IP核MIG Tester邏輯功能符合預期,可以將其用于DDR SDRAM的測試。
FPGA測試平臺工程設計完畢后,在軟件Vivado2020.2默認設置下執(zhí)行生成比特文件。作為對比,打開MIG的示例工程并生成比特文件。MIG的示例工程常作為DDR SDRAM的測試調試工程使用。對比測試平臺工程與示例工程的資源使用數量,結果如表2所示。測試平臺工程資源使用量對比示例工程顯著減少。其中作為FPGA主要資源的查找表(LUT,look-up-table)的使用減少了33.22%,觸發(fā)器(FF,Flip Flop)的使用減少了38.40%。
表2 FPGA資源使用數量對比
測試板卡使用的FPGA產自Xilinx公司,型號為xc7k325tffg900-2,使用的DDR SDRAM型號為MT8JTF2-5664HZ-1G6M1。
4.3.1 測試流程
DDR SDRAM測試基本流程如下:
1)設計FPGA工程,生成比特流文件與ltx文件(調試核信息文件),并拷貝到圖形界面程序目錄下的bitstream文件夾中。
2)使用仿真器將FPGA板卡連接至PC上位機并上電。打開圖形界面程序,待啟動完成后點擊“連接器件”,等待連接完成,標簽欄處出現FPGA器件名稱與狀態(tài)。
3)選擇與FPGA對應的比特流,點擊“下載比特流”,等待比特流下載完成,標簽欄處顯示“已連接,已編程”。
4)在文本框中設置測試參數,根據測試需求執(zhí)行相應的測試。在測試完成后,將在程序目錄下生成測試結果報告。
4.3.2 初始化測試
根據賽靈思官方手冊提供的數據,設置初始化時間限制為1 000 ms。執(zhí)行100次初始化測試。初始化測試結果如表3所示。在100次初始化測試中,DDR SDRAM的初始化均在1 000 ms以內完成。結果說明,測試板卡中的DDR SDRAM能夠正常初始化。
表3 初始化測試結果
4.3.3 讀寫測試
設置讀寫測試起始地址為0,結束地址為0x7FFFF-FFF,即測試整個2 GB的地址空間。設置AXI總線突發(fā)數為64,測試Pattern欄目中勾選遞增數00、FF、55、AA,每個pattern測試100次。數據讀寫測試測試結果如表4所示。寫平均帶寬和讀平均帶寬分別達到了理論帶寬的83.9%和88.1%,且沒有出現過讀寫數據校驗錯誤。證明了在測試環(huán)境下DDR SDRAM讀寫數據功能正常,帶寬性能良好。
4.3.4 測試時長對比
表5是兩類測試的測試平均時長對比。對于初始化測試,示例工程的測試方法如下:操作人員使用Vivado軟件的硬件管理器控制VIO輸出的復位信號失效,之后通過VIO觀察MIG輸出的初始化完成信號是否置“1”,據此判斷MIG是否完成了初始化。在此過程中,操作人員需要不斷重復上述過程。一方面存在操作人員操作或記錄失誤的可能性;另一方面手動操作效率低下,且無法準確判斷初始化所用時長。對于讀寫測試,選用測試00、FF、55、AA與遞增數物種pattern的情況進行對比。示例工程的測試方法如下:操作人員使用Vivado軟件的硬件管理器控制VIO完成DDR SDRAM的初始化、設置讀寫地址與數據。同時設置ILA抓取數據校驗錯誤信號為“1”時的波形。觀察VIO中讀寫數量計數器,據此判斷是否完成了整個地址空間的讀寫。
表5 測試時長對比sec s
由測試結果可見,在DDR SDRAM功能正常的情況下,使用測試平臺測試DDR SDRAM功能所用時長要比使用示例工程縮短70%以上。
在讀寫測試期間發(fā)生了數據錯誤的情況下,測試平臺的優(yōu)勢將進一步體現。測試平臺會將完整的錯誤數據地址信息寫入BRAM中。在單次測試結束后根據地址信息讀回對應錯誤數據,生成完整的錯誤數據列表,對測試時長的影響也不明顯。而使用示例工程測試時,只能通過ILA抓取錯誤數據發(fā)生時的波形。這種方式無法暫停數據讀寫測試,所以無法保證抓取的錯誤數據完整性。另一方面ILA需要操作人員手動抓取波形,增加了測試時長。
4.3.5 測試結論
相比以往的DDR SDRAM測試方案,本測試平臺具有如下優(yōu)勢:
1)測試參數可配置。操作人員可以根據不同的測試需求設置相應的測試參數而無需重新生成比特流,節(jié)省準備時間。
2)自動執(zhí)行測試流程并輸出報告。程序將按照參數設置自動循環(huán)執(zhí)行測試任務,并在測試任務完成后輸出相應的測試日志與報告文件。在測試任務繁重時可以提高測試效率。
3)輔助錯誤分析。當數據讀寫出現錯誤時,程序將記錄錯誤數據對應的地址信息,在當次測試結束后從對應地址讀回錯誤數據并記錄于測試日志中,給錯誤分析與設備調試提供便利。
4)使用FPGA資源降低。對于實驗所用FPGA板卡,對比MIG的示例調試工程,本設計使用的查找表資源由26 081降低至17 415,所用觸發(fā)器資源由33 070降低至20 371,這些主要資源的使用下降了30%以上。在長時間測試中FPGA器件的功耗更低,散熱壓力更小。
5)操作簡單,學習門檻低。經圖形界面程序封裝之后,操作人員無需耗費精力學習其相關軟硬件知識,僅需通過簡單的設置參數與點擊按鈕即可完成測試過程。經過實踐,使用測試平臺的測試用時縮短了70%以上。
提出了一種基于FPGA的靈活度高、操作簡易的DDR SDRAM測試平臺。測試平臺由FPGA板卡與PC上位機兩個主要部分組成。經驗證,測試平臺能夠正確測試DDR SDRAM的初始化過程、讀寫正確性與帶寬等性能并自動生成測試報告。該測試平臺規(guī)避了傳統測試方法操作繁瑣,耗時長,學習成本高等弊端。但在測試前仍需要設計相應的FPGA工程并生成比特流。如果在FPGA板卡設計之初能夠復用FPGA中DDR SDRAM的管腳分配,即可避免重新生成比特流,該方案的便捷性將進一步提升。
測試平臺僅對DDR SDRAM進行了測試,但該架構同樣適用于其他可通過AXI總線訪問的外部存儲設備的測試,具有拓展應用范圍的潛力。