offset在xilinx时序约束里面是非常重要的一个参量。正确理解offset各种参数,对于高速设计的稳定性和可靠性非常关键。
参考文献:
What are OFFSET Constraints?
WP237 (v1.0) Xilinx
OFFSET IN BEFORE或者Pad to Setup: 约束外部时钟和外部输入数据时间关系,以满足内部触发器的setup时间,如图1
所示。
OFFSET OUT AFTER或者Clock-to-Out: 约束外部时钟pad和外部输出数据pad时间关系,以满足下游器件的setup/hold时间,如图2
所示。
FPGA内部可以被offset约束的路径如图3所示:
OFFSET IN约束路径:从输入pad到同步单元
OFFSET OUT约束路径:从同步单元到输出pad
如果不同的同步单元需要不同的offset约束,则可以用TIMEGRP属性。
TIMEGRP AB = RISING FFS;
TIMEGRP C = FALLING FFS
如图4所示:
OFFSET IN约束:定义Pad-To-Setup时序要求(注意pad是fpga的外部物理引脚,和pin有区分)。OFFSET IN是外部时钟到数据时序关系,它会自动计算时钟延迟、时钟沿、DLL/DCM引入的相位调整等。假设时钟周期是20ns,内部用DCM的clk90度时钟,约束修改为:
最初约束:NET "PAD_IN" OFFSET = IN 10 BEFORE "PADCLKIN";
修改约束:NET "PAD_IN" OFFSET = IN 15 BEFORE "PADCLKIN";
OFFSET IN约束条件:
对于D触发器的setup时间:
TData + TSetup - TClock <= Toffset_IN_BEFORE
对于D触发器的hold时间:
TClock – Tdata + Thold <= Toffset_IN_BEFORE_VALID
如图5
所示:
一个实例:
TIMEGRP DATA_IN OFFSET IN = 1 VALID 3 BEFORE CLK TIMEGRP FF_RISING;
OFFSET OUT约束:主要定义clock-to-pad时间要求,即时钟PAD到数据PAD的延迟,如图6所示:保证内部所有延迟不超过OFFSET OUT约束。当使用DLL/DCM,软件会自动计算时钟相位及延迟。譬如时钟周期是20ns,当输出触发器使用90°相位的时钟,
初始约束:NET "PAD_OUT" OFFSET = OUT 15 AFTER "PADCLKIN";应修改为
NET "PAD_OUT" OFFSET = OUT 10 AFTER "PADCLKIN";
Toffset_OUT_AFTER考虑条件:
TQ + TClock2Out + TClock <= Toffset_OUT_AFTER
TQ:触发器的输出端Q经过一些逻辑组合,输出到PAD延迟
TClock2Out:触发器的输出在clock上升沿的延迟
TClock:clock延迟
一个实例如图7所示:
Slack = (Requirement - (Clock Arrival + Clock Path + Data Path))
OFFSET OUT BEFORE:定义数据输出时间。clock PERIOD减去OFFSET,决定从同步单元到管脚PAD的数据传播延迟可用时间,
可以想象为在下一个时钟沿前数据离开器件的时间。
OFFSET OUT约束确保最大的延迟(CLK_SYS to COMP)加上数据通道COMP to Q_OUT最大延迟,不超过时钟周期减去被标记的offset
TQ + TClock2Out + TClock <= TPeriod – Toffset_OUT_BEFORE
很奇怪:为何没有OFFSET OUT valid?
另外:Toffset_OUT_AFTER 是不是就等于TPeriod – Toffset_OUT_BEFORE? |