微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于FPGA的像素探测器数据缓存设计

基于FPGA的像素探测器数据缓存设计

时间:12-27 来源:互联网 点击:


2.2 FIFO输入时序模块
FIFO输入时序模块用于使TIME COUNTER_WITHID模块(用于对信号进行计时)的输出数据时序符合FIFO输入数据时序的接口要求。FIFO的写请求信号wrreq的长度所包含的周期数为写入FIFO数据的个数,并且写请求信号有效时输入数据端口的数据即被写入FIFO,几乎没有延迟,因此输入数据长度应符合FIFO的时钟信号周期长度,并且写请求信号长度也需要符合FIFO时钟信号周期长度,两者在时间上需要达到同步。
 为了测试输出数据长度符合FIFO接口的时序要求,分别进行了图4(a)、图4(b)、图4(c)所示的波形仿真,输入信号的持续长度分别为10 ns、20 ns、30 ns。如图所示三种输入的输出皆为10 ns保持时间, 同时输出10 ns write_en使能信号,符合FIFO接口要求。

粒子对撞机[1]是建立在高能同步加速器上的一种粒子对撞装置。对撞机运行时,能量强大的粒子在其内部经过加速后对撞,以达到一定的相互反应速率。对实验数据进行分析研究,可以帮助实验者了解相应粒子的形态等特性,从而推动各种理论或技术的发展。
 像素探测器[2]是粒子对撞机内部用于探测质子撞击后所形成的离子轨迹的装置,是一种专用传感器,由像素探测器探测得出的数据结果即可绘制出撞击后的离子轨迹。目前,像素探测器主要采用以下几种设计方法:ASIC设计方法[3],其优点是集成度高且功耗低,但是设计成本高、周期长且风险较大;分立元件采用微处理器的设计方法,其优点是成本低、设计周期短且风险小,但是速度慢且体积大。针对这几种设计方法,本文结合FPGA[4]提出了一种基于粒子对撞机像素探测器的数据缓存方法设计。相对ASIC设计方法,具有设计投入低、参数设置灵活、开发风险低而且开发周期短的优势;相对于分立元件采用微处理器的设计方法,具有体积小、功耗低且速度快的优势。
 由于像素探测器的数据输出具有保持时间短(最少保持时间为25 ns)、数据间隔时间不确定等特征,所以对于数据的存储必须经过时序转换电路将数据事先存入缓存,再写入存储器。本文的数据缓存设计由FIFO输入时序模块、FIFO模块和FIFO输出时序模块三部分组成,通过验证可以实现由探测器数据输出端到存储器的数据缓存功能。
1 总体设计
FPGA是一种新型的可编程逻辑器件,可以通过硬件描述语言生成所需的硬件,相对于传统的ASIC设计,具有设计周期短、灵活性高、开发费用少、设计风险低等优点,是ASIC的一种高效低成本解决方案。本设计使用的FPGA是Altera公司的CYCLONE2芯片,最高时钟频率100 MHz。总体架构如图1所示。

 由于探测器数据输出需要符合FIFO数据输入的时序,FIFO的数据输出需要符合存储器输入的时序,因此设计了FIFO输入时序模块和FIFO输出时序模块,使数据能够正确缓存进而存储。下面对具体的时序规范及各个模块进行说明。
2 模块设计及说明
2.1 FIFO模块

 FIFO即先进先出缓存器。FIFO与其他存储器的最大区别就是没有外部读写的地址线,因此应用起来十分方便简单,但是相应的缺点就是只能顺序写入或者顺序读取,其寻址方式由内部指针自加自减完成,不能对特定的地址进行读写。FIFO通常使用在不同速度的接口数据交换中,通过FIFO使得时序分别符合两个接口的特定速度,以进行数据传输。
 Altera的FIFO按照驱动时钟分类有两种:单时钟FIFO(SCFIFO),即读和写FIFO用的同一个时钟信号;双时钟FIFO(DCFIFO),即读和写FIFO分别使用不同时钟信号。其中双时钟FIFO还根据不同的端口数据宽度分为DCFIFO和DCFIFO_MIXED_WIDTH,所谓DCFIFO是输入数据和输出数据具有相同的数据宽度;而DCFIFO_MIXED_WIDTH是指输入输出端口可以使用不同的数据宽度。
 使用Altera的FIFO MegaWizard inteface launched对FIFO进行构建,像素探测器模型中有16路传感器输出,每路输出需要记录100个数据。根据模型需要,构建FIFO的主要参数如下:
dcfifo_component.intended_device_family
= "Cyclone II"dcfifo_component.lpm_hint"MAXIMIZE_
SPEED=7 RAM_BLOCK_TYPE=M4K"
dcfifo_component.lpm_numwords = 128
dcfifo_component.lpm_showahead = "OFF"
dcfifo_component.lpm_type = "dcfifo"
dcfifo_component.lpm_width = 16
dcfifo_component.lpm_widthu = 7
dcfifo_component.overflow_checking="ON" dcfifo_compo-
nent.rdsync_delaypipe = 5
dcfifo_component.underflow_checking="ON"
dcfifo_component.use_eab = "ON"
dcfifo_component.write_aclr_synch = "OFF"
dcfifo_component.wrsync_delaypipe = 5;
 构建完FIFO后,对其进行时序仿真,仿真结果如图2所示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top