劉旸 丁濤杰 湯明宏 劉志利
(電子科技集團有限公司第五十八研究所 江蘇省無錫市 214000)
由美國加州大學伯克利分校(UCB)設計并公布的RISC-V ISA是一種基于精簡指令集計算原理的指令集架構[1,2]。相比當前發展相對成熟的商業架構,RISC-V 指令集架構憑借精簡、自由、開源可控等優勢[3],其研究與開發受到了越來越多的關注,對IP的前端驗證提出了新的要求。如果采用軟件系統仿真的方式,成本較低、易于上手[4],但與硬件的結合不夠緊密;已有的商業開發平臺受限于FPGA時序性能又不能對IP進行充分驗證[5]。本文以高性能FPGA為硬件核心,結合RISC-V軟件工具鏈,設計了一套完整的RISC-V處理器IP前端功能驗證平臺,并在項目中得到了良好的應用。
本驗證系統需要實現對RISC-V處理器IP的前端功能進行驗證,即通過FPGA來實現RISC-V處理器的RTL行為,并通過與上位機、板上外設芯片的交互,驗證RISC-V處理器IP的功能是否正確。驗證系統主要由上位機、JTAG調試、FPGA驗證板和直流電源組成。其中,上位機通過UART串口與驗證板進行交互,同時驗證板上的FPGA仿真RISC-V處理器,實現對處理器內核的自測試,并通過與外設芯片的交互驗證IP的相關功能,并將交互結果上報上位機顯示。驗證系統示意圖如圖1所示。
系統硬件的核心是FPGA驗證板,該驗證板主要由FPGA、SPI Flash、CFI Flash、SRAM、電源IC等組成。
當FPGA從配置Flash中加載、運行RISC-V IP綜合產生的MCS文件后,FPGA相當于RISC-V處理器,此時可以通過GPIO、UART、SPI以及外部存儲總線等部件訪問Flash、片外SRAM等外設。在綜合考慮性能、成本、引腳資源等方面后,選擇XC7K325T-FFG900I作為本驗證板的FPGA芯片。該FPGA芯片引腳豐富,可實現RISC-V IP所有引腳的引出與功能驗證;時序性能較好,滿足RISC-V IP在設計主頻下的各項功能驗證。
外設芯片中的SPI Flash和CFI Flash均為NorFlash(支持XIP功能),同時可用來存儲系統運行中需要保存的數據。SRAM可作為指令RAM和數據RAM,作為片內SRAM的替換。兩組晶振分別為RISC-V內核時鐘和RTC時鐘。在本驗證板上可通過FPGA中的PLL IP模塊對系統晶振進行分頻,便于進行主頻的摸頂測試。
驗證板電源采用DC/DC模塊,將直流電源提供的5V電壓轉換為各個芯片需要的1.0V、1.2V、1.8V、3.3V。其中為滿足FPGA上電時序要求,1.0V最先上電、1.2V其次、1.8V和3.3V最后上電。系統硬件框圖如圖2所示。
驗證板通過USB轉TTL UART芯片引出一路串口與上位機通信,另兩路自回環進行功能測試;GPIO全部通過測試點引出,便于進行相關功能的測試;外部控制接口用來接收外部的控制信號:比如復位等。

圖1:系統示意圖

圖2:系統硬件框圖

圖3:驗證板軟件流程

圖4:上位機顯示的測試結果
本驗證平臺軟件由上位機顯控軟件和下位機驗證板軟件組成:上位機顯控軟件主要用來顯示、記錄驗證板的測試結果;也可以通過下發命令到功能板選擇特定的測試;下位機驗證板軟件運行在以XC7K325T為實體的RISC-V處理器IP上,實現RISC-V處理器IP各個模塊的功能驗證,并接受、上報相關信息到上位機。
上位機軟件通過串口獲取驗證板上報的測試數據,解析之后顯示在軟件界面上。上位機軟件主要有以下功能:
串口收發:默認串口工作參數:波特率38400bps、無奇偶校驗、八位數據位、一位停止位;按照規定的通信協議通過串口與驗證板進行數據交互;與RISC-V IP進行心跳檢測:如果超時無串口數據上報,則提供告警信息;解析從串口接收來的測試信息并分發給界面顯示模塊和故障記錄模塊進行處理。
界面顯示:將從串口接收到的測試信息幀,并按照對應的協議解析并提供可視化的圖形顯示:比如測試通過或不通過時對應項顯示“正常”或“異常”并記錄錯誤次數。
驗證板軟件主要實現對RISC-V IP各個功能的測試,主要通過對CU/ALU、內核寄存器、GPIO、UART、SPI以及外部總線控制器與外設芯片進行交互,驗證RISC-V IP的功能是否滿足設計要求。主要流程如圖3所示。
驗證板與上位機之間的串口通信采用SLIP協議進行封裝,如表1所示。

表1:上位機與驗證板的通信協議
典型數據幀有驗證板上報的測試結果數據包、互發的心跳檢測數據包、上位機下發的指定測試幀、由于串口傳輸造成的數據幀不完整或長度不符合協議要求等造成的驗證板異常數據包。
以SPI啟動為例,首先通過JTAG將下位機程序燒寫到SPI Flash中,然后將Boot1/0通過跳線帽分別置高和接地,最后上電啟動測試程序。軟件流程如下:
(1)外設功能驗證,包括定時器、RTC、UART等,只要發生任意一個外設的功能異常,上報異常代碼;
(2)CU/ALU測試:運行矩陣、排序、CRC等涉及到加減乘除和邏輯運算的算法,保證CU/ALU部件和CPU指令全覆蓋,當輸出結果與預期值不一致時,即認為CU/ALU部件異常;
(3)外部總線測試:對掛接的SPI Flash 、CFI Flash和SRAM,進行全地址空間的寫操作,采用標準測試pattern:0x00、0xFF、0xAA、0x55,然后回讀數據并與初始寫入的數據對比;
(4)內核寄存器檢測:對內核寄存器中保持不變的寄存器進行檢測,默認值變化時即認為發生異常。
相關測試結果可以通過上報上位機軟件來進行顯示,如圖4所示。
對于某些模塊的功能測試,比如GPIO輸出和中斷,需要配合外部激勵或設備進行:上位機設置GPIO輸出高、低電平時,可以利用示波器對待測GPIO的輸出直接進行測量;測試GPIO中斷時可以利用信號源或者手動跳線的方式分別測試GPIO的電平中斷、正負邊沿中斷等;對于復位功能,通過復位按鍵進行測試:通過串口輸出的打印可判斷RISC-V IP是否復位成功。
本文設計、實現了基于FPGA和上位機軟件的RISC-V IP驗證平臺,可以在測試過程中對RISC-V IP進行全面的功能驗證,并準確地顯示測試數據,方便評估RISC-V IP是否符合設計要求。在項目中的使用結果表明,該系統滿足了對RISC-V IP進行功能驗證的要求。