问答 店铺
热搜: ZYNQ FPGA discuz

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

微信扫一扫 分享朋友圈

已有 6 人浏览分享

开启左侧

第5章 输入延迟约束

[复制链接]
6 0
       输入延迟约束采用引脚到寄存器的路径模型进行分析,其定义为FPGA引脚上数据和时钟信号到达时的相位关系,输入延迟约束向工具指示了数据相对于时钟发射沿延迟的时间,工具根据约束的延时范围调整布局布线策略,以达到时序收敛的目的。
image.jpg
数据和时钟信号在传输时,又分为系统同步和源同步接口,下面分别对两种接口进行分析。


5.1 系统同步输入约束
5.1.1 系统同步输入的时序路径分析
先温习下上一章节中系统同步时序路径。
       系统同步是指FPGA和外部器件的时钟信号同源,由于数据和时钟信号来自不同的源,通过不同路径传输至FPGA中,导致数据和时钟信号存在较大的偏差,这种接口无法达到更高速度的设计要求,已经在淘汰的边缘。
image.jpg
Tco为从时钟发射沿到达外部器件时钟引脚,到数据从外部器件输出引脚输出的时间
Td_pcb为数据从外部器件输出引脚到FPGA输入引脚经过的PCB走线延时
Tclk1为时钟信号从时钟源到外部器件时钟引脚的PCB走线延时
Tclk2为时钟信号从时钟源到FPGA时钟引脚的PCB走线延时
Td_fpga为数据从FPGA输入引脚到寄存器数据端的延时
Tc_fpga为时钟信号从FPGA时钟引脚到寄存器时钟端的延时。
image.jpg
建立时间裕量的计算公式如下:
·Data Arrival Time = Launch Edge + Tclk1 + Tco + Td_pcb + Td_fpga
·Data Require Time = Latch Edge + Tclk2 + Tc_fpga - Tsu
·setup slack = Data Require Time - Data Arrival Time
·setup slack = cycle + Tclk2(min) + Tc_fpga(min) - Tclk1(max) - Tco(max) - Td_pcb(max) - Td_fpga(max) - Tsu
我们对上式做一下处理,将FPGA内部延时和外部延时分开,得到如下公式:
·setup slack = cycle + (Tc_fpga(min) - Td_fpga(max) - Tsu) - (Tclk1(max) + Tco(max) + Td_pcb(max) - Tclk2(min))
在计算input delay的值时,因为参考点是FPGA的数据和时钟引脚,所以可以将FPGA外部延时从公式中提取出来,可以得到用于建立时间分析的input delay(max)的计算公式为:
·input delay(max) = Tclk1(max) + Tco(max) + Td_pcb(max) - Tclk2(min)
保持时间裕量的计算公式如下:
·Data Arrival Time = Launch Edge + Tclk1 + Tco + Td_pcb + Td_fpga
·Data Require Time = Latch Edge + Tclk2 + Tc_fpga + Th
·hold slack = Data Arrival Time - Data Require Time
·hold slack = Tclk1(min) + Tco(min) + Td_pcb(min) + Td_fpga(min) - Tc_fpga(max) - Tclk2(max) - Th
同样将该式中FPGA内部和外部的延时分开,得到如下公式:
·hold slack = (Tclk1(min) + Tco(min) + Td_pcb(min) - Tclk2(max))+ (Td_fpga(min) - Tc_fpga(max) - Th)
将FPGA外部延时从公式中提取出来,得到用于保持时间分析的input delay(min)的计算公式为:
·input delay(min) = Tclk1(min) + Tco(min) + Td_pcb(min) - Tclk2(max)

5.1.2 系统同步单沿采样
       在实际做input delay约束时,约束的具体数值为时钟锁存沿之后,数据不稳定的范围。以下是根据不同情况下的input_delay约束模板分析。
       对于系统同步接口上升沿采样,为了确保数据在采样时是稳定的,时钟锁存沿在发射沿后一个周期,系统时钟的相同有效边沿作用于FPGA和外部器件的时钟输入端,数据和时钟信号关系的示意图如下:
image.jpg
·input_clock为输入时钟名
·data为数据输入引脚
·tco为外部器件寄存器的内部延时
·trce_dly为数据在PCB上的走线延时
最大延时记为max_delay=tco_max+trce_dly_max,最小延时记为min_delay=tco_min+trce_dly_min。输入延迟的约束命令如下:
set_input_delay -clock <input_clock> -max tco_max+trce_dly_max [get_ports data] -clock_rise
set_input_delay -clock <input_clock> -min tco_min+trce_dly_min [get_ports data] -clock_ rise
对于系统同步接口下降沿采样,其锁存沿在发射沿后一个周期,数据和时钟信号关系示意图如下:
image.jpg
·input_clock为输入时钟名
·data为数据输入引脚
·tco为外部器件寄存器的内部延时
·trce_dly为数据在PCB上的走线延时
最大延时记为max_delay=tco_max+trce_dly_max,最小延时记为min_delay=tco_min+trce_dly_min。输入延迟的约束命令如下:
set_input_delay -clock <input_clock> -max tco_max+trce_dly_max [get_ports data] -clock_fall
set_input_delay -clock <input_clock> -min tco_min+trce_dly_min [get_ports data] -clock_fall

5.1.3 系统同步双沿采样
       系统同步接口的双沿采样有两种情况,一种是上升沿为发射沿,下降沿为锁存沿,另一种是下降沿为发射沿,上升沿为锁存沿,发射沿和锁存沿间隔半个周期。系统同步双沿采样的数据和时钟信号关系的示意图如下:
image.jpg
·input_clock为输入时钟名
·data为数据输入引脚
·trco为外部器件寄存器中,时钟上升沿到数据输出的时间。
·tfco为外部器件寄存器中,时钟下降沿到数据输出的时间。
·trce_dly为数据在PCB上的走线延时
上升沿最大延时记为max_r_delay=trco_max+trce_dly_max,最小延时记为min_r_delay=trco_min+trce_dly_min;下降沿最大延时记为max_f_delay=tfco_max+trce_dly_max,最小延时记为min_f_delay=trco_min+tfce_dly_min。输入延迟的约束命令如下:
set_input_delay -clock <input_clock> -max trco_max+trce_dly_max [get_ports data] -clock_ rise
set_input_delay -clock <input_clock >-min trco_min+trce_dly_min [get_ports data] -clock_rise
set_input_delay -clock <input_clock> -max tfco_max+trce_dly_max [get_ports data] -clock_fall -add_delay
set_input_delay -clock <input_clock> -min trco_min+tfce_dly_min [get_ports data] -clock_fall -add_delay

5.2 源同步输入约束
5.2.1 源同步输入的时序路径分析
       源同步是指芯片在发送数据时,同时发送一个与数据同步的时钟,对端芯片用该时钟对数据进行采样,数据和时钟信号保持确定的相位关系,所以源同步接口在PCB布线的设计上更加方便,只需考虑对线长进行匹配,这种接口提升了总线的速度。
image.jpg
Tc_d为外部器件内部时钟走线延时
Tc_pcb为时钟从外部期间时钟输出端到FPGA时钟输入端在PCB上的走线延时。
Td_pcb为数据从外部器件输出引脚到FPGA输入引脚经过的PCB走线延时
Td_fpga为数据从FPGA输入引脚到寄存器数据端的延时
Tc_fpga为时钟信号从FPGA时钟引脚到寄存器时钟端的延时。

各路径延时时间之间的关系用下方的时序图表示。
image.jpg
建立时间裕量的计算公式如下:
·Data Arrival Time = Launch Edge + Tco + Td_pcb + Td_fpga
·Data Require Time = Latch Edge + Tc_d + Tc_fpga + Tc_pcb - Tsu
·setup slack = cycle + Tc_d(min) + Tc_fpga(min) + Tc_pcb(min) - Tco(max) - Td_pcb(max) - Td_fpga(max) - Tsu
保持时间裕量的计算公式如下:
·Data Arrival Time = Launch Edge + Tclk1 + Tco + Td_pcb + Td_fpga
·Data Require Time = Latch Edge + Tclk2 + Tc_fpga + Th
·hold slack = Tco(min) + Td_pcb(min) + Td_fpga(min) - Tc_fpga(max) - Tc_d(max) - Tc_pcb(max) - Th
计算出input delay的最大值和最小值结果如下:
·input delay(max) = Tco(max) + Td_pcb(max) - Tc_d(min) - Tc_pcb(min)
·input delay(min) = Tco(min) + Td_pcb(min) - Tc_d(max) - Tc_pcb(max)

5.2.2 源同步单沿采样中心对齐
       对于源同步接口上升沿采样,数据和时钟中心对齐的情况,由于时钟上升沿在数据的中心,时钟上升沿前后数据都有足够的时间保持稳定,所以发射沿和锁存沿为同一个时钟沿,其数据和时钟信号关系的示意图如下:
image.jpg
·input_clock为输入时钟名
·data为数据输入引脚
·dv_bre为采样上升沿之前,数据保持有效的时间。
·dv_are为采样上升沿之后,数据保持有效的时间。
最大延时记为max_delay=cycle-dv_bre,最小延时记为min_delay=dv_are。输入延迟的约束命令如下:
set_input_delay -clock <input_clock> -max cycle-dv_bre [get_ports data] -clock_rise
set_input_delay -clock <input_clock> -min dv_are [get_ports data] -clock_rise

对于源同步接口下降沿采样,数据和时钟中心对齐的情况,发射沿和锁存沿为同一个时钟沿,其数据和时钟信号关系的示意图如下:
image.jpg
·input_clock为输入时钟名
·data为数据输入引脚
·dv_bfe为采样下降沿之前,数据保持有效的时间。
·dv_afe为采样下降沿之后,数据保持有效的时间。
最大延时记为max_delay=cycle-dv_bfe,最小延时记为min_delay=dv_afe。输入延迟的约束命令如下:
set_input_delay -clock <input_clock >-max cycle-dv_bfe [get_ports data] -clock_fall
set_input_delay -clock <input_clock> -min dv_afe [get_ports data] -clock_fall

5.2.3 源同步双沿采样中心对齐
对于源同步接口双沿采样,数据和时钟信号中心对齐的情况,发射沿和锁存沿为同一个时钟沿,其数据和时钟信号关系的示意图如下:
image.jpg
·input_clock为输入时钟名
·data为数据输入引脚
·dv_bfe为采样下降沿之前,数据保持有效的时间。
·dv_afe为采样下降沿之后,数据保持有效的时间。
·dv_bre为采样上升沿之前,数据保持有效的时间。
·dv_are为采样上升沿之后,数据保持有效的时间。
下降沿最大延时记为max_f_delay=cycle/2-dv_bre,最小延时记为min_f_delay=dv_afe;上升沿最大延时记为max_r_delay=cycle/2-dv_bfe,最小延时记为min_r_delay=dv_are。输入延迟的约束命令如下:
set_input_delay -clock <input_clock> -max cycle/2-dv_bfe [get_ports data] -clock_rise
set_input_delay -clock <input_clock> -min dv_are [get_ports data] -clock_rise
set_input_delay -clock <input_clock> -max cycle/2-dv_bre [get_ports data] -clock_fall -add_delay
set_input_delay -clock <input_clock> -min dv_afe [get_ports data] -clock_fall -add_delay

5.2.4 源同步单沿采样边沿对齐
      源同步接口数据和时钟信号边沿对齐有两种情况,一种是时钟直接送到采样寄存器,一种是时钟经过锁相环再送到寄存器。由于锁相环能够对时钟相位进行调整,这两种情况的约束命令不同。
      对于上升沿采样,时钟直接送到采样寄存器的情况,时钟的上升沿和数据的开始对齐,锁存沿在发射沿后一个时钟周期,其数据和时钟信号关系的示意图如下:
image.jpg
·input_clock为输入时钟名
·data为数据输入引脚
·skew_bre为采样上升沿之前,数据无效的时间。
·skew_are为采样上升沿之后,数据无效的时间。
最大延时记为max_delay=cycle+skew_are,最小延时记为min_delay=cycle-skew_bre。输入延迟的约束命令如下:
set_input_delay -clock <input_clock> -max cycle+skew_are [get_ports data] -clock_rise
set_input_delay -clock <input_clock> -min cycle-skew_bre [get_ports data] -clock_rise
      对于下降沿采样,时钟直接送到采样寄存器的情况,时钟的下降沿和数据的起始对齐,直接捕获数据难以满足建立时间的要求,所以锁存沿在发射沿后一个时钟周期,其数据和时钟信号关系的示意图如下:
image.jpg
·input_clock为输入时钟名
·data为数据输入引脚
·skew_bfe为采样下降沿之前,数据无效的时间。
·skew_afe为采样下降沿之后,数据无效的时间。
最大延时记为max_delay=cycle+skew_afe,最小延时记为min_delay=cycle-skew_bfe。输入延迟的约束命令如下:
set_input_delay -clock< input_clock> -max cycle+skew_afe [get_ports data] -clock_fall
set_input_delay -clock <input_clock> -min cycle-skew_bfe [get_ports data] -clock_fall
      对于上升沿采样,时钟经过锁相环的情况,锁相环对时钟延时进行补偿,时钟的上升沿和数据的结束对齐,锁存沿在发射沿后一个时钟周期,其数据和时钟信号关系的示意图如下:
image.jpg
·input_clock为输入时钟名
·data为数据输入引脚
·skew_bre为采样上升沿之前,数据无效的时间。
·skew_are为采样上升沿之后,数据无效的时间。
最大延时记为max_delay=skew_are,最小延时记为min_delay=-skew_bre。输入延迟的约束命令如下:
set_input_delay -clock input_clock -max skew_are [get_ports data] -clock rise
set_input_delay -clock input_clock -min -skew_bre [get_ports data] -clock rise
      对于下降沿采样,时钟经过锁相环的情况,时钟的下降沿和数据的结束对齐,锁存沿在发射沿后一个时钟周期,其数据和时钟信号关系的示意图如下:
image.jpg
·input_clock为输入时钟名
·data为数据输入引脚
·skew_bfe为采样下降沿之前,数据无效的时间。
·skew_afe为采样下降沿之后,数据无效的时间。
最大延时记为max_delay=skew_afe,最小延时记为min_delay=-skew_bfe。输入延迟的约束命令如下:
set_input_delay -clock <input_clock> -max skew_afe [get_ports data] -clock_fall
set_input_delay -clock <input_clock> -min -skew_bfe [get_ports data] -clock_fall

5.2.5 源同步双沿采样边沿对齐
       对于双沿采样,时钟直接送到采样寄存器的情况,时钟的边沿和数据的开始对齐,锁存沿在发射沿后半个时钟周期,其数据和时钟信号关系的示意图如下:
image.jpg
·input_clock为输入时钟名
·data为数据输入引脚
·skew_bfe为采样下降沿之前,数据无效的时间。
·skew_afe为采样下降沿之后,数据无效的时间。
·skew_bre为采样上升沿之前,数据无效的时间。
·skew_are为采样上升沿之后,数据无效的时间。
上升沿最大延时记为max_r_delay=cycle/2+skew_afe,最小延时记为min_r_delay=cycle/2-skew_bfe;下降沿最大延时记为max_f_delay=cycle/2+skew_are,最小延时记为min_f_delay=cycle/2-skew_bre。输入延迟的约束命令如下:
set_input_delay -clock <input_clock> -max cycle/2+skew_afe [get_ports data] -clock_rise
set_input_delay -clock <input_clock> -min cycle/2-skew_bfe [get_ports data] -clock_rise
set_input_delay -clock <input_clock> -max cycle/2+skew_are [get_ports data] -clock_fall -add_delay
set_input_delay -clock <input_clock> -min cycle/2-skew_bre [get_ports data] -clock_fall -add_delay
       对于双沿采样,时钟经过锁相环再送到采样寄存器的情况,时钟的边沿和数据的结束对齐,锁存沿在发射沿后半个时钟周期,其数据和时钟信号关系的示意图如下:
image.jpg
·input_clock为输入时钟名
·data为数据输入引脚
·skew_bfe为采样下降沿之前,数据无效的时间。
·skew_afe为采样下降沿之后,数据无效的时间。
·skew_bre为采样上升沿之前,数据无效的时间。
·skew_are为采样上升沿之后,数据无效的时间。
      下降沿最大延时记为max_f_delay=skew_afe,最小延时记为min_f_delay=-skew_bfe;上升沿最大延时记为max_r_delay=skew_are,最小延时记为min_r_delay=-skew_bre。输入延迟的约束命令如下:
set_input_delay -clock <input_clock> -max skew_are [get_ports data] -clock_rise
set_input_delay -clock <input_clock> -min -skew_bre [get_ports data] -clock_rise
set_input_delay -clock <input_clock> -max skew_afe [get_ports data] -clock_fall -add_delay
set_input_delay -clock <input_clock> -min -skew_bfe [get_ports data] -clock_fall -add_delay


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

10

粉丝

71

主题
精彩推荐
热门资讯
    网友晒图
      图文推荐
        
        • 微信公众平台

        • 扫描访问手机版