tag 标签: input_delay

相关博文
  • 热度 24
    2014-4-4 13:51
    3247 次阅读|
    4 个评论
           Timing Constraints in Vivado 系列博文已有了一定的进展,经过上两节的介绍,约束设计中的时钟后, Vivado 已能完成基本的时序分析。        在第二节“ Timing Basics ”中提到时序路径分为以下四种: 1)       FPGA 内部时序单元间的路径 2)       输入端口到 FPGA 内部时序单元的路径 3)       FPGA 内部时序单元到输出端口的路径 4)       输入端口到输出端口的路径        其中 1. FPGA 内部时序单元间的路径 中,时序分析所需要的时间参数: T clk-D1 , T clk-Q , T data_path_delay , T clk_D2 , T setup , T hold 已能确定,只要属于 FPGA 内部的时间参数, Vivado 则会根据相应设计计算得到,因此 4. 输入端口到输出端口的路径 的时间参数也能确定。        其它两条路径都相应缺少 FPGA 外部的几个时间参数,这些参数都需要通过时序约束告知 Vivado ,然后 Vivado 才能精确地进行这些路径的时序分析。这一节先介绍 2. 输入端口到 FPGA 内部时序单元的路径 这条路径的约束。        在输入端口到 FPGA 内部时序单元的路径中, Input Delay 这段路径是在 FPGA 外部,因此需要约束设置其时间参数,通过 set_input_delay 约束命令约束,具体如下: set_input_delay –clock {clk} –max/-min input_delay_value        另外根据 source clock 和 destination clock ,输入接口可分为以下两种情况: 1.      System Synchronous Input        分析输入端口到 FPGA 内部时序单元的路径时,当 source clock 和 destination clock 来自同一个系统时钟时,称为系统同步输入 (system synchronous input) 。        图 1 所示为系统同步输入, source clock 是 CLKA , destination clock 是 CLKB ,其中 CLKB 通过输入端口引入 FPGA 内部 ( 约束成主时钟 ) ,而 CLKA 引到了 FPGA 外部的板上芯片,并没有引入到 FPGA 内部, CLKB 是采集输入端口的时钟,因此首先约束 CLKB 为主时钟,约束如下:        以下是约束指令: create_clock -name CLKB -period 10 -waveform {0 5} 图 1        其中 T clkd_ext 表示外部时钟源到外部芯片的延时; T clkd_int 表示外部时钟源到 FPGA 输入端口的延时; T co 表示外部芯片 tCO 时间; T bd 表示外部芯片输出端口到 FPGA 芯片的板上延时。        对应 max_input_delay 和 min_input_delay ,以上几个时间参数都有 max 和 min 值,约束如下:   以下是约束指令: set_input_delay -clock CLKB -max set_input_delay -clock CLKB -min 2.      Source Synchronous Input        分析输入端口到 FPGA 内部时序单元的路径时,当 destination clock 来自外部芯片,即与数据输入同源,称为源同步输入 (source synchronous input) 。        结构如图 2 所示,从板上芯片输入到 FPGA 除了有数据,还有一个随路时钟,是由板上芯片产生的。 图 2 2.1 Input Delay Value :        约束 Input Delay 分 max 值和 min 值,参考图 2 中时间参数,其中 T cd 表示外部芯片时钟输出到 FPGA 输入端口的延时; T co 表示外部芯片 tCO 时间; T bd 表示外部芯片输出端口到 FPGA 芯片的板上延时。 Input delay 的计算式如下:        max_input_delay = T bd_max + T co_max - T cd_min        min_input_delay = T bd_min + T co_min - T cd_max 2.2 Clock Data :        源同步输入的约束相比于系统同步输入的复杂些,其根据时钟与数据的关系,可分为边缘对齐 (Edge Aligned ClockData) 和中心对齐 (Center Aligned ClockData) 两种: 1)       Center Aligned        中心对齐是指时钟和数据到达后级时序单元时,时钟沿在数据中心,如图 3 所示。        在这种情况下可以直接使用时钟采集数据。 图 3        约束如下:   以下是约束指令: create_clock -name CLKB -period clk_period set_input_delay -clock -max max_input_delay set_input_delay -clock -min min_input_delay -add_delay 2)       Edge Aligned        边缘对齐是指时钟和数据到达后级时序单元时,时钟沿与数据变化沿重合,如图 4 所示。 图 4        这种情况下显然不满足后级时序单元的 Setup 要求,因此时钟需要经过一定的移相才能去采集数据,通常采用 MMCM 模块实现移相,如图 5 所示。 图 5        时钟约束如下:   以下是约束指令: create_clock -name CLKB -period clk_period create_generated_clock -name CLKB_90 -source –phase 90 }] set_input_delay -clock -max max_input_delay set_input_delay -clock -min min_input_delay -add_delay 2.3 SDR DDR :        源同步接口常用于高速数据传输,如 DDR 存储器、 HyperTransport 总线和 SPI-4.2 标准接口等。其中 DDR 指双倍速率数据采集 (Double Data Rate) ,在时钟的上升沿和下降沿都传输数据实现双倍速率。 1)       SDR(Single Data Rate)        单倍速率数据采集只在时钟的上升沿或者下降沿采集数据,如图 6 所示。 图 6        Input 约束只需针对时钟的上升沿或者下降沿进行,如:   以下是约束指令: set_input_delay -clock -max max_input_delay set_input_delay -clock -min min_input_delay -add_delay 2)       DDR(Double Data Rate)        双倍速率数据采集在时钟的上升沿和下降沿都采集数据,如图 7 所示。 图 7        针对时钟的上升沿和下降沿都需要进行 Input 约束,如:   以下是约束指令: set_input_delay -clock -max max_input_delay set_input_delay -clock -min min_input_delay -add_delay set_input_delay -clock -max max_input_delay -clock_fall -add_delay set_input_delay -clock -min min_input_delay -clock_fall -add_delay