1 <?xml version=
"1.0" encoding=
"ISO-8859-1" ?>
3 <section niv='
2'
><title>Timing Checks
</title>
4 <p>The next sections explain how timing checks are performed. They describe the more common situations one can be faced to,
7 <item>Input to latch
</item>
8 <item>Latch to latch
</item>
9 <item>Latch to output
</item>
12 <p>For each situation, an example of slack report is shown, and we explain the details of the timing checks calculation.
</p>
14 <section niv='
3'
><title>Input to Latch
</title>
16 <section niv='
4'
><title>Inputs Specifications
</title>
17 <p>Regarding input specifications, the STA engine of
&tool; makes the assumption that input
18 data is coming from a latch clocked on the opposite phase of the one the data arrives on.
19 In our flip-flop example,
<f>dff_m
</f> is opened on the high state of
<f>ck
</f>, so
<f>di
</f>
20 is supposed to come from a latch opened on the low state of
<f>ck
</f>.
</p>
21 <imgsize namehtml=
"input_spec.gif" namepdf=
"input_spec.gif" hpdf=
"100pt" wpdf=
"220pt"/>
22 <p>As a result,
<f>di
</f> should be specified as coming from
<f>ck
</f> falling, i.e. when the
23 latch
<f>src
</f> opens. The corresponding SDC commands should look like:
</p>
25 <cl>create_clock -period
1000 -waveform {
500 0} ck
</cl>
26 <cl>set_input_delay -clock -ck -clock_fall -min
200 di
</cl>
27 <cl>set_input_delay -clock -ck -clock_fall -max
300 di
</cl>
32 <section niv='
4'
><title>Timing Checks Description
</title>
33 <p>Diagram below illustrates the way
<f>set_input_delay
</f> directives are propagated throughout the design, and
34 where timing checks are performed.
</p>
35 <imgsize namehtml=
"gen_inp_slack.gif" namepdf=
"gen_inp_slack.gif" wpdf=
"400pt"/>
38 <section niv='
4'
><title>Setup Slack
</title>
39 <p>Input to latch setup slack report is described in the
<f>slack.rep
</f> file
</p>
41 <cl>Path (
4) : Slack of
0.762 </cl>
42 <cl> DATA VALID:
</cl>
44 <cl> Acc Delta R/F Cap[pf] Type Node_Name Net_Name Line
</cl>
45 <cl> ____________________________________________________________________________________
</cl>
46 <cl> 0.300 0.000 0.200 R
0.034 di di
</cl>
47 <cl> 0.498 0.198 0.310 F
0.028 (L) dff_m dff_m master
</cl>
48 <cl> ____________________________________________________________________________________
</cl>
49 <cl> 0.498 0.198 (total)
</cl>
51 <cl> DATA REQUIRED:
</cl>
53 <cl> Acc Delta R/F Cap[pf] Type Node_Name Net_Name Line
</cl>
54 <cl> __________________________________________________________________________________
</cl>
55 <cl> 0.000 0.000 0.200 F
0.016 (C) ck ck
</cl>
56 <cl> 0.239 0.239 0.258 R
0.046 (CK) ckn ckn inv
</cl>
57 <cl> 0.340 0.101 0.140 F
0.036 (CK) ckp ckp inv
</cl>
58 <cl> 0.260 -
0.081 [INTRINSIC SETUP]
</cl>
59 <cl> 1.260 +
1.000 [NEXT PERIOD]
</cl>
60 <cl> __________________________________________________________________________________
</cl>
61 <cl> 1.260 0.260 (total)
</cl>
64 <p>The value of the setup slack is given by clock_path - data_path =
1260ps -
498ps =
762ps. The intrinsic setup corresponds to an
65 additional delay which models the amount of time required for secure memorization of the data.
</p>
68 <section niv='
4'
><title>Hold Slack
</title>
69 <p>Input to latch hold slack report is described in the
<f>slack.rep
</f> file
</p>
71 <cl>Path (
2) : Slack of
0.005 </cl>
72 <cl> DATA VALID:
</cl>
74 <cl> Acc Delta R/F Cap[pf] Type Node_Name Net_Name Line
</cl>
75 <cl> ____________________________________________________________________________________
</cl>
76 <cl> 0.200 0.000 0.200 F
0.034 di di
</cl>
77 <cl> 0.542 0.342 0.508 R
0.028 (L) dff_m dff_m master
</cl>
78 <cl> ____________________________________________________________________________________
</cl>
79 <cl> 0.542 0.342 (total)
</cl>
81 <cl> DATA REQUIRED:
</cl>
83 <cl> Acc Delta R/F Cap[pf] Type Node_Name Net_Name Line
</cl>
84 <cl> __________________________________________________________________________________
</cl>
85 <cl> 0.000 0.000 0.200 F
0.016 (C) ck ck
</cl>
86 <cl> 0.239 0.239 0.258 R
0.046 (CK) ckn ckn inv
</cl>
87 <cl> 0.537 +
0.298 [INTRINSIC HOLD]
</cl>
88 <cl> __________________________________________________________________________________
</cl>
89 <cl> 0.537 0.537 (total)
</cl>
93 <p>The value of the hold slack is given by data_path - clock_path =
542ps -
537ps =
5ps. The intrinsic hold corresponds to an
94 additional delay which models the amount of time required for ensuring that the next cycle's data is not memorized in the current cycle.
</p>
100 <section niv='
3'
><title>Latch to Latch
</title>
101 <section niv='
4'
><title>Timing Checks Description
</title>
102 <p>Latch to latch timing checks require no additional configuration, as they are based upon
103 the signals already propagated from inputs, and upon the clock specification. The
104 propagation of the s.w., and corresponding timing checks are described in the following
106 <imgsize namehtml=
"gen_ms_slck.gif" namepdf=
"gen_ms_slck.gif" hpdf=
"280pt" wpdf=
"370pt"/>
108 <section niv='
4'
><title>Setup Slack
</title>
109 <p>Latch to latch setup slack report is described in the
<f>slack.rep
</f> file
</p>
111 <cl>Path (
3) : Slack of
0.284 </cl>
112 <cl> DATA VALID:
</cl>
114 <cl> Acc Delta R/F Cap[pf] Type Node_Name Net_Name Line
</cl>
115 <cl> _____________________________________________________________________________________
</cl>
116 <cl> -
0.500 0.000 0.200 R
0.016 (C) ck ck
</cl>
117 <cl> -
0.399 0.101 0.128 F
0.046 (CK) ckn ckn inv
</cl>
118 <cl> -
0.236 0.164 0.169 R
0.036 (CK) ckp ckp inv
</cl>
119 <cl> -
0.152 0.083 0.139 F
0.028 (L) dff_m dff_m master
</cl>
120 <cl> 0.090 0.242 0.189 R
0.040 n11 n11 inv
</cl>
121 <cl> 0.321 0.231 0.305 F
0.089 (L) dff_s dff_s slave
</cl>
122 <cl> _____________________________________________________________________________________
</cl>
123 <cl> 0.321 0.821 (total)
</cl>
125 <cl> DATA REQUIRED:
</cl>
127 <cl> Acc Delta R/F Cap[pf] Type Node_Name Net_Name Line
</cl>
128 <cl> ___________________________________________________________________________________
</cl>
129 <cl> 0.500 0.000 0.200 R
0.016 (C) ck ck
</cl>
130 <cl> 0.601 0.101 0.128 F
0.046 (CK) ckn ckn inv
</cl>
131 <cl> 0.605 +
0.005 [INTRINSIC SETUP]
</cl>
132 <cl> ___________________________________________________________________________________
</cl>
133 <cl> 0.605 0.105 (total)
</cl>
137 <section niv='
4'
><title>Hold Slack
</title>
138 <p>Latch to latch hold slack report is described in the
<f>slack.rep
</f> file
</p>
140 <cl>Path (
3) : Slack of
0.146 </cl>
141 <cl> DATA VALID:
</cl>
143 <cl> Acc Delta R/F Cap[pf] Type Node_Name Net_Name Line
</cl>
144 <cl> ____________________________________________________________________________________
</cl>
145 <cl> -
0.500 0.000 0.200 R
0.016 (C) ck ck
</cl>
146 <cl> -
0.399 0.101 0.128 F
0.046 (CK) ckn ckn inv
</cl>
147 <cl> -
0.281 0.119 0.177 R
0.028 (L) dff_m dff_m master
</cl>
148 <cl> -
0.223 0.057 0.088 F
0.040 n11 n11 inv
</cl>
149 <cl> 0.106 0.329 0.447 R
0.089 (L) dff_s dff_s slave
</cl>
150 <cl> ____________________________________________________________________________________
</cl>
151 <cl> 0.106 0.606 (total)
</cl>
153 <cl> DATA REQUIRED:
</cl>
155 <cl> Acc Delta R/F Cap[pf] Type Node_Name Net_Name Line
</cl>
156 <cl> __________________________________________________________________________________
</cl>
157 <cl> 0.500 0.000 0.200 R
0.016 (C) ck ck
</cl>
158 <cl> 0.601 0.101 0.128 F
0.046 (CK) ckn ckn inv
</cl>
159 <cl> 0.764 0.164 0.169 R
0.036 (CK) ckp ckp inv
</cl>
160 <cl> 0.960 +
0.196 [INTRINSIC HOLD]
</cl>
161 <cl> -
0.040 -
1.000 [PREVIOUS PERIOD]
</cl>
162 <cl> __________________________________________________________________________________
</cl>
163 <cl> -
0.040 0.460 (total)
</cl>
170 <section niv='
3'
><title>Latch to Output
</title>
172 <section niv='
4'
><title>Output Constraints
</title>
173 <p>Still based on the flip-flop design described above, the timing propagation on output
<f>t
</f> is done as follow:
</p>
175 <imgsize namehtml=
"ms_output.gif" namepdf=
"ms_output.gif" wpdf=
"400pt"/>
176 <p>In order to get setup and hold slacks on the output, one must define timing
177 constraints on
<f>t
</f>. These timing constraints are defined with the
178 <f>set_output_delay
</f> SDC function. The
<f>set_output_delay
</f> specifies propagation
179 delays from output connector to the next memory element latching the data. As a result,
180 min and max delays are defined as shown in the diagram below.
</p>
182 <imgsize namehtml=
"output_spec.gif" namepdf=
"output_spec.gif" hpdf=
"100pt" wpdf=
"220pt"/>
184 <p>One must also define the edge the data will be latched by. Here,
<f>dff_s
</f> is closed
185 on the high state of
<f>ck
</f>. The data launched by
<f>t
</f> is supposed to be latched by
186 a memory element clocked on the opposite phase, i.e. closed on low state of
<f>ck
</f>. Therefore,
187 constraints on
<f>t
</f> should be specified relative to falling edge of
<f>ck
</f> (when
<f>dst
</f>
188 latch closes). The
<f>set_output_delay
</f> functions should be used as follow:
</p>
190 <cl>set_output_delay -clock ck -clock_fall -min
200 t
</cl>
191 <cl>set_output_delay -clock ck -clock_fall -max
400 t
</cl>
196 <section niv='
4'
><title>Setup Slack
</title>
197 <p>Latch to output setup slack report is described in the
<f>slack.rep
</f> file
</p>
199 <cl>Path (
1) : Slack of
0.030 </cl>
200 <cl> DATA VALID:
</cl>
202 <cl> Acc Delta R/F Cap[pf] Type Node_Name Net_Name Line
</cl>
203 <cl> ______________________________________________________________________________
</cl>
204 <cl> 0.000 0.000 0.200 F
0.016 (C) ck ck
</cl>
205 <cl> 0.239 0.239 0.258 R
0.046 (CK) ckn ckn inv
</cl>
206 <cl> 0.340 0.101 0.140 F
0.036 (CK) ckp ckp inv
</cl>
207 <cl> 0.568 0.227 0.327 R
0.089 (L) dff_s dff_s slave
</cl>
208 <cl> 0.570 0.003 0.118 F
0.011 (S) t t inv
</cl>
209 <cl> ______________________________________________________________________________
</cl>
210 <cl> 0.570 0.570 (total)
</cl>
212 <cl> -
> Specification: Must be stable after
0.600 </cl>
215 <p>The setup time is calculated with the maximum set_output_delay value - maximum data path - which is
400ps. As the period is
1000ps,
216 data must arrive before time
1000 -
400 =
600ps. The setup slack is given by
600 -
570 =
30ps.
</p>
219 <section niv='
4'
><title>Hold Slack
</title>
220 <p>Latch to output hold slack report is described in the
<f>slack.rep
</f> file
</p>
222 <cl>Path (
5) : Slack of
0.635 </cl>
223 <cl> DATA VALID:
</cl>
225 <cl> Acc Delta R/F Cap[pf] Type Node_Name Net_Name Line
</cl>
226 <cl> _____________________________________________________________________________
</cl>
227 <cl> 0.000 0.000 0.200 F
0.016 (C) ck ck
</cl>
228 <cl> 0.239 0.239 0.258 R
0.046 (CK) ckn ckn inv
</cl>
229 <cl> 0.385 0.146 0.235 F
0.089 (L) dff_s dff_s slave
</cl>
230 <cl> 0.435 0.050 0.082 R
0.011 (S) t t inv
</cl>
231 <cl> _____________________________________________________________________________
</cl>
232 <cl> 0.435 0.435 (total)
</cl>
234 <cl> -
> Specification: Must be stable before -
0.200 </cl>
238 <p>The hold time is calculated with the minimum set_output_delay value - minimum data path - which is
200ps. The hold slack
239 is given by data path - clock path =
435 +
200 -
0 (the clock is ideal in the set_output_delay definition) =
635ps.
</p>