Synplify如何处理和注释I / O的OFFSET约束到UCF?
描述
我在Synplifys SDC文件中指定了define_input_delay。
Synplify如何在UCF中转发注释OFFSET约束?
解
有关此主题的更多信息,请参阅SolvNet Doc 026883。
Synplify Pro支持以输入/输出延迟的形式指定I / O偏移约束。
这些约束在位置和路径工具的.ucf文件中作为偏移输入/输出正向注释。
但是,.sdc文件中指定的值与.ucf文件的正向注释值之间存在差异。
前缀注释到.ucf文件的偏移值与.sdc文件中指定的I / O延迟值不同。
这些约束在位置和路径工具的.ucf文件中作为偏移输入/输出正向注释。
但是,.sdc文件中指定的值与.ucf文件的正向注释值之间存在差异。
前缀注释到.ucf文件的偏移值与.sdc文件中指定的I / O延迟值不同。
Xilinx的偏移计算:
偏移可以通过两种方式指定:偏移前和后偏移。
类似地,偏移量可以定义为之前的偏移量和偏移量。
'之前'表示在目标的捕获边缘之前。
类似地,偏移量可以定义为之前的偏移量和偏移量。
'之前'表示在目标的捕获边缘之前。
'after'表示在源的启动边缘之后。
在前/后定义偏移IN / OUT:
在前/后定义偏移IN / OUT:
Oia - Offset-in,此后是输入器件到FPGA输入引脚的延迟
Oib - 偏移,在此之前是从FPGA输入引脚/焊盘到主输入f / f的延迟。
Ooa - 偏移之后是从主输出f / f到输出引脚/焊盘的延迟。
Oob - 偏移之前是FPGA输出引脚/焊盘到输出器件的延迟。
从输入器件到FPGA的数据具有一个时钟周期的可用时间。
为了满足输入/输出的时间要求:
Oib + Oia =时钟周期 - (1)
Oob + Ooa =时钟周期 - (2)
输入到.sdc文件中的偏移值在(Oia)之后偏移,在(Oob)之前偏移。
转发到.ucf文件的值在(Oib)之前偏移,在(Ooa)之后偏移。
因此,Oib和Ooa的价值从Oia和Oob计算如下:
Oib =时钟周期 - Oia - (3)
Ooa =时钟周期 - Oob - (4)
这是输入到.sdc文件中的值与向前注释到.ucf文件的值不同的原因。
两者都是等价的,但以不同的方式表达。
注意,当输入/输出是上升沿触发时,上述情况属实。
为了满足输入/输出的时间要求:
Oib + Oia =时钟周期 - (1)
Oob + Ooa =时钟周期 - (2)
输入到.sdc文件中的偏移值在(Oia)之后偏移,在(Oob)之前偏移。
转发到.ucf文件的值在(Oib)之前偏移,在(Ooa)之后偏移。
因此,Oib和Ooa的价值从Oia和Oob计算如下:
Oib =时钟周期 - Oia - (3)
Ooa =时钟周期 - Oob - (4)
这是输入到.sdc文件中的值与向前注释到.ucf文件的值不同的原因。
两者都是等价的,但以不同的方式表达。
注意,当输入/输出是上升沿触发时,上述情况属实。
实践观察:
时钟周期= 12ns

SDC约束:
define_input_delay -default 5.00 -route 0.00 -ref {clk:r}
define_output_delay -default 5.00 -route 0.00 -ref {clk:r}
UCF约束:
OFFSET = OUT:7.000:clk之后;
OFFSET = IN:7.000:在clk之前;
偏移计算中相移的作用是什么?
由于相位被考虑用于输入/输出触发器的时钟触发,因此解释了时钟相位相对于Oib和Ooa的作用。
对于抵消:
考虑相对于时钟'Clk'指定的X ns之前的偏移量(Oib)。
现在,如果'Clk'被延迟或相移右移Y ns(Clk_dly),接收器处的触发边缘将从发送器的触发边缘移开Y ns,以便新的Oib变为Oib + Y ns。
现在,如果'Clk'被延迟或相移右移Y ns(Clk_dly),接收器处的触发边缘将从发送器的触发边缘移开Y ns,以便新的Oib变为Oib + Y ns。
因此,等式(3)可以写成,
Oib + Yns =时钟周期 - Oia so
Oib =时钟周期 - Oia - Y - (5)
对于抵消:
考虑在相对于时钟'Clk'指定的X ns(Ooa)之后的偏移量。
现在,如果'Clk'被延迟或相移右移Y ns(Clk_dly),则发送器处的触发边缘移动Y ns接近接收器处的触发边缘,使得新的Ooa变为Ooa -Y ns。
现在,如果'Clk'被延迟或相移右移Y ns(Clk_dly),则发送器处的触发边缘移动Y ns接近接收器处的触发边缘,使得新的Ooa变为Ooa -Y ns。

因此,等式(4)可以写成,
Ooa - Yns =时钟周期 - Oob,或
Ooa =时钟周期 - Oob + Y - (6)
根据等式(5)和(6),我们看到时钟中的任何相移被加到偏移输出并从偏移输入中减去。
要验证方程(5)和(6),请考虑负边沿触发的触发器上的偏移。
与正边沿触发输入/输出不同,正向注释的偏移计算对于负边沿触发输入/输出是不同的。
当输入或输出是下降沿触发时,偏移值计算如下:
与正边沿触发输入/输出不同,正向注释的偏移计算对于负边沿触发输入/输出是不同的。
当输入或输出是下降沿触发时,偏移值计算如下:
Oib =时钟周期 - Oia - (时钟周期/ 2) - (7)
Ooa =时钟周期 - Oob +(时钟周期/ 2) - (8)
也就是说,为偏移量计算减去一半的周期,并为偏移量计算添加。
半周期减法或相加的原因是因为在输入或输出触发器处引起的任何相位差也被考虑用于偏移计算。
现在,负边沿触发触发器只不过是半周期相移时钟:
Y =时钟周期/ 2 - (9)
输入:
代入(5)中的等式(9)给出
Oib =时钟周期 - Oia - (时钟周期/ 2)
这基本上是等式(7) - 为负边缘触发输入正向注释的偏移量。
输出:
在等式(6)中代入等式(9)给出
Ooa =时钟周期 - Oob +(时钟周期/ 2)
这基本上是等式(8) - 为负边沿触发输出注释的偏移输出。
因此,当向前注释到ucf文件时,减去或添加半个时钟周期以进行偏移和偏移。
实际观察:
时钟周期= 12ns

SDC约束:
define_input_delay -default 5.00 -route 0.00 -ref {clk:f}
define_output_delay -default 5.00 -route 0.00 -ref {clk:f}
UCF约束:
OFFSET = IN:1.000:在clk之前;
OFFSET = OUT:13.000:clk之后;
添加评论