本文参考:Xilinx系列FPGA 进位链延时实现简介_一级
一、Xilinx系列FPGA 进位链延时实现简介
2021-11-22 12:05
Xilinx器件进位链功能描述
FPGA 芯片的三个主要资源主要包括可配置逻辑单元(CLB )、存储单元、运算单元、一流的I / O 资源和布线资源等。其中,CLB 在FPGA 中最丰富,在7 系列的FPGA 中,一个CLB 中有两个Slice ,Slice 中包含4 个LUT6 、3 个数据选择器MUX ,两个独立进位链(Carry4 ,Ultrascale 是CARRY8 )和8 个主轴。这里我们主要介绍Carry4 。
高精度延时电路可以广泛用于家用电器、检测与控制、数据采集和控制等领域。通常情况下,延时电路设计方法众多,如采用计数器、锁相环、差频和专用精密延时器件等。随着数字电路技术的发展,数据信号采集速度和精度有了很大提高,各类工程应用对延时电路设计的指标也越来越高。
使用FPGA 内部进位链单元所提供的较小而稳定的延时来构建延时链,可以实现纳秒级高精度的延时发生器和信号检测。
1、 Xilinx器件进位链原理
Xilinx 公司的7 系列FPGA 来说,其内部都具有CARRY4 这一基本设计单元。通常情况下,进位链资源能够配合LUT 资源完成进位实现全加器。进位链级联数越多,造成的路径延迟就会越大,这样会让时序十分的紧张。但是在这里我们恰恰要利用的就是进位链的固定的延时,通过对CARRY4 原语的多次实例化调用,就能够实现进位链延时。
首先,我们来看下CarryChain的结构原理,其输入输出接口如下:
图1 :CARRY4 的例化
其中,
CI 是上一个CARRY4 的进位输出,位宽为1 ;
CYINT 是进位的初始化值,位宽为1 ;
DI 是数据的输入(两个加数的任意一个),位宽为4 ;
SI 是两个加数的异或,位宽为4 ;
O 是加法结果输出,位宽为4 ;
CO 是进位输出,位宽为4 。
其次,Carry4的内部结构如下图所示:
图二:CARRY4 单元结构
CARRY4 单元具有的数据输入DI[3:0] 和数据选择输入S[3:0] 分别对应其内部的4 个进位选择器的数据输入端和选择输入端,通过调整DI 和S 就可以改变进位链的选择和具体的抽头位置,从抽头位置到进位链的末端输出之间所经过的时间间隔即为所需要的延时。其输出可以选择CO0 、CO1 、CO2 、CO3 四个通路。
据上述图中,可以看到,当S0-S3 均为1 (S[3:0]=4 ‘b1111 )时,上一级进位链的结果CIN 可以一路向上,从CO3 输出(也可以选择CO0/CO1/CO2 ),其结果和CIN 相等,并且其延时完全取决于进位链的器件延时,可以做到ps 级的延时。这里每一个进位链的延时最小是53ps(7 系列FPGA) 。
2、进位链延时原语实现
XILINX 器件的进位链延时原语调用如图3 所示。
carry_count 代表CARRY4 的级数。第一级的信号pluse_in 从CYINIT 进来,从CO 出去,到达下一级CARRY4 的输入端CI 。第一级没有前级进位,所以CI 输入为0 。以后每一级CARRY4 的输出都作为输入到达下一级的CI 端。S 端输入需要一直为0 ,这样选择器就会选择从CIN 进来的数据。任意一级的CO0/CO1/CO2/CO3 都可以作为输出,输出到pin 上。
每一级的CO0/CO1/CO2/CO3 也可以放到寄存器中,实现对每一级的信号值的测量。
图三:CARRY4 原语调用
3、进位链延时计算
根据上述代码使用CARRY4 实现进位链延时后,以XC7K325T-2FBG676 为例布线如图4 所示。这里为方便查看,仅以4 级进位链为例,实际中可以实现更长的链和延时。
图四:四级进位链布线图
信号从管脚进来以后,经过4 级进位链的延时,从第四级的CO3 输出到输出管脚上。其对应的时序报告如图5 所示。
图五:四级进位链时序报告
如图5 所示,可知整个链路的延时主要是由七部分组成:
1、 输入信号的IBUF ,延时为固定的0.624ns 。
2、IBUF 到第一级CARRY4 的net 延时,这个由具体pin 和CARRY4 的位置距离决定,尽量选择合适的管脚和CARRY4 位置,使二者尽可能地近。
3、 第一级CARRY4 的延时,固定为0.287ns 左右(取CO0-CO3 会略有不同,差别不大)。
4、 前一级CARRY4 的输出到下一级CARRY4 的net 延时,这个分为三种。
a. 同一个BANK 同一列的SLICE ,分为上下两个部分(一个BANK 同一列上下各25 个SLICE ),如果是同属上半部分或者同属下半部分的相邻CARRY4 ,其延时是0ns ;
b. 如果同一个BANK 分属上下两部分的2 个相邻SLICE 的CARRY4 ,其延时是7ns ;
c. BANK 之间的相邻的2 个SLICE ,其延时是1ns 。
5、 后级CARRY4 (第一级除外)的延时,最小的延时为(级数-1 )*53ps, 图中这里级数=4 。
6、 最后一级CARRY4 到OBUF 的net 延时,这个由具体pin 和最后一级CARRY4 的位置距离决定。
7、 输出信号的OBUF ,延时为固定的2.045ns 。
由此可见,只要约束了合适的管脚和CARRY4 的位置,延时的长短主要取决于CARRY4 的级数,每级CARRY4 都是固定的延时,从而可以实现以固定的最小延时作为步进的延时递增。
4、进位链延时约束
在设计时,需要CARRY4 的位置约束,约束语句使用这样的语句。
set_property BEL CARRY4 [get_cells {genblk1[3].next_carry4}]
set_property LOC SLICE_X153Y106 [get_cells {genblk1[3].next_carry4}]
CARRY4 位置约束的使用原则:
1、 原则上,CARRY4 的位置约束应该选择在距离pin 最近的1-2 列,不要距离pin 太远,级数也不要太多;
2、 约束文件中,只有最后一条位置约束语句是有效的,VIVADO 会据此位置进行place ;
3、 根据最后一句的位置,前一级CARRY4 会place 到下边一个SLICE 中(从XILINX 的坐标系角度上说是按照Y 减小的方向),后一级CARRY4 会place 到上边一个SLICE 中。其余CARRY4 按照此规则同列分布;
4、VIVADO 会尽量把所有的级数都在同一个列的SILCE 进行分配;
5、 输入管脚和第一级CARRY4 要尽量靠近,输出管脚也要和其最后一级CARRY4 尽量离得近。
按照上述规则添加约束后,16 级进位链的布线图如图6 所示。
图六:16 级进位链布线图
二、FPGA管脚延时
打开vivado软件,在Tcl Console输入命令
link_design -part xc7vx690tffg1761-2
再次输入
write_csv xc7vx690tffg1761-2,
其中xc7vx690tffg1761-2为CSV文件名称,可任意输入
成功后,生成csv文件,文件存放路径
C:/Users/Administrator/AppData/Roaming/Xilinx/Vivado/
打开CSV文件,
其中Min Trace Delay (ps),Max Trace Delay (ps),两列既是,使用时可以对其取平均在使用。
三、idelay,odelay
&参考资料
UG474\DS182....