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