基于FPGA的SDD探测器随机信号模拟发生器
2020-08-19徐玉朋崔苇苇张子良韩大炜王于仨祝宇轩赵晓帆
虞 年 徐玉朋 霍 嘉 陈 勇 崔苇苇 李 炜 张子良 韩大炜王于仨 陈 灿 祝宇轩,3 赵晓帆
1(中国科学院高能物理研究所粒子天体物理中心 北京 100049)
2(中国科学院大学物理科学学院 北京 100049)
3(吉林大学物理学院 长春 130012)
增强型X射线时变与偏振探测(enhanced X-ray Timing and Polarimetry,eXTP)空间天文台的能谱测量X射线聚焦望远镜阵列(Spectroscopy Focusing Array,SFA)采 用 硅 漂 移 探 测器(Silicon Drift Detector,SDD)作为焦平面探测器,它主要用于宇宙中致密星体的能谱和时变测量[1]。SDD是一种通过内光电效应探测X射线的半导体器件,它的输出电容很小且独立于探测器面积,因此噪声小、能量分辨率高,常用作高计数率、高能量分辨的能谱测量[2]。由于SDD是静电敏感器件,造价又昂贵,在前期电子学调试中直接使用SDD损坏风险很高,另外也需要对读出电子学死时间和信号堆积导致的计数损失进行校正,直接使用放射源不仅会增加测试人员的辐照风险,而且不便于对计数率在大范围内进行精确控制。通常会选用信号发生器来代替探测器做能谱系统的测试,但是实验室常用的函数发生器(如Keysight Technologies的33210A)只能产生周期性的或者有限状态的可编程脉冲[3]。核仪器专业厂家BNC(Berkley Nucleonics Corporation)生产的DB-2随机脉冲发生器可产生随机脉冲,但只能单通道输出且脉冲最小时间间隔大于 1.4 μs[4],这对于多通道、高计数率的能谱系统都不是很适合。最近的一个设计能够产生在幅度和时间上都是随机分布的脉冲,但是用伪随机数作为种子产生的其他分布[5]。
本文开展针对SDD输出脉冲的研究,对随机脉冲的产生机理进行了理论分析和验证,并对信号模拟器的其他关键参数做了详细测试。
1 需求分析
eXTP的核心科学目标要求SFA能有效采集和处理亮度达到15倍蟹状星云(Crab Nebula)的光子数据,对应于电子学必须每秒处理约105个事例,且要求系统死时间小于5%@1Crab,信号堆积概率小于1%@1Crab。SDD能谱系统的死时间主要是由后端读出电路的成形时间和数模转换时间决定的,所以需要利用SDD信号模拟器测试后端读出电子学在高计数率下的特性。
SDD信号模拟器的设计需要满足三个方面的需求:第一,模拟器输出信号的时间间隔需要满足指数分布。放射源中每个放射性核子的衰变概率相同且相互独立,因此在固定时间间隔内发生衰变的放射性核子数目服从泊松分布。可以证明泊松分布中先后相邻事件的时间间隔服从指数分布[6]。第二,模拟器的输出波形要与SDD前级放大电路的输出波形一致。SDD输出的电流脉冲经由电荷灵敏放大器转换为电压信号输出,增益约为5 mV∙keV-1,所以对应0.5~10 keV能段的光子,电荷灵敏放大器输出2.5~50 mV的电压,同时为了研究读出电子学系统的积分非线性,信号模拟器输出脉冲电压在满足上述电压范围的同时能够连续可调。传统的前级电路采用自复位电荷灵敏放大器结构,它输出的是指数衰减波形,但在高计数率应用场合为了克服自复位电荷灵敏放大器能量分辨随着计数率增大而下降的缺点而采用脉冲复位的电荷灵敏放大器结构[7],复位周期依赖于入射光子的计数率和探测器的制冷温度,一般为几毫秒到几百毫秒。脉冲复位前放输出波形是一个一个叠加的阶跃信号,上升时间取决于入射光子与探测器的作用位置,一般为10~100 ns[8]。图 1展示了两种放大器的输出波形。第三,SDD信号模拟器的输出计数率必须精确可知、可大范围调节(1~100 ks-1)且不随时间发生漂移。
2 总体设计框架
图1 不同电荷灵敏放大器的输出波形示意图Fig.1 Output waveforms of different type charge sensitive amplifiers
现场可编程门阵列(Field Programmable Gate Array,FPGA)是一种可重构的硬件系统,具有丰富的逻辑资源、布线资源和引脚资源,可完成非常复杂的数字逻辑设计。本文采用Xilinx Spartant-6系列的FPGA完成SDD信号模拟器数字部分的设计,采用8 bit高速数模转换器(Digital to Analog Converter,DAC)和运算放大器完成模拟部分的设计。其原理如图2所示,在FPGA内部由振荡环模块和后处理模块产生均匀分布的真随机数,然后通过伯努利试验模块产生时间间隔服从指数分布的{0,1}比特流序列,该序列经过计数器产生DAC的数字输入量,从而产生设计所需的波形。
图2 SDD信号模拟器原理框图Fig.2 Schematic diagram of the SDD signal emulator
2.1 均匀分布真随机数产生
独立时钟信号间总会存在随机性抖动和漂移现象,可以利用抖动信号和相位漂移作为真随机数发生器的噪声源。在FPGA中采用奇数个反相器组成一个闭合环路就可以得到一个高频的振荡环,振荡环输出之间存在着时钟抖动以及相位漂移,如果将长度相同的多组振荡环输出相异或就可以产生一个噪声源,输出随机脉冲序列。对这些随机脉冲进行采样后需要进一步处理,以消除温度、电压等外界环境因素导致的偏置,即出现连续的0或1。采用一种具有较强纠错能力且易于实现的循环编码方式进行消偏处理,在FPGA中可以通过对线性反馈移位寄存器(Linear Feedback Shift Register,LFSR)的输出进行筛选来实现[9]。后处理模块每个时钟周期只能产生1个随机比特,本设计需要产生多比特均匀分布的随机数,可以采用多组噪声源并行采样的方案,利用Spartan-6系列FPGA丰富的逻辑资源很容易就可以实现这个目标。为了进一步降低功耗,需要优化振荡环的组数,文献[10]采用59组振荡环,本设计的振荡环组数降低到20组。
能够产生均匀分布的随机数是本设计的关键,必须进行严格的检验。将产生的随机数序列通过USB上传到计算机中并采用美国国家标准与技术研究院(National Institute of Standards and Technology,NIST)提供的随机数测试程序[11]对其进行统计性分析。NIST随机数测试原理是根据完全随机假设得出一个标准分布模型,用实际统计数据与标准分布模型做比较,来检验其随机性。本文对NIST的每种测试结果均进行了分析比较。将采集得到1 000 Mbits数据进行NIST随机性检验,数据被均分成1 000个样本,表1给出了NIST随机数测试程序的测试结果,根据NIST随机数程序应用手册[12]的描述,对于1 000个样本的随机序列检测,P-value大于0.0001,Proportion 大 于 980/1000(Random Excursions和 RandomExcursionsVariant的Proportion大于573/587)即通过随机性测试。本次测试的数据全部通过NIST各项随机性测试,表明随机数生成模块产生的数据性能良好。
表1 NIST随机数测试程序测试结果Table 1 Test results of the NIST random numbers suit
2.2 指数分布随机数产生
产生时间间隔服从指数分布的方法有很多种,其中反函数方法(直接抽样法)是比较常用的一种。文献[13]采用了反函数方法产生所需的随机数,但是这种方案在纯硬件电路上实现起来非常消耗内存资源。本文采用伯努利试验来产生时间间隔服从指数分布的随机脉冲,该方案在FPGA内部实现起来十分简单。其基本原理是利用均匀分布的随机数与预先设定集合中的元素进行比对,如果随机数属于该集合则试验结果为真(输出高电平1),反之试验结果为假(输出低电平0)。假设随机数有M比特,预设集合中的元素个数为l,则试验为真的概率p=l/2M。若连续两次试验的时间间隔为t,那么平均脉冲计数率n=l/(2M∙t),本设计中取M=16,l是可编程控制的,取值范围为1~29,t=9.6 ns,则输出脉冲平均计数率为1.6~813.8 ks-1。
2.3 波形产生
当X射线与SDD灵敏区发生相互作用之后在读出级产生脉冲电流,脉冲电流在电荷灵敏前放的积分电容作用下产生阶跃电压输出。SDD信号模拟器输出波形需要满足上述波形,即输出一个一个时间间隔服从指数分布的小阶跃信号,这些小阶跃信号叠加到一定幅值时就发生复位。本文实现该波形的方法是每当伯努利试验输出为真时,FPGA内部8位计数器就增加一次,然后把计数器的结果当作DAC的数字输入量更新DAC的输出,当计数器的值达到设定值时就产生清零,以此反复进行。从DAC中输出的模拟信号需要进行信号调理以满足后续电子学的输入要求。测试得到的波形如图3所示。
图3 SDD信号模拟器输出波形Fig.3 Output waveform of the SDD signal emulator
3 性能测试与结果分析
3.1 时间间隔谱测试
将SDD信号模拟器输出脉冲的平均计数率设置为572.2 ks-1,为了保证在高计数率下数据传输不丢包,采用256 MB的DDR3作为数据采集FPGA的高速缓存,然后将缓存数据通过USB2.0接口芯片传送到上位机。一次测试记录了约380万个脉冲的到达时刻,作出时间间隔分布图(图4),每道的宽度设定为 96 ns,采用f(Δt)=Ae--nΔt负指数函数进行拟合,其中:Δt是时间间隔变量,拟合范围是0~14 400 ns。然后对拟合结果进行了卡方检验,由拟合优度χ2/ndf=155.19/147可知实验得到的时间间隔服从指数分布。
图4 时间间隔分布和指数拟合结果Fig.4 Time interval distribution and exponential fitting result
3.2 计数率测试
为了得到SDD信号模拟器设定计数率和实际输出计数率的关系以及给出其误差模型做了以下测试:首先分别给SDD信号模拟器设置了三个典型计数率 11.1 ks-1、104.9 ks-1和 521.3 ks-1,然后对每种情况下的输出计数率进行多次测量:11.1 ks-1情况下测试了14 000组,每组测试的脉冲总数为1 000个,104.9 ks-1和521.3 ks-1情况下各自测试了16 000组,每组测试的脉冲总数为1 000个。对每种情况下测得的计数率进行分布统计,再由高斯拟合得到计数率均值和标准差。实验结果如图5所示,对实验结果进行以下讨论:对于真实核脉冲事件,其平均计数率的相对误差(Relative Standard Deviation,RSD)为[14]:
式中:N是在一次测试中的脉冲总数。对于本次实验,每组测试的脉冲总数均为1 000,那么可以得到计数率相对误差的理论值vtheoretical=1/ 1 000×100%≈3.16%,三种情况下测试所得的相对误差与理论值一致,说明SDD信号模拟器输出计数率误差和实际核脉冲计数率统计误差模型一致。三种情况下拟合所得的平均计数率和设定值也是一致的。所以可认为SDD信号模拟器设定计数率就是实际输出计数率,且相对误差满足式(1)。
图5 三种预设计数率下测得的输出计数率分布和高斯拟合结果Fig.5 The measured output counting rate distributions and Gaussian fitting results under three preset counting rates
3.3 稳定性测试
首先将SDD信号模拟器输出脉冲平均计数率设置为572.2 ks-1,然后测试24 h内平均计数率随时间的变化,每次测试时记录的脉冲总数为100万个。测试结果如图6所示,中间的虚线表示设定的平均计数率,上下两条虚线代表±3σ的误差线,误差σ根据式(1)求得。测试所得的8个数据点分布在设定的平均计数率周围,且均在±3σ范围之内,表明SDD信号模拟器的输出计数率非常稳定,可以满足实验需求。
图6 计数率随时间的变化情况Fig.6 The change of counting rate with time
4 结语
本文以eXTP-SFA项目为背景,设计一款用来测试SDD读出电子学性能的SDD信号模拟器。该信号模拟器采用FPGA作为核心器件,输出计数率范围为1.6~813.8 ks-1,输出脉冲电压范围为2.5~50 mV,脉冲最小时间间隔为9.6 ns。该模拟器利用多组振荡环相异或输出均匀分布的真随机数,再经过后处理电路进行消偏处理,将随机数进行NIST随机性测试并通过了测试。对模拟器输出脉冲的时间间隔进行了测试,测试结果表明时间间隔完全服从指数分布;对模拟器的输出计数率及其时间稳定性进行了测试,测试结果表明该模拟器的输出计数率与预设计数率完全一致,并得到了计数率的相对误差模型,并且该模拟器能够长时间稳定运行。目前SDD信号模拟器已经用于SFA读出电子学的调试当中。