本文介绍输入输出路径的时序约束。
约束输入路径 如图所示,触发器UFF0在设计的外部,并向设计内部的触发器UFF1提供数据。数据通过输入端口INP1连接两个触发器。为了对触发器DFF1的建立时间和保持时间进行约束,则工具必须要知道位于FPGA外部的延迟信息。set input delay指令的作用就是告诉工具FPGA外部的延迟信号。 我们首先列出数据的到达时间:
D
a
t
a
A
r
r
i
v
a
l
T
i
m
e
=
l
a
u
n
c
h
e
d
g
e
+
T
c
l
k
2
q
+
T
c
1
+
T
c
2
Data \;Arrival \;Time=launch\; edge+Tclk2q+T_{c1}+T_{c2}
DataArrivalTime=launchedge+Tclk2q+Tc1+Tc2 而数据的需求时间为:
D
a
t
a
R
e
q
u
i
r
e
d
T
i
m
e
=
l
a
u
n
c
h
e
d
g
e
+
T
c
l
k
−
T
s
e
t
u
p
Data \;Required \;Time=launch\; edge+Tclk-Tsetup
DataRequiredTime=launchedge+Tclk−Tsetup 则建立时间裕量为
T
s
e
t
u
p
s
l
a
c
k
=
D
a
t
a
R
e
q
u
i
r
e
T
i
m
e
−
D
a
t
a
A
r
r
i
v
a
l
T
i
m
e
=
T
c
l
k
−
T
s
e
t
u
p
−
T
c
l
k
2
q
−
T
c
1
−
T
c
2
T_{setup\; slack}=Data \;Require \;Time-Data \;Arrival \;Time =Tclk-Tsetup-Tclk2q-T_{c1}-T_{c2}
Tsetupslack=DataRequireTime−DataArrivalTime=Tclk−Tsetup−Tclk2q−Tc1−Tc2 我们将FPGA内部的信息和FPGA外部的信息分离开来,则有
T
s
e
t
u
p
s
l
a
c
k
=
T
c
l
k
−
T
c
2
−
T
s
e
t
u
p
−
(
T
c
l
k
2
q
+
T
c
1
)
T_{setup\;slack}=Tclk-T_{c2}-Tsetup-(Tclk2q+Tc1)
Tsetupslack=Tclk−Tc2−Tsetup−(Tclk2q+Tc1) 再来分析保持时间裕量 数据保持时间为
D
a
t
a
H
o
l
d
T
i
m
e
=
l
a
u
n
c
h
e
d
g
e
+
T
c
l
k
2
q
+
T
c
1
+
T
c
2
Data \;Hold \;Time=launch\;edge+Tclk2q+T_{c1}+T_{c2}
DataHoldTime=launchedge+Tclk2q+Tc1+Tc2 数据锁存时间为
D
a
t
a
R
e
q
u
i
r
e
T
i
m
e
=
l
a
u
n
c
h
e
d
g
e
+
T
h
Data \;Require \;Time =launch \;edge+Th
DataRequireTime=launchedge+Th 则保持时间裕量为
T
h
o
l
d
u
p
s
l
a
c
k
=
D
a
t
a
H
o
l
d
T
i
m
e
−
D
a
t
a
R
e
q
u
i
r
e
T
i
m
e
=
T_{holdup\;slack}=Data \;Hold \;Time - Data \;Require \;Time=
Tholdupslack=DataHoldTime−DataRequireTime=
T
c
l
k
2
q
+
T
c
1
+
T
c
2
−
T
h
=
(
T
c
l
k
2
q
+
T
c
1
)
−
(
T
h
−
T
c
2
)
Tclk2q+T_{c1}+T_{c2}-Th=(Tclk2q+Tc1)-(Th-T_{c2})
Tclk2q+Tc1+Tc2−Th=(Tclk2q+Tc1)−(Th−Tc2) 因此,我们从建立时间裕量和保持时间裕量的公式中发现,在进行时序分析时,工具只要知道片外延迟信息的组合Tclk2q+Tc1即可进行时序约束,所以,我们将Tclk2q+Tc1定义为input delay,它的含义是输入引脚INP1相对于时钟上升沿的延迟时间,即数据达到(FPGA)引脚的时间-时钟到达(FPGA)引脚的时间 进一步的,有
i
n
p
u
t
d
e
l
a
y
m
a
x
=
T
c
l
k
2
q
m
a
x
+
T
c
1
m
a
x
input \;delay \;max=Tclk2q_{max}+Tc1_{max}
inputdelaymax=Tclk2qmax+Tc1max
i
n
p
u
t
d
e
l
a
y
m
i
n
=
T
c
l
k
2
q
m
i
n
+
T
c
1
m
i
n
input \;delay \;min=Tclk2q_{min}+Tc1_{min}
inputdelaymin=Tclk2qmin+Tc1min 下图是input delay的一个具体例子
同样,工具需要对UFF0进行时序约束,就必须知道外部的延迟情况,set output delay指令的作用就是告诉工具FPGA外部的延时以及器件信息(Tsu,Thd)。 和之前一样,我们先计算建立时间裕量(此处略去推导过程):
T
s
e
t
u
p
s
l
a
c
k
Tsetup slack
Tsetupslack
=
(
T
c
l
k
−
T
s
e
t
u
p
)
−
(
T
c
l
k
2
q
+
T
c
1
+
T
c
2
)
=(Tclk-Tsetup)-(Tclk2q+Tc1+Tc2)
=(Tclk−Tsetup)−(Tclk2q+Tc1+Tc2)
=
(
T
c
l
k
−
T
c
1
−
T
c
l
k
2
q
)
−
(
T
c
2
+
T
s
e
t
u
p
)
=(Tclk-Tc1-Tclk2q)-(Tc2+Tsetup)
=(Tclk−Tc1−Tclk2q)−(Tc2+Tsetup) 上式中,左边为FPGA内部的信息,属于已知的,而右边的则是FPGA外部的延迟和器件参数等信息,需要通过set output delay告知工具。 再来看保持时间裕量:
T
h
o
l
d
u
p
s
l
a
c
k
Tholdup \;slack
Tholdupslack
=
T
c
l
k
2
q
+
T
c
1
+
T
c
2
−
T
h
=Tclk2q+Tc1+Tc2-Th
=Tclk2q+Tc1+Tc2−Th
=
(
T
c
l
k
2
q
+
T
c
1
)
+
(
T
c
2
−
T
h
)
=(Tclk2q+Tc1)+(Tc2-Th)
=(Tclk2q+Tc1)+(Tc2−Th) 上式中,左边为已知信息,而右边为FPGA外部未知的延迟等信息,需要通过set output delay告知工具。 通过上面两个式子的分析,我们发现,若要对建立时间进行时序分析,则工具需要知道Tc2+Tsetup组合,若要对保持时间进行分析,则工具需要知道Tc2-Th组合,因此我们定义:
output delay max=Tc2+Tsetup
output delay min=Tc2-Th
下图是进行output delay约束的一个例子