set_case_analysis 0 {get_pins bufg_gt_pclk/DIV[2]} 最小/最大延迟 最大延迟约束set_max_delay用于改写路径的默认建立时间(或恢复时间)需求;最小延迟约束set_min_delay用于改写路径的默认保持时间(或移除时间)。两条约束命令的语法模板如下: set_max_delay <delay> [-datapath_only] [-from <node_list>...
在我的设计中,两个 MMCM 生成时钟(分别为 clk400 和 clk480)提供给 BUFGMUX。 “set_case_analysis”用于提供多路复用器传送 clk480。 BUFGMUX 输出时钟不仅可输出数据,而且还可驱动 ODDR 转发输出时钟。 我希望 clk480 用于 set_output_delay 分析,但情况不是这样的。该工具总是将 clk400 当作参考时钟。
set_case_analysis 0 {get_pins bufg_gt_pclk/DIV[2]} 最小/最大延迟 最大延迟约束set_max_delay用于改写路径的默认建立时间(或恢复时间)需求;最小延迟约束set_min_delay用于改写路径的默认保持时间(或移除时间)。两条约束命令的语法模板如下: set_max_delay[-datapath_only] [-from] [-to] [-through] ...
(1)set_disable_timing, set_case_analysis, set_external_delay (2)影响时序数据库的约束如create_clock (3)不需要更新时序数据库的约束,例如 set_max_delay 我们看一个案例,如下图所示:代码第3至第10行为原始约束顺序,这里将set_disable_timing和set_case_analysis放在了create_clock之后。 代码第14行至第20...
时钟组约束set_clock_groups将关断指定的时钟组之间的时序分析,但并不关断时钟组内各时钟之间的时钟约束。set_false_path约束是单向的,但set_clock_group时序分析忽略是双向的。 set_clockgroups在有至少有两个有效非空时钟组是才有效。可以使用schematic viewer,clock_network_report观察决定哪些时钟不能一块儿分析。
在我的设计中,两个 MMCM 生成时钟(分别为 clk400 和 clk480)提供给 BUFGMUX。 “set_case_analysis”用于提供多路复用器传送 clk480。 BUFGMUX 输出时钟不仅可输出数据,而且还可驱动 ODDR 转发输出时钟。 我希望 clk480 用于 set_output_delay 分析,但情况不是这样的。该工具总是将 clk400 当作参考时钟。
multiple_clock:检查出有多个时钟的时钟引脚,在检查出存在这样的时钟引脚时,建议使用set_case_analysis约束来限制只有一个时钟在该引脚上传输 generated_clocks:检查生成时钟是否存在环路或循环定义,如果生成时钟的源时钟也是生成时钟将报错 loops:检查组合逻辑中是否存在环路 ...
我们来看一个案例:原本的约束描述顺序如下图所示。set_disable_timing放在了第30行,set_case_analysis放在了第33行,而两条create_clock则放在了这两条约束的后面。 根据Xilinx推荐的约束描述顺序,我们进行更新,更新后的结果如下图所示。读者可以体会一下两者的差异。
bus_clk2<=bus_c+d1;end//set_case_analysisBUFGMUX#()BUFGMUX_inst(.O(o_bufgmux),// 1-bit output: Clock output.I0(CLKIN1),// 1-bit input: Clock input (S=0).I1(CLKIN2),// 1-bit input: Clock input (S=1).S(S)// 1-bit input: Clock select);always@(posedge o_bufgmux,...
我们来看一个案例:原本的约束描述顺序如下图所示。set_disable_timing放在了第30行,set_case_analysis放在了第33行,而两条create_clock则放在了这两条约束的后面。 根据Xilinx推荐的约束描述顺序,我们进行更新,更新后的结果如下图所示。读者可以体会一下两者的差异。