FPGA控制DDR2储存的光纤转换DIO板卡设计

2020-01-06 06:41周舜民毛瑞士杨海波赵祖龙赵铁成徐治国陈玉聪
仪表技术与传感器 2019年12期
关键词:板卡时序命令

周舜民,毛瑞士,杨海波,赵祖龙,赵铁成,徐治国,陈玉聪,李 敏

(1.中国科学院近代物理研究所,甘肃兰州 730000;2.中国科学院大学,北京 100049)

0 引言

兰州重离子加速器束损探测系统各种探测器(气体、闪烁体、金刚石等)输出的信号通过QF电路转化成TTL信号,加速器现场通过高速光纤对现场束损探测信号进行采集传输。当前使用的NI系列DIO板卡通过基本电路实现DIO功能,不能直接接收光纤发送过来的数据,不具有存储和FPGA处理功能,只能单次传输到机箱中进行处理,设计带有光纤模块接口的DIO板卡并添加FPGA和DDR2模块对信号进行采集处理并存储缓存,将显著提高信号的传输速率和接收信号的准确率,可避免因光纤传输来的信号数据未能及时接收处理而丢失。

图1为束损探测系统一个简单原理框图,以电流型电离室气体探测器(图2实物)为例,射线与气体作用产生带电粒子对被探测器上正负电极收集以电流形式输出,经QF电子学处理后输出TTL信号传输到处理系统中。

图1 束损系统原理框图

图2 电流型电离室实物

1 FPGA、DDR2和光纤收发模块

Xilinx的Spartan-6系列采用成熟的45 nm低功耗铜制程技术制造,密度从3 840个逻辑单元到147 443个逻辑单元不等,实现了性价比与功耗的完美平衡,能够提供高效版本的双寄存器6输入查找表(LUT)逻辑和一系列丰富的内置系统级模块,包括增强型混合模式时钟管理模块、功率优化的高速串行收发器模块、PCI Express兼容端点模块、专用集成存储器控制模块(MCB)等[1]。Spartan-6系列的高性价比和软硬核的集成,非常适合成本敏感性嵌入式应用和实验室初版预研设计。

DDR2内存技术传输速率可达到1 066 MHz,采用FBGA模式封装,对数据进行4 bit预读取操作。相比DDR内存技术,DDR2本身还集成了用以解决数据传输过程中信号反射问题的信号端接电阻ODT(on die termination),并加入离线驱动OCD(off-chip driver)技术[2]。在I/O Driver中新增了稳压线路,防止了电压不稳定时引起资料丢失,提高了信号的完整性。此外,DDR2 通过引入 Posted CAS 功能解决了指令冲突问题[3]。DDR2在继承了DDR内存技术的基础上也改进添加了部分DDR3内存技术的功能,可以通过对DDR2的研究使用顺利过渡到DDR3及后续内存技术的使用。

AFBR-16xxZ光纤发送模块集成光学器件由带TTL输入逻辑的驱动IC和650 nm LED光源构成,AFBR-26x4Z光纤接收模块由带有集成光电二极管的IC组成,可产生逻辑兼容输出[4]。光纤发送和接收模块与TTL逻辑电平系列兼容,光纤收发模块对可用于任何信号,数据传输速率从DC到50 Mbit/s带宽,使用1 mm 的聚合物光纤(POF)传输距离可达50 m,使用200 μm的塑料包层二氧化硅(PCS)传输10 Mbit/s和50 Mbit/s 带宽信号分别能达到200 m和120 m的距离。

2 方案设计及数据处理流程

2.1 功能实现方案

本设计的硬件处理器平台是Spartan-6系列的XC6SLX25T,具有PCI Express v1.1 版本的1Lane的通道,便于后续对PCIE通信协议使用的开发验证。方案设计如图3所示。

图3 方案设计框图

方案中信号数据在通过光纤收发模块时被转换成TTL信号传入FPGA或对FPGA输出的信号进行逆转换后向外传输,或直接收发传输兼容的TTL信号。FPGA实现对光纤收发模块的控制主要有2种实现方法。一种是直接将通过光纤收发模块的数据通过FIFO实现与FPGA进行数据交换处理,光纤接收模块接收转换后的数据一位一位通过FIFO缓存再传输到FPGA中进行处理,同样,FPGA要向光纤发送模块发送数据也是先将数据缓存入FIFO中,然后一位一位进入光纤发送模块将数据一位一位发送出去。除了通过FIFO缓存的方式来处理光纤收发模块的数据,还可以采用串口模块实现或去除严格串口协议帧格式的方式来收发数据[5],将数据以串口发送数据的模式进行打包发送。本方案中,采用第二种类似UART的方法对光纤收发模块的数据进行传输处理。在FPGA中如果数据需要处理可以进行预处理,如果不需要则可以通过建立一个FIFO将通过UART的数据传输到DDR2模块中,或从DDR2模块中将数据读取出来通过FIFO传输到UART模块后将数据传输出去。同时可以通过UART与PC上的上位机进行串口通信对功能和传输的数据进行验证。后续中还可以通过对预留的PCIE功能模块进行开发,使用1lane的PCIE通道实现PCIE数据传输与背板的通信功能验证。

2.2 模块时钟设计方案

本系统时钟分配实现方案框图如图4所示,板上提供50 MHz外部有源晶振作为FPGA的时钟源,调用FPGA PLL时钟模块对时钟进行倍频处理,对于各个模块所需的时钟频率在倍频的基础上进行分频以满足各模块所需时钟频率。

图4 时钟分配方案

由于FPGA各bank模块供电不同,系统中主要提供了5 V的输入电压,转换处理后得到所需的3.3 V、2.5 V、1.8 V、1.2 V及DDR2模块的参考电压0.9 V等电压。使用flash芯片来存储FPGA程序的配置文件及SPI通讯测试的实现。

3 DDR2 PCB布线注意事项

对于DDR2模块的PCB布线[3,6],根据XINLINX的MCB的操作手册中的建议,DDR2接口的信号在内层走线,信号线总长尽可能短,DDR2器件尽量靠近FPGA,信号线的宽度控制在3~5 mil(1 mil=0.0254 mm),同组信号间距保持3倍信号宽度,不同组信号及时钟信号间距至少保持20 mil,差分时钟信号接100 Ω匹配电阻,其他信号线接50 Ω匹配电阻。对各信号线进行分组等长和总长小于3 inch控制,其中同组信号中数据信号组间长度差控制在±150 mil内,控制组信号间长度差控制在±300 mil内,差分信号间控制在±10 mil内,时钟和数据信号的参考信号DQS信号差控制在±300 mil内以保证建立和保持时间的正确。本设计PCB板为6层板,各信号线长度控制在1 000 mil左右,满足信号的组间长度差和间距差要求,同时进行阻抗匹配控制。

4 FPGA控制实现DDR2模块设计

板卡上安装有光纤收发转换模块各一个,用以实现板卡的接收和发送功能。对于DDR2模块设计,通过设计用户控制模块对 MCB 进行二次封装,实现流传输情况下数据带宽的最大化,非常适合一些需要流传输的控制场合,同时也非常方便移植到其他开发模块上使用。构架框图如图5所示。二次封装后的DDR2读用户接口RTL模块见图6,DDR2写用户接口RTL模块见图7。

图5 MCB二次封装框架图

图6 读接口RTL图

图7 写接口RTL图

图8、图9、图10分别为MCB的命令FIFO时序、写数据FIFO时序、读数据FIFO时序[7]。命令FIFO实现要操作的地址、突发长度、读写模式选择等功能[7],而读写FIFO在命令FIFO的配合下结合使能信号、空满信号等实现对指定地址的数据写入或读出功能。要实现MCB对DDR2的数据读写,根据DDR2数据手册可知,需先等待Calibration过程完成,即c3_calib_done信号置高有效后才开始DDR2模块的读写操作。如果要向MCB写入数据,根据写数据FIFO时序中的要求,首先在px_wr_en信号有效后将相关数据写入FIFO中,然后通过使能命令FIFO中px_cmd_en信号,将相关数据写入到指定的地址;对于读取数据的实现,命令时序和读时序的操作过程则相反,先使能命令FIFO时序将相关控制命令写入,MCB将DDR2中的数据读取到写数据FIFO中然后再读取出[8-9]。

图9 写数据FIFO时序

图10 读数据FIFO时序

为了测试板卡的性能,在程序内部产生测试数据,设定MCB FIFO的连续读写存储深度为64。通过光纤发送接口发出到光纤接收接口接收数据,并存储到IP核构建的异步FIFO中等待读入DDR2。为了实现MCB FIFO的读写效率最大化,写命令请求的时候,在写MCB FIFO的数据非满就控制往MCB FIFO继续写数据,只要FIFO中有数据就发送控制命令把FIFO的数据搬运到 DDR2中;同理,读命令请求的时候,只要写MCB FIFO的数据非空就控制从MCB FIFO继续读数据,当读FIFO数据非满就发送控制命令从DDR2把数据搬运到读FIFO中。通过这种非满即读或非空即写的模式,只要MCB读FIFO有数据,就可以读,这样如果读速度接近了MCB 和DDR2物理芯片的速度,就可以实现最大化的带宽利用率。

5 硬件测试结果

本系统板卡的外部晶振源为50 MHz,通过FPGA内部PLL倍频、分频处理分别给光纤收发UART模块、DDR2模块、FIFO、RAM等模块提供工作时钟。其中,DDR2的读写频率为500 MHz,UART模块波特率为9 600 Hz。测试中,在程序内部产生连续交替的AA和55数据进行读取。完成光纤收发模块、DDR2模块等相关模块的FPGA控制编程后,再进行对各模块仿真验证,对该硬件板卡进行板上功能验证,使用XILINX提供的Chipscope工具对数据进行抓取分析。硬件板卡上电后正常工作,通过JTAG下载线将板卡与电脑进行连接,将编译生成后的bit文件下载到芯片中运行,设置好Chipscope相关参数,运行Chipscope对数据进行抓取。抓取测试结果如图11~图13所示。图11为光纤收发模块的结果,tx信号由1跳变到0,同时send信号置1表明发送模块准备好发送数据,最后2行为光纤发送模块数据。图12、图13中为整个功能数据读写测试结果,第1行为写入DDR2中的数据,第2行为DDR2读出数据,第3行为读出数据进入光纤发送模块缓冲FIFO的数据,第4行为光纤发送模块要发送的数据,最后一行为光纤接收模块接收到的数据。

图11 光纤收发模块数据

图12 整个系统测试数据

图13 整个系统测试数据

6 结束语

设计中对光纤收发模块采用类似UART按字节方式进行传输,方便对读取的数据进行观察对比。对MCB进行二次封装,采用非满就写,非空就读的方式,可以实现DDR2最大化的带宽利用率,同时接口控制模块也方便移植到其他DDR上使用。

通过多次数据读写测试,系统能够稳定工作,能够满足加速器上对常规束损探测器输出信号的采集使用。通过将数据缓存在DDR2中,可以很好地避免因为高速光纤快速传输而DIO板卡不能及时处理导致数据丢失的问题。同时,预留的PCIE接口模块可用于后续更大数据量的传输使用开发验证。

猜你喜欢
板卡时序命令
只听主人的命令
清明
基于不同建设时序的地铁互联互通方案分析
车载控制器CVRE板卡显红故障分析及处理
移防命令下达后
基于FPGA 的时序信号光纤传输系统
基于组态王软件和泓格PIO-D64 板卡的流水灯控制
基于模体演化的时序链路预测方法
这是人民的命令
一种基于光纤数据传输的多板卡软件程序烧写技术