韓留軍,姚 堯,郝國鋒,趙 參
(1.無錫華普微電子有限公司,江蘇無錫 214035;2.中科芯集成電路有限公司,江蘇無錫 214072)
無線通信系統(tǒng)中,由于應(yīng)用環(huán)境的改變,系統(tǒng)常常要運(yùn)行在多種不同的工作模式下,這使得現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)的功能設(shè)計(jì)復(fù)雜度和資源使用率越來越高。對FPGA 進(jìn)行多重配置,根據(jù)需要在不同工作模式下的FPGA 中運(yùn)行相應(yīng)的程序,可以使有限資源的FPGA 利用率提高,程序功能設(shè)計(jì)的復(fù)雜度降低,系統(tǒng)運(yùn)行更加靈活[1]。一般利用中央處理器(Central Processing Unit,CPU)或數(shù)字信號處理器(Digital Signal Processor,DSP) 讀取Flash 中的數(shù)據(jù)加載到FPGA 中,這樣會提高硬件設(shè)計(jì)成本,增加功耗。本文提出了使用復(fù)雜可編程邏輯器件(Complex Programmable Logic Device,CPLD)對FPGA 進(jìn)行多重配置的方法,CPLD 作為主控芯片,把多套配置文件存儲到Flash 中,同時(shí)讀取里面的配置文件加載到FPGA 中,該方案使得對FPGA 的配置文件升級方便快捷,大大提高了FPGA 的資源利用率,節(jié)約了設(shè)計(jì)成本[2]。
系統(tǒng)設(shè)計(jì)總體架構(gòu)如圖1 所示,系統(tǒng)主要由CPLD、FPGA 和Flash 芯片組成,本系統(tǒng)使用的是Xilinx 公司的CPLD 和FPGA 芯片,CPLD 使用的是CoolRunner II 系列芯片,F(xiàn)PGA 使用的是Virtex4 系列芯片,F(xiàn)lash 為國微的256 Mbit 芯片。CPLD 通過串口接收上位機(jī)發(fā)送的指令和要存儲的配置文件,CPLD解析指令后判斷對Flash 的哪一段存儲區(qū)域進(jìn)行擦除,擦除完畢后,把發(fā)送過來的配置文件存儲到擦除后的Flash 區(qū)域中。Virtex4 系列的XC4VSX55 芯片對應(yīng)的配置文件大小為2.71 MB,F(xiàn)lash 中最多可以存儲11 個(gè)FPGA 的配置文件。控制板通過集成電路總線(Inter-Integrated Circuit,I2C)和CPLD 進(jìn)行通信,發(fā)送配置指令信息,CPLD 接收到指令后,讀取對應(yīng)的Flash 存儲區(qū)域內(nèi)的配置文件加載到FPGA 中,完成對FPGA 的重配置[3]。
圖1 系統(tǒng)總體框圖
FPGA 根據(jù)不同的設(shè)計(jì)需求,提供了不同的配置模式可供選擇,主要有主串模式、從串模式、主SelectMAP 模式、從SelectMAP 模式、聯(lián)合測試工作組(Joint Test Action Group,JTAG)模式、主SPI Flash 模式和從SPI Flash 模式等。本文使用的是從SelectMAP模式,此模式的配置速度相對來說比較快,配置時(shí)鐘和數(shù)據(jù)都由CPLD 提供,數(shù)據(jù)位寬為8 位[4]。
盡管有不同的配置模式,但FPGA 的配置啟動(dòng)流程是一樣的。FPGA 的配置步驟包括:器件上電、清除配置存儲器、采樣模式引腳、同步、器件標(biāo)識號(Identity Document,ID)檢測、加載配置數(shù)據(jù)、循環(huán)冗余校驗(yàn)(Cyclic Redundancy Check,CRC)和啟動(dòng)序列。在加載配置數(shù)據(jù)階段,主要是通過CPLD 提供配置時(shí)鐘和8 位寬的配置數(shù)據(jù)給FPGA 的專用配置管腳,把配置文件加載到FPGA 中[5]。
系統(tǒng)設(shè)計(jì)框圖如圖2 所示,CPLD 是整個(gè)配置過程的核心,CPLD 通過串口與上位機(jī)互連,通過I2C 接口與控制板互連,F(xiàn)lash 的地址總線、數(shù)據(jù)總線和控制總線連接到CPLD 上,CPLD 可以擦除、讀和寫Flash。FPGA 的專用配置管腳連接到CPLD 上,上電后,CPLD 通過控制板接收的指令,把對應(yīng)的Flash 中的配置文件通過FPGA 的專用配置管腳對FPGA 進(jìn)行加載配置[6]。配置文件大小為2.71 MB,配置時(shí)鐘為25 MHz,配置加載時(shí)間為1 s 左右。按照功能說明,CPLD 中主要包括串口收發(fā)模塊、串口數(shù)據(jù)處理模塊、Flash 控制模塊、Flash 讀寫模塊、FPGA 加載控制模塊和FPGA 配置加載模塊。圖3 為系統(tǒng)的控制狀態(tài)轉(zhuǎn)換框圖,從圖中可以看到數(shù)據(jù)流的狀態(tài)[7]。
圖2 系統(tǒng)設(shè)計(jì)框圖
圖3 控制狀態(tài)流程
串口收發(fā)模塊主要是實(shí)現(xiàn)與上位機(jī)進(jìn)行串口數(shù)據(jù)的交互。上位機(jī)通過串口發(fā)送、接收指令和配置數(shù)據(jù),串口收發(fā)模塊完成串轉(zhuǎn)并和并轉(zhuǎn)串的功能。
串口數(shù)據(jù)處理模塊的接收部分解析串口傳輸過來的數(shù)據(jù),按照接收指令進(jìn)行相應(yīng)的操作。比如接收到存儲地址的指令,就把接收過來的配置文件和要存儲的位置一起發(fā)送給Flash 控制模塊,以便順利存儲數(shù)據(jù)。發(fā)送部分是把反饋的狀態(tài)信息回傳給上位機(jī),上位機(jī)通過狀態(tài)信息,判斷發(fā)送的指令和數(shù)據(jù)是否正確。
Flash 控制模塊主要是完成對Flash 讀寫模塊下發(fā)擦除、讀和寫的控制指令。此模塊根據(jù)接收到的指令信息,選擇要存儲配置文件的首地址[8]。然后從此地址開始下發(fā)擦除指令,等待擦除完畢后,上傳擦除完畢信息給上位機(jī),上位機(jī)再下發(fā)配置文件數(shù)據(jù),此模塊接收到數(shù)據(jù)后,開始啟動(dòng)寫數(shù)據(jù)指令給Flash 讀寫模塊。當(dāng)要加載配置文件給FPGA 時(shí),此模塊發(fā)送讀數(shù)據(jù)指令給Flash 讀寫模塊,讀取Flash 中的配置文件加載到FPGA 中。
Flash 讀寫模塊主要是完成對Flash 具體的擦除、讀和寫操作的指令和數(shù)據(jù)的過程,按照Flash 要求的時(shí)序和指令信息操作Flash,F(xiàn)lash 的讀寫時(shí)序要求如圖4 和圖5 所示,可以完成對Flash 的正常讀寫操作。
圖4完成了對Flash 的基本寫操作過程,從圖中可知,P_flag_c 為寫入數(shù)據(jù)的標(biāo)志,P_data_c 為要寫入的數(shù)據(jù),它們把準(zhǔn)備寫入的數(shù)據(jù)準(zhǔn)備好。App_req_c 為操作Flash 的標(biāo)志信號,當(dāng)此信號為高時(shí),App_cmd_c的值為2,表示要啟動(dòng)寫Flash。在啟動(dòng)寫Flash 之前,先給App_cmd_c 的值為1,表示先擦除Flash,擦除完畢后,再寫入Flash。通過片選信號CE_FLASH、寫使能信號WE_FLASH、寫數(shù)據(jù)有效標(biāo)志app_wvalid_c 信號和寫數(shù)據(jù)app_wdata_c 信號,可以把之前準(zhǔn)備好的數(shù)據(jù)寫入到Flash 中。從圖4 可以看出,寫入的數(shù)據(jù)為A6B2 和D3C4。
圖4 Flash 的寫操作過程
圖5完成了對Flash 的基本讀操作過程,從圖5可知,App_req_c 為操作Flash 的標(biāo)志信號,當(dāng)此信號為高時(shí),App_cmd_c 的值為3,表示要啟動(dòng)讀Flash。通過片選信號CE_FLASH、讀使能信號OE_FLASH、讀數(shù)據(jù)有效標(biāo)志app_rvalid_c 信號和讀數(shù)據(jù)app_rdata_c信號,可以得到讀出的數(shù)據(jù),從圖5 可以看到之前寫入的數(shù)據(jù)被正確讀出。
圖5 Flash 的讀操作過程
FPGA 加載控制模塊主要接收控制板通過標(biāo)準(zhǔn)的I2C 協(xié)議給CPLD 下發(fā)的配置指令信息,CPLD 首先解析出I2C 協(xié)議中的地址信息,如果是此設(shè)備的地址,則繼續(xù)獲取I2C 中的數(shù)據(jù)部分,此數(shù)據(jù)包含了FPGA 加載配置的頁碼信息,CPLD 通過頁碼信息,讀取Flash相應(yīng)地址段中FPGA 的配置文件數(shù)據(jù),把數(shù)據(jù)傳輸給FPGA 配置加載模塊,對FPGA 進(jìn)行加載配置。
FPGA 配置加載模塊接收到配置指令后,按照FPGA 的配置流程,輸出配置時(shí)鐘和數(shù)據(jù),把要加載的配置文件通過從SelectMAP 模式加載到FPGA 中,完成對FPGA 的配置加載。
上位機(jī)軟件通過串口與CPLD 連接,主要功能是通過串口收發(fā)指令和數(shù)據(jù)。設(shè)置好串口參數(shù)后打開串口,把FPGA 的配置文件添加到對應(yīng)的頁碼中,點(diǎn)擊燒錄按鍵,CPLD 通過傳輸過來的指令,開始擦除對應(yīng)頁碼的Flash 區(qū)域,擦除完畢后,同時(shí)反饋相應(yīng)的信息給上位機(jī)。上位機(jī)開始把FPGA 配置文件數(shù)據(jù)發(fā)送出去,CPLD 接收到數(shù)據(jù)后,把數(shù)據(jù)緩存后存放在Flash相應(yīng)的區(qū)域中[9]。當(dāng)配置數(shù)據(jù)寫入完成后,反饋給上位機(jī)狀態(tài)信息,顯示在界面上,如果配置失敗,則重新配置。上位機(jī)燒錄成功界面如圖6 所示。
圖6 上位機(jī)燒錄成功界面
對于FPGA 的配置來說,控制板的主要作用是上電后通過I2C 給CPLD 下發(fā)配置指令信息,CPLD 解析出指令后,把對應(yīng)Flash 中的配置文件數(shù)據(jù)傳輸?shù)紽PGA 的專用配置管腳上[10]。在系統(tǒng)正常運(yùn)行時(shí),通過控制板下發(fā)不同的I2C 指令,F(xiàn)PGA 就會被加載不同的配置文件,這樣就實(shí)現(xiàn)了對FPGA 的重配置。
本文實(shí)現(xiàn)了基于CPLD 對FPGA 的多重配置方法,該方法以CPLD 為核心,可以方便快捷地更新FPGA 的配置文件,調(diào)試和系統(tǒng)升級方便。在系統(tǒng)運(yùn)行過程中,可以任意切換FPGA 的配置文件進(jìn)行加載。該方法通用性強(qiáng),可以用在不同的工程應(yīng)用領(lǐng)域,特別是在軟件無線電平臺上有較好的應(yīng)用前景。