当前位置:首页 > EDA > 电子设计自动化
[导读]Vivado看静态时序先盯WNS/WHS:WNS负是建立不够、数据没在捕获沿前稳;WHS负是保持不够、数据变太快。先别急着降频,按“时钟定义准—IO边界准—CDC隔离—关键路径改造”四步收。约束顺序建议主时钟、生成时钟、时钟不确定性、输入输出延迟、时钟组、再写false/multicycle。


Vivado看静态时序先盯WNS/WHS:WNS负是建立不够、数据没在捕获沿前稳;WHS负是保持不够、数据变太快。先别急着降频,按“时钟定义准—IO边界准—CDC隔离—关键路径改造”四步收。约束顺序建议主时钟、生成时钟、时钟不确定性、输入输出延迟、时钟组、再写false/multicycle。

一、时钟与生成时钟

主时钟只建在真实源:晶振口、GT恢复时钟、MMCM输入。MMCM/PLL输出让工具自动推导生成时钟,手动补名也行:

create_clock -name sys_clk -period 10.000 -waveform {0 5} [get_ports clk_p]

create_generated_clock -name clk_100m -source [get_pins mmcm/CLKIN1] \

 -multiply_by 2 -divide_by 1 [get_pins mmcm/CLKOUT0]

set_clock_uncertainty -setup 0.15 [get_clocks sys_clk]

set_clock_uncertainty -hold 0.05 [get_clocks sys_clk]

MMCM正相移做输入接口时,参考时钟与内部捕获时钟不同源,可用虚拟时钟或set_multicycle_path调整边沿;负相移/零相移一般先按主时钟做输入延迟,再据时序报告补例外。

二、IO延迟建立/保持配对

外部ADC、PHY、SRAM要按器件tSU/tH和PCB走线算max/min,只写-max会漏hold分析:

set_input_delay  -clock sys_clk -max 2.5 [get_ports din[*]]

set_input_delay  -clock sys_clk -min 1.0 [get_ports din[*]]

set_output_delay -clock sys_clk -max 3.0 [get_ports dout[*]]

set_output_delay -clock sys_clk -min 1.2 [get_ports dout[*]]

源同步输出可用create_generated_clock在输出时钟脚建伴随钟,再按伴随钟写输出延迟;纯外部参考、FPGA不输出时钟时用虚拟时钟,避免把板级偏移算进内部路径。

三、CDC与例外

异步域先同步再豁免。单比特两级同步、多比特用异步FIFO/握手/格雷码;约束用时钟组最省事:

set_clock_groups -asynchronous -group [get_clocks clk_a] -group [get_clocks clk_b]

set_false_path -from [get_ports rst_async_n]

false_path只标“确实不按时钟关系分析”的路径,同步器第一拍之后可false,但同步前的异步输入别当同步路径硬查。多周期必须setup/hold成对,否则保持边沿平移会造出新违例:

set_multicycle_path -setup 2 -from [get_pins calc_reg[*]/C] -to [get_pins res_reg[*]/D]

set_multicycle_path -hold 1 -from [get_pins calc_reg[*]/C] -to [get_pins res_reg[*]/D]

N周期setup配N-1周期hold;DSP慢算、配置寄存器、低速校验逻辑才用,每个时钟都出数的数据通路别乱放宽。

四、建立违例:拆组合、打拍

报告里Logic Levels>12、Data Path以LUT/进位为主,先改RTL。三级乘加拆两拍:

reg [31:0] m0,m1,m2,s0;

always @(posedge clk or posedge rst) begin

 if(rst) {m0,m1,m2,s0}<=0;

 else begin

   m0<=a*b; m1<=c*d; m2<=e*f;

   s0<=m0+m1+m2;

 end

end

assign result=s0;

高扇出复位/使能加MAX_FANOUT或用BUFG;关键DSP链改用DSP48原语而非LUT乘法。实现策略用Performance_Explore,仍不过再Performance_Retiming,最后才考虑放宽周期或降速。

五、保持违例:不降频,查短路径

保持和周期无关,降频没用。WHS负先看最短路径:是否某寄存器直连输出、是否输入延迟-min过紧、是否时钟偏斜让捕获时钟过早。轻微违例让Vivado实现阶段自动插单元延迟;顽固短路径手动打拍:

reg [7:0] d_dly;

always @(posedge clk) d_dly<=din;

always @(posedge clk) dout<=d_dly;

异步复位做“异步置位、同步释放”,并对同步链设恢复/移除或用set_max_delay限制,不要直接false掉复位网络。 跨时钟误报先report_cdc,确认同步器再加时钟组,避免把真同步路径标false导致上板随机错。

收口动作:综合后report_timing_summary看WNS/WHS,实现后按违例路径点开看Logic Levels、Net Delay、Clock Skew;主时钟不全、IO无min/max、CDC无时钟组,是高速设计三类最常见返工点。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭