《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于CY7C68013A的FPGA配置和通信接口設(shè)計(jì)
基于CY7C68013A的FPGA配置和通信接口設(shè)計(jì)
來源:電子技術(shù)應(yīng)用2013年第2期
劉志華1,郭付才1,彭新偉2,陳吉東3
1.解放軍理工大學(xué) 氣象海洋學(xué)院 探測(cè)與裝備工程系,江蘇 南京211101; 2.南京軍區(qū)氣象水文中心,江蘇 南京210016; 3.南京楊辰科技有限公司,江蘇 南京210022
摘要: 為了同時(shí)實(shí)現(xiàn)計(jì)算機(jī)對(duì)FPGA進(jìn)行在線配置和高速數(shù)據(jù)傳輸,提出了一種基于CY7C68013A芯片的USB2.0接口設(shè)計(jì)方案。介紹了以CY7C68013A芯片為核心的系統(tǒng)硬件電路設(shè)計(jì)和軟件編程,詳細(xì)分析了CY7C68013A固件程序設(shè)計(jì)方法。CY7C68013A芯片在配置FPGA時(shí)受芯片內(nèi)部CPU控制,配置速度為6 Mb/s,而在數(shù)據(jù)傳輸時(shí)采用從屬FIFO模式以實(shí)現(xiàn)高速數(shù)據(jù)通信。該方案可以廣泛應(yīng)用到軟件無線電項(xiàng)目開發(fā)中。
中圖分類號(hào): TN914
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2013)02-0018-04
Design of the FPGA′s configuration and communication interface based on CY7C68013A
Liu Zhihua1,Guo Fucai1,Peng Xinwei2,Chen Jidong3
1.Department of Atmospheric Sounding and Equipment Engineering, Institute of Meteorology and Oceanography, PLA University of Science and Technology, Nanjing 211101,China; 2.Meteorological and Hydrological Center of Military Area Command of Nanjing, Nanjing 210016,China; 3.Nanjing Yangchen S&T Co., Ltd., Nanjing 210022,China
Abstract: In order to realize that the computer can configurate FPGA online and high speed data transmission, this paper puts forward an USB2.0 interface design method based on CY7C68013A chip. The paper introduces the system hardware circuit design and software programming, and detailed analysis of the CY7C68013A′s firmware program design method. At the time of configurating FPGA,the CY7C68013A chip is controlled by the internal CPU and the configuration speed is 6 Mb/s; whereas during date transmission, in order to improve the transmission speed, the CY7C68013A is configured slave FIFO mode. This scheme can be widely applied to the software radio project development.
Key words : CY7C68013A;USB interface design;FPGA;software radio

    通用串行總線(USB)因具有傳輸速度快、支持熱插拔、易于擴(kuò)展以及即插即用等優(yōu)點(diǎn),已經(jīng)成為計(jì)算機(jī)與外部設(shè)備進(jìn)行數(shù)據(jù)交換的常用接口。USB控制器是一種集成了USB總線協(xié)議的微控制器,利用USB控制器,用戶可以在不深入了解USB協(xié)議的情況下設(shè)計(jì)完整的USB接口,這也促進(jìn)了USB接口的廣泛應(yīng)用[1]。

    目前,軟件無線電技術(shù)越來越成熟,FPGA的應(yīng)用也更加廣泛。一塊配備了USB接口的FPGA數(shù)據(jù)處理模塊可以應(yīng)用到各種高速數(shù)據(jù)采集、處理和傳輸場(chǎng)合。而在項(xiàng)目研發(fā)過程中,隨時(shí)都需要對(duì)FPGA進(jìn)行編程調(diào)試?;诖耍疚难芯亢驮O(shè)計(jì)了一種可以同時(shí)實(shí)現(xiàn)對(duì)FPGA進(jìn)行配置和數(shù)據(jù)通信的USB接口。
1 系統(tǒng)總體設(shè)計(jì)
    系統(tǒng)總體框圖如圖1所示,系統(tǒng)主要包括以USB控制器為控制核心的USB接口設(shè)備、PC機(jī)上的應(yīng)用軟件和驅(qū)動(dòng)程序以及相關(guān)的固件程序[2]。系統(tǒng)工作原理如下:ISE軟件生成的FPGA配置文件由下載軟件下載到USB接口設(shè)備中,由CY7C68013A控制器實(shí)現(xiàn)對(duì)FPGA芯片的被動(dòng)配置;FPGA配置成功后由CY7C68013A芯片返回配置成功信息;計(jì)算機(jī)收到配置成功信息后就可以關(guān)閉下載軟件、打開接收軟件,正常接收FPGA向計(jì)算機(jī)發(fā)送的通信數(shù)據(jù)。

2 系統(tǒng)硬件設(shè)計(jì)
2.1 CY7C68013A器件

    系統(tǒng)中的USB控制器選擇CYPRESS公司EZ-USB FX2LP系列的CY7C68013A單片機(jī),它主要包括USB2.0收發(fā)器、智能串行接口引擎(SIE)、增強(qiáng)型8051微處理器、16 KB的RAM、4 KB的FIFO存儲(chǔ)器、地址和數(shù)據(jù)總線、I/O口、I2C控制器和通用可編程接口(GPIF)。
    CY7C68013A的串行接口引擎負(fù)責(zé)完成獨(dú)立串行數(shù)據(jù)的編解碼、差錯(cuò)控制、位填充等與USB協(xié)議有關(guān)的功能,簡(jiǎn)化了固件程序的開發(fā);通用可編程接口支持所有通用的總線標(biāo)準(zhǔn),可與外部ASIC、DSP等直接連接。CY7C68013A芯片內(nèi)部包含3個(gè)固定的、64 B端點(diǎn)緩沖區(qū),分別是EP0、EP1IN和EP1OUT。其中,EP0是默認(rèn)的控制傳輸端點(diǎn),EP1IN和EP1OUT支持快傳輸、中斷傳輸和同步傳輸,它們只能由8051內(nèi)核的固件訪問;另外還有4 KB的可配置端點(diǎn)緩沖區(qū),分別是EP2、EP4、EP6和EP8,它們是大容量寬帶的數(shù)據(jù)傳輸端點(diǎn),無需8051固件干涉便可與外圍電路完成高速數(shù)據(jù)傳輸。這4個(gè)端點(diǎn)具有非常靈活的配置方式,可以適應(yīng)多種場(chǎng)合下的寬帶要求。
2.2 硬件電路
    系統(tǒng)硬件電路如圖2所示。CY7C68013A控制器工作在從屬FIFO模式,I2C總線上連接一片EEPROM芯片(24LC64)。CY7C68013A的固件程序由EEPROM燒寫器燒寫到24LC64中,上電后自動(dòng)加載到內(nèi)部RAM中。FD是雙向的數(shù)據(jù)傳輸總線。FLAGA、FLAFB、FLAGC是FIFO標(biāo)志管腳,指示FIFO的空滿程度,保證數(shù)據(jù)的有效存取。FIFO_ADR[1:0]用于選擇與FD連接的4個(gè)端點(diǎn)緩沖區(qū)。SLRD和SLWR分別作為FIFO的讀寫選通信號(hào),SLOE用于使能數(shù)據(jù)總線FD的輸出。PKTEND是CY7C68013A向PC發(fā)送數(shù)據(jù)的控制端。IFCLK是48 MHz的接口時(shí)鐘,由芯片內(nèi)部產(chǎn)生,控制FPGA配置數(shù)據(jù)的的讀取。PE0與FPGA的PROG引腳相連,是FPGA初始化控制引腳;PE1與FPGA的RDWR引腳相連,是FPGA配置數(shù)據(jù)的讀寫選擇端;PE2與FPGA的DONE引腳相連,是FPGA配置成功指示信號(hào)。FPGA的配置模式管腳M[2:0]=011,將FPGA設(shè)置成從機(jī)串行模式[3-4]。

3 系統(tǒng)軟件設(shè)計(jì)
3.1 CY7C68013A固件程序設(shè)計(jì)

    CY7C68013A的固件程序是指在芯片內(nèi)部RAM運(yùn)行的程序代碼,它是USB接口設(shè)計(jì)的核心部分。CY7C68013A的固件程序有兩種加載方式:一種是在線下載方式,這種方式是將固件存儲(chǔ)在計(jì)算機(jī)中,在計(jì)算機(jī)上編寫一個(gè)能自動(dòng)下載以及設(shè)備從枚舉功能的固件下載驅(qū)動(dòng)程序,當(dāng)CY7C68013A連接上計(jì)算機(jī)后由驅(qū)動(dòng)程序下載固件;另一種方式是將固件程序存儲(chǔ)到片外的EEPROM芯片中,上電后自動(dòng)將固件加載到內(nèi)部RAM中。由于第二種方式有擴(kuò)展性好、操作簡(jiǎn)單等優(yōu)點(diǎn),本文采用的是第二種方式。為了簡(jiǎn)化固件編程,CYPRESS公司提供了固件編程框架,用戶只需在此框架下添加USB描述表、收發(fā)數(shù)據(jù)的通信代碼和相關(guān)的控制代碼就可以完成固件編程[1,5]。固件框架文件如表1所示。

    用戶在編寫固件程序時(shí),只需對(duì)bulkllop.c和dscr.51兩個(gè)文件根據(jù)具體設(shè)計(jì)需求修改相應(yīng)的代碼。固件框架內(nèi)主要使用的函數(shù)如下:
    TD_Init()函數(shù):主要完成CY7C68013A的初始化,它只會(huì)在USB啟動(dòng)后調(diào)用一次。函數(shù)里添加的初始化代碼包括CPU時(shí)鐘頻率設(shè)定、USB工作模式選擇、I/O口配置、端點(diǎn)選擇及傳輸方向設(shè)置、FIFO的配置等。
    TD_Poll()函數(shù):是用戶調(diào)度程序,在設(shè)備運(yùn)行時(shí)被重復(fù)調(diào)用,編寫需要反復(fù)執(zhí)行的代碼。其主要功能是對(duì)各個(gè)端點(diǎn)的狀態(tài)進(jìn)行查詢,實(shí)現(xiàn)端點(diǎn)間數(shù)據(jù)的交互。
    TD_suspend()函數(shù):在設(shè)備進(jìn)入掛起狀態(tài)前調(diào)用,在其中加入適當(dāng)?shù)拇a,配置設(shè)備的工作狀態(tài),可使設(shè)備處于低功耗狀態(tài)并返回真值。改動(dòng)TD_Suspend的程序代碼,使其返回為假,可使CY7C68013A不進(jìn)入掛起狀態(tài)。
    DR_VendorCmnd()函數(shù):是自定義命令代碼的書寫處。fw.c固件會(huì)自動(dòng)調(diào)用函數(shù)里的代碼。
    ISR_Ep0in() interrupt 0~I(xiàn)SR_Ep8inout() interrupt 0函數(shù):是當(dāng)使用端點(diǎn)中斷傳輸時(shí)的中斷代碼書寫處。
    CY7C68013A的固件編程框架流程如圖3所示。

    針對(duì)本文提出的采用CY7C68013A芯片設(shè)計(jì)USB接口,以實(shí)現(xiàn)對(duì)FPGA的配置和通信功能,其相關(guān)的設(shè)置如表2所示。
    在TD_Init()中對(duì)端點(diǎn)的設(shè)置如下:
    (1)EP2:用于傳輸FPGA的配置數(shù)據(jù)(XXX.bit文件)。一次傳輸數(shù)據(jù)的大小與CY7C68013A配置成USB1.1還是USB2.0有關(guān)。當(dāng)配置成USB1.1時(shí),必須保證一次只傳送64 B,不能超過該值;當(dāng)配置成USB2.0時(shí),一次最多可以傳送512 B,也可以只傳送64 B。在void ISR_Ep2in-
out(void) interrupt 0 中,將得到的數(shù)據(jù)對(duì)FPGA進(jìn)行配置。使用AUTO PTR可以節(jié)約時(shí)間,配置速率為6 Mb/s左右。
    (2)EP4:用于傳送控制參數(shù),其設(shè)置方法與EP2相同。在void ISR_Ep4inout(void) interrupt 0中,將從應(yīng)用軟件傳來的控制命令(包含對(duì)FPGA的配置命令)傳給FPGA。
    (3)EP6:用于采集數(shù)據(jù)。將其設(shè)置成SlaveFIFO模式,AUTOIN有效,IFCLK實(shí)現(xiàn)同步,16 bit數(shù)據(jù)寬度。在void ISR_Ep6inout(void) interrupt 0 中,將FIFO中的數(shù)據(jù)發(fā)往USB。AUTOIN=1,在數(shù)據(jù)傳輸中,自動(dòng)完成傳輸,不需要單片機(jī)的參與。
    (4)EP8:用于傳送狀態(tài)數(shù)據(jù)。由于用了雙緩沖,在得到狀態(tài)數(shù)據(jù)時(shí),要多讀2次才能得到當(dāng)前的狀態(tài)信息。在void ISR_Ep8inout(void) interrupt 0 中,將從FPGA得到的狀態(tài)數(shù)據(jù)發(fā)往USB。
    此外,在中斷程序中,要添加中斷標(biāo)志清除的語(yǔ)句,但在EP6的中斷中,由于設(shè)置了AUTOIN=1,則不需要。
3.2 設(shè)備驅(qū)動(dòng)程序
    設(shè)備驅(qū)動(dòng)程序是用戶訪問設(shè)備的接口。EZ-USB 開發(fā)系統(tǒng)提供了裝載驅(qū)動(dòng)程序開發(fā)模板,利用模板開發(fā)設(shè)備驅(qū)動(dòng)比較簡(jiǎn)單。CYPRESS公司針對(duì)CY7C68013A提供了全新的驅(qū)動(dòng)程序CYUSB.SYS。安裝驅(qū)動(dòng)之前,必須先根據(jù)VID/PID正確編輯CYUSB.INF文件,在文件中添加自己的PID/VID代碼和設(shè)備描述;連接設(shè)備時(shí),將根據(jù)硬件上的PID/VID查找INF文件中對(duì)應(yīng)的驅(qū)動(dòng),如果找不到,則在設(shè)備管理器中將顯示“68013 EEPROM MISSING”的字樣。安裝驅(qū)動(dòng)時(shí),找到修改好的CYUSB.INF文件,驅(qū)動(dòng)即可被正確安裝,此時(shí)設(shè)備可以正常使用了[6]。
3.3 主機(jī)應(yīng)用程序
    主機(jī)應(yīng)用程序包括對(duì)FPGA配置程序用的下載軟件和通信用的數(shù)據(jù)接收軟件。下載軟件用VC6.0進(jìn)行開發(fā), 它將ISE軟件開發(fā)的FPGA配置文件(.bit文件)通過CY7C68013A芯片下載到FPGA中實(shí)現(xiàn)對(duì)FPGA的配置,并返回配置狀態(tài)信息[7]。下面是下載軟件與CY7C68013A芯片的通信過程與格式:
    (1)下載軟件對(duì)CY7C68013A芯片控制的命令發(fā)往pipeNum=1,結(jié)構(gòu)為:
    struct tagUSBCardControl {
    BYTE Control_Flag;   //控制命令標(biāo)記,為常數(shù):0x81
    BYTE FPGA_PROG;  //FPGA的PROG管腳,進(jìn)行配置
//時(shí),應(yīng)用軟件先給出一個(gè)0,再給出一個(gè)1,
//然后往EP2寫入配置數(shù)據(jù),數(shù)據(jù)發(fā)送完成后,
//可以檢查狀態(tài)信息,判斷FPGA是否配置成功
    BYTE Use[64-2];   //控制命令,F(xiàn)PGA的I/O地址從
//0x8002~0x803F;若是USB2.0,則Use[512-2]
//對(duì)應(yīng)的FPGA的I/O地址為0x8002~0x81FF
    };
    (2)從pipeNum=3得到CY7C68013A芯片的狀態(tài)信息,格式是:
    truct tagUSBCardStatus {
    BYTE FPGA_STATUS;//FPGA工作正常標(biāo)記,為0x81
    BYTE IOE;   //芯片IOE管腳的值,用于VC程序中
//判斷FPGA是否配置成功
    BYTE Use[64-2];   //狀態(tài)信息,F(xiàn)PGA的I/O地址從
//0x8202~0x823F。USB2.0則為512也一樣
    };
    數(shù)據(jù)接收軟件可以根據(jù)實(shí)際需要進(jìn)行編寫,本設(shè)計(jì)采用通用的USB調(diào)試助手軟件接收FPGA發(fā)送的二進(jìn)制信息。
4 系統(tǒng)功能測(cè)試

 


    主要測(cè)試系統(tǒng)實(shí)現(xiàn)對(duì)FPGA的配置和數(shù)據(jù)通信兩方面的功能。通過下載軟件的FPGA配置界面,將XC2VP4.bit配置文件下載到FPGA中。FPGA配置程序的主要功能除了完成相關(guān)的初始化配置之外,還向USB口交替發(fā)送16 bit高電平“1”和低電平“0”。配置成功后會(huì)返回“FPGA配置成功”信息。此時(shí)關(guān)閉下載軟件,打開USB數(shù)據(jù)接收軟件,接收數(shù)據(jù)如圖4所示,表明實(shí)驗(yàn)成功。

    本文介紹了一種利用CYPRESS公司的USB控制器CY7C68013A芯片設(shè)計(jì)USB2.0接口的設(shè)計(jì)方案,并進(jìn)行了實(shí)驗(yàn)驗(yàn)證。由于方案同時(shí)可對(duì)FPGA進(jìn)行配置和數(shù)據(jù)通信,因此它可以為開發(fā)人員實(shí)時(shí)調(diào)試FPGA帶來方便,同時(shí)也方便系統(tǒng)在后期的更新?lián)Q代。
參考文獻(xiàn)
[1] 錢峰.EZ-USB FX2單片機(jī)原理、編程及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2006.
[2] 王曉麗,龍兵,李力.基于FPGA的USB數(shù)字I/O設(shè)備設(shè)計(jì)[J].電子測(cè)量技術(shù),2011,34(10):57-59.
[3] 劉森,趙明生.通過USB接口實(shí)現(xiàn)FPGA的SelectMap配置[J].微計(jì)算機(jī)信息,2009,25(4-2):1-2,269.
[4] 張俊濤,王豫瑩.基于FPGA和USB2.0的高速數(shù)據(jù)采集系統(tǒng)[J].儀表技術(shù)與傳感器,2011(10):46-48.
[5] 馬俊濤,李振宇.SlaveFIFO模式下CY7C68013和FPGA的數(shù)據(jù)通信[J].中國(guó)傳媒大學(xué)學(xué)報(bào)(自然科學(xué)版),2009,16(2):38-44.
[6] Airhand.EZ-USB 68013A開發(fā)指南[EB/OL].[2009-03-13].http://forum.eepw.com.cn/thread/148408/1.
[7] 葛亮.Visual C++從入門到實(shí)踐[M].北京:清華大學(xué)出版社,2009.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。