距离上一次使用FPGA控制TDC芯片测量时间间隔已经过去一年多了,当时采用的TDC芯片是TI的一款芯片TDC7200,最后测量结果所能达到的精度为百皮秒级别,最近使用入手了AMS生产的TDC-GPX2这款芯片,单通道测量的精度达到有20ps,高精度模式理论测量精度达到10ps,本文于此介绍以下。以下附上之前写的TDC7200博客:FPGA控制TDC7200时间间隔测量。希望对大家能有所帮助。好了,话不多说,下面直接进入正题。
芯片介绍
老规矩,在介绍使用之前我们先来扣一扣数据手册。
- 芯片整体框图
如上所示,TDC-GPX2芯片有四路STOP脉冲输入信号,各持所司的几路电源(TVDD、CVDD等等),信号交互引脚还有各项使能、失能引脚。
-
重要引脚信息
以上是第一部分所介绍的一些重要的数据线的说明,本次设计采用SPI通信,所以对于LVDS引脚一律不使用。下面挑几个重要的引脚进行讲解:- STOP引脚,也就是脉冲输入引脚,我们所测量的就是STOP通道上的脉冲的时间间隔,主要的模式包括:单通道测量、双通道组合测量以及四通道组合测量。本设计采用独立测通道测量。
- REFCLKP引脚,参考时钟引脚。
- RSTIDXP引脚,内部计数复位,高电平有效。
- DISABLEP引脚,通道失能,高电平有效。
- INTERRUPT引脚,测试完成会拉低,通知用户采集数据。
- SCK、MOSI、MISO、SSN为SPI通信的引脚,唯一的区别就是SSN不是类似于CS的拉低选中芯片,而是通过SSN引脚给TDC芯片一个脉冲,提醒TDC芯片接收数据,具体可以看下面的写和读的时序图。其他三个引脚核SPI引脚功能一致。
-
写时序
-
读时序
-
配置寄存器一览
上图中的Fixed value,表示固定值,在写入的时候需要按照上面的值写入。
6. 重要寄存器介绍(重要!重要!重要)
1. 引脚使能
该寄存器用来使能对应的引脚,包括脉冲输入引脚、时钟输入引脚、LVDS引脚、通道失能引脚还有数据复位引脚。
2. 功能选择
这个寄存器用来选择是否开启通道、组合模式以及是否开启高分辨率功能。本次设计选择开启通道1,单独测试模式,不开启高分辨率模式。
3. 位宽以及FIFO模式设置
这个寄存器对于使用SPI控制而言作用不大,当需要使用FIFO块模式的情况下使用,其他情况下不用。本设计全部给0。
4. LSB设置寄存器
这个寄存器可以理解为设置精度,我的时钟主频是5M,周期为200ns,那么这个DIVISIONS我设置为200000,那么每一个单位就是 200ns / 200000 = 1ps,打个比方说,当我读出来的数据为5500,那么时间间隔就是5500ps,不用再另作转换计算。所以本设计就将其设置为200_000。
5. 电平设置计算
设置电平为CMOS,其他按照固定设置即可。
6. 读寄存器一览
上图可见读寄存器的地址是从8开始的,这个需要注意,后面要对都地址进行+8。
8. 单通道测量功能时序图(重要!重要!重要)
于此将介绍测量的主要流程。(如果你只是想要应用,可以省略下面的一段文字,直接跳到示例,完全能看懂,也会用)如上所示,STOP脉冲进来后TDC芯片会输出测量的主要信息,TDC芯片输出的数据只有两个,第一个是REFIDn,表示当前STOP脉冲处于第几个时钟周期。第二个数据TSTOP,表示 (tSTOP/tREF)× REFCLK_DIVISIONS,tSTOP表示当前进来的脉冲和所处的参考时钟周期上升沿之间的间隔时长,tREF表示参考时钟的周期,REFCLK_DIVISIONS就是上述设置的那个20位寄存器所设置的值,那边我们说设置为200000,当时钟频率为5M的时候,每一次计数表示1ps,所以第二个读出来的数据就是多少ps,可以直接当成时间间隔。每一个脉冲到来时,TDC都会将当前脉冲所处在第几个时钟周期、和上一个参考时钟计算两个脉冲之间的时间间隔输出,并拉低INTERRUPT引脚,通知用户读取数据。我们只需要分别读出两个脉冲后的寄存器的值进行分析,即可得到时间间隔。
测试示例
(情形一)参数一表示第几个参考时钟周期,参数二表示脉冲和当前参考时钟周期上升沿的时间间隔
测量上述STOP1和STOP2的时间间隔,当这两个脉冲进入到TDC芯片中,TDC芯片的FIFO会分别储存这两个脉冲的信息,由上可见,这两个脉冲处于同一个时钟周期下,所以他们的第一个参数REFIDn相等,此时只需要分析第二个参数即可。假设我们读到第二个脉冲的第二个参数为80000ps,第一个脉冲的第二个参数为40000ps,那么两个脉冲的时间间隔就是80000ps-40000ps=40000ps=40ns,也不需要过多的转换,这就是最终的时间间隔。
(情形二)参数一表示第几个参考时钟周期,参数二表示脉冲和当前参考时钟周期上升沿的时间间隔
测量上述STOP1、2和STOP3的时间间隔,当这两个脉冲进入到TDC芯片中,TDC芯片的FIFO会分别储存这两个脉冲的信息,由上可见,这两个脉冲处于不同的时钟周期下,那么我们为了得到时间间隔,只需要让第二个脉冲的第二个参数减去第一个脉冲的第二个参数(这个值可能会是负的),在加上两个脉冲第一个参数×周期时长,就得到时间间隔了,结合时序图应该很好理解,以下是手册的详细说明,如果对我所述的有不明白的地方,可以结合手册说明理解。
9. SPI通信说明
首先是极性和相位的设置,极性为0,相位为1,表示sck空闲状态下为0,且在第二个时钟沿写入或读出数据,也就是下降沿,我们只需要在下降沿的时候读写数据即可。
以上是对应的引脚说明。和我前面介绍的基本一致。
- 操作码一览
以上是操作码,需要在写入或者读出的时候作为帧头,后面带上寄存器地址或者数据。
注意
当使用SPI通信的时候,注意要把LVDS的引脚关掉。
文章来源:https://www.toymoban.com/news/detail-493413.html
结语
本文讲的很多了,对于控制FPGA进行实操的放到下一篇文章中介绍了。文章来源地址https://www.toymoban.com/news/detail-493413.html
到了这里,关于FPGA控制TDC-GPX2时间间隔测量(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!