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

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

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

 参照时序仿真图对各个端口及时序进行说明:
 aclr: 异步清零端,1 bit。清零所有输出状态端口,对于DCFIFO,3个wrclk时钟上升沿后清零wrfull端口,清零rdfull端口。如果输出端口定义reg类型的则会被清零;否则会保持输出值。
 data: 数据输入端口, 16 bit。当写请求wrreq有效时,保持数据直到数据被写入FIFO。当使用手动定义FIFO时,其数据宽度用参数LPM_WIDTH定义。
 q: 数据输出端口, 16 bit。当有数据请求时(rdreq有效时),输出数据。对于DCFIFO,输出数据的宽度可以与输入数据data端口宽度不同,具体用参数LPM_WIDTH_R定义。
 rdcld: 上升沿出发时钟,1bit。用来同步以下信号:q、dreq、dfull、dempty、rdusedw。
 rdempty: 输出数据为零时输出高电平,1 bit。不管目标设备是什么,在读请求发送前必须查询rdempty信号是否为高电平,以避免错误指令发出。
 rdreq: 读请求信号端口,1 bit。当需要从FIFO中读数据时,向rdreq端发送读请求,读取数据个数与rdreq持续的时钟数相同。需要注意的是,当rdempty有效时不能发送rdreq信号。对于这种情况,可以开启空保护功能,通过设置参数UNDERFLOW_CHECKING高电平实现,当rdempty为高电平时rdreq信号自动被置为无效。
 rdusedw: 输出数据显示FIFO中可读数据的数据量,7 bit。在DCFIFO中,其端口宽度要与手动设置参数LPM_WIDTHU相等。需要注意的是,对于Cyclone系列的FPGA,当显示数据满时实际FIFO的存储数据量有可能并没有达到存储的最大值,因此应该参考full或者wrfull端口来执行正确的写操作,参考empty或者rdempty端口来执行正确的读操作。
 wrclk: 写数据时钟,上升沿触发有效,1 bit。用于同步以下端口:data、wrreq、wrusedw、 wrfull和wrempty。
 wrfull: 写数据满信号,1 bit。当此端口电平有效时,FIFO已经被写满。其注意事项同rdfull。总体而言,rdfull信号要比wrfull信号有所延迟,因此,应该通过wrfull信号的电平来判断是否可以发送写请求信号wrreq。
 wrreq: 写请求信号。当需要向FIFO写入数据时,向wrreq端发送读请求,读取数据个数与wrreq持续的时钟数相同。需要注意的是,当wrfull有效时不能发送wrreq信号。对于这种情况,可以开启溢出保护功能,通过设置参数OVERFLOW_CHECKING高电平实现,当wrfull为高电平时wrreq信号自动被置为无效。同时在取消aclr信号时不应输入wrreq信号,否则aclr信号的下降沿和wrreq信号置为高电平后写数据的上升沿会产生竞争冒险现象。对于CYCLONE系列的FPGA中DCFIFO器件,可以选择添加同步电路同步aclr信号和wrclk信号,在手动设置中也可以通过设置参数WRITE_ACLR_SYNCH有效实现同步。
 wrusedw: 输出数据显示FIFO中写入数据的数据量,7 bit。在DCFIFO中,其端口宽度要与手动设置参数LPM_WIDTHU相等。需要注意的是,对于Cyclone系列的FPGA,当显示数据满时实际FIFO的存储数据量有可能并没有达到存储的最大值,因此应该参考full或者wrfull端口来执行正确的写操作,参考empty或者rdempty端口来执行正确的读操作。
  FIFO工作时的状态转换图如图3所示。


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接口要求。

参照时序仿真图对各个端口及时序进行说明:
 clk: FIFO输入时序模块时钟输入,1 bit。用于同步datain16、dataout16、write_en、complete、enable、usedw信号,与FIFO中wrclk信号相频相同。
complete:数据接收完成信号,1 bit。当从timecounter_withid模块接收数据完成时发送给timecounter_withid模块,持续时长1周期,timecounter_withid接收到信号时对内部数据进行初始化,做好准备对新的信号输入进行计时。
 datain16: 16位数据输入端口,16 bit。用于输入16位数据。
 dataout16: 16位数据输出端口,16 bit。用于输出16位数据。
 enable: 数据写入输入时序模块使能,1 bit。当有数据要写入模块时,首先在此端口输入高电平,然后输入数据方可被正确接收。
usedw: FIFO中可用数据端口,7 bit。用于查询FIFO中可用数据量,以此判断是否有剩余空间,进而确定是否向FIFO中写数据。
 write_en: 写使能信号,1bit。当要向FIFO中写入数据时为高电平,dataout16进行数据输出。
 模块流程图如图5所示。整个模块以posedge clk为同步时钟进行循环判断。当写入模块使能enable有效且写入完毕信号complete无效时,首先对FIFO的存储情况进行判断,当FIFO中字节小于7 FH时,说明FIFO未被写满,可以向其输入数据。数据输入FIFO的同时,写使能write_en置为有效,对于计数模块输出的接收完成信号complete信号置为有效。对一个周期的计数寄存器counter进行判断,如果counter为1即计时一周期到,则寄存器清零。counter的数值是在每次posedge clk信号到来时对write_en判断后进行加1,即当write_en为有效电平时,counter才被加1用来计时。

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

网站地图

Top