周丽艳,刘波,冯丹,高瑛珂
(北京控制工程研究所,北京 100190)
随着航天任务复杂性的日益提高,控制系统的日益复杂,要实现高精度智能控制,需要各种异构多源的感知设备和操控机构,因此作为计算核心的高可靠星载片上系统芯片,除了具有高能效的计算能力外,还应具备丰富的高低速存储和通信接口,以满足数量和种类日益增长的敏感器和驱动机构接口通信需求。星载控制计算机是卫星控制系统的核心,通常情况下,控制计算机数据采集、控制计算和控制输出有一个共同的周期,称为控制周期[1]。如图1所示,在每个控制周期,控制计算机:(1)在采集任务中,采集各敏感器姿态与轨道状态;(2)在计算任务中,完成控制规律的计算;(3)在输出任务中,发出控制指令给执行机构,并根据轨道运行状况实现控制模式转换;(4)在遥测遥控任务中,从地面遥控指令或数管计算机注数中获得轨道要求、工作状态、系统参数修正等;采集部件和控制器自身信息,存储并通过遥测通道下发到地面[2]。
控制周期T可表示为:
M为一个控制周期中采集信息的敏感器个数。ti1为控制计算机向第i个敏感器单机发送信息采集命令的发送时间,ti2为向第i个敏感器单机发送信息采集命令的传输时间;ti3为该敏感器单机的响应时间;ti4为该敏感器单机的信息传送时间[3],ti5代表了控制算法的运行时间,N为一个控制周期中驱动的执行机构个数。tj6为控制计算机向第j个执行机构发送控制命令的发送时间,tj7为控制计算机向第j个执行机构发送控制命令的传输时间,tj8为第j个执行机构响应时间,tj9为CPU读取第j个执行机构运行状态并对其进行状态检查的时间[4]。
可见,在一个控制周期内,CPU利用率为:
实际中,由于I/O速度很慢,因此CPU利用率非常低,大部分时间在等待I/O部件完成输入/输出;另一方面,目前I/O抗干扰能力和容错性差,针对控制计算机的容错设计一直是控制系统研究的重点和热点[5]。因此,为了提升CPU利用率并提高I/O容错性,本论文设计基于软件定义的I/O控制器,下文称为 SDRIOC(software-defined reconfigurable I/O controller),CPU将I/O控制权利下放给I/O控制器,只需对控制器进行配置,控制器可完全管理I/O过程,根据配置完成输入输出数据交换。
基于软件定义的可重构I/O控制器的整体框图如图2所示。硬件部分由16KB双口RAM、调度器、ROM指令存储器、RAM数据存储器、硬件逻辑组成。双口RAM用于主机CPU与控制器进行数据传递和信息交换。调度器负责配置信息的解析和I/O任务的处理,通过双口RAM获取需要执行收发操作的接口相关信息和要发送的数据。ROM是指令存储器,RAM是数据存储器。硬件逻辑基于北京控制工程研究所电子中心开发的IO_ASIC实现,其集成了多种外设接口,包括同步串口、SPI、CAN控制器、UART等。
双口RAM存储区域分成三部分:标志位区、配置区和数据区。标志位区存放:各接口的接收和发送使能标志位,是主机CPU“通知”调度器进行收发的重要配置位,调度器检测到某一位使能标志位置1后,立即根据配置区的相关接口配置信息对对应的接口进行配置。控制器忙标志代表控制器正在执行前一次配置的收/发操作,主CPU暂时无法写入新的接收使能或发送使能标志位。接口接收完成标志代表控制器完成了对应接口的收数据过程,主CPU可从数据区对应地址处读取收到的数据了。配置区存放了对接口的配置信息,256B可以同时存放32个接口的配置信息,每个接口占8Bytes。接口类型包括UART/SPI/CAN/同步串口,调度器会根据接口类型解析其余的配置信息。
双口RAM的配置由主机CPU进行,写入先后顺序为配置区→数据区→标志位区。在一个控制周期内,主机CPU首先查询控制器的忙标志是否未置位,如被置位则进行数据解码和计算[6],以及其他控制算法所需的其它计算任务[7],否则向双口RAM配置区写入一个控制周期中要进行收发的所有接口的相关配置信息。对于要发送数据的接口,向数据区写入要发送的数据,必须小于8KB。然后将所需接口的发送/接收使能标志位置1。若有接口配置为接收,则不断查询接收完成标志位是否置位,期间可进行计算任务。当接收完成标志置位且所有计算任务都完成后,清除接收标志位,从双口RAM中读取接收到的数据。
调度器负责I/O任务的调度。调度器有三种模式:发送、接收、自回环。调度器会按顺序处理接口的发送、接收、自回环。优先检查发送标志,其次检查接收标志,最后检查自回环标志。调度器如果检测到接口被配置为发送后,则立即配置相关接口,并从双口RAM搬运数据到接口;若未检测到接口配置为发送,则检查是否有接口配置为接收,若有,则配置接口并将数据从接口搬运到双口RAM;最后检查接口是否被配置为自回环,该模式仅用于测试,令接口发送的数据由它自身接收,若接口被配置为自回环,则将接口配置为发送和接收,每发送FIFO_DEPTH数据后从接收FIFO读出FIFO_DEPTH个字节,避免由于发送数据超出FIFO容量而导致FIFO溢出[8-9]。
如图3所示是实验使用的验证板。实验用到了验证板上的SiP2115处理器与一片CYCLONEⅢFPGA器件。基于软件定义的可重构I/O控制器设计下载到CYCLONEⅢ中,用SiP2115处理器模拟主机CPU。
如图4所示是SignalTypeⅡ中抓取的CPU向双口RAM写入配置信息的波形。
实验结果表明,增设I/O控制器后,CPU用于处理I/O的时间大大减少。如图5所示为波特率9600时,发送(接收)数据量随时间变化关系。从图中可看出,不带控制器时,随发送数据量增加,时间线性增长。这是由于发送数据的工作全部由CPU完成,因此发送数据越多,CPU所需时间越长。带控制器时,随发送数据量增加时间只有0.003的增长,这是因为CPU对双口RAM写速度很快,因此当数据量增大时CPU时间会增长但增长量非常小。当波特率921600时,发送(接收)数据量随时间变化关系。折线走势与波特率9600相同,但由于波特率较大,因此发送相同数据量时时间更短。
本文设计一种基于软件定义的可重构I/O控制器,CPU将I/O处理任务全权交给控制器处理,从而有更多的时间执行其他计算任务。实验结果表明,将可重构I/O控制器加入整机后,有效提高了CPU的利用率,提升了整机的性能和容错性。