曹鵬飛
摘要:FPGA在電子通信領(lǐng)域是一種用途廣泛的可編程邏輯器件,能否選擇合適的程序配置方式是一個(gè)重要的問(wèn)題,關(guān)系到FPGA上電后能否快速可靠地進(jìn)入到工作狀態(tài)。通過(guò)設(shè)置FPGA為從串配置模式,利用SPI Flash芯片作為外置存儲(chǔ)器,CPLD作為程序加載控制器可以對(duì)FPGA進(jìn)行可靠配置。實(shí)踐證明,這種配置方式操作方便,可實(shí)施性強(qiáng),具有一定的參考價(jià)值。
關(guān)鍵詞:FPGA CPLD SPI Flash 配置
中圖分類號(hào):TP206.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2016)12-0092-02
1 引言
現(xiàn)場(chǎng)可編程門陣列(FPGA)技術(shù)在當(dāng)前許多領(lǐng)域都得到了大規(guī)模的廣泛應(yīng)用,包括通信、網(wǎng)絡(luò)、工業(yè)、醫(yī)療、汽車等各個(gè)領(lǐng)域都發(fā)揮了重要作用,滿足了對(duì)電子產(chǎn)品高性能、高可靠性和高靈活性的要求。
FPGA基于芯片內(nèi)部的SRAM技術(shù)完成其邏輯功能,并具有可重復(fù)編程的特點(diǎn),但是SRAM存在易失性,掉電則數(shù)據(jù)丟失,因此需要將配置程序存入外部存儲(chǔ)芯片中,上電進(jìn)入對(duì)應(yīng)的管理模式即可進(jìn)行程序加載。FPGA的程序配置有多種選擇方式,既可以選擇FPGA公司提供的配置芯片,也可以選擇通用存儲(chǔ)芯片,還可以選擇在線配置模式。而選用通用存儲(chǔ)芯片在性價(jià)比方面具有一定的優(yōu)勢(shì),通過(guò)CPLD進(jìn)行數(shù)據(jù)讀寫控制操作,即可實(shí)現(xiàn)對(duì)FPGA的程序配置,操作簡(jiǎn)單靈活。
2 配置原理
按照數(shù)據(jù)接口進(jìn)行劃分,F(xiàn)PGA的配置模式可以分為并行模式和串行模式。按照是否由FPGA提供時(shí)鐘源又可以分為主模式和從模式,由FPGA提供配置時(shí)鐘CCLK信號(hào)的模式稱為為主模式,反之由外部器件給FPGA提供配置時(shí)鐘的模式稱為從模式。因此配置模式主要包括主并、主串、從并、從串以及JTAG配置方式。具體模式由FPGA模式管腳M2、M1、M0設(shè)定。外部SPI Flash芯片是一種串行芯片,CPLD作為主控制器,選擇從串配置模式。M(2:0)信號(hào)設(shè)為“111”。
FPGA選用Xilinx公司的Virtex 6芯片XC6VLX130T。Virtex 6系列芯片采用40nm工藝制造,是一種高性能的現(xiàn)場(chǎng)可編程門陣列。Virtex 6 FPGA系列包括高性能邏輯、高性能DSP以及高速串行收發(fā)器三個(gè)面向應(yīng)用領(lǐng)域而優(yōu)化的FPGA平臺(tái),分別提供了不同的功能和特性組合來(lái)滿足不同客戶應(yīng)用的需求。
CPLD芯片選用的是Xilinx公司的CoolRunner-Ⅱ系列的XC2A64A。具有高性能、低功耗的特點(diǎn),并且具有封裝尺寸小的特點(diǎn),可以有效節(jié)約電路板的布局面積。
SPI FLASH存儲(chǔ)芯片選擇的是意法半導(dǎo)體的M25P128,存儲(chǔ)容量為128M比特。SPI接口最大傳輸速率為50Mhz。M25P128具有多種操作指令。
CPLD執(zhí)行對(duì)SPI Flash芯片的讀操作時(shí),操作指令為0x03。當(dāng)開(kāi)始讀取數(shù)據(jù)時(shí),首先將片選信號(hào)CS由高電平拉為低電平,SPI Flash芯片在數(shù)據(jù)輸入管腳(D)讀取讀操作指令,然后讀取3字節(jié)的存儲(chǔ)單元的首地址。隨后SPI Flash芯片在數(shù)據(jù)輸出管腳(O)輸出該地址的存儲(chǔ)數(shù)據(jù)字節(jié)。讀取地址自動(dòng)加1,再跳至下一地址,存儲(chǔ)字節(jié)可以依次輸出到數(shù)據(jù)輸出管腳(O)。該Flash芯片為128Mbit,最大存儲(chǔ)單元為16777216字節(jié)。當(dāng)?shù)竭_(dá)最高地址時(shí),地址計(jì)數(shù)器清零。在此期間CS信號(hào)一直保持低電平。一旦CS信號(hào)重新拉高,即可中止對(duì)數(shù)據(jù)的讀取操作。
SPI Flash芯片內(nèi)部按頁(yè)分塊進(jìn)行地址空間的劃分,可以存儲(chǔ)多個(gè)FPGA的配置文件。當(dāng)需要配置FPGA時(shí),CPLD根據(jù)配置文件的具體保存地址進(jìn)行數(shù)據(jù)的讀取操作,從而可以實(shí)現(xiàn)在不同功能要求下的不同F(xiàn)PGA文件的動(dòng)態(tài)可重配置,具有一定的靈活性。
3 功能實(shí)現(xiàn)
FPGA配置系統(tǒng)平臺(tái)主要由3部分組成:FPGA芯片、CPLD芯片和SPI Flash芯片。由CPLD提供配置參考時(shí)鐘CCLK給FPGA,同時(shí)提供SPI工作時(shí)鐘給SPI Flash芯片。
FPGA配置電路圖如圖1所示。
接口信號(hào)功能說(shuō)明如下:
MSCK: SPI工作時(shí)鐘。
CS: 配置芯片選擇信號(hào),低電平有效。
MOSI: Flash數(shù)據(jù)信號(hào)串行輸入。
MISO: Flash數(shù)據(jù)信號(hào)串行輸出。
CCLK: FPGA配置時(shí)鐘,和SPI工作時(shí)鐘反相。
PROG: 低電平FPGA異步復(fù)位信號(hào),從低電平重新拉高后才可以進(jìn)行編程。
INIT: FPGA初始化完成信號(hào),當(dāng)為低電平時(shí),F(xiàn)PGA清除配置寄存器。當(dāng)FPGA采集配置模式信號(hào)M2、M1、M0狀態(tài)完成后,由低電平變?yōu)楦唠娖健?/p>
DONE: FPGA配置完成信號(hào)。
CPLD按照不同功能主要包括3個(gè)模塊:信號(hào)檢測(cè)模塊,計(jì)數(shù)器模塊,SPI信號(hào)產(chǎn)生模塊。
信號(hào)檢測(cè)模塊完成對(duì)PROG、INIT、DONE等信號(hào)的檢測(cè)判斷。
計(jì)數(shù)器模塊完成符合SPI時(shí)序要求的計(jì)數(shù)以及復(fù)位計(jì)數(shù)器等計(jì)數(shù)器的計(jì)數(shù)。
SPI信號(hào)產(chǎn)生模塊主要完成符合SPI時(shí)序要求的CS、MOSI、MISO等信號(hào)的輸出。
CPLD上電后可以實(shí)現(xiàn)對(duì)FPGA的重復(fù)配置。CPLD完成對(duì)FPGA的配置操作是通過(guò)對(duì)SPI Flash的讀操作和對(duì)FPGA的寫操作兩個(gè)過(guò)程來(lái)實(shí)現(xiàn)的。FPGA在沒(méi)有完成編程之前,INIT和DONE信號(hào)為低電平,PROG信號(hào)為高電平。
CPLD在兩種條件下選擇是否對(duì)FPGA進(jìn)行程序配置。首先,當(dāng)電路板上電時(shí),CPLD即進(jìn)入FPGA程序加載編程模式。其次,CPLD對(duì)來(lái)自上位機(jī)或電路板CPU的FPGA程序加載使能信號(hào)進(jìn)行判斷,使能信號(hào)為脈沖信號(hào),脈寬為一個(gè)SPI工作時(shí)鐘周期,高電平有效。判斷信號(hào)有效時(shí)則進(jìn)入程序加載編程模式。
FPGA選用V6芯片,而V6芯片是多電源供電,在FPGA各路電源按照上電順序供電正常后,電源管理模塊輸出給CPLD一個(gè)power-complete高電平信號(hào),才可以對(duì)FPGA進(jìn)行程序配置。
在電路板上電后,CPLD檢測(cè)power-complete信號(hào)和加載使能信號(hào),一旦信號(hào)有效,CPLD內(nèi)部的的4位PROG計(jì)數(shù)器開(kāi)始計(jì)數(shù),產(chǎn)生一個(gè)不小于250us的PROG低電平信號(hào),然后PROG信號(hào)重新拉高。
CPLD開(kāi)始檢測(cè)FPGA的INIT信號(hào),在PROG信號(hào)由低電平變?yōu)楦唠娖阶疃?ms 的時(shí)間之內(nèi),INIT信號(hào)應(yīng)該由低電平變?yōu)楦唠娖?,CPLD可以開(kāi)始對(duì)Flash芯片的讀操作,否則進(jìn)入無(wú)效狀態(tài)。
Flash芯片的存儲(chǔ)容量為128Mbit,即16M字節(jié)。數(shù)據(jù)讀寫計(jì)數(shù)器包括3位計(jì)數(shù)器mcnt(2:0)和24位計(jì)數(shù)器mcnt1(23:0)。mcnt1(23:0)最大計(jì)數(shù)值為0xFFFFFF,一旦計(jì)滿停止計(jì)數(shù),除非計(jì)數(shù)器重新復(fù)位。
CPLD產(chǎn)生CS信號(hào)和MOSI輸出信號(hào),一旦進(jìn)入Flash讀操作模式,CS信號(hào)電平即拉低為低電平。MOSI信號(hào)首先輸出1個(gè)字節(jié)的操作指令,由于是對(duì)FLASH的讀操作,因此輸出指令為0x03,然后輸出3個(gè)字節(jié)的地址。由于程序是從Flash芯片的第0字節(jié)開(kāi)始寫入,因此讀取的初始地址設(shè)為0X000000。Flash芯片在收到正確的指令后,從第5個(gè)字節(jié)周期開(kāi)始,F(xiàn)LASH芯片的MISO管腳開(kāi)始輸出配置文件的數(shù)據(jù),并同時(shí)送給FPGA芯片和CPLD芯片。FPGA開(kāi)始執(zhí)行配置數(shù)據(jù)的寫操作,接收MCS配置文件碼流。
同時(shí)CPLD芯片開(kāi)始檢測(cè)FPGA的DONE信號(hào),一旦檢測(cè)到DONE信號(hào)為高電平,說(shuō)明配置碼流傳輸正常結(jié)束,CS信號(hào)需要重新拉高,表示FPGA配置完成。
利用VHDL語(yǔ)言編寫代碼,完成CPLD的邏輯電路設(shè)計(jì)。
在仿真軟件里得到的仿真波形圖如圖2所示。
4 功能驗(yàn)證
為了對(duì)本文設(shè)計(jì)的FPGA配置系統(tǒng)進(jìn)行驗(yàn)證,按照?qǐng)D1設(shè)計(jì)了系統(tǒng)驗(yàn)證平臺(tái)。SPI Flash芯片通過(guò)配置接口寫入FPGA配置程序MCS文件,然后由CPLD進(jìn)行數(shù)據(jù)讀取,再寫入到FPGA XC6VLX130T芯片進(jìn)行程序配置。經(jīng)過(guò)驗(yàn)證,CPLD可以成功實(shí)現(xiàn)FPGA的配置。
5 結(jié)語(yǔ)
本文提供了一種通過(guò)CPLD配置FPGA的方法,對(duì)于其它類似的FPGA和SPI Flash芯片的配置,可以進(jìn)行同樣的電路和程序設(shè)計(jì),具有一定的參考價(jià)值。
參考文獻(xiàn)
[1]候伯亨,劉凱,顧新.VHDL硬件描述語(yǔ)言與數(shù)字邏輯電路設(shè)計(jì)(第四版)[M].西安電子大學(xué)出版社,2014.
[2]何賓.EDA原理及VHDL實(shí)現(xiàn)[M].清華大學(xué)出版社,2011.
[3]李春雨,夏敏磊.基于CPLD的SPI Flash程序在線加載方案[J].自動(dòng)化與儀器儀表,2015.
[4]陸禮紅,尹煥亭.基于CPLD 技術(shù)的FPGA 快速加載方案研究[J].電子技術(shù)與軟件工程,2015.
[5]Xilinx.Virtex-6 FPGA Configuration User Guide UG360 (v3.9) [R] November 18,2015.