你的位置:EETOP 赛灵思(Xilinx) 社区 >> >> 全部 >> 详细内容

Zynq7000的柔性直流输电桥臂控制器设计

发布者:jackzhang 时间:2015-08-17 16:53:18

引言
    柔性直流输电技术是基于电压源换流器(VSC)的新一代直流输电技术,通过控制IGBT的通断来实现子模块投切状态的转换。阀控系统的桥臂控制器根据接收到的子模块16位电容电压和32位状态信息,生成子模块控制指令,并下发到每个子模块。由于子模块的数量比较多(一个桥臂为576个子模块),需要传输的数据量比较大(总共27.6 Kb),并且阀控系统对控制周期有严格的要求[1](控制过程严格控制在100 μs内)。
    目前的桥臂控制器普遍采用DSP+FPGA的设计架构,FPGA将接收到的数据处理后传送给DSP,DSP对数据进行故障判断生成控制指令,FPGA读取控制指令并通过光纤发送到子模块。两者之间采用32位数据总线进行数据交互,数据传输速率低于1Gb/s,传输子模块数据大概需要30 μs,占用了控制周期较长的时间,降低了阀控系统的控制实时性。
    Xilinx的Zynq7000系列芯片将FPGA和ARM集成到一个芯片上,两者之间可以通过64位的内存映射型AXI接口进行双向数据传输,理论带宽为9.6 Gb/s。ARM和FPGA直接通过AXI4数据总线进行通信,理论数据线宽度达到1 024位,对于突发长度,最多支持256位,能够极大地提高FPGA和ARM的数据通信传输率,保证系统实时运行[2]。
    本文设计的桥臂控制器采用Zynqxc7z020芯片,使用AXI4总线取代了DSP+FPGA的数据总线,同时利用ARM 双核CortexA9处理子系统和丰富的外设资源,进一步提升了桥臂控制器的功能。
1 系统总体结构设计
    本文所设计的桥臂控制器由集成在Zynqxc7z020内的双核ARM CortexA9 MPCore处理器(CPU0+CPU1)所控制,这两个处理器可以同时运行各自独立的操作系统和软件程序,而且可以通过片内RAM进行通信。
    为了保证ARM对FPGA中断的实时响应,将CPU1配置为运行裸机程序,执行中断服务函数,主要完成故障检测和控制指令生成。而CPU0运行Linux操作系统,提供用户控制图形界面和网络通信等功能。CPU0和CPU1通过片内256K的RAM进行数据通信,这种双核架构称为不对称的多处理机系统(Asymmetric MultiProcessing,AMP)模式。
    Zynqxc7z020芯片的FPGA接收到子模块的电容电压数据后,进行排序及冗余处理,然后利用AXI_Master_Connector的AXI总线IP核将数据转换为AXI4总线数据格式,通过ARM与FPGA的64位AXI HP(High Performance)高速接口传输到外部的DDR3中,数据传输完毕后,FPGA向ARM的CPU1发送一个中断请求。
    ARM的CPU1接收到中断后,从DDR3内存读取数据并进行故障判断处理,同时通知CPU0的Linux操作系统,在图形界面实时显示数据变化并通过网口向后台发送事件信息。
    CPU1数据处理完毕后,生成子模块控制指令并写入DDR3指定内存区,FPGA通过AXI_Master_Connector总线IP核从DDR3读取数据,并通过光纤发送到每个子模块。
    运行Linux的CPU0作为主节点,提供HDMI图形界面,并负责系统上电硬件初始化、启动CPU1、将位配置文件烧写到FPGA中和升级系统软件等工作。方案的整体框架如图1所示。

图1 桥臂控制器系统框架图
2 硬件平台设计
    桥臂控制器的硬件平台主要分为ARM和FPGA两部分。使用Xilinx XPS硬件设计软件,配置Zynq处理器中ARM部分的外设,如图2所示。

图2 桥臂控制器ARM侧外设配置
    程序代码和FPGA的配置文件固化在外部QuadSPI Flash中,Enet0用来与后台进行网络通信,SD0可以挂接SD卡,I2C0用来挂接RTC8564JE芯片,I2C1控制器配置HDMI输出芯片Sil9134,系统使用UART1输出调试信息。
    FPGA部分的硬件平台包括数据预处理的IP核、AXI总线控制IP核(IN_AXI_MASTER和OUT_AXI_MASTER),以及产生中断的irq_gen_0 IP核,构建了FPGA、ARM和DDR3的数据流通道[3],如图3所示。

图3 桥臂控制器FPGA硬件设计
    添加AXI总线控制IP核时,需指定AXI协议为AXI4,数据带宽为64位(最高1 024位),并将ARM与FPGA的64位AXI HP接口映射到DDR3内存的高端1 MB地址(0x3FF0 0000~0x3FFF FFFF),用来存储接收到的子模块数据以及生成的控制指令[4]。
3 嵌入式软件设计
    Zynqxc7z020芯片是以ARM作为核心的,上电后的运行流程如下:
    ① 进入FSBL(First Stage Boot Loader),对电路板进行配置初始化;
    ② 将位文件烧入FPGA,FPGA按照位中的方式运行;
    ③ 进入SSBL(Second Stage Boot Loader),uboot初始化操作系统的运行环境,引导Linux内核,随后将控制权交给双核ARM中的CPU0,CPU0负责启动响应FPGA中断的CPU1。
3.1 FSBL软件设计
    FSBL主要完成Zynqxc7z020芯片的启动、内存的初始化、I/O的中断初始化,以及HDMI的配置。其中,HDMI接口芯片Sil9134通过IIC1来配置。
    FSBL中I2C的主要C程序如下:

    //初始化I2C控制器

    XIicPs_LookupConfig(…);

    XIicPs_CfgInitialize(…);

    //设置I2C时钟频率

    XIicPs_SetSClk(…);

    //发送数据

    iic_writex(… );
    通过配置Sil9134的0x72基址和0x7A基址两个寄存器,初始化芯片硬件,进入正常工作模式。
3.2 启动AMP工作模式
    Zynqxc7z020芯片的ARM双核共享1G的DDR3内存、512K的L2 Cache和中断控制器,为了避免双核同时访问这些资源导致冲突,系统采用了以下措施:
    ① 在CPU0上运行的Linux使用DDR3内存的低端768 MB空间,CPU1使用随后的255 MB内存空间,高端的1 MB空间用来存储FPGA读写的数据。
    ② CPU1禁用L2 Cache,CPU0上的Linux完全占用L2 Cache。
    ③ FPGA发送给CPU1的中断使用私有中断控制器,发送给CPU0的中断使用共享中断控制器,两者互不干扰[5]。
    Linux内核在CPU0启动成功后,此时CPU1处于休眠状态,会一直轮询0xFFFF FFF0地址处的数值,非零就把读取到的数值装载到PC寄存器,跳转到对应的地址执行指令。CPU0通过Linux的devmem命令把CPU1的DDR3内存起始地址0x3000 0000写入0xFFFF FFF0,启动CPU1:devmem 0xFFFF FFF0 0x3000 0000。
    CPU1启动后,在主函数注册中断服务函数,当FPGA的数据中断发生时进入中断函数,进行故障判断并生成控制指令。因为CPU1运行的是裸机程序,其中断响应时间要比运行Linux的CPU0响应时间短。
3.3 系统软件升级
    桥臂控制器在调试过程中经常需要对代码进行升级,而程序代码和FPGA的配置文件固化在外部QuadSPI Flash中,通过开启CPU0上Linux的SSH和FTP服务,使用网口可以重新烧写Flash中的文件,步骤如下:
    ① PC电脑通过FileZilla Client(Windows下的ftp工具)登录Linux的ftp服务器,将新的烧写文件上传到Linux的文件系统下;
    ② PC电脑通过putty(Windows下的ssh工具)登录Linux的root账号;
    ③ 在putty界面下,使用Linux自带的flashcp命令将上传的文件烧写到外部QuadSPI Flash。
    桥臂控制器重启后,系统软件得到更新。
3.4 应用程序流程
    系统程序流程如图4所示。

图4 系统程序流程图
4 FPGA通信传输率测试
    ARM和FPGA通过AXI4数据总线进行通信,数据带宽最高达到1 024位,本文主要测试了64位突发传输率。
    对于64位突发传输,分别测试FPGA工作频率为50 MHz、100 MHz和150 MHz时,FPGA发送256个64位数据的用时,如表1所列。
表1 FPGA发送64位数据时间

    由表1可以计算得出不同FPGA工作频率下,数据位宽为64位时的传输速率,如表2所列。
表2 FPGA数据传输速率

    由表2可见,使用Zynqxc7z020芯片能够极大提高FPGA和ARM的数据传输速率。
结语
    本文设计的桥臂控制器,采用Xilinx Zynqxc7z020芯片,使用AXI总线取代了以前的DSP+FPGA数据总线方式,实测的最高数据传输率达到8.9 Gb/s,极大地改善了阀控系统数据通信的实时性,同时简化了控制板卡的硬件设计,降低了板卡功耗,提升了系统的运行稳定性[6]。
    利用芯片上集成的ARM CortexA9 MPCore双核处理器,搭建了AMP多系统架构,在保证系统实时响应FPGA中断的同时,移植了Linux操作系统,提供了人机交互界面,为桥臂控制器添加了新的控制功能,简化了柔性直流输电阀控系统的整体设计。

最新课程

  • 深入浅出玩儿转FPGA

    本视频基于Xilinx公司的Artix-7FPGA器件以及各种丰富的入门和进阶外设,提供了一些典型的工程实例,帮助读者从FPGA基础知识、逻辑设计概念

  • 从零开始大战FPGA基础篇

    本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“

  • Verilog基础及典型数字

    课程中首先会给大家讲解在企业中一般数字电路从算法到流片这整个过程中会涉及到哪些流程,都分别使用什么工具,以及其中每个流程都分别做了