ALTERA FPGA在微處理器系統(tǒng)中的在應(yīng)用配置
可編程邏輯器件(pld)廣泛應(yīng)用在各種電路設(shè)計(jì)中?;诓檎冶砑夹g(shù)、sram工藝的大規(guī)模pld/fpga,密度高且觸發(fā)器多,適用于復(fù)雜的時(shí)序邏輯,如數(shù)字信號(hào)處理和各種算法的設(shè)計(jì)。這類(lèi)器件使用sram單元存儲(chǔ)配置數(shù)據(jù)。配置數(shù)據(jù)決定了pld內(nèi)部互連和功能,改變配置數(shù)據(jù),也就改變了器件的邏輯功能。sram編程時(shí)間短,為系統(tǒng)動(dòng)態(tài)改變pld的邏輯功能創(chuàng)造了條件。但由于sram的數(shù)據(jù)是易失的,配置數(shù)據(jù)必須保存在pld器件以外的非易失存儲(chǔ)器內(nèi),才能實(shí)現(xiàn)在線(xiàn)可重配置(icr)。
本文引用地址:http://m.butianyuan.cn/article/21116.htm1 在應(yīng)用配置(動(dòng)態(tài)配置)
同一設(shè)備在實(shí)現(xiàn)不同的應(yīng)用時(shí),要求fpga實(shí)現(xiàn)不同的功能。如手持多媒體設(shè)備,可拍攝分辨率較高的靜止圖像照,采用jpeg2000壓縮,也可傳送活動(dòng)圖像,采用h.263,h.264/avc等。單純使用軟件實(shí)現(xiàn)速度慢,需要對(duì)算法進(jìn)行精細(xì)的優(yōu)化;而使用硬件實(shí)現(xiàn)則速度快,但靈活性差。為此,采用微處理器和fpga相結(jié)合來(lái)實(shí)現(xiàn)手持多媒體終端,微處理器實(shí)現(xiàn)程序控制,fpga實(shí)現(xiàn)大量的規(guī)則運(yùn)算。此外,手持設(shè)備的某些應(yīng)用(如靜止圖像和活動(dòng)視頻壓縮)可能并不同時(shí)實(shí)現(xiàn)。若在一片fpga同時(shí)實(shí)現(xiàn)這些功能,不僅布線(xiàn)復(fù)雜,功能難以實(shí)現(xiàn),而且需要更大規(guī)模的fpga。若使用不同的配置數(shù)據(jù)進(jìn)行配置,使fpga在不同時(shí)刻實(shí)現(xiàn)不同的功能,則fpga的容量可以顯著降低,從而降低設(shè)備的體積、功耗及成本。
使用在應(yīng)用配置時(shí),首先把應(yīng)用分集,可能同時(shí)運(yùn)行的應(yīng)用分成一組,耗時(shí)的規(guī)則運(yùn)算由fpga實(shí)現(xiàn),其它由微處理器實(shí)現(xiàn)。把一個(gè)fpga芯片的多個(gè)配置文件連續(xù)地存放在系統(tǒng)存儲(chǔ)器中,在程序執(zhí)行時(shí),微處理器把對(duì)應(yīng)特定應(yīng)用的配置數(shù)據(jù)裝載到fpga中并完成初始化,在fpga進(jìn)入用戶(hù)模式后就能實(shí)現(xiàn)特定的功能了。這種方法可以采用更小規(guī)模的fpga,不必使用專(zhuān)用的昂貴配置芯片(如altera的epc1、epc2等)來(lái)存儲(chǔ)配置數(shù)據(jù),因而可顯著地節(jié)省系統(tǒng)成本。altera sram工藝的fpga配置方式主要分為兩大類(lèi):主動(dòng)配置和被動(dòng)配置。主動(dòng)配置方式由pld器件引導(dǎo)配置操作過(guò)程,它控制著外部存儲(chǔ)器和初始化過(guò)程;而被動(dòng)配置方式則由外部計(jì)算機(jī)或控制器控制配置過(guò)程。根據(jù)數(shù)據(jù)線(xiàn)的多少又可以將pld器件配置方式分為并行配置和串行配置兩大類(lèi)。下面以altera apex20kc系列器件為例,介紹兩種在微處理器系統(tǒng)里連接簡(jiǎn)單且使用方便的配置方式:被動(dòng)串行配置和被動(dòng)并行異步配置。
2 被動(dòng)串行配置(ps)
被動(dòng)串行配置的主要配置引腳如下:
nstatus:命令狀態(tài)下為器件的狀態(tài)輸出。加電后,fpga立即驅(qū)動(dòng)該引腳到低電位,然后在5μs內(nèi)釋放它。nstatus經(jīng)過(guò)10kω電阻上拉到vcc,如果配置中發(fā)生錯(cuò)誤,fpga將其拉低。在配置或者初始化時(shí),若配置電路將nstatus拉低,fpga進(jìn)入錯(cuò)誤狀態(tài)。
nconfig:配置控制輸入。低電位使器件復(fù)位,由低到高的電位跳變啟動(dòng)配置。
conf_donf:雙向漏極開(kāi)路;在配置前和配置期間為狀態(tài)輸出,fpga將其驅(qū)動(dòng)為低。所有配置數(shù)據(jù)無(wú)錯(cuò)誤接收并且初始化時(shí)鐘周期開(kāi)始后,fpga將其置為三態(tài),由于有上拉電阻,所以將其變?yōu)楦唠娖?,表示配置成功。在配置結(jié)束且初始化開(kāi)始時(shí),conf_done為狀態(tài)輸入:若配置電路驅(qū)動(dòng)該管腳到低,則推遲初始化工作;輸入高電位則引導(dǎo)器件執(zhí)行初始化過(guò)程并進(jìn)入用戶(hù)狀態(tài)。
dclk:時(shí)鐘輸入,為外部數(shù)據(jù)源提供時(shí)鐘。
nce:fpga器件使能輸入。nce為低時(shí),使能配置過(guò)程。單片配置時(shí),nce必須始終為低。
nceo:輸出(專(zhuān)用于多片器件)。fpga配置完成后,輸出為低。在多片級(jí)聯(lián)配置時(shí),驅(qū)動(dòng)下一片的nce端。
data0:數(shù)據(jù)輸入,在data0引腳上的一位配置數(shù)據(jù)。
porsel:專(zhuān)用輸入,用來(lái)設(shè)置上電復(fù)位(por)的延時(shí)時(shí)間。
nio_pullup:輸入。低電平時(shí),在配置前和配置期間使能內(nèi)部弱的上拉電阻,將用戶(hù)管腳拉至vccio。幾乎所有altera fpga器件都支持被動(dòng)串行配置。被動(dòng)串行配置的是序圖如圖1所示,在這種配置方式中沒(méi)有握手信號(hào),配置時(shí)鐘的工作頻率必須在器件允許的范圍,最低頻率沒(méi)有限制。為了開(kāi)始配置,配置管腳和jtag管腳所在的bank的vccint、vccio必需供電。fpga上電后進(jìn)入復(fù)位狀態(tài)。nconfig被置為低電平,使fpga進(jìn)入復(fù)位狀態(tài);nconfig由低到高的電位跳變啟動(dòng)配置過(guò)程。整個(gè)配置包括三個(gè)階段:復(fù)位、配置和初始化。當(dāng)nstatus或者nconfig為低電平時(shí),器件脫離復(fù)位狀態(tài),并且釋放漏極開(kāi)路的nstatus管腳。在nstatus釋放后,被外部電阻拉高,這時(shí)nstatus和nconfig同時(shí)為高電平,fpga準(zhǔn)備接收配置數(shù)據(jù),配置階段開(kāi)始。在串行配置過(guò)程中,fpga在dclk上升沿鎖存data0引腳上的數(shù)據(jù)。成功接收到所有數(shù)據(jù)后,釋放conf_done引腳,并被外部電阻拉高。conf_done由低到高的轉(zhuǎn)變標(biāo)志配置結(jié)束,初始化開(kāi)始。此后,dclk必須提供幾個(gè)周期的時(shí)鐘(具體周期數(shù)據(jù)與dclk的頻率有關(guān)),確保目標(biāo)芯片被正確初始化。初始化完成后,fpga進(jìn)入用戶(hù)工作模式。如果使用了可選的init_done信號(hào),在初始化結(jié)束后,init_done被釋放,且被外部電阻拉高,這時(shí)進(jìn)入用戶(hù)模式。dclk、data、data0配置后不能三態(tài),可置高或者置低。
在配置過(guò)程中,一旦出現(xiàn)錯(cuò)誤,fpga將nstatus拉低。系統(tǒng)可以實(shí)時(shí)監(jiān)測(cè),當(dāng)識(shí)別到這個(gè)信號(hào)后,重新啟動(dòng)配置過(guò)程。nconfig由高變低,再變高可以重新進(jìn)行配置。一旦nconfig被置低,nstatus和conf_done也將被fpga置低。當(dāng)nstatus和nconfig同時(shí)為高電平時(shí),配置開(kāi)始。
圖2是采用微處理器的fpga被動(dòng)串行配置方案的簡(jiǎn)化電路圖。配置過(guò)程為:由微處理器將nconfig置低再置高來(lái)初始化配置;檢測(cè)到nstatus變高后,就將配置數(shù)據(jù)和移位時(shí)鐘分別送到data0和dclk管腳;送完配置數(shù)據(jù)后,檢測(cè)conf_done是否變高,若未變高,說(shuō)明配置失敗,應(yīng)該重新啟動(dòng)配置過(guò)程。在檢測(cè)conf_done變高后,根據(jù)器件的定時(shí)參數(shù)再送一定數(shù)量的時(shí)鐘到dclk管腳;待fpga初始化完畢后進(jìn)入用戶(hù)模式。如果單片機(jī)具有同步串口,data0、dclk使用同步串口的串行數(shù)據(jù)輸出和時(shí)鐘輸出,這時(shí)只需要簡(jiǎn)單把數(shù)據(jù)字節(jié)或字鎖存到發(fā)送緩沖器就可以了。在使用普通i/o線(xiàn)輸出數(shù)據(jù)時(shí),每輸出1個(gè)比特,就要將dclk置低再置高產(chǎn)生一個(gè)上升沿。它比altera公司手冊(cè)給出的電路連接圖更有效地使用了存儲(chǔ)器。
3 被動(dòng)并行異步配置
如同被動(dòng)串行配置一樣,被動(dòng)并行異步配置也包括三個(gè)階段:復(fù)位、配置和初始化。被動(dòng)并行異步配置電路圖如圖3所示。當(dāng)nstatus或者nconfig為低電平時(shí),器件處于復(fù)位狀態(tài)。微處理器在nconfig管腳產(chǎn)生一個(gè)由低到高的跳變啟動(dòng)fpga的配置。當(dāng)nconfig變高后,器件脫離復(fù)位狀態(tài),并且釋放漏極開(kāi)路的nstatus管腳,fpga準(zhǔn)備接收配置數(shù)據(jù),配置階段開(kāi)始。在配置階段,微處理器fpga當(dāng)作存儲(chǔ)器,進(jìn)行寫(xiě)操作,即微處理器先使片選有效,然后把8比特?cái)?shù)據(jù)送到data[0:7]管腳上,并配置管腳rdynbsy到低電平,表示fpga正忙于處理配置數(shù)據(jù),微處理器可執(zhí)行其它功能。在rdynbsy低電平期間,fpga使用內(nèi)部振蕩器時(shí)鐘處理配置數(shù)據(jù)。當(dāng)fpga準(zhǔn)備接收下一字節(jié)的配置數(shù)據(jù)時(shí),它驅(qū)動(dòng)rdynbsy到高電平。微處理器檢測(cè)到這一高電平,便送下一字節(jié)數(shù)據(jù)到配置管腳。為了節(jié)省一根用來(lái)檢測(cè)rdynbsy的i/o線(xiàn),可采用讀存儲(chǔ)器的方法讀fpga,其中nrs為存儲(chǔ)器讀信號(hào),在nrs有效期間,rdynbsy信號(hào)被送到數(shù)據(jù)線(xiàn)d7上。也可以不檢測(cè)rdynbsy,也不讀fpga,簡(jiǎn)單地等待延時(shí)tbusy(max)+trdy2ws+tw2sb之后就寫(xiě)下一個(gè)配置數(shù)據(jù)字節(jié)。fpga每處理一字節(jié)配置數(shù)據(jù)后,若發(fā)現(xiàn)錯(cuò)誤就會(huì)將nstatus拉低,暗示配置出錯(cuò)。微處理器可以檢測(cè)這一錯(cuò)誤,并重新進(jìn)行配置。如同被動(dòng)串行配置一樣,fpga在正確接收所有配置數(shù)據(jù)后,將釋放conf_done信號(hào),于是該管腳被外部上拉電阻拉高,表示配置結(jié)束,初始化開(kāi)始。
4 配置數(shù)據(jù)文件的生成
altera的max+plus ii或quartus ii開(kāi)發(fā)工具可以生成多種格式的配置文件,用于不同配置方法。不同目標(biāo)器件,配置數(shù)據(jù)的大小不同。配置文件的大小一般由二進(jìn)制文件(擴(kuò)展名為.rbf)決定。altera提供的軟件工具不自動(dòng)生成.rbf文件,需要按照下面的步驟生成:①在max+plus ii編譯狀態(tài),選擇文件菜單中的變換sram目標(biāo)文件命令;②在變換sram目標(biāo)文件對(duì)話(huà)框,指定要轉(zhuǎn)換的文件并且選擇輸出文件格式為.rbf(sequential),然后予以確定。
評(píng)論