问答 店铺
热搜: ZYNQ FPGA discuz

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

微信扫一扫 分享朋友圈

已有 9 人浏览分享

开启左侧

第6章 输出延迟约束

[复制链接]
9 0
       输出延迟约束采用寄存器到引脚的路径模型进行分析,其定义为FPGA引脚上数据和时钟信号到发出的相位关系,输出延迟约束指示了时钟锁存沿相对于数据的延迟,表示对端器件在这样一个延迟范围内能够采集到FPGA发出的数据。
image.jpg
      数据和时钟信号在传输时,又分为系统同步和源同步接口,下面分别对两种接口进行分析。

6.1 系统同步输出约束
6.1.1 系统同步输出的时序路径分析
       系统同步是指FPGA和外部器件的时钟信号同源,由于数据和时钟信号来自不同的源,通过不同路径传输至FPGA中,导致数据和时钟信号存在较大的偏差,这种接口无法达到更高速度的设计要求,已经在淘汰的边缘。
       下图所示的系统同步接口的时序路径中,Tco为FPGA内部寄存器从触发到输出数据稳定的时间,Td_pcb为数据从FPGA输出引脚输出到外部器件输入引脚经过的PCB走线延时,Tclk1为时钟信号从时钟源到FPGA时钟引脚的PCB走线延时,Tclk2为时钟信号从时钟源到外部器件时钟引脚的PCB走线延时,Tr2p为数据从FPGA寄存器Q端到FPGA输出端口的延时,Tp2r为时钟信号从FPGA时钟引脚到寄存器时钟端的延时。
image.jpg
各路径延时时间之间的关系用下方的时序图表示。
image.jpg
建立时间裕量的计算公式如下,注意这里的建立时间和保持时间是对外部器件的寄存器而言的。
·Data Arrival Time = Launch Edge + Tclk1 + Tco + Td_pcb + Tr2p + Tp2r
·Data Require Time = Latch Edge + Tclk2 - Tsu
·setup slack = Data Require Time - Data Arrival Time
·setup slack = cycle + Tclk2(min) - Tclk1(max) - Tco(max) - Td_pcb(max) - Tr2p(max) - Tp2r(max) - Tsu
将FPGA内部的延时信息和外部延时信息分开,对上式进行变换,得到下面的公式。
·setup slack = cycle - Tr2p(max) - Tp2r(max) - Tco(max) - (Tclk1(max) + Td_pcb(max) - Tclk2(min) + Tsu)
将FPGA外部延时信息提取出来,可以得到用于建立时间分析的output delay(max)的计算公式为:
·output delay(max) = Tclk1(max) + Td_pcb(max) - Tclk2(min) + Tsu
保持时间裕量的计算公式如下:
·Data Arrival Time = Launch Edge + Tclk1 + Tco + Td_pcb + Tr2p + Tp2r
·Data Require Time = Latch Edge + Tclk2 + Th
·hold slack = Data Arrival Time - Data Require Time
·hold slack = Tclk1(min) + Tco(min) + Td_pcb(min) + Tr2p(min) + Tp2r(min) - Tclk2(max) - Th
同样将该式中FPGA内部和外部的延时分开,得到如下公式:
·hold slack = Tco(min) + Tr2p(min) + Tp2r(min) + (Tclk1(min) + Td_pcb(min) - Tclk2(max) - Th)
将FPGA外部延时从公式中提取出来,得到用于保持时间分析的input delay(min)的计算公式为:
·output delay(min) = Tclk1(min) + Td_pcb(min) - Tclk2(max) - Th


6.1.2 系统同步单沿采样
        对于系统同步接口上升沿采样,系统时钟的相同有效边沿作用于FPGA和外部器件时钟输入端,数据和时钟信号关系的示意图如下:
image.jpg
·sys_clk为系统时钟名
·data为数据输出引脚
·trce_dly为数据在PCB上的走线延时
·Tsu为目标器件的建立时间要求,Th为目标器件的保持时间要求
       最大延时记为max_delay=trce_dly_max+Tsu,最小延时记为min_delay=trce_dly_min-Th。输出延迟的约束命令如下:
set_output_delay -clock <sys_clk> -max trce_dly_max+Tsu [get_ports data] -clock_rise
set_output_delay -clock <sys_clk> -min trce_dly_min-Th [get_ports data] -clock_rise

       对于系统同步接口下降沿采样,系统时钟的相同有效边沿作用于FPGA和外部器件时钟输入端,数据和时钟信号关系的示意图如下:
image.jpg
·sys_clk为系统时钟名
·data为数据输出引脚
·trce_dly为数据在PCB上的走线延时
·Tsu为目标器件的建立时间要求,Th为目标器件的保持时间要求
      最大延时记为max_delay=trce_dly_max+Tsu,最小延时记为min_delay=trce_dly_min+Th。输出延迟的约束命令如下:
set_output_delay -clock <sys_clk> -max trce_dly_max+Tsu [get_ports data] -clock_fall
set_output_delay -clock <sys_clk> -min trce_dly_min-Th [get_ports data] -clock_fall

6.1.3 系统同步双沿采样

       对于系统同步接口双沿采样,系统时钟的相同有效边沿作用于FPGA和外部器件时钟输入端,数据和时钟信号关系的示意图如下:
image.jpg
·sys_clk为系统时钟名
·data为数据输出引脚
·trce_dly为数据在PCB上的走线延时
·Tsu_r为目标器件的上升沿建立时间要求,Th_r为目标器件的下降沿保持时间要求
·Tsu_r为目标器件的上升沿建立时间要求,Th_r为目标器件的下降沿保持时间要求
       上升沿最大延时记为r_max_delay=trce_dly_max+Tsu_r,上升沿最小延时记为r_min_delay=trce_dly_min-Th_r。下降沿最大延时记为f_max_delay=trce_dly_max+Tsu_f,下降沿最小延时记为f_min_delay=trce_dly_min-Th_f。输出延迟的约束命令如下:
set_output_delay -clock <sys_clk> -max trce_dly_max+Tsu_r [get_ports data] -clock_rise
set_output_delay -clock <sys_clk> -min trce_dly_min-Th_r [get_ports data] -clock_rise
set_output_delay -clock <sys_clk> -max trce_dly_max+Tsu_f [get_ports data] -clock_fall -add_delay
set_output_delay -clock <sys_clk> -min trce_dly_min-Th_f [get_ports data] -clock_fall -add_delay

6.2 源同步输出约束
       在实际做output delay约束时,约束的具体数值为时钟锁存沿之前,数据可以被目标器件采样到的的范围。以下是根据不同情况Xilinx官方提供的output_delay约束模板分析。
6.2.1 源同步输出的时序路径分析
下图所示的源同步接口的时序路径
image.jpg
Tco为FPGA内部寄存器从触发到输出数据稳定的时间
Tc_d为时钟从FPGA输入引脚到输出引脚的延时
Td_pcb为数据从FPGA输出引脚输出到外部器件输入引脚经过的PCB走线延时
Tc_pcb为时钟从FPGA输出引脚输出到外部器件时钟引脚经过的PCB走线延时
Treg2pin为数据从FPGA寄存器Q端到FPGA输出端口的延时
Tpin2reg为时钟信号从FPGA时钟引脚到寄存器时钟端的延时。
各路径延时时间之间的关系用下方的时序图表示。
image.jpg
建立时间裕量的计算公式如下:
·Data Arrival Time = Launch Edge + Tp2r + Tco + Tr2p + Td_pcb
·Data Require Time = Latch Edge + Tc_d + Tc_pcb - Tsu
·setup slack = Data Require Time - Data Arrival Time
·setup slack = cycle + Tc_d(min) + Tc_pcb(min) - Tp2r(max) - Tco(max) - Tr2p(max) - Td_pcb(max) - Tsu
将FPGA内部的延时信息和外部延时信息分开,对上式进行变换,得到下面的公式。
·setup slack = cycle + Tc_d(min) - Tp2r(max) - Tco(max) - Tr2p(max) - (Td_pcb(max) - Tc_pcb(min) + Tsu)
将FPGA外部延时信息提取出来,可以得到用于建立时间分析的output delay(max)的计算公式为:
·output delay(max) = Td_pcb(max) - Tc_pcb(min) + Tsu
保持时间裕量的计算公式如下:
·Data Arrival Time = Launch Edge + Tp2r + Tco + Tr2p + Td_pcb
·Data Require Time = Latch Edge + Tc_d + Tc_pcb + Th
·hold slack = Data Arrival Time - Data Require Time
·hold slack = Tp2r(min) + Tco(min) + Tr2p(min) + Td_pcb(min) - Tc_d(max) - Tc_pcb(max) - Th
同样将该式中FPGA内部和外部的延时分开,得到如下公式:
·hold slack = Tp2r(min) + Tco(min) + Tr2p(min) - Tc_d(max) + (Td_pcb(min) - Tc_pcb(max) - Th)
将FPGA外部延时从公式中提取出来,得到用于保持时间分析的input delay(min)的计算公式为:
·output delay(min) = Td_pcb(min) - Tc_pcb(max) - Th

6.2.2 源同步单沿采样
对于源同步接口采样,输出延迟的计算可以通过两种方式进行参考,一是基于目标器件的建立时间要求和保持时间要求,二是基于时钟和数据的偏斜。
对于源同步接口上升沿采样,基于目标器件的建立时间要求和保持时间要求计算输出延迟的示意图如图所示。
image.jpg
·fwclk为输出时钟名
·data为数据输出引脚
·trce_dly为数据在PCB上的走线延时
·Tsu为目标器件的建立时间要求,Th为目标器件的保持时间要求
       最大延时记为max_delay=trce_dly_max+Tsu,最小延时记为min_delay=trce_dly_min-Th。输出延迟的约束命令如下:
set_output_delay -clock< fwclk> -max trce_dly_max+Tsu [get_ports data] -clock_rise
set_output_delay -clock <fwclk> -min trce_dly_min-Th [get_ports data] -clock_rise

       对于源同步接口下降沿采样,基于目标器件的建立时间要求和保持时间要求计算输出延迟的示意图如图所示。
image.jpg
·fwclk为输出时钟名
·data为数据输出引脚
·trce_dly为数据在PCB上的走线延时
·Tsu为目标器件的建立时间要求,Th为目标器件的保持时间要求
       最大延时记为max_delay=trce_dly_max+Tsu,最小延时记为min_delay=trce_dly_min-Th。输出延迟的约束命令如下:
set_output_delay -clock <fwclk> -max trce_dly_max+Tsu [get_ports data] -clock_fall
set_output_delay -clock <fwclk> -min trce_dly_min-Th [get_ports data] -clock_fall

       对于源同步接口上升沿采样,基于时钟和数据的偏斜计算输出延迟的示意图如图所示。
image.jpg
·fwclk为输出时钟名
·data为数据输出引脚
·cycle为输出时钟的时钟周期
·skew_bre为采样上升沿之前,数据无效的时间,skew_are为采样上升沿之后,数据无效的时间。
最大延时记为max_delay=cycle-skew_are,最小延时记为min_delay=skew_bre。输出延迟的约束命令如下:
set_output_delay -clock fwclk -max cycle-skew_are [get_ports data] -clock rise
set_output_delay -clock fwclk -min skew_bre [get_ports data] -clock rise

       对于源同步接口下降沿采样,基于时钟和数据的偏斜计算输出延迟的示意图如图所示。
image.jpg
·fwclk为输出时钟名
·data为数据输出引脚
·cycle为输出时钟的时钟周期
·skew_bfe为采样下降沿之前,数据无效的时间,skew_afe为采样下降沿之后,数据无效的时间。
最大延时记为max_delay=cycle-skew_afe,最小延时记为min_delay=skew_bfe。输出延迟的约束命令如下:
set_output_delay -clock fwclk -max cycle-skew_afe [get_ports data] -clock fall
set_output_delay -clock fwclk -min skew_bfe [get_ports data] -clock fall

6.2.3源同步双沿采样
       对于源同步接口双沿采样,基于目标器件的建立时间要求和保持时间要求计算输出延迟的示意图如图所示。
image.jpg
·fwclk为输出时钟名
·data为数据输出引脚
·trce_dly为数据在PCB上的走线延时
·Tsu_r为目标器件的上升沿建立时间要求,Th_r为目标器件的下降沿保持时间要求
·Tsu_r为目标器件的上升沿建立时间要求,Th_r为目标器件的下降沿保持时间要求
       上升沿最大延时记为max_delay=trce_dly_max+Tsu_r,上升沿最小延时记为min_delay=trce_dly_min-Th_r。下降沿最大延时记为max_delay=trce_dly_max+Tsu_f,下降沿最小延时记为 min_delay=trce_dly_min-Th_f。输出延迟的约束命令如下:
set_output_delay -clock <fwclk> -max trce_dly_max+Tsu_r [get_ports data] -clock_rise
set_output_delay -clock <fwclk> -min trce_dly_min-Th_r [get_ports data] -clock_rise
set_output_delay -clock <fwclk> -max trce_dly_max+Tsu_f [get_ports data] -clock_fall -add_delay
set_output_delay -clock <fwclk> -min trce_dly_min-Th_f [get_ports data] -clock_fall -add_delay

       对于源同步接口双沿采样,基于时钟和数据的偏斜计算输出延迟的示意图如图所示。
image.jpg
·fwclk为输出时钟名
·data为数据输出引脚
·cycle为输出时钟的时钟周期
·skew_bre为采样上升沿之前,数据无效的时间
·skew_are为采样上升沿之后,数据无效的时间
·skew_bfe为采样下降沿之前,数据无效的时间
·skew_afe为采样下降沿之后,数据无效的时间
       上升沿最大延时记为r_max_delay=cycle/2-skew_afe,上升沿最小延时记为r_min_delay=skew_bre。下降沿最大延时记为f_max_delay=cycle/2-skew_are,下降沿最小延时记为f_min_delay=skew_bfe。输出延迟的约束命令如下:
set_output_delay -clock <fwclk> -max cycle/2-skew_afe [get_ports data] -clock_rise
set_output_delay -clock <fwclk> -min skew_bre [get_ports data] -clock_rise
set_output_delay -clock <fwclk> -max cycle/2-skew_are [get_ports data] -clock_fall -add_delay
set_output_delay -clock <fwclk> -min skew_bfe [get_ports data] -clock_fall -add_delay


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

本版积分规则

0

关注

10

粉丝

71

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

        • 扫描访问手机版