tag 标签: xdc

相关博文
  • 热度 22
    2014-4-29 17:13
    2953 次阅读|
    1 个评论
           本节通过实例介绍一下多时钟周期路径 (multicycle paths) 的约束方法。        如图 1 中结构,主时钟 fast_clk ,时钟频率 250MHz ;时钟使能信号 div_by_two ,由主时钟 2 分频得到,作为寄存器的 clock enable 信号。   图 1        HDL 代码如下所示: 以下是代码片段: module top(     fast_clk,     din_a,     din_b,     din_x,     din_y,     ab_out,     xy_out     );         ////////////// PORT /////////////////////////////     input fast_clk;     input din_a;     input din_b;     input din_x;     input din_y;     output reg ab_out;     output reg xy_out;         ////////////// ARCHITECTURE /////////////////////     // Clock Enable     reg div_by_two;     always@(posedge fast_clk)         div_by_two=~div_by_two;         // Input Registers     reg din_a_rg;     reg din_b_rg;     reg din_x_rg;     reg din_y_rg;     always@(posedge fast_clk) begin         if(div_by_two) begin             din_a_rg = din_a;                      din_b_rg = din_b;              din_x_rg = din_x;             din_y_rg = din_y;         end     end         // Multiplexer     wire mult_a;     wire mult_b;     assign mult_a = div_by_two ? din_a : din_x;     assign mult_b = div_by_two ? din_b : din_y;         // Multiplier     wire mult_rlt;     assign mult_rlt = mult_a * mult_b;         // Ouptut Select     always@(posedge fast_clk) begin         if(div_by_two)             xy_out = mult_rlt;         else             ab_out = mult_rlt;     end             endmodule  
  • 热度 21
    2014-4-28 10:49
    2057 次阅读|
    0 个评论
           之前博文中分析的时序路径基本都是在单时钟周期内进行分析, source clock 和 destination clock 是紧挨的两个时钟沿,可以说是最严格的情况。而一些情况下,可以放松这个分析条件,因此引入了多时钟周期路径 (multicycle paths) 的概念,如图 1 所示, data path 中可能经过了 N 个时钟周期后,最终才采集数据。  
  • 热度 21
    2014-4-22 11:00
    2624 次阅读|
    0 个评论
           本节讲解一下 output delay 的实例。依旧是 Ethernet PHY 和 FPGA 的接口,框图如图 1 所示,其中 TX 接口, MII 管理接口输出方向需要 output delay 约束。 图 1 TX 接口:        TX 接口由时钟 TXCK 和数据 TXD 组成,都是从 FPGA 输出,即时钟和数据同源,因此 TX 接口为源同步输出接口。        根据上节中 output delay value 的计算公式:        max_input_delay = T bd_max + T setup - T cd_min        min_input_delay = T bd_min – T hold - T cd_max        其中有 4 个时间参数: T bd , T cd , T setup 和 T hold ,如图 2 所示。 图 2        T cd 和 T bd 分别是时钟 TXCK 和数据 TXD 在板上的延时。首先通过 PCB 设计软件计算得到它们布线长度: L TXCK =784mil , L TXD =663mil , L TXD =680mil , L TXD =852mil , L TXD =901mil ,因此计算得到:        T cd_max = T cd_min =784mil*166ps/inch= 0.130144ns        T bd_max =901mil*166ps/inch=0.149566ns , T bd_min =663mil*166ps/inch=0.110058ns          T setup 和 T hold 是 PHY ( DP83849ID )芯片的时间参数,如图 3 所示,查询 datasheet 得到:        参考时间参数 T2.4.2 , T setup =10ns        参考时间参数 T2.4.3 , T hold =0ns 图 3        综上可得到 output delay value :        max_output_delay = T bd_max + T setup - T cd_min =0.149566ns + 10ns - 0.130144ns=10.019422ns        min_output_delay = T bd_min – T hold - T cd_max =0.110058ns – 0ns - 0.130144ns=-0.020086ns        可能有些人会诧异,为什么 min_output_delay 的值会是负的?负的表示相对于输出是反方向的延时。        下面对 TX 接口的 output delay 进行约束: create_clock -name TXCK -period 40 -waveform {0 20} create_clock -name TXCK_PHY -period 40 -waveform {0 20} set_output_delay –clock TXCK_PHY -max 10.019422 TXD TXD TXD }] set_output_delay –clock TXCK_PHY -min -0.020086ns TXD TXD TXD }]        Vivado 中约束如下图所示: 约束主时钟 约束虚拟时钟 约束 min output delay 约束 max output delay   MII 管理接口:        MII 管理接口由时钟 MDC 和数据 MDIO 组成,其中 MDIO 为双向接口,因此需要对其进行 input delay 和 output delay 约束。在其 output 方向, MDC 和 MDIO 都是从 FPGA 输出的,因此也是源同步输出接口。        时间参数的计算与 TX 接口类似,如图 4 所示 图 4        其中 MDC 和 MDIO 在板上的布线长度分别为 L MDC =924mil , L MDIO =587mil ,可得:        T cd_max = T cd_min =924mil*166ps/inch= 0.153384ns        T bd_max =T bd_min =587mil*166ps/inch=0.097442ns        T setup 和 T hold 的值参考 datasheet ,如图 5 所示,可得:        参考时间参数 T2.3.2 , T setup =10ns        参考时间参数 T2.3.3 , T hold =10ns 图 5        综上可得到 output delay value :        max_output_delay = T bd_max + T setup - T cd_min =0.153384ns + 10ns - 0.097442ns=10.055942ns        min_output_delay = T bd_min – T hold - T cd_max =0.153384ns - 10ns - 0.097442ns=-9.944058ns        下面对 MII 管理接口的 output delay 进行约束: create_clock -name MDC -period 400 -waveform {0 200} create_clock -name MDC_PHY -period 400 -waveform {0 200} set_output_delay –clock MDC_PHY -max 10.055942 set_output_delay –clock MDC_PHY -min -9.944058          Vivado 中约束如下图所示: 约束主时钟 约束虚拟时钟 约束 max output delay 约束 min output delay
  • 热度 19
    2014-4-18 08:24
    2576 次阅读|
    0 个评论
           FPGA 内部时序单元到输出端口的路径也需要约束其 output delay ,如图 1 所示框图。 图 1        约束 output delay 的命令是 set_output_delay ,具体的参数如下: set_output_delay –clock reference_clock –min / -max delay_value        其中 -clock 表示输出端口的关联时钟;        -min / -max 表示设置 output delay 的最小和最大值;        -clock_fall 表示 output delay 是针对关联时钟的下降沿;        -add_delay 表示对同一个输出端口约束不同的 output delay 值,一般是在如 DDR 需要约束两个时钟沿的 output delay ,或者输出端口后级连接了多个器件对应不同的时钟约束的情况下,需要加入此参数。        与输入接口约束类似,输出接口的约束也可分为以下两种情况: 1.      System Synchronous Output        分析 FPGA 内部时序单元到输出端口的路径时,当 source clock 和 destination clock 来自同一个系统时钟时,称为系统同步输出 (system synchronous output) 。        此处需要引入虚拟时钟 (virtual clock) 的概念,在讲时钟约束的一节时有提到,当 source clock or destination clock 不在 FPGA 设计中时,则需要约束一个虚拟时钟。如图 2 所示为系统同步输出路径框图, source clock 是 CLKA , destination clock 是 CLKB ,其中 CLKA 通过输入端口引入 FPGA 内部 ( 约束成主时钟 ) ,而 CLKB 引到了 FPGA 外部的板上芯片,并没有引入到 FPGA 内部,因此需将 CLKB 约束成虚拟时钟,约束如下:        create_clock -name CLKA -period 10 -waveform {0 5}        create_clock -name CLKB -period 10 -waveform {0 5} 图 2        其中 T cd_ext 表示外部时钟源到外部芯片的延时; T cd_int 表示外部时钟源到 FPGA 时钟端口的延时; T setup 表示外部芯片 tsu 时间; T hold 表示外部芯片 thd 时间; T bd 表示 FPGA 输出端口到外部芯片的板上延时。        Output delay value 的计算式如下:        max_output_delay = T bd_max + T setup + T cd_int_max - T cd_ext_min        min_output_delay = T bd_min – T hold + T cd_int_min - T cd_ext_max        相比于 input delay value ,上式相对于难理解些,那就推导一下,深入理解:        将此路径假想为 FPGA 内部 register_to_register 路径作分析,如图 3 所示, 图 3        在《 2. Timing Basics 》节中,介绍了时序分析分为 Setup Check 和 Hold Check : Setup Check        setup slack = ( destination clock edge time - source edge time )                      + ( destination clock path delay - source clock path delay )                      - clock uncertainty - setup time - clock to output time - data path delay        将图 3 中路径的时间参数代入可得:        setup slack = T clk_period + (T cd_ext – T cd_int – T cd_int_fpga ) – T clk_uncertainty – T setup – T clk-Q – T int_data_delay - T bd        其中 T cd_ext , T cd_int , T setup 和 T bd 都是 FPGA 外部的时间参数,需要通过约束告知 vivado ,上式整理一下可得:        setup slack = T clk_period – T cd_int_fpga – T clk_uncertainty – T clk-Q – T int_data_delay + (T cd_ext – T cd_int ) – T setup - T bd = T clk_period – T cd_int_fpga – T clk_uncertainty – T clk-Q – T int_data_delay – T max_output_delay        T max_output_delay = T setup + T bd_max + T cd_int_max - T cd_ext_min ,与前文中 max_output_delay 的计算式相同。 Hold Check        hold slack = (source clock edge time - destination edge time)+(source clock path delay - destination clock path delay) - clock uncertainty - hold time + clock to output time + data path delay                      = (T cd_int + T cd_int_fpga - T cd_ext ) - T clk_uncertainty – T hold + T clk-Q + T int_data_delay + T bd        其中 T cd_ext , T cd_int , T hold 和 T bd 都是 FPGA 外部的时间参数,需要通过约束告知 vivado ,上式整理一下可得:        hold slack = T cd_int_fpga - T clk_uncertainty + T clk-Q + T int_data_delay + T bd – T hold + T cd_int - T cd_ext                      = T cd_int_fpga - T clk_uncertainty + T clk-Q + T int_data_delay + T min_output_delay               T min_output_delay = T bd_min – T hold + T cd_int_min - T cd_ext_max ,与前文中 min_output_delay 的计算式相同。        可以发现在 setup check 中使用 max output delay , hold check 使用 min output delay ,都是使 slack 的值较小的趋势,这样使 FPGA 内部的时序条件更严苛,如果在这种条件下时序收敛,就绝对能保证设计的稳定性。        经过上面的推导,回归系统同步输出主题,约束命令如下: set_output_delay -clock CLKB -max max_output_delay set_output_delay -clock CLKB -min min_output_delay   2.       Source Synchronous Output        分析 FPGA 内部时序单元到输出端口的路径时,输出到外部芯片的时钟与数据是同源的,称为源同步输出 (source synchronous output) 。        结构如图 4 所示,从 FPGA 输出到外部芯片除了有数据,还有一个随路时钟,由 FPGA 内部时钟模块产生的。 图 4        参考图 4 中时间参数,其中 T cd 表示时钟从 FPGA 输出到外部芯片输入端口的延时; T setup 表示外部芯片 tSU 时间; T hold 表示外部芯片 tH 时间; T bd 表示 FPGA 输出端口到外部芯片的板上延时。 Output delay 的计算式如下(推导与系统同步输出类似,不再累述):        max_output_delay = T bd_max + T setup - T cd_min        min_output_delay = T bd_min – T hold - T cd_max        源同步输出的 output delay 约束命令如下: set_output_delay -clock CLKB -max max_output_delay set_output_delay -clock CLKB -min min_output_delay  
  • 热度 23
    2014-4-13 20:26
    2230 次阅读|
    0 个评论
           有很多学习 FPGA 的童鞋对时序约束和分析都处于懵懂的状态,笔者也是经历了漫长的过程才对时序有了一定的认识,现在写 Timing Constraints in Vivado 系列博文也是抱着能系统学习的态度才开始的。        后续的博文,笔者准备理论讲解结合多个实例介绍的方式展开,这样有利于加深一下大家对理论的理解。可能实例中有理解及计算的纰漏,还望大家及时指正。        在《 6. Input Delay Constraints实例一 》中分享了一个实例,如图 1 所示,对 RX 接口进行了约束。另外 MII 管理接口,其中 MDIO 是双向数据接口,肯定需要 input delay 的约束,由于笔者开始不确定此接口属于系统同步输入还是源同步输入,没有做进一步介绍,那就在此篇博文深入分析一下。 图 1        最初以为 MII 接口属于源同步输入,但是仔细查看后发现不对劲儿,时钟 MDC 并不是由 PHY 提供的,而是 FPGA 输出给 PHY 的,这与源同步接口的定义矛盾,源同步需要时钟和数据来自同一个源。因此只能划分到系统同步输入范畴了,仔细一想还是能说得通的,系统同步中只要求 source clock 和 destination clock 来自同一个时钟网络即可,不管是在 FPGA 外部还是内部,如图 2 所示, 图 2        《 5. Constraining Input Delay 》系统同步输入的 input delay value 计算公式如下:        max input delay = T clkd_ext_max + T co_max + T bd_max – T clkd_int_min         min input delay = T clkd_ext_min + T co_min + T bd_min – T clkd_int_max        此例的情况,时钟源到 FPGA 输入端口的延时 T clkd_int 等于 0 ,时钟源到外部芯片的延时为 TCD ,因此得到变化后的公式如下:        max input delay = T CD_max + T CO_max + T BD_max          min input delay = T CD_min + T CO_min + T BD_min        各时间参数的计算如下:        T CD :时钟线 MDC 在板上的长度 L MDC =489mil , T CD_max = T CD_min =489mil*166ps/inch= 0.081174ns        T BD :数据线 MDIO 在板上的长度 LMDIO=634mil , T BD_max = T BD_min =634mil*166ps/inch= 0.105244ns        T CO :参考 PHY ( DP83849ID )的手册,如图 3 所示, T CO 等于时间参数 T2.3.1 ,得到 T CO_max =30ns , T CO_min =0ns 。   图 3        得到 input delay 值如下:        max input delay = T CD_max + T CO_max +T BD_max    =0.081174ns+30ns+0.105244ns = 30.186418ns               min input delay = T CD_min + T CO_min + T BD_min =0.081174ns+0ns+0.105244ns=0.186418ns        综上, MII 管理接口的约束如下: create_clock –name MDC –period 400 –waveform {0 200} set_input_delay -clock -max 30.186418 set_input_delay -clock -min 0.186418        在 Vivado 中的约束如图 4,5 所示: 图 4 图 5
相关资源