汪揚埔
摘 要 隨著半導體制造技術的不斷發展,相應的設計規模和復雜度飛速增長,傳統的軟件仿真工具已難以完全解決功能驗證的問題。而且一些需要處理大量實時數據的應用(視頻)也越來越多,因此我們要求能夠在接近實時的條件下進行功能驗證。基于仿真平臺的測試已成為DSP設計流程中重要一個環節。基于仿真平臺的測試可以用來改進RTL級設計代碼,驗證功能的正確和完整性,大大提高DSP的流片成功率。
關鍵詞 DSPHPI 硬件仿真
中圖分類號:TP3 文獻標識碼:A
1平臺結構
整個平臺按照PC-USB-FPGA-HPI的結構搭建,如圖1,通過HPI接口與DSP進行通信。平臺主要的器件有:Xilinx的Spartan 3S1200E FPGA、Xilinx的Platform Flash PROM XCF04s、Cypress公司FX2系列產品CY7C68013。
圖1 HPI仿真平臺系統框架圖
PC機下發的請求通過USB控制器的GPIF產生訪問波形,可以稱為USB接口協議,USB接口協議完全由USB控制器處理。FPGA主要起到接口轉換的作用,實現16位數據與32位數據之間的轉化,工作時鐘輸入由CY7C68013提供。由于FPGA屬于掉電易失性器件,每次斷電重啟后必須重新加載硬件代碼才可正常工作,因此又為其配置了PROM器件(Xilinx XCF04S),FPGA從PROM中自動導入預先下載的設計文件即可正常工作,可以大大減少下載次數提高工作效率。仿真器硬件構架圖如圖2所示。
圖2 HPI仿真器硬件構架圖
在為HPI的仿真平臺準備好所有的硬件資源之后,接下來的主要工作就是對協議轉變器(FPGA)與仿真協同軟件進行設計,并最終實現協同的仿真功能。圖3體現的是仿真平臺的軟硬件構建。
圖3 仿真平臺的軟硬件構建
2 FPGA協議轉變器
協議轉變器在整個仿真平臺中可以簡單的看做是一個連接兩個主要接口的中間地帶,其主要的控制通路與數據通路方向如圖4所示。
圖4 控制通路與數據通路主體構圖
PC機與協議轉變器(FPGA)的連接實際指的是USB接口芯片FX2的GPIF接口與FPGA之間的連接,其中16位雙向數據總線FD到協議變換器內部,經過FPGA的IOBUF的端口處理,拆分成兩個單向信號FD_out(輸出信號)與FD_in(輸入信號)。RDY0的信號值由協議轉變器中產生。具體的信號連接如圖5所示。
在設計中,FPGA一共被分為4個單元,如圖6協議轉變器FPGA框架圖所示。其中譯碼單元(PC_Decoder)單元對PC機的操作要求進行譯碼,主要包括區分單字訪問、自增訪問,確定訪問的對象、確定讀/寫操作以及對FX2的控制輸入信號的采樣。數據拆分和拼接單元(PC_Single)主要針對輸入和輸出的16位與32位的接口差異進行數據的拆分和拼接。批量數據處理單元(PC_Bulk_Data)設計有3個單元,及HPIC_access、HPIA_access、HPID_access。PC機的指令經過譯碼單元譯碼后,對HPIC_access、HPIA_access、HPID_access進行訪問操作。RAM單元用來暫存發往DSP和返回上位機的數據。
圖5 PC機與FPGA的接口連接
圖6 協議轉變器FPGA框架圖
3 協同軟件
在本設計中,協同軟件主要包括固件設計、驅動程序設計和主機端口應用程序設計。如圖2仿真平臺的軟硬件構建所示。
(1)固件設計
CYPRESS公司的EZ-USB FX2開發套件提供給用戶一個固件函數庫(Ezusb.lib)和固件框架(Frame work),兩者均是基于KEIL C51開發的。固件函數庫提供了一系列的函數來加速USB 固件程序的開發,使用時只需在程序中包含fx2.h 和fx2regs.h 兩個頭文件,并在項目中鏈接Ezusb.lib 就可以直接使用固件庫中的各個函數了。在使用固件框架來進行特定的固件開發時,固件框架已經實現了初始化、重枚舉、電源管理等功能。對我們而言,只需要在固件架構的預留位置處添加代碼,就可以完成特定的功能。
GPIF能夠裝載4個控制波形,分別是單個數據讀、單個數據寫、連續數據讀、連續數據寫。“讀”是指FX2從外部接口讀入數據,“寫”是指FX2向外部接口寫出數據。所謂“連續數據讀寫”是指讀入的數據存放在FX2的內部FIFO,或者寫出的數據來自FX2的內部FIFO。圖7為GPIF批量寫波形。
圖7 GPIF批量寫波形圖
(2)驅動程序設計
驅動程序是指一系列硬件設備的函數,它為連接到計算機的硬件提供了軟件接口。用戶應用程序可以通過驅動程序接口訪問各種硬件,而不必考慮如何具體實現不同硬件的控制。Cypress公司的開發套件提供給用戶一個通用USB驅動,在該設計中,不需要對程序加以修改,經過DDK編譯后直接使用。
(3)主機端口應用程序設計
為有效完成HPI口的相關操作,我們一共設置了9個設備請求:
HPIC_WRITE:寫HPIC寄存器;
HPIC_READ:讀HPIC寄存器;
HPIA_WRITE:寫HPIA寄存器;
HPIA_READ:讀HPIA寄存器;
HPID_WRITE:寫HPID寄存器;
HPID_READ:讀HPID寄存器;
HPID_ADDR_ADD_WRITE:地址自增寫HPID寄存器;
HPID_ADDR_ADD__READ:地址自增讀HPID寄存器;
RESET_DSP:DSP復位。
以上幾個設備請求均是通過控制傳輸實現的,另外,為實現大規模數據傳輸,我們采用批量傳輸的方式定義了兩個函數:
①WriteBULKDataToDSPRAM( );
②ReadBULKDataFromDSPRAM( );
參考文獻
[1] 杜慧敏,李宥謀,趙全良.基于Verilog的FPGA設計基礎[J].西安:西安電子科技大學出版社,2006.
[2] Prakash Rashinkar, Peter Paterson,Leena Singh著,孫海平,丁健 譯.系統芯片(SOC)驗證方法與技術[M].電子工業出版社,2005.1.
[3] 高閣.高性能定點DSP(XDSP)UTOPIA接口的研究與設計[D].湖南:國防科技大學,2010.