精簡(jiǎn)的FPGA編程電路
便攜式、小型的儀表和設(shè)備是一個(gè)非常重要的應(yīng)用領(lǐng)域,在未來(lái)一段時(shí)間內(nèi)會(huì)有比較大的市場(chǎng)。而FPGA等現(xiàn)場(chǎng)可編程器件也是正在興起與普及的一種器件,把FPGA更好地運(yùn)用到上述儀表和設(shè)備中,可以減少這些儀器、設(shè)備的開(kāi)發(fā)周期,大幅度提升這些儀器的性能,減少總成本和體積等。
在許多應(yīng)用場(chǎng)合,如大型設(shè)備中的板卡,比較適合采用標(biāo)準(zhǔn)的FPGA編程電路。但是對(duì)于便攜式設(shè)備的應(yīng)用場(chǎng)合,采用標(biāo)準(zhǔn)電路聯(lián)系FPGA與CPU需要消耗的資源太多。許多DSP芯片只有2個(gè)通用I/O引腳,所以如果能只使用1~2個(gè)引腳就完成FPGA編程功能,意義將非常重大。
標(biāo)準(zhǔn)的FPGA編程電路
以Xilinx的Spartan系列FPGA為例,圖1是一個(gè)標(biāo)準(zhǔn)的編程電路。電路中控制器使用了4條控制信號(hào)線PROG,CLK,Data,DONE。首先Prog信號(hào)控制FPGA的初始化,一個(gè)Prog信號(hào)的低電平使FPGA進(jìn)入編程狀態(tài),在編程過(guò)程及以后的運(yùn)行過(guò)程中,Prog信號(hào)保持高電平;在編程過(guò)程中,Data信號(hào)與CLK信號(hào)配合,在每個(gè)Clk信號(hào)的上升沿,F(xiàn)PGA鎖定/讀取一個(gè)Data信號(hào),如此循環(huán),直到控制器將需要編程的程序全
部送到FPGA中;當(dāng)FPGA正確接收到編程程序以后,就會(huì)產(chǎn)生一個(gè)DONE信號(hào),通知控制器一切完畢。
該電路是Xilinx公司推薦的一個(gè)FPGA的標(biāo)準(zhǔn)電路,對(duì)于許多常規(guī)應(yīng)用場(chǎng)合,它還是比較合適的,但是對(duì)于手持式儀表等尺寸非常小的設(shè)備,由于控制器本身只有1~2個(gè)I/O控制線,而上述標(biāo)準(zhǔn)電路占用4個(gè)I/O口,就有可能無(wú)法應(yīng)用。
精簡(jiǎn)的FPGA編程方法
本文給出了一種精簡(jiǎn)的FPGA編程電路如圖2所示??刂破鞯腎/O控制信號(hào)線包括P/C和Data。P/C控制信號(hào)產(chǎn)生圖2中所示的波形,經(jīng)過(guò)Prog解碼電路(如圖4所示)得到Prog信號(hào),經(jīng)過(guò)CLK解碼電路(在本例中也可以不經(jīng)過(guò)),得到CLK信號(hào),它們與Data一起組成完整的FPGA控制信號(hào),完成對(duì)FPGA的編程控制。
圖1 通常的FPGA下載電路
圖2 精簡(jiǎn)的FPGA下載電路之一
該電路只使用2根I/O控制信號(hào)線,比標(biāo)準(zhǔn)編程電路要少,利用特殊控制信號(hào)的編碼與解碼,得到完成FPGA的編程工作。
更進(jìn)一步,也可以只使用一個(gè)I/O控制信號(hào)線,如圖3所示,使用Prog解碼電路(如圖4所示)、CLK解碼電路和Data解碼電路(如圖5所示),得到FPGA編程所必須的Prog信號(hào)、CLK信號(hào)和Data信號(hào)。該方法比圖2所示的電路所需要的控制線還要少。
圖3 精簡(jiǎn)的FPGA下載電路之二
圖4 Prog解碼電路
圖5 Data解碼電路
本方法利用比標(biāo)準(zhǔn)FPGA編程電路更少的I/O控制線,經(jīng)過(guò)解碼電路的解碼得到FPGA編程所需要的控制信號(hào)。對(duì)于不同公司的產(chǎn)品,本方法只要稍加變動(dòng)就可以使用。
應(yīng)用案例
以Xilinx的Spartan II系列產(chǎn)品為例,圖4為Prog控制信號(hào)解碼電路,圖5為Data信號(hào)解碼電路。不妨假定CLK信號(hào)的周期為T(mén)clk,Prog解碼電路中的時(shí)間常數(shù)為tProg=R1*C1,Data解碼電路的時(shí)間常數(shù)為tData=R2*C2。
Prog控制信號(hào)解碼電路的原理: P/C信號(hào)或P/C/D信號(hào)由Prog編碼和CLK(Data)編碼組成,其中Prog編碼是一個(gè)周期比較長(zhǎng)的高電平,見(jiàn)圖4的t2-t0,它大于Prog解碼電路的時(shí)間常數(shù)tProg,CLK(Data)編碼是周期比較短的脈沖,小于解碼電路的時(shí)間常數(shù)tProg,所以Prog信號(hào)可以被解碼得到,而其他不相關(guān)信號(hào)則被過(guò)濾掉。一般可以選擇Prog編碼周期t2-t0>5tProg,而CLK(Data)編碼周期t3-t2<1/5tProg。當(dāng)FPGA編程結(jié)束以后,P/C信號(hào),或者P/C/D信號(hào)應(yīng)當(dāng)立即復(fù)位,否則Prog會(huì)出現(xiàn)錯(cuò)誤。
Data解碼電路的原理可以分成Data=0和Data=1兩種情況:
Data="0時(shí)",當(dāng)P/C/D信號(hào)的前一個(gè)數(shù)據(jù)的上升沿t5結(jié)束,并保持一段時(shí)間,到達(dá)t6后,繼續(xù)保持高電平,經(jīng)過(guò)大約tData(與先前狀態(tài)有關(guān)),Data控制信號(hào)線就會(huì)出現(xiàn)低電平,即信號(hào)0,為了更加可靠,可以等一段時(shí)間,到達(dá)時(shí)刻t9時(shí)P/C/D信號(hào)再給出一個(gè)負(fù)脈沖用于鎖定數(shù)據(jù)。當(dāng)然負(fù)脈沖的寬度應(yīng)當(dāng)比較窄,否則Data信號(hào)會(huì)反轉(zhuǎn),通常負(fù)脈沖寬度t10-t9<1/4tCLK。
Data="1時(shí)",當(dāng)P/C/D信號(hào)的前一個(gè)數(shù)據(jù)的上升沿t5結(jié)束,并保持一段時(shí)間,到達(dá)t6后,立即進(jìn)入低電平,經(jīng)過(guò)大約tData(與先前狀態(tài)有關(guān)),Data控制信號(hào)線就會(huì)出現(xiàn)高電平,即信號(hào)1,為了更加可靠,可以等一段時(shí)間,到達(dá)時(shí)刻t10時(shí),P/C/D信號(hào)再給出一個(gè)上升沿用于鎖定數(shù)據(jù)。
這樣Data信號(hào)也可以被正確地解碼出來(lái)。在本例中CLK信號(hào)無(wú)須專(zhuān)門(mén)的解碼電路,P/C/D信號(hào)可以直接作為CLK控制信號(hào)使用。
本方法經(jīng)過(guò)實(shí)驗(yàn)驗(yàn)證,其中R1=10KW,C1=0.1mF, R2=1KW, C2=0.01mF,D1為1N5817,U1/U2為74HC14。當(dāng)然也可以根據(jù)需要進(jìn)行調(diào)整。
結(jié)語(yǔ)
FPGA是一種功能非常強(qiáng)大,非常靈活的器件,正在向各種中、高檔的應(yīng)用普及,采用本文提出的精簡(jiǎn)FPGA編程方法,節(jié)省了控制器的I/O線,克服了FPGA在便攜式設(shè)備中應(yīng)用的一個(gè)瓶頸。文中給出了其基本原理并通過(guò)了實(shí)驗(yàn),具有一定的使用價(jià)值。
評(píng)論