我的设计中有一个时钟频率为 100MHz 的 DCM:
COMPONENT DCM_100
PORT(
CLKIN_IN : IN std_logic;--100MHz
RST_IN : IN std_logic;
CLKIN_IBUFG_OUT : OUT std_logic;
CLKOUT0_OUT : OUT std_logic; --divided by 1
CLKOUT1_OUT : OUT std_logic; --divided by 2
CLKOUT2_OUT : OUT std_logic;--divided by 4
CLKOUT3_OUT : OUT std_logic;--divided by 8
CLKOUT4_OUT : OUT std_logic;--divided by 16
CLKOUT5_OUT : OUT std_logic;--divided by 32
LOCKED_OUT : OUT std_logic
);
END COMPONENT;
设计中使用了输入开关选择的不同时钟。例如,对于开关位置 0,将使用 CLKOUT0_OUT,它实际上是输入时钟除以 1。我只在输入时钟上使用了时序约束,如下所示:
TIMESPEC "TS_clk" = PERIOD "clk_in" 100 MHz HIGH 50 %;
DCM 输出由工具自动约束。然后对所有约束进行时序分析,显示不满足一个约束:
================================================================================
Timing constraint: TS_Inst_DCM_100_CLKOUT0_BUF = PERIOD TIMEGRP "Inst_DCM_100_CLKOUT0_BUF" TS_Inst_DCM_100_CLK0_BUF HIGH 50%;
43782956 paths analyzed, 19293 endpoints analyzed, 145 failing endpoints
145 timing errors detected. (145 setup errors, 0 hold errors, 0 component switching limit errors)
Minimum period is 11.280ns.
--------------------------------------------------------------------------------
和最大。频率是:
设计统计: 最小周期:11.280ns{1}(最大频率:88.652MHz) 从/到任何节点的最大路径延迟:2.771ns
而当我只选择输入时钟的约束时,它与 CLOCK0_OUT 相同,那么所有约束都得到满足。
设计统计:最小周期:8.332ns{1}(最大频率:120.019MHz)
谁能解释一下这种行为。我应该考虑对 DCM 输出自动生成的约束,还是考虑对输入时钟的约束就足够了?问候