《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 多節(jié)點(diǎn)大容量FPGA系統(tǒng)的遠(yuǎn)程升級方法
多節(jié)點(diǎn)大容量FPGA系統(tǒng)的遠(yuǎn)程升級方法
摘要: 針對目前廣泛使用的以大容量FPGA實(shí)現(xiàn)主要功能的多節(jié)點(diǎn)系統(tǒng)的遠(yuǎn)程升級問題,,提出了一種基于ATmega64單片機(jī)和RS485總線以及接入以太網(wǎng)的主控計(jì)算機(jī)的實(shí)現(xiàn)方案,。該方案具有低成本等顯著的特點(diǎn),可以簡單,、有效地解決許多場合多節(jié)點(diǎn),、大容量FPGA系統(tǒng)的遠(yuǎn)程升級問題,具有一定的應(yīng)用價(jià)值,。
Abstract:
Key words :

         引言

  多節(jié)點(diǎn)系統(tǒng),在目前的很多電子系統(tǒng)應(yīng)用場合都可以看到,。這種多節(jié)點(diǎn)系統(tǒng)由于具有結(jié)構(gòu)可擴(kuò)展性,、功能配置的靈活性以及便于查找故障節(jié)點(diǎn)等良好的可維護(hù)性得到了越來越廣泛的應(yīng)用。通常,,多節(jié)點(diǎn)系統(tǒng)各個(gè)節(jié)點(diǎn)的主要硬件構(gòu)成有很大的相似性,。特別是近年來, FPGA這個(gè)強(qiáng)大的平臺讓多節(jié)點(diǎn)系統(tǒng)各個(gè)節(jié)點(diǎn)的硬件構(gòu)成擁有了更廣泛的通用性,。尤其是隨著IP核技術(shù)的推廣,,再加上一些功能強(qiáng)大的CPU核的出現(xiàn),如Xilinx公司提供的PicoBlaze和MicroBlaze等,,使得目前的許多系統(tǒng)的主要功能都可以由大容量的FPGA實(shí)現(xiàn),,而無需再使用比較昂貴的高性能微處理器。

  對于節(jié)點(diǎn)系統(tǒng),,這將大大降低系統(tǒng)成本,。對于由大容量FPGA構(gòu)成的多節(jié)點(diǎn)系統(tǒng),系統(tǒng)的升級是一個(gè)費(fèi)時(shí)費(fèi)力的工作,。此時(shí),,F(xiàn)PGA的遠(yuǎn)程升級能力就顯得尤為重要。對于包含ARM,、DSP,、PowerPC等高性能嵌入式微處理器的多節(jié)點(diǎn)系統(tǒng),使用這些嵌入式微處理器,,采用SELECTMAP對FPGA進(jìn)行加載并實(shí)現(xiàn)遠(yuǎn)程升級,,無需增加過多的外部器件,是非常經(jīng)濟(jì)和高效的,。但對于核心器件就是大容量FPGA的系統(tǒng),,如果由FPGA本身來接收升級數(shù)據(jù)并寫入存儲配置數(shù)據(jù)的非易失性存儲器,一旦升級失敗,,將無法再次升級,,從而限制了它在許多需要高可靠性要求或者維護(hù)人員不便于到達(dá)的場合的應(yīng)用;而如果單純?yōu)榱藢?shí)現(xiàn)系統(tǒng)的遠(yuǎn)程升級而加入價(jià)格昂貴的嵌入式微處理器,,又會較大地增加系統(tǒng)成本和復(fù)雜性,。針對這種情況,,筆者設(shè)計(jì)了利用ATmega64單片機(jī)和RS485總線,加上接入以太網(wǎng)的主控計(jì)算機(jī)構(gòu)成的遠(yuǎn)程升級系統(tǒng),,解決了上述問題,。

  1 系統(tǒng)設(shè)計(jì)

  1.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)

  遠(yuǎn)程升級系統(tǒng)主要由一臺接入以太網(wǎng)的主控計(jì)算機(jī)、半雙工RS485總線以及各個(gè)子節(jié)點(diǎn)構(gòu)成,,組成結(jié)構(gòu)如圖1所示,。主控計(jì)算機(jī)通過以太網(wǎng)從外部獲取整個(gè)系統(tǒng)各個(gè)節(jié)點(diǎn)的升級數(shù)據(jù),然后通過RS485總線向各個(gè)子節(jié)點(diǎn)發(fā)送其對應(yīng)的升級數(shù)據(jù),,完成多節(jié)點(diǎn)系統(tǒng)的升級,。RS485總線采用一主多從的半雙工方式,主控計(jì)算機(jī)為總線的主控制器,,只能由它向各個(gè)節(jié)點(diǎn)發(fā)起通信連接,,其余子節(jié)點(diǎn)只能響應(yīng)主控計(jì)算機(jī)的控制命令。

 

 

 

  圖1 多節(jié)點(diǎn)大容量FPGA系統(tǒng)遠(yuǎn)程升級系統(tǒng)結(jié)構(gòu)框圖

  1.2 節(jié)點(diǎn)升級原理

  各個(gè)節(jié)點(diǎn)通過RS485總線與主控計(jì)算機(jī)相連,,在無升級數(shù)據(jù)時(shí),,總線可以用來傳輸主控計(jì)算機(jī)對各個(gè)節(jié)點(diǎn)的查詢和控制命令。主控計(jì)算機(jī)與各個(gè)節(jié)點(diǎn)的通信協(xié)議可以采用具有查詢控制幀,、應(yīng)答幀和數(shù)據(jù)幀3種幀類型的協(xié)議,。只有主控計(jì)算機(jī)可以發(fā)送查詢控制幀,查詢或設(shè)定各個(gè)節(jié)點(diǎn)的遠(yuǎn)程升級狀態(tài)或工況信息,。子節(jié)點(diǎn)接收主控計(jì)算機(jī)的命令和數(shù)據(jù),,發(fā)送應(yīng)答幀,并完成自身的升級,。

  2 子節(jié)點(diǎn)的硬件設(shè)計(jì)

  2.1 子節(jié)點(diǎn)硬件結(jié)構(gòu)框圖

  如圖2所示,,以一個(gè)由Xilinx公司的XC3S4000大容量FPGA構(gòu)成的系統(tǒng)為例,遠(yuǎn)程升級系統(tǒng)子節(jié)點(diǎn)的硬件電路主要包括: ATmega64單片機(jī),,用于存儲大容量FPGA配置數(shù)據(jù)的Flash,,以及接入RS485總線的半雙工總線收發(fā)器。ATmega64單片機(jī)用于實(shí)現(xiàn)對大容量FPGA XC3S4000的加載,,以及從RS485總線接收FPGA的升級數(shù)據(jù)并寫入擁有2 MB存儲空間的Flash存儲器SST36VF1601C中,。RS485TTL電平變換電路采用RS485收發(fā)器SP485R。

 

  圖2 子節(jié)點(diǎn)硬件結(jié)構(gòu)框圖

  2.2 子節(jié)點(diǎn)硬件設(shè)計(jì)說明

  在子節(jié)點(diǎn)的硬件設(shè)計(jì)中,,ATmega64單片機(jī)是實(shí)現(xiàn)整個(gè)升級功能的關(guān)鍵,。ATmega64是基于增強(qiáng)的AVR RISC結(jié)構(gòu)的低功耗8位CMOS微控制器。由于其先進(jìn)的指令集以及單時(shí)鐘周期指令執(zhí)行時(shí)間,,ATmega64 的數(shù)據(jù)吞吐率高達(dá)1 MIPS/MHz,,從而可以緩解系統(tǒng)在功耗和處理速度之間的矛盾。AVR內(nèi)核具有豐富的指令集和32個(gè)通用工作寄存器,,并且所有的寄存器都直接與算術(shù)邏輯單元(ALU)相連接,,使得1條指令可以在1個(gè)時(shí)鐘周期內(nèi)同時(shí)訪問2個(gè)獨(dú)立的寄存器,。這種結(jié)構(gòu)大大提高了代碼效率,并且具有比普通的CISC微控制器最高至10倍的數(shù)據(jù)吞吐率,。ATmega64有如下特點(diǎn):

 ?、?64 KB的系統(tǒng)內(nèi)可編程Flash(具有同時(shí)讀寫的能力,即RWW),,2 KB的EEPROM,,4 KB的SRAM,32個(gè)通用工作寄存器,;

 ?、?53個(gè)通用I/O口線;

 ?、?實(shí)時(shí)計(jì)數(shù)器(RTC);

 ?、?4個(gè)具有比較模式與PWM的靈活的定時(shí)器/計(jì)數(shù)器(T/C),,具有片內(nèi)振蕩器的可編程看門狗定時(shí)器;

 ?、?2個(gè)USART,,面向字節(jié)的雙線串行接口(TWI),1個(gè)SPI 串行端口,;

 ?、?8路10 位具有可選差分輸入級可編程增益的ADC;

 ?、?與IEEE 1149.1 標(biāo)準(zhǔn)兼容的,,可用于訪問片上調(diào)試系統(tǒng)及編程的JTAG接口。

  ATmega64是以Atmel 高密度非易失性存儲器技術(shù)生產(chǎn)的,。片內(nèi)ISP Flash 允許程序存儲器通過ISP 串行接口(或者通用編程器)進(jìn)行編程,,也可以通過運(yùn)行于AVR內(nèi)核之中的引導(dǎo)程序進(jìn)行編程。通過將8位RISC CPU與系統(tǒng)內(nèi)可編程的Flash集成在一個(gè)芯片內(nèi),,ATmega64 成為一個(gè)功能強(qiáng)大的單片機(jī),,為許多嵌入式控制應(yīng)用提供了靈活而低成本的解決方案。

  利用ATmega64單片機(jī)實(shí)現(xiàn)對大容量FPGA的遠(yuǎn)程升級,,涉及的主要技術(shù)問題有三點(diǎn): 一是如何將ATmega64單片機(jī)接入RS485總線,;二是在接收到升級數(shù)據(jù)后和加載FPGA時(shí),如何利用ATmega64單片機(jī)對大容量的Flash存儲器進(jìn)行讀寫操作,;三是ATmega64單片機(jī)實(shí)現(xiàn)FPGA的SELECTMAP加載,。

  2.2.1 RS485接口電路設(shè)計(jì)

  如表1所列, RS485總線標(biāo)準(zhǔn)具有控制方便,、價(jià)格低廉以及高噪聲抑制,、相對高的傳輸速率,、傳輸距離遠(yuǎn)和寬共模范圍等優(yōu)點(diǎn)。在過去的20年時(shí)間里,,建議性標(biāo)準(zhǔn)RS485作為一種多點(diǎn)差分?jǐn)?shù)據(jù)傳輸?shù)碾姎庖?guī)范,,被應(yīng)用在許多不同的領(lǐng)域作為數(shù)據(jù)傳輸鏈路。

  表1 TIA/EIA485串行通信標(biāo)準(zhǔn)的性能

 

 

 

  子節(jié)點(diǎn)的ATmega64單片機(jī)通過Sipex公司設(shè)計(jì)生產(chǎn)的高性能RS485收發(fā)器接入RS485總線,。

  SP485R是一款與流行的標(biāo)準(zhǔn)RS485芯片完全兼容,,而且包含更高的ESD保護(hù)和高接收器輸入阻抗等性能的RS485收發(fā)器。接收器輸入高阻抗可以使400個(gè)收發(fā)器接到同一條傳輸線上,,又不會引起RS485驅(qū)動器信號的衰減,。該收發(fā)器的特點(diǎn)如下:

  ① 允許超過400個(gè)收發(fā)器接到同一條傳輸線上,;

 ?、?接收器輸入高阻抗(標(biāo)準(zhǔn)值RIN=150 kΩ);

 ?、?半雙工配置與工業(yè)標(biāo)準(zhǔn)引腳一致,;

  ④ 共模輸入電壓范圍為-7~+12 V,;

 ?、?低功耗(250 mW);

 ?、?獨(dú)立驅(qū)動器和接收器使能引腳,。

  其典型應(yīng)用電路如圖3所示。

 

  圖3 利用SP485R構(gòu)成的半雙工RS485電路

  ATmega64單片機(jī)的標(biāo)準(zhǔn)串行口通過RXD直接連接SP485R芯片的RO引腳,,通過TXD直接連接SP485R芯片的DI引腳,。由單片機(jī)輸出的R/D信號直接控制SP485R芯片的發(fā)送器/接收器使能:R/D信號為1,SP485R芯片的發(fā)送器有效,,接收器禁止,,此時(shí)單片機(jī)可以向RS485總線發(fā)送數(shù)據(jù)字節(jié);R/D信號為0,,SP485R芯片的發(fā)送器禁止,,接收器有效,單片機(jī)可以接收來自RS485總線的數(shù)據(jù)字節(jié),。上拉電阻R1,、下拉電阻R2用于保證未連接總線時(shí)的SP485R芯片處于空閑狀態(tài),以提高每個(gè)RS485節(jié)點(diǎn)的工作可靠性,。6.8 V的TVS管V1,、V2、V3用來保護(hù)RS485總線,,避免RS485總線受外界干擾時(shí)產(chǎn)生的高壓損壞RS485收發(fā)器,。

  2.2.2 ATmega64存儲空間的擴(kuò)展

  ATmega64的尋址空間為64 KB,,利用ATmega64自身的尋址系統(tǒng),只能訪問0x0000~0xFFFF的地址空間,。顯然,,這對于存儲和加載大容量FPGA的配置數(shù)據(jù)是遠(yuǎn)遠(yuǎn)不夠的。以Xilinx公司的Spartan3系列FPGA為例,,其配置數(shù)據(jù)所需的存儲空間如表2所列,。

  表2 Spartan3系列FPGA配置文件大小

 

 

 

  以XC3S4000型FPGA為例,它的配置文件所需的存儲空間約為1.35 MB,,已遠(yuǎn)遠(yuǎn)超出了ATmega64單片機(jī)的尋址空間,。因此,為了能夠利用ATmega64單片機(jī)來實(shí)現(xiàn)對FPGA配置數(shù)據(jù)的讀寫,,必須對其尋址空間進(jìn)行擴(kuò)展,。擴(kuò)展的硬件連接框圖如圖2中的單片機(jī)與Flash的連接部分所示。

  本設(shè)計(jì)中是使用通用I/O來擴(kuò)展ATmega64單片機(jī)的尋址空間的,。ATmega64單片機(jī)的總尋址空間為64 KB,,但片內(nèi)4 KB的SRAM及各種寄存器占用了前面的部分尋址空間,故其片外存儲器尋址空間是0x1100~0xFFFF,。因此將Flash的低15位地址直接接到ATmega64單片機(jī)的低15位地址總線上,其余6位高位地址用單片機(jī)的通用I/O進(jìn)行選擇,。尋址時(shí)單片機(jī)的專用地址口只輸出0x8000~0xFFFF的地址數(shù)據(jù),,與通用I/O輸出的地址組合后給出Flash的讀寫地址。

  通過以上對ATmega64單片機(jī)尋址空間的擴(kuò)展方法,,可以實(shí)現(xiàn)ATmega64單片機(jī)對合適的Flash存儲器的尋址操作,,從而解決了大容量FPGA配置數(shù)據(jù)的存儲和讀取問題。

  2.2.3 用ATmega64實(shí)現(xiàn)FPGA的SELECTMAP加載

  Xilinx公司的Spartan3系列FPGA加載方式分為5種: Master Serial,、Slave Serial,、Master Parallel、Slave Parallel,、JTAG,。

  按照FPGA是否控制加載過程,加載方式可分為Master方式和Slave方式,;按照加載數(shù)據(jù)時(shí)的數(shù)據(jù)位寬,,可分為Serial方式和Parallel方式。用于加載的引腳主要有: PROG_B,,CCLK,,RDWR_B,DONE,,INIT_B,,CS_B,,BUSY,D[0~7],,M[0~2],,HSWAP和JTAG接口(TDI、TMS,、TCK,、TDO)。加載過程大體分為3個(gè)步驟: 配置的建立,、配置數(shù)據(jù)的加載和加載完成,。

  SELECTMAP即Slave Parallel方式,是由外部控制器控制FPGA的加載過程,,并以8位數(shù)據(jù)的形式向FPGA寫入加載數(shù)據(jù)的加載方法,。圖2中FPGA與ATmega64的連接部分為ATmega64單片機(jī)采用SELECTMAP方式對FPGA進(jìn)行加載的硬件連接框圖,具體實(shí)現(xiàn)過程如下:

  ATmega64通過將FPGA的PROG_B,、CS_B和RDWR_B引腳置低來開啟加載過程,,F(xiàn)PGA在PROG_B置低后開始清除內(nèi)部配置RAM,并將INIT_B腳置低,。PROG_B重新置1后,,在INIT_B由低變高的上升沿,F(xiàn)PGA采樣M[0~2]引腳獲取配置方式信息,。ATmega64監(jiān)視FPGA的INIT_B腳,,當(dāng)INIT_B腳由低變高時(shí),說明FPGA已經(jīng)完成了內(nèi)部配置RAM的清除工作,,并準(zhǔn)備好接收配置數(shù)據(jù),。在ATmega64給出的CCLK配置時(shí)鐘的上升沿,配置數(shù)據(jù)D[0~7]寫入配置RAM,。當(dāng)FPGA接收完所有的配置數(shù)據(jù)后,,DONE引腳被FPGA置為高電平。ATmega64可以通過監(jiān)視DONE引腳來判斷FPGA是否加載完成,。對于Spartan3系列的FPGA,,如果配置FPGA的CCLK的頻率高于50 MHz,則外部控制器還需要監(jiān)視FPGA的BUSY引腳,。當(dāng)BUSY腳為高時(shí),,說明FPGA還未完成上一個(gè)配置數(shù)據(jù)的處理,此時(shí)外部控制器需要繼續(xù)保持上一個(gè)配置數(shù)據(jù)在D[0~7]引腳,,直至BUSY引腳回到低電平,。對于本設(shè)計(jì)的應(yīng)用,ATmega64給出的配置時(shí)鐘頻率遠(yuǎn)低于50 MHz,不必考慮BUSY引腳的控制作用,。

  3 軟件設(shè)計(jì)

  3.1 主控計(jì)算機(jī)的軟件設(shè)計(jì)

  主控制計(jì)算機(jī)的軟件運(yùn)行狀態(tài)應(yīng)該分為兩種: 一是平時(shí)的查詢控制狀態(tài),,用來查詢和控制系統(tǒng)中各個(gè)節(jié)點(diǎn)的工作狀態(tài);二是系統(tǒng)的升級狀態(tài),,用來執(zhí)行對各個(gè)子節(jié)點(diǎn)的升級控制,。如圖4所示,這兩種狀態(tài)是可以相互轉(zhuǎn)換的,。

 

 

 

  圖4 主控計(jì)算機(jī)主要狀態(tài)

  軟件的查詢控制狀態(tài),,是由系統(tǒng)所要實(shí)現(xiàn)的主要功能決定的,不屬于本文所討論的范疇,。在系統(tǒng)的升級狀態(tài),,主控計(jì)算機(jī)先要通過以太網(wǎng)獲得系統(tǒng)各個(gè)節(jié)點(diǎn)的遠(yuǎn)程升級數(shù)據(jù),待全部升級數(shù)據(jù)接收完成后,,向系統(tǒng)的一個(gè)節(jié)點(diǎn)發(fā)送升級指令,。節(jié)點(diǎn)響應(yīng)并建立起通信連接后,將該節(jié)點(diǎn)的升級數(shù)據(jù)全部發(fā)送到該節(jié)點(diǎn),。接下來,,主控計(jì)算機(jī)判斷上一個(gè)節(jié)點(diǎn)是否為最后一個(gè)需要升級的節(jié)點(diǎn),如果不是,,則繼續(xù)進(jìn)行下一個(gè)節(jié)點(diǎn)升級數(shù)據(jù)的傳輸,。系統(tǒng)所有的節(jié)點(diǎn)升級完成后,等待外部輸入的控制命令,。例如,,讓整個(gè)系統(tǒng)重新啟動,加載新的數(shù)據(jù),;或暫時(shí)不重新啟動而返回查詢控制狀態(tài)。軟件流程如圖5所示,。

 

 

 

  圖5 系統(tǒng)升級狀態(tài)流程

  3.2 子節(jié)點(diǎn)的軟件設(shè)計(jì)

  對于子節(jié)點(diǎn)的軟件設(shè)計(jì),,與主控計(jì)算機(jī)一樣,也分為平時(shí)的查詢控制狀態(tài)和系統(tǒng)升級狀態(tài),,并且它們之間也能夠與主控計(jì)算機(jī)一起相互轉(zhuǎn)換,;但ATmega64單片機(jī)還要承擔(dān)對FPGA的加載任務(wù)。開機(jī)運(yùn)行后,,ATmega64單片機(jī)先加載子節(jié)點(diǎn)FPGA,,使子節(jié)點(diǎn)能夠正常工作。子節(jié)點(diǎn)正常工作后,,監(jiān)視RS485總線并判斷有無對本節(jié)點(diǎn)的通信,。當(dāng)主控計(jì)算機(jī)要求與本節(jié)點(diǎn)建立通信連接時(shí),發(fā)送反饋信息,與其建立通信連接,。子節(jié)點(diǎn)根據(jù)主控計(jì)算機(jī)發(fā)送的命令,,進(jìn)入查詢控制模式或者遠(yuǎn)程升級模式。進(jìn)入遠(yuǎn)程升級模式后,,子節(jié)點(diǎn)接收主控計(jì)算機(jī)發(fā)來的遠(yuǎn)程升級數(shù)據(jù),,升級數(shù)據(jù)經(jīng)過校驗(yàn)后寫入Flash。升級完成后繼續(xù)等待主控計(jì)算機(jī)的命令,,重新啟動或繼續(xù)運(yùn)行,。其具體的軟件設(shè)計(jì)流程如圖6所示。

 

 

 

  圖6 子節(jié)點(diǎn)軟件流程

  結(jié)語

  FPGA既繼承了ASIC的大規(guī)模,、高集成度,、高可靠性的優(yōu)點(diǎn),又克服了普通ASIC周期長,、投資大,、靈活性差的缺點(diǎn),逐步成為許多系統(tǒng)實(shí)現(xiàn)的理想選擇,。特別是隨著FPGA容量和性能的提升,,加上其獨(dú)特的硬件升級能力,其應(yīng)用范圍越來越廣,。本文所提出的對大容量FPGA構(gòu)成的多節(jié)點(diǎn)系統(tǒng)的遠(yuǎn)程升級方法,,系統(tǒng)構(gòu)成簡單、技術(shù)成熟,,而且具有明顯的成本優(yōu)勢
 

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