滕林陽,胡四全,吉攀攀
(許繼集團(tuán)有限公司,許昌461000)
柔性直流輸電技術(shù)是基于電壓源換流器(VSC)的新一代直流輸電技術(shù),通過控制IGBT的通斷來實(shí)現(xiàn)子模塊投切狀態(tài)的轉(zhuǎn)換。閥控系統(tǒng)的橋臂控制器根據(jù)接收到的子模塊16位電容電壓和32位狀態(tài)信息,生成子模塊控制指令,并下發(fā)到每個(gè)子模塊。由于子模塊的數(shù)量比較多(一個(gè)橋臂為576個(gè)子模塊),需要傳輸?shù)臄?shù)據(jù)量比較大(總共27.6 Kb),并且閥控系統(tǒng)對(duì)控制周期有嚴(yán)格的要求[1](控制過程嚴(yán)格控制在100μs內(nèi))。
目前的橋臂控制器普遍采用DSP+FPGA的設(shè)計(jì)架構(gòu),F(xiàn)PGA將接收到的數(shù)據(jù)處理后傳送給DSP,DSP對(duì)數(shù)據(jù)進(jìn)行故障判斷生成控制指令,F(xiàn)PGA讀取控制指令并通過光纖發(fā)送到子模塊。兩者之間采用32位數(shù)據(jù)總線進(jìn)行數(shù)據(jù)交互,數(shù)據(jù)傳輸速率低于1Gb/s,傳輸子模塊數(shù)據(jù)大概需要30μs,占用了控制周期較長的時(shí)間,降低了閥控系統(tǒng)的控制實(shí)時(shí)性。
Xilinx的Zynq-7000系列芯片將FPGA和ARM集成到一個(gè)芯片上,兩者之間可以通過64位的內(nèi)存映射型AXI接口進(jìn)行雙向數(shù)據(jù)傳輸,理論帶寬為9.6 Gb/s。ARM和FPGA直接通過AXI4數(shù)據(jù)總線進(jìn)行通信,理論數(shù)據(jù)線寬度達(dá)到1 024位,對(duì)于突發(fā)長度,最多支持256位,能夠極大地提高FPGA和ARM的數(shù)據(jù)通信傳輸率,保證系統(tǒng)實(shí)時(shí)運(yùn)行[2]。
本文設(shè)計(jì)的橋臂控制器采用Zynq-xc7z020芯片,使用AXI4總線取代了DSP+FPGA的數(shù)據(jù)總線,同時(shí)利用ARM雙核Cortex-A9處理子系統(tǒng)和豐富的外設(shè)資源,進(jìn)一步提升了橋臂控制器的功能。
本文所設(shè)計(jì)的橋臂控制器由集成在Zynq-xc7z020內(nèi)的雙核ARM Cortex-A9 MPCore處理器(CPU0+CPU1)所控制,這兩個(gè)處理器可以同時(shí)運(yùn)行各自獨(dú)立的操作系統(tǒng)和軟件程序,而且可以通過片內(nèi)RAM進(jìn)行通信。
為了保證ARM對(duì)FPGA中斷的實(shí)時(shí)響應(yīng),將CPU1配置為運(yùn)行裸機(jī)程序,執(zhí)行中斷服務(wù)函數(shù),主要完成故障檢測(cè)和控制指令生成。而CPU0運(yùn)行Linux操作系統(tǒng),提供用戶控制圖形界面和網(wǎng)絡(luò)通信等功能。CPU0和CPU1通過片內(nèi)256K的RAM進(jìn)行數(shù)據(jù)通信,這種雙核架構(gòu)稱為不對(duì)稱的多處理機(jī)系統(tǒng)(Asymmetric MultiProcessing,AMP)模式。
Zynq-xc7z020芯片的FPGA接收到子模塊的電容電壓數(shù)據(jù)后,進(jìn)行排序及冗余處理,然后利用AXI_M(jìn)aster_Connector的AXI總線IP核將數(shù)據(jù)轉(zhuǎn)換為AXI4總線數(shù)據(jù)格式,通過ARM與FPGA的64位AXI HP(High Performance)高速接口傳輸?shù)酵獠康腄DR3中,數(shù)據(jù)傳輸完畢后,F(xiàn)PGA向ARM的CPU1發(fā)送一個(gè)中斷請(qǐng)求。
ARM的CPU1接收到中斷后,從DDR3內(nèi)存讀取數(shù)據(jù)并進(jìn)行故障判斷處理,同時(shí)通知CPU0的Linux操作系統(tǒng),在圖形界面實(shí)時(shí)顯示數(shù)據(jù)變化并通過網(wǎng)口向后臺(tái)發(fā)送事件信息。
CPU1數(shù)據(jù)處理完畢后,生成子模塊控制指令并寫入DDR3指定內(nèi)存區(qū),F(xiàn)PGA通過AXI_M(jìn)aster_Connector總線IP核從DDR3讀取數(shù)據(jù),并通過光纖發(fā)送到每個(gè)子模塊。
運(yùn)行Linux的CPU0作為主節(jié)點(diǎn),提供HDMI圖形界面,并負(fù)責(zé)系統(tǒng)上電硬件初始化、啟動(dòng)CPU1、將位配置文件燒寫到FPGA中和升級(jí)系統(tǒng)軟件等工作。方案的整體框架如圖1所示。
圖1 橋臂控制器系統(tǒng)框架圖
橋臂控制器的硬件平臺(tái)主要分為ARM和FPGA兩部分。使用Xilinx XPS硬件設(shè)計(jì)軟件,配置Zynq處理器中ARM部分的外設(shè),如圖2所示。
程序代碼和FPGA的配置文件固化在外部Quad-SPI Flash中,Enet0用來與后臺(tái)進(jìn)行網(wǎng)絡(luò)通信,SD0可以掛接SD卡,I2C0用來掛接RTC8564JE芯片,I2C1控制器配置HDMI輸出芯片Sil9134,系統(tǒng)使用UART1輸出調(diào)試信息。
圖2 橋臂控制器ARM側(cè)外設(shè)配置
FPGA部分的硬件平臺(tái)包括數(shù)據(jù)預(yù)處理的IP核、AXI總線控制IP核(IN_AXI_M(jìn)ASTER和OUT_AXI_M(jìn)ASTER),以及產(chǎn)生中斷的irq_gen_0 IP核,構(gòu)建了FPGA、ARM和DDR3的數(shù)據(jù)流通道[3],如圖3所示。
圖3 橋臂控制器FPGA硬件設(shè)計(jì)
添加AXI總線控制IP核時(shí),需指定AXI協(xié)議為AXI4,數(shù)據(jù)帶寬為64位(最高1 024位),并將ARM與FPGA的64位AXI HP接口映射到DDR3內(nèi)存的高端1 MB地址(0x3FF0 0000~0x3FFF FFFF),用來存儲(chǔ)接收到的子模塊數(shù)據(jù)以及生成的控制指令[4]。
Zynq-xc7z020芯片是以ARM作為核心的,上電后的運(yùn)行流程如下:
①進(jìn)入FSBL(First Stage Boot Loader),對(duì)電路板進(jìn)行配置初始化;
②將位文件燒入FPGA,F(xiàn)PGA按照位中的方式運(yùn)行;
③進(jìn)入SSBL(Second Stage Boot Loader),u-boot初始化操作系統(tǒng)的運(yùn)行環(huán)境,引導(dǎo)Linux內(nèi)核,隨后將控制權(quán)交給雙核ARM中的CPU0,CPU0負(fù)責(zé)啟動(dòng)響應(yīng)FPGA中斷的CPU1。
FSBL主要完成Zynq-xc7z020芯片的啟動(dòng)、內(nèi)存的初始化、I/O的中斷初始化,以及HDMI的配置。其中,HDMI接口芯片Sil9134通過IIC1來配置。
FSBL中I2C的主要C程序如下:
通過配置Sil9134的0x72基址和0x7A基址兩個(gè)寄存器,初始化芯片硬件,進(jìn)入正常工作模式。
Zynq-xc7z020芯片的ARM雙核共享1G的DDR3內(nèi)存、512K的L2 Cache和中斷控制器,為了避免雙核同時(shí)訪問這些資源導(dǎo)致沖突,系統(tǒng)采用了以下措施:
①在CPU0上運(yùn)行的Linux使用DDR3內(nèi)存的低端768 MB空間,CPU1使用隨后的255 MB內(nèi)存空間,高端的1 MB空間用來存儲(chǔ)FPGA讀寫的數(shù)據(jù)。
②CPU1禁用L2 Cache,CPU0上的Linux完全占用L2 Cache。
③FPGA發(fā)送給CPU1的中斷使用私有中斷控制器,發(fā)送給CPU0的中斷使用共享中斷控制器,兩者互不干擾[5]。
Linux內(nèi)核在CPU0啟動(dòng)成功后,此時(shí)CPU1處于休眠狀態(tài),會(huì)一直輪詢0x FFFF FFF0地址處的數(shù)值,非零就把讀取到的數(shù)值裝載到PC寄存器,跳轉(zhuǎn)到對(duì)應(yīng)的地址執(zhí)行指令。CPU0通過Linux的devmem命令把CPU1的DDR3內(nèi)存起始地址0x3000 0000寫入0x FFFF FFF0,啟動(dòng)CPU1:devmem 0x FFFF FFF0 0x3000 0000。
CPU1啟動(dòng)后,在主函數(shù)注冊(cè)中斷服務(wù)函數(shù),當(dāng)FPGA的數(shù)據(jù)中斷發(fā)生時(shí)進(jìn)入中斷函數(shù),進(jìn)行故障判斷并生成控制指令。因?yàn)镃PU1運(yùn)行的是裸機(jī)程序,其中斷響應(yīng)時(shí)間要比運(yùn)行Linux的CPU0響應(yīng)時(shí)間短。
橋臂控制器在調(diào)試過程中經(jīng)常需要對(duì)代碼進(jìn)行升級(jí),而程序代碼和FPGA的配置文件固化在外部Quad-SPI Flash中,通過開啟CPU0上Linux的SSH和FTP服務(wù),使用網(wǎng)口可以重新燒寫Flash中的文件,步驟如下:
①PC電腦通過FileZilla Client(Windows下的ftp工具)登錄Linux的ftp服務(wù)器,將新的燒寫文件上傳到Linux的文件系統(tǒng)下;
②PC電腦通過putty(Windows下的ssh工具)登錄Linux的root賬號(hào);
③在putty界面下,使用Linux自帶的flashcp命令將上傳的文件燒寫到外部Quad-SPI Flash。
橋臂控制器重啟后,系統(tǒng)軟件得到更新。
系統(tǒng)程序流程如圖4所示。
圖4 系統(tǒng)程序流程圖
ARM和FPGA通過AXI4數(shù)據(jù)總線進(jìn)行通信,數(shù)據(jù)帶寬最高達(dá)到1 024位,本文主要測(cè)試了64位突發(fā)傳輸率。
對(duì)于64位突發(fā)傳輸,分別測(cè)試FPGA工作頻率為50 MHz、100 MHz和150 MHz時(shí),F(xiàn)PGA發(fā)送256個(gè)64位數(shù)據(jù)的用時(shí),如表1所列。
表1 FPGA發(fā)送64位數(shù)據(jù)時(shí)間
由表1可以計(jì)算得出不同F(xiàn)PGA工作頻率下,數(shù)據(jù)位寬為64位時(shí)的傳輸速率,如表2所列。由表2可見,使用Zynq-xc7z020芯片能夠極大提高FPGA和ARM的數(shù)據(jù)傳輸速率。
表2 FPGA數(shù)據(jù)傳輸速率
本文設(shè)計(jì)的橋臂控制器,采用Xilinx Zynq-xc7z020芯片,使用AXI總線取代了以前的DSP+FPGA數(shù)據(jù)總線方式,實(shí)測(cè)的最高數(shù)據(jù)傳輸率達(dá)到8.9 Gb/s,極大地改善了閥控系統(tǒng)數(shù)據(jù)通信的實(shí)時(shí)性,同時(shí)簡(jiǎn)化了控制板卡的硬件設(shè)計(jì),降低了板卡功耗,提升了系統(tǒng)的運(yùn)行穩(wěn)定性[6]。
利用芯片上集成的ARM Cortex-A9 MPCore雙核處理器,搭建了AMP多系統(tǒng)架構(gòu),在保證系統(tǒng)實(shí)時(shí)響應(yīng)FPGA中斷的同時(shí),移植了Linux操作系統(tǒng),提供了人機(jī)交互界面,為橋臂控制器添加了新的控制功能,簡(jiǎn)化了柔性直流輸電閥控系統(tǒng)的整體設(shè)計(jì)。
[1]周楊.基于模塊化多電平換流技術(shù)的柔性直流輸電系統(tǒng)研究[D].杭州:浙江大學(xué),2013.
[2]王瑩.Xilinx可擴(kuò)展處理平臺(tái):ZYNQ嵌入式處理器與FPGA集成的獨(dú)特創(chuàng)舉[J].電子產(chǎn)品世界,2012(2).
[3]Zynq-7000:SOC 平 臺(tái) [J].世 界 電 子 元 器 件,2012(12):24-24.
[4]楊定定.基于AXI總線的 MicroBlaze雙核SoPC系統(tǒng)設(shè)計(jì)[J].電子產(chǎn)品世界,2012,19(1):76-77.
[5]王可,黃曉華.基于ARM Cortex的視覺導(dǎo)航AGV雙核控制器設(shè)計(jì)[J].機(jī)電工程,2013,30(10):1284-1287.
[6]胥京宇.賽靈思推出可擴(kuò)展處理平臺(tái)Zynq-7000系列[J].世界電子元器件,2011(4):59-59.