APP下载

基于ZYNQ的便携式显控终端设计与实现

2021-06-16乔雪原

舰船电子对抗 2021年2期
关键词:存储器内核中断

乔雪原

(中国电子科技集团公司第十研究所,四川 成都 610036)

0 引 言

显控终端是各种模拟测试、监视控制设备的重要组成部分。针对实验室和外场不同环境使用的灵活性和实时性需求,显控终端的便携小型化具有明确的实用价值。

当前出现了大量基于ZYNQ处理器的应用开发研究。徐磊详细叙述了基于ZYNQ处理器的硬件设计和软件设计,采用了Linaro提供的Ubuntu桌面文件系统[1]。王树青详细阐述了基于Petalinux开发工具的系统移植和部署方法[2]。褚亭强详细阐述了基于ZYNQ处理器的高清多媒体接口(HDMI)显示器实现,以及Linux操作系统的交叉编译和系统设备树的方法[3]。刘桦杰详细阐述了基于ZYNQ处理器的USB接口设计和QT库的移植[4]。这些研究各有侧重,但均没有解决系统可维护性和通用性问题,比如文件系统移植后无法实现动态裁剪和配置,软件开发部署需要经过复杂的交叉编译等;同时大部分研究基于开发板完成,未考虑实际工程应用场景的需求。

本文提出的显控终端实现方案采用基于Ubuntu核心的文件系统,解决了系统维护问题,同时采用触摸屏引入虚拟操作界面,实现了设备控制的无物理按键化,降低了设备故障率,解决了设备通用性问题。

1 系统组成

从功能实现上,ZYNQ系列芯片可分为Processing System(PS)部分和Programming Logic(PL)部分。PS是基于ARM处理器的处理系统,除了处理单元所包含的定时器、中断控制器和DMA控制器外,还包括双倍速率(DDR)存储器接口、MIO接口以及与PL通信的高速AXI总线接口等;PL则包含有丰富的逻辑资源,如块随机存取存储器(BRAM)、数字信号处理(DSP)模块、外围组件快速互联(PCIE)模块等。AXI4高速总线可以使PS能够通过AXI4 GP接口控制PL端的IP核模块,PL也能够通过AXI高性能(HP)接口实现和DDR的直接数据传输,ZYNQ内部的高速总线设计,大大简化了PS和PL之间的互联[5]。

显控终端的硬件架构采用核心处理板加功能子卡的方式实现。核心功能独立形成核心处理板,特定的应用需求通过功能子卡的形式进行扩展,子卡与核心板的接口形式采用XMC规范。

核心处理板的设计原理框图如图1所示,设计以ZYNQ处理器为核心,通过PS和PL扩展外部接口。PS端的外设主要包括系统引导存储器四线串行外设接口(QSPI)FLASH、运行操作系统的DDR存储器、文件系统和用户空间存储器嵌入式多媒体卡(eMMC)、调试TF CARD插槽、热插拔数据交互USB接口、RS232调试串口、负责断电时间维持的RTC电路、千兆以太网接口等。PL端的外设主要包括用于时间同步的GPS/北斗授时模块、数据缓存和处理用的DDR存储器、用于状态指示的LED指示灯、用于外部通信和设备控制的4路RS422接口、用于连接触控显示器的HDMI接口以及用于扩展功能的XMC连接器接口等。

图1 显控终端硬件设计原理框图

2 系统硬件设计

2.1 电源管理

电源管理是决定硬件平台是否稳定的重要因素,电源设计必须严格按照处理器手册上要求的上电时序和下电时序设计,否则可能引起过电压或过电流,导致芯片无法正常工作[6]。

显控终端的电源管理由滤波和短路保护电路、电压二次转换电路和电源监控电路三部分组成。每个电源输入端设计了三端滤波器进行电源滤波,并设计经过保险丝以防止电源输入端出现短路。保险丝的选择根据设计规范选择系统稳定工作电流值的3~4倍。电压二次电源主要将输入的+12 V电压转换为+1.0 V、+1.5 V、+1.8 V、+2.5 V、+3.3 V电压,DDR存储器所需的+0.75 V则由二次电压+1.5 V转换得到。电源监控电路监测输入电压和电流值,监控状态可以通过网络接口进行查询,同时电压或电流值超过告警门限,会通过状态LED灯进行闪烁告警。

触控显示器的功耗大约6 W,方案为显示器设计了独立的电源开关,在不使用时可以断开显示器的供电,达到降低功耗的目的。

2.2 通信接口

ZYNQ处理器集成了以太网媒体介入控制层(MAC)控制器,显控终端使用Marvell公司的88E1512以太网PHY实现网络数据帧的发送与接收,外部互联采用隔离变压器HX5120NL进行信号转换就构成了10 M/100 M/1 000 M自适应以太网。

RS232、RS422接口用于系统调试和低速设备的通信控制。RS232接口采用LVTTL电平,无法直接连接计算机的串行通讯端口(COM),需要经过转换器进行电平转换。RS422接口数据速率最高4 Mbps,具备同步和异步2种工作模式,通过自定义的PL端逻辑实现,模式选择可通过PS端软件进行动态设置。

2.3 人机交互接口

终端的人机交互包括触摸显示器、USB接口和TF CARD接口。工作时显示界面会被应用程序界面覆盖,通过触摸显示屏可以完成绝大部分工作。USB接口可以用于问题排查时外接键盘鼠标,与桌面系统或者控制台进行交互,同时通过USB存储器实现同系统的文件交换。TF CARD接口主要用于系统SD CARD启动模式的调试。

ZYNQ芯片中没有集成HDMI解码器,方案使用ADV7511芯片进行HDMI视频数据的解码。ADV7511是一款最高视频数据传输速率为225 MHz的HDMI发送器,用于输出数字视频信号至具有HDMI接口的显示器,其数字视频接口标准为HDMI1.4并同时兼容DVI1.0发送器,支持所有高清电视格式(包括12位深色1 080p)[7]。

ADV7511与PS端的接口互联逻辑采用PL端的IP实现,原理框图如图2所示。其中IIC总线配置模块负责对ADV7511芯片的寄存器进行读写控制,以控制视频接收模块对传输过来的视频数据进行解码[3],VDMA模块负责将图像帧数据传输到视频接口,同步动态随机存取内存(SDMA)和索尼/飞利普数字音频接口(SPDIF)负责音频接口的数据处理。

图2 基于ADV7511的PL端逻辑原理框图

3 系统软件设计

3.1 系统引导过程及原理

如图3所示,系统启动过程分为以下4个阶段:加电/复位引导只读存储器(ROM)阶段;第1级引导装载程序第1级BootLoader(FSBL)阶段;第2级引导装载程序BootLoader阶段和内核启动挂载文件系统阶段。

图3 ZYNQ Linux引导过程

第一阶段为上电或系统复位重启,主处理器执行硬件编码的引导ROM代码。ROM代码支持通过联合测试行动组(JTAG)、安全数字卡(SD Card)、Nor Flash、Nand Flash、QSPI FLASH进行引导。芯片的引导模式配置引脚决定了引导模式,引导模式定义了FSBL要从哪个接口装载。一旦引导模式被确定,引导ROM代码会读入导引头和给定的配置参数,验证通过后把FSBL从指定的接口装载到片上存储器(OCM)中,之后CPU的控制交给FSBL。

第二阶段为第一级引导装载程序FSBL执行阶段。FSBL负责加载BootLoader并将控制交给BootLoader。

第三阶段为BootLoader加载内核和文件操作系统。BootLoader根据bootcmd环境变量加载PL硬件比特流文件、操作系统内核文件和系统设备描述文件,完成PL硬件逻辑的配置,并最终将控制交给操作系统内核。这个阶段涉及以下2个步骤:

(1) 从eMMC存储器读取PL硬件比特流文件, 通过fpga loadb命令完成PL端逻辑的配置;

(2) 从eMMC存储器读取操作系统内核文件和系统设备树文件,通过bootm命令将控制交给操作系统内核。

第四阶段为操作系统内核启动并加载文件系统。操作系统内核根据系统设备树文件的设备描述信息完成设备硬件资源的初始化,最后挂载文件系统完成整个系统的启动。

3.2 BootLoader和操作系统移植

BootLoader和操作系统移植采用PetaLinux开发环境实现,开发环境包含开发测试和部署基于ZYNQ全可编程片上系统(SoC)所需的工具,可以满足大多数开发人员的需求。开发具体过程如下:

(1) 采用Vivado开发工具,完成PL端硬件资源的配置,并导出设计的硬件描述文件;

(2) 通过petalinux-create命令行工具创建基于ZYNQ模板的工程;

(3) 通过petalinux-config命令行工具导入硬件描述文件,并完成BootLoader加载方案的配置和Linux操作系统内核的功能裁剪;

(4) 通过petalinux-build/package命令行工具完成系统引导文件(BOOT.BIN)、PL端硬件比特流文件(system.bit)、操作系统内核文件(image.ub)和系统设备树文件(system.dtb)的编译和生成。

3.3 文件系统移植

文件系统移植过程分为文件系统配置和文件系统镜像制作2个部分。文件系统配置完成系统软件的安装和系统参数设置;文件系统镜像制作将配置完成的文件系统形成为特定文件系统格式的文件。

3.3.1 文件系统配置

文件系统的配置主要依赖开发计算机上的qemu-user-static文件、chroot命令和Ubuntu提供的基于ARM架构的核心文件系统。chroot命令可以切换系统的根目录位置,将核心文件系统作为根文件系统,然后通过Apt工具使用Ubuntu的软件仓库进行系统功能软件的卸载与安装。Apt(全称Advanced Package Tool)是Ubuntu的一套核心工具,可以基本解决依赖问题并检索需要的软件包。文件系统配置的具体过程如下:

(1) 解压核心文件系统,目录名约定为ROOTFS;

(2) 拷贝qemu-arm-static文件到ROOTFS/usr/bin目录;

(3) 用mount命令以proc文件系统的方式挂载开发机/proc目录到ROOTFS/proc;

(4) 拷贝开发计算机的/etc/resolv.conf文件到ROOTFS/etc/;

(5) 使用chroot命令将ROOTFS目录作为当前终端的根目录;

(6) 使用Apt系列命令根据需求完成软件维护和系统功能配置。安装的软件主要包括QT运行时环境、编译器工具链和Xface桌面系统等。功能配置主要包括系统用户、系统IP地址、开机服务启动配制等。

3.3.2 文件系统镜像制作

文件系统镜像制作主要使用Linux系统下的dd和mkfs.ext4命令。具体工程如下:

(1) 使用dd命令通过/dev/zero文件生成一个2 GB大小的普通文件,文件名约定为ROOTFS.EXT4;

(2) 使用mkfs.ext4命令将ROOTFS.EXT4文件格式化为ext4格式的文件;

(3) 使用mount命令挂载ROOTFS.EXT4文件到/mnt目录,并将ROOTFS目录下的所有文件拷贝到/mnt目录;

(4) 卸载/mnt即完成系统镜像文件ROOTFS.EXT4的制作。

3.4 用户接口驱动实现

3.4.1 用户空间I/O子系统

显控终端外部的接口均为标准输入输出设备,直接采用Linux操作系统自带的驱动。用户自定义设备接口主要是PS与PL进行业务数据通信接口,主要包括先进先出(FIFO)、双端口随机存储器(RAM)、直接存储器访问(DMA)、通用异步收发传输器(UART)、通用输入输出端口(GPIO)等。这些接口采用基于AXI总线的IP核设计与实现。AXI总线有3种总线模式可供用户选择,分别是AXI4,AXI-lite和AXI-stream。

对于有些类型的设备,真正需要的只是通过某些途径来访问设备的内存空间和处理中断。当设备并不使用内核提供的其他资源的时候,设备的控制逻辑并不需要在内核中实现。为了解决这一问题,Linux提供了用户空间I/O子系统。每个采用UIO子系统实现的驱动设备,在/dev目录下都有对应的设备文件,设备文件名依据顺序依次为uio0,uio1,uio2等[8]。UIO设备通过设备文件和sysfs属性文件进行访问。/dev/uioX文件用来访问设备的地址,用mmap()后可以访问设备的寄存器和RAM。

中断处理通过读取/dev/uioX文件来实现。对/dev/uioX文件进行的读取中断发生后立即返回,返回值表示触发中断的个数,通过判读相邻两次的返回数值可以判断是否发生了中断丢失。

3.4.2 中断处理方案

PL可以触发最多20个异步中断给PS,其中最多16个中断信号会映射到中断控制器作为外设中断。显控终端的UIO设备数量不同,工程的需求也不同,16个中断信号无法满足为每个UIO设备分配独立的中断信号资源。为解决这个问题,设计了一种基于GPIO IP的中断处理机制,可以扩展系统有限的中断资源,设计原理框图如图4所示。方案中的GPIO_INT为使能了中断功能的GPIO IP,该IP包含2个32位的GPIO寄存器,每个GPIO寄存器可以独立配置为输入、输出或输入输出。方案将GPIO0作为中断触发寄存器,GPIO1作为设备状态寄存器,对于PS端均为只读寄存器。状态管理模块负责集中处理UIO设备的状态参数,实时将相应外设的状态反映到GPIO1对应的比特位,同时翻转GPIO0的最低比特位,GPIO0最低位的翻转会触发GPIO_INT产生中断。PS端响应中断后通过读取GPIO1的值可以判断各UIO设备的状态,中断响应程序根据状态完成相应的中断响应。若32比特无法满足状态表示需求,可以通过多个GPIO设备进行扩展。

图4 UIO设备中断处理机制示意图

3.4.3 系统设备树

设备树,也称为扁平设备树,是一种描述硬件配置的树形数据结构[9]。硬件配置包括有关CPU、内存、总线以及外设等相关的信息。操作系统在启动时解析设备树,根据解析出的设备信息配置内核并加载对应的设备驱动。

设备树描述文件由节点和属性组成,每个节点可包含字节点和属性。PetaLinux工具默认生成的设备树描述文件不支持在Linux系统下生成UIO设备文件,需要进行修改。需要修改的内容主要有以下2个部分:

(1) BootLoader的bootargs环境变量增加uio_pdrv_genirq.of_id=generic-uio;

(2) 各UIO设备节点的compatible属性改为generic-uio。

4 系统部署方案

系统部署的资源包括引导文件、PL端硬件比特流文件、操作系统内核文件、系统设备树文件和文件系统镜像文件五部分。其中引导文件部署在QSPI FLASH中,PL硬件比特流文件、系统设备数文件、操作系统内核以及文件系统部署在eMMC存储器中。

方案引导方式采用QSPI FLASH,引导文件BOOT.BIN直接烧写到QSPI FLASH的0地址开始空间。其它文件的部署需要对eMMC存储器进行分区和格式化。

eMMC存储器的分区和格式化方案见表1,共分为3个分区,分别为配置文件分区、文件系统分区和用户空间分区。由于BootLoader的mmc命令只支持FAT32格式的文件系统,因此配置文件分区格式化为FAT32格式;文件系统分区和用户空间分区格式化为EXT4格式文件系统。eMMC存储器标称容量32 GB,实际使用不足32 GB,因此用户空间的可用容量小于23.5 GB。

表1 eMMC存储器分区方案

PL端硬件比特流文件、操作系统内核文件、系统设备树文件以文件的形式部署在配置文件分区,文件系统镜像文件通过dd命令写入文件系统分区。由于文件系统镜像小于系统分区,通过resize2fs命令进行扩容可以使用全部分配的分区空间。

操作系统内核文件对于应用基本不需要改变,配置文件分区只需要部署1份内核文件。PL端硬件比特流文件、系统设备树文件对于不同的功能和需求文件是不同的,但2个文件大小总和均约为5 MB。因此配置文件分区可以容纳多个硬件比特流文件和对应的系统设备树文件,通过修改BootLoader环境变量即可实现不同的系统功能。

5 测试结果与分析

完成系统开发后,选取某信号侦察项目进行测试,验证系统是否满足设计要求。该项目设计的PL端接口资源见表2。

表2 接口资源列表

5.1 启动测试

加电后系统被成功引导,登陆基于Xfce的Linux桌面系统,并打印出系统的设备文件,结果如图5所示。从打印出的设备文件可以看出系统成功创建了5个基于用户空间子系统的uio0~uio4设备,1个负责显示输出的fb0设备,3个eMMC存储器的分区设备mmcvlk1p1~3等。

图5 显示终端系统信息

5.2 功耗测试

实际测试表明,显控终端核心处理板的功耗约为10 W,触摸屏功耗约为6 W,通过冷板传导散热方式即可满足系统正常工作。

6 结束语

本文基于ZYNQ处理器设计并实现了一种显控终端,在实际工程应用中,该显控终端的设计思想得到了很好的验证。通过网络维护文件系统的方式简化了文件系统的管理,比如,在无显示需求的应用场合,可以方便地实现从文件系统里裁减,删除和桌面系统相关的组件,大大压缩了文件系统的体积。系统设备树机制简化了设备研发周期,只需更新PL端硬件比特流文件和相应系统设备树文件,就可以适用于新项目的需求。文件系统集成了完整的软件开发工具链,外场问题的排查可以在终端本地完成,极大方便了外场保障效率。同时由于触摸虚拟操作界面的引入,通过更新显控软件即可满足不同项目的应用需求。经过测试,此显控终端成功应用于多个信号侦察设备中,取得了良好的经济、社会效益。

猜你喜欢

存储器内核中断
人民情怀:柳青为文为人的内核(评论)
TMS320F28335外部中断分析与研究
初春
雪后林鸟
微软发布新Edge浏览器预览版下载换装Chrome内核
跟踪导练(二)(5)
独立拼装手机
存储器——安格尔(墨西哥)▲
新闻浮世绘
Buffalo推出四硬盘网络存储器 主打Soho一族