苗 旺,李彬华,2,王锦良,陈柄宇,高诗竹
(1. 昆明理工大学信息工程与自动化学院,云南 昆明 650500;2. 昆明理工大学云南省计算机应用技术重点实验室,云南 昆明 650500)
幸运成像是一种高分辨率天文图像恢复技术[1]。基于中央处理器(Central Processing Unit, CPU)的幸运成像技术由于串行处理的原因,运行时间较长,是一种事后处理技术。近年来,具有强大并行处理能力的现场可编程门阵列作为硬件加速器引入图像处理领域,实现可重构计算[2]。天文幸运成像观测通常使用的EMCCD相机是一种高速低噪声的科学级相机[3]。
文[4-5]首次将幸运成像技术在现场可编程门阵列上实现,并获得了实时的高分辨率图像,FastCam中图像数据通过以太网传输。文[6]采用Xilinx经济型中小规模的Spantan-6系列现场可编程门阵列及开发板,构建了一个基于SD卡接口接收数据的幸运成像系统。而后经过改进,成为一个基于以太网网口数据传输的实时动态幸运成像系统[7-9]。该系统由EMCCD相机将短曝光的天文图像经USB2.0传入个人计算机存储,然后通过特定数据转发程序控制个人计算机读入FITS格式的天文图像,通过以太网接口将图像数据不断发送给现场可编程门阵列开发板,进行幸运成像处理。
上述已有的幸运成像系统的实时处理,由于存在图像存储和转发的过程,实时性有待进一步提高。如果EMCCD相机拍摄的有效图像数据不经过存储和转发的过程,直接传入现场可编程门阵列进行幸运成像,可以大大改善系统的实时性。因此,在不影响原有数据通道的情况下,通过实时侦听的方法使总线保持数据的正常传输,并把侦听的数据加以分析处理,处理后的数据实时传给幸运成像系统进行后续处理。EMCCD相机图像接口有多种类型,常见的是USB2.0,因此,本文采用USB2.0作为数据传输接口,同时,基于现场可编程门阵列的幸运成像技术比较成熟,所以现在问题的关键在于如何设计一个基于USB2.0总线数据侦听系统,用于侦听EMCCD相机和个人计算机之间总线的数据。
现有基于USB总线数据侦听的研究主要集中在USB协议分析及应用方面,如USB协议分析仪,其他方面的研究相对较少。但USB协议分析仪是侦听USB总线上的数据并发送至个人计算机后,采用相应的软件进行分析。文[10]提出了一种基于现场可编程门阵列的USB数据监听技术,该设计直接将数据传入个人计算机,类似于协议分析仪,且文中没有详细介绍硬件逻辑设计的过程。文[11]论述了一种监听相机与机身SD卡之间的数据流技术。文[12]提出了对某一特定方向传输的数据进行监听的方法,虽然硬件模块都验证正确,但系统工作不稳定。
本文提出基于USB2.0总线数据侦听的实时幸运成像系统的设计和实现方案,设计并制作了一个USB2.0总线数据侦听电路,用现场可编程门阵列实现对USB数据包的分析,在基于以太网数据传输的实时动态幸运成像系统的基础上,搭建一个具有实时侦听、传输、处理、动态更新和显示的幸运成像系统,通过实验验证了系统的性能。
幸运成像系统的硬件实现平台是以Xilinx公司Spartan-6系列XC6SLX16芯片为核心的开发板,成本低,运行稳定。由于该开发板不具备侦听功能,所以需要设计制作一个USB2.0总线数据侦听系统,通过40引脚的输入/输出(Input/Output, IO)扩展口(排针)与现场可编程门阵列开发板连接,从而实现EMCCD相机短曝光图像的实时数据侦听和幸运成像。设计开发环境是ISE Design Suite 14.7和Altium Designer 10.0,采用ChipScope pro 14.7和ModelSim SE 10.5进行硬件设计的验证与调试。
系统设计的总体要求是在不影响EMCCD相机与个人计算机图像采集与控制的前提下,通过侦听EMCCD相机的图像数据进行实时幸运成像,所以,整个系统不仅需要有前端无侵入式USB总线数据侦听和分析电路,而且需要有后端实时幸运成像电路或系统。按此要求,本文提出的实时幸运成像系统结构如图1。
图1 USB2.0总线数据侦听实时幸运成像系统的总体框图Fig.1 The overall block diagram of USB2.0 bus data listening real-time lucky imaging system
系统采用USB2.0总线数据侦听的方式,将EMCCD相机与个人计算机之间进行传输的数据通过专用USB2.0总线数据侦听系统对总线实现无侵入式数据侦听,再加以分析处理,只将有效的天文图像数据发送给底板(即现场可编程门阵列开发板)。底板上的幸运成像系统进行图像的预处理、动态选图、实时配准和叠加处理,然后采用9个实时分割阈值水平切割高分辨率图像,最后对二值图像进行动态更新和显示。系统的工作流程简述如下。
(1)USB接口芯片模块开始连续提取EMCCD相机与个人计算机相连的总线上的差分信号,还原为电平信号,并进一步转换成并行数据送入USB2.0收发宏单元的低引脚数接口(UTMI(USB2.0 Transceiver Macrocell Interface) Low Pin Interface, ULPI)模块。
(2)ULPI接口模块与USB接口芯片模块建立协议层的联系,并把数据完整输出给包解析模块。
(3)包解析模块将数据包分解并缓存,进入事务组合模块。
(4)事务组合模块将几个相关联的令牌包、数据包、握手包经过包解析模块分解后组合成一个USB事务,送往传输模块。
(5)传输模块对USB事务中的数据进行分析,并根据天文图像的特征,只选择天文图像数据,以8位并行总线的方式传入系统的底板输入输出扩展口接收模块。
(6)底板的输入输出扩展口接收模块将数据传入幸运成像系统。
(7)幸运成像系统将接收的图像数据送入图像预处理模块,进行高斯滤波和宇宙射线剔除,将预处理后的数据送入幸运成像算法处理模块。
(8)幸运成像算法处理模块包括第3代双倍数据率同步动态随机存取存储器(Double-Data-Rate Three Synchronous Dynamic Random Access Memory, DDR3)存储控制模块、选图算法模块、配准算法模块和叠加算法模块。模块对预处理完成后的图像数据进行存储、选图、配准和叠加处理后,将图像数据分成两路:一路经千兆以太网发送模块传回个人计算机,并保存高分辨率图像;一路送往多阈值二值化模块。
(9)多阈值二值化模块增强目标区域的可视性,然后将结果传给视频图形阵列(Video Graphics Array, VGA)控制模块,产生控制信号,控制视频图形阵列显示模块驱动现场可编程门阵列片外接口电路,将高分辨率图像显示在视频图形阵列显示器。
以上流程第1~5步是USB2.0总线数据侦听系统,用于数据侦听,并将有效的天文图像数据发送给底板;第6~9步是底板系统,其中第6步是两个系统间的连接步骤;第7~8步是幸运成像系统中数据处理过程;第9步用于图像的视觉增强和显示。
本系统实时侦听、分析和处理EMCCD相机与个人计算机相连的总线上的数据。在天文图像数据不断由EMCCD相机传输到个人计算机的过程中,视频图形阵列显示器上实时动态更新和显示高分辨率图像。因为现场可编程门阵列的特性,数据处理方式并行进行,也就是上述步骤全部同时工作,所以处理速度非常快,满足实时性的要求。
从上述流程可以看出,本系统与基于以太网数据传输的现场可编程门阵列幸运成像系统最大的不同在于设计了一个USB2.0总线数据侦听系统。另外为了将USB2.0总线数据侦听系统与现场可编程门阵列幸运成像系统完美地连接,需要对基于现场可编程门阵列的幸运成像系统稍作修改。以下着重介绍USB2.0总线数据侦听系统的设计过程,以及基于新的数据传输接口对原现场可编程门阵列幸运成像系统的修改过程。
因为USB2.0总线数据侦听系统需要对侦听的全部数据加以分析,所以需要从数据包中选出有效的天文图像数据,删除无效信息,只将有效的天文图像数据传入底板系统。这个过程的实现需要设计侦听电路、数据分析与处理电路以及数据收发接口电路等。结合USB2.0总线的数据传输特点以及现场可编程门阵列开发板(底板)的排针接口要求,我们设计了如图2的侦听系统。图2中,主设备是EMCCD相机的成像控制与图像采集工作站或个人计算机,从设备是EMCCD相机,主从设备之间是USB2.0总线及连接头。从A、B两个USB接口总线中间直接引出信号线到USB2.0接口芯片,从而侦听主从设备之间传输的数据。同一块小规模的现场可编程门阵列芯片完成USB接口芯片的控制、侦听数据的解包和分析以及图像数据下传等任务。所以,侦听系统的关键是硬件电路的设计和现场可编程门阵列逻辑设计,这也是本文的重点内容。
图2 USB2.0总线数据侦听系统的总体设计Fig.2 The overall design of USB2.0 bus data listening system
1.2.1 硬件设计
硬件采用高集成度的芯片,尽量减少元器件的使用数量,同时尽量减小硬件尺寸。根据上述要求设计如图3的硬件总体架构,系统架构主体由USB接口模块、现场可编程门阵列模块、电源模块3部分组成。
图3 USB2.0总线数据侦听系统硬件总体架构Fig.3 The overall hardware architecture of USB2.0 bus data listening system
设计在不干扰原有USB主从设备间数据流的情况下,直接从主从设备的USB总线无侵入式连接USB接口芯片。USB接口芯片与现场可编程门阵列芯片连接线为双向信号,现场可编程门阵列芯片通过输入输出扩展口卡槽与底板连接,并且扩展口卡槽可拆卸,连接不同底板。
(1)USB接口模块
USB接口模块使用USB3300芯片无侵入式获取主从设备之间的信号[13]。该芯片通过ULPI接口连接至现场可编程门阵列,ULPI接口信号电平为3.3 V,工作于高速480 Mbps模式,并且芯片使用24 MHz晶体提供时钟。USB3300芯片的功能是:①分离和提取USB总线的时钟信号和数据;②检测同步序列SOP和EOP信号;③数据流的NRZI(Non-Return-to-Zero Inverted)解码;④剔除填充位;⑤串并转换;⑥检测填充位错误和EOP错误。
该模块配备两个不同的USB接口,接口A为方口母座,用于连接主设备;接口B为扁口母座,用于连接从设备。将两个接口的USB总线中间引线,从差分对上拉出两根线,提取其中的信号。该差分信号经USB接口芯片接收后还原成电平信号,并进一步转换成并行数据送入现场可编程门阵列。
(2)现场可编程门阵列模块
本系统主控芯片采用Xilinx FPGA芯片Spartan-6系列,芯片为XC6SLX9-2TQG144C,配置芯片为W25Q80,用于存储现场可编程门阵列配置数据流。芯片使用USB接口输出的60 MHz时钟作为模块的系统时钟。本系统搭配事务指示灯,每输出一次有效事务,信号指示灯亮一次。40引脚的输入输出扩展口是USB2.0总线数据侦听系统和底板系统数据传输的通道。
现场可编程门阵列芯片是整个系统的核心,主要负责各芯片的初始化参数配置,并具有协调、调动、存储和读取等功能,起到处理器的作用。其中内部逻辑电路对数据包做分析、处理,解包整合后的主从设备传输数据通过8位并行总线从输入输出扩展口传给底板。
(3)电源模块
电源由底板通过输入输出扩展口引脚提供5 V电压,使用两路低压降线性电源芯片AMS1117分别产生3.3 V和1.2 V电压,供USB3300和现场可编程门阵列等芯片使用。系统搭配电源指示灯,接通电源后红色指示灯点亮。
1.2.2 现场可编程门阵列逻辑设计
由上述侦听电路获得的是USB2.0总线上传输的一个个数据包。按USB2.0协议[14],一个数据包包含很多字段,但本文要求获得有效的图像数据,所以,侦听电路还需要对所获得的数据包进行分析,提取有效数据。在USB2.0协议中,一次正常的事务传输既有令牌信息包、数据信息包和握手信息包,还有忙或者出错时的事务传输,所以我们需要把每一次事务的数据信息包中的数据字段和这次事务中的非数据字段(包括一次事务中数据包的除数据字段外的字段和其他包的字段)分开。将非数据字段组合成一个信息头,便于分析是什么事务,然后根据事务信息头筛选所需图像数据。据此,我们设计了现场可编程门阵列逻辑设计模块,包括ULPI接口模块、包解析模块、事务组合模块、传输模块和时钟模块。下面分别介绍现场可编程门阵列内部逻辑设计的各个模块。
(1)ULPI接口模块
ULPI接口模块为ULPI端口的物理层接口[13],与USB接口芯片模块建立协议层的联系,并把数据完整输出给下一模块。
模块首先用硬件描述语言设计了一个数据选择器和三态输出缓冲器的联通电路,实现USB接口芯片模块与现场可编程门阵列数据的双向导通,然后再设计协议层的联系。仿真结果如图4,其中ulpi_dir为USB接口芯片用于控制总线传输方向的信号;ulpi_nxt为USB接口芯片在传输数据时的控制信号;ulpi_stp为现场可编程门阵列通知USB接口芯片传输停止的控制信号。从图4可以看出,当ulpi_dir和ulpi_nxt同时为低电平时,模块在数据总线上驱动传输命令字节(Transmit External Data Command, TXD CMD),然后在ulpi_dir持续为低电平时等待ulpi_nxt为高电平。当USB接口芯片接收到TXD CMD时驱动ulpi_nxt为高电平,模块把寄存器数据写入USB接口芯片寄存器。USB接口芯片接收到数据后,模块驱动ulpi_stp为高电平。当ulpi_dir为高电平且ulpi_nxt为低电平时,模块接收并分析从USB接口芯片传来的接收命令字节(Receive External Data Command, RXD CMD)。当ulpi_dir和ulpi_nxt同时为高电平时,模块接收USB接口芯片传入的数据,然后完整输出给包解析模块。
图4 ULPI接口模块仿真图Fig.4 Simulation diagram of ULPI PHY
另外,从图4还可以看出,现场可编程门阵列能够识别RXD CMD,得到正确的rx_valid,rx_error和rx_active信号,实现了USB接口芯片模块与现场可编程门阵列数据的双向导通,并得到正确的USB总线上的传输数据uulpi_data。
(2)包解析模块
根据USB2.0协议[14],一次事务中只有一个数据包,且只有数据包中含有数据字段。除去数据包中的第1个8位数据和最后两个8位数据,剩下的就是数据字段。据此我们设计了包解析模块。
包解析模块包含分解模块和存储模块。如图5虚线框,其中分解模块的功能是将ULPI接口模块传来的并行数据根据USB2.0协议分析并分解成数据字段和非数据字段[14];存储模块的功能是将分解后的数据字段和非数据字段分别存入随机存取存储器(Random Access Memory, RAM)和先进先出存储器(First Input First Output, FIFO)中,并与事务组合模块进行交互。
图5 现场可编程门阵列芯片内处理数据的主要模块Fig.5 The main module of processing data in FPGA chip
(3)事务组合模块
本次事务的所有数据经过包解析模块存入随机存取存储器和先进先出存储器之后,进入事务组合模块。该模块首先读取先进先出存储器中的数据以便于接下来处理;然后将数据中的本次事务几个包的标识符根据USB2.0协议分析组合成一个相对应的事务标识符数据;接下来将这些数据组合成一个4字节的事务信息头,同时从随机存取存储器中依次读出相对应的本次事务数据包的数据字段;最后将事务信息头和从随机存取存储器中读出的数据组合成一个事务包,其中事务信息头包含事务对应的标识符、设备地址、端点号和数据包的数据字段的长度(事务的数据长度)。
(4)传输模块
ChipScope多次抓取实验发现,天文图像数据属于具有固定端点和长度的输入事务。因此可从事务组合模块生成的事务包的信息头中筛选天文图像数据,并生成一个同步于向底板传输天文图像数据的有效指示信号,通知底板数据到来,然后将时钟模块生成的时钟信号、筛选的天文图像数据及有效指示信号同步输出给底板系统。
(5)时钟模块
本模块使用USB3300芯片输出的60 MHz信号作为输入时钟信号。模块将整个侦听系统的时钟和与侦听系统同步的时钟信号输出给底板,使底板与侦听系统时钟同步。模块设计中调用现场可编程门阵列芯片内的数字时钟管理器(Digital Clock Manager, DCM),调节输出时钟信号的相位,并去除输出给底板时钟信号的歪斜,从而避免时钟分配延迟,保证输出给底板的信号时序最佳。在底板上用示波器采集的侦听系统输出给底板的时钟和数据的波形如图6,黄色信号线是系统输出的时钟,红色信号线是输出的数据。由图6可以看到,时钟周期约为16.6 ns,频率约为60 MHz。
图6 示波器采样Fig.6 Oscilloscope sampling
1.2.3 系统验证
为了验证所提出的USB2.0总线数据侦听系统处理速度能否满足USB2.0数据传输速度,本文用ModelSim仿真软件对USB2.0总线数据侦听系统进行了仿真,结果如图7。其中,时钟clk采用USB接口芯片输出给现场可编程门阵列的工作时钟,频率为60 MHz,周期为16 ns。rx_data和rx_active为输入数据和输入数据有效指示信号,输入数据由随机函数生成。tx_data_out和tx_active_out为USB2.0总线数据侦听系统向底板输出的数据和有效指示信号。第1个红色游标是现场可编程门阵列完全接收了一次事务的数据节点,第2个红色游标是USB2.0总线数据侦听系统处理完这次事务的数据送入底板的节点。两个红色游标相距10个周期(160 ns),也就是说,USB2.0总线数据侦听系统只需要10个周期就可以分析处理完并向底板发送数据,充分体现了设计中现场可编程门阵列的并行特性。
以上设计的USB2.0总线数据侦听系统需要与基于现场可编程门阵列的幸运成像系统进行连接,才能构建完整的基于USB2.0总线数据侦听的实时幸运成像系统。整体的连接实物图如图8,其中物理上两个现场可编程门阵列子系统电路板的连接如图8(a),上面的小板是我们设计制作的侦听电路板,下面稍大的板是以Spartan-6系列XC6SLX16芯片为核心的现场可编程门阵列开发板(即底板),两块电路板通过40引脚的输入输出扩展口卡槽连接。但在实现物理连接前,需要将原实时幸运成像算法及对应的处理模块移植到新系统中。由于新旧两个系统的差别主要是在图像数据的输入接口方面,所以移植的主要任务是修改原系统的数据输入部分。
修改工作主要是将原现场可编程门阵列系统中以太网数据接收模块去除,设计一个基于输入输出扩展口的数据接收模块。当底板接收到USB2.0总线数据侦听系统传来的数据有效指示信号后,数据接收模块开始读取8位数据。该模块还需要将接收的数据拼接成一个16位的图像像素数据并送入先进先出存储器缓存,以便后续图像预处理模块读取图像数据。此外,为了整个系统完美地运行,底板系统中的时钟主体使用由基于USB2.0总线数据侦听系统通过输入输出扩展口提供的60 MHz时钟信号,相应地,需要将部分移植过来的模块改成与该时钟相配套的模块。
图8(b)是系统运行时拍摄的照片,其中个人计算机连接方口母座,存有EMCCD相机拍摄的天文图像的优盘连接扁口母座,蓝色的灯亮证明侦听系统正在向底板传输数据。
为了验证本文提出的系统的正确性,我们首先用系统侦听一个CCD相机和个人计算机之间的信号,并在底板用ChipScope软件抓取。因为没有EMCCD相机,只能使用现有的和EMCCD相机传输基本相似的CCD相机,型号为QHY90A。
要将图像数据完整地传入底板,需要把其他数据去除。ChipScope多次抓取实验发现,控制信号的数据交互不属于输入事务,另外只有图像数据传输属于固定端点号且数据大小为512字节的批量传输;还发现含有图像数据的事务传输是连续传入的,并且在第1个事务前面有一个固定的大小为5字节的输入事务。ChipScope多次抓取实验的结果表明,本实验可以有两种方法选取图像数据:(1)在系统传输模块中增加事务信息头中的标识符、端点号和数据长度作为限制条件;(2)在系统传输模块中判断是否是固定的大小为5字节的输入事务来确定接下来的数据是否是图像数据。经过ChipScope软件抓取实验测试,两种方法结果一致。由于底板资源的限制,ChipScope软件只能抓取一部分数据,但图像数据的事务传输是连续传入的,所以只需验证抓取传入的第1个数据包是否正确,结果如图9。对比传入电脑的数据可知,该数据正确。
图9 本系统对CCD相机传入个人计算机的数据的侦听结果Fig.9 Listening results of the data transmitted from the CCD camera to the PC monitored by the system
其次验证系统能否进行万帧以上的实时动态处理,并将实验结果与文[9]比较。由于实验条件有限,我们采用存储于优盘的实测EMCCD相机短曝光图像,在USB2.0总线传输时进行侦听模拟实验。所用天文目标短曝光系列图像是2016年10月20日云南天文台丽江观测站对双星HDS 70的实测图像,共10 000帧,这组图像的观测条件和参数见文[15]。随机单帧如图10(a),最好单帧如图10(b)。
图10 两帧HDS 70实测图像。(a)随机单帧;(b)最好单帧Fig.10 Two frames of observed images of HDS 70. (a) A random frame; (b) the best frame
从图10可以很明显地看出,由于受大气湍流的影响,无论随机单帧还是最好单帧都无法找到双星的准确位置,尤其是双星中暗星的位置根本无法辨别。
我们用优盘将10 000帧原始图像(512 × 512)按EMCCD相机的采集速度模拟传输,当前100帧有效天文图像传输完成之后,视频图形阵列显示器开始显示9个阈值处理后的二值化图像。随着图像的持续传输,视频图形阵列的阈值图像动态更新,说明系统实现了实时处理和动态更新的功能。
为了进行数值验证,系统中设计了成像结果通过以太网回传功能,即当向现场可编程门阵列系统传输到5 000帧和10 000帧时,将实时多阈值处理结果传回个人计算机。实时处理结果通过调用MATLAB函数显示如图11,其中(a)为传输5 000帧时的多阈值处理结果,(b)为传输10 000帧时的多阈值处理结果。图中每个小图像为通过相应阈值进行二值化后的结果,每个小图像上方的数字表示阈值的序列号。
图11 视频图形阵列屏幕上的9个分段阈值二值化图像。(a)5 000帧处理结果;(b)10 000帧处理结果
从一部分实验结果小图可以清晰地看到双星(亮的主星和暗的伴星)的存在,这种多阈值的方法使暗星变得突出,容易分辨。5 000帧的实验结果图中,我们可以看到4幅小图中有双星的伴星,10 000帧的实验结果图中,可以看到6幅小图中有双星的伴星,说明系统可以实现万帧及以上原始格式天文图像的实时动态更新与显示,新系统运行结果与文[9]的结果完全相同。
另外,本系统只要对传输模块稍做修改,就可以侦听不同CCD相机输入的图像,从而实现不同相机系统的实时幸运成像。
本文在分析已有的幸运成像系统优缺点的基础上,提出了一种进一步提高幸运成像处理过程实时性的方法——通过无侵入式的数据侦听实现幸运成像,并提出了系统的设计与实现方案。本文介绍了基于USB2.0总线数据侦听的实时幸运成像系统的总体设计,重点介绍了侦听电路硬件设计和USB2.0数据分析电路的现场可编程门阵列逻辑设计,搭建了一个具有实时数据侦听、传输、处理、动态更新和显示的幸运成像系统。本文也介绍了主要模块的设计和验证的过程,并用实测的天文图像对新幸运成像系统进行了验证。此外,文中提出的总体设计方法和实现技术具有通用性,可以为其他类似的USB总线数据侦听应用系统的设计提供参考。
致谢:感谢中国科学院云南天文台张西亮、季凯帆和金振宇为本文提供原始天文图像。