Mini LFR - Bitstream Generation » History » Version 16
Jean-Christophe Pellion, 06/12/2016 10:52 AM
1 | 15 | Jean-Christophe Pellion | {{>toc}} |
---|---|---|---|
2 | # Mini LFR - Bitstream Generation Procedure |
||
3 | 1 | Jean-Christophe Pellion | |
4 | 15 | Jean-Christophe Pellion | |
5 | |||
6 | |||
7 | |||
8 | 1 | Jean-Christophe Pellion | |
9 | ## 1 Generates scripts files ## |
||
10 | |||
11 | Clean the project directory, and run the makefile scripts command to generate all project's files. |
||
12 | |||
13 | ```bash |
||
14 | # clean the project and re-generates the scripts |
||
15 | $> make distclean scripts |
||
16 | ``` |
||
17 | |||
18 | The files MINI\_LFR\_top\_libero.prj should be created. |
||
19 | |||
20 | ## 2 Launch Libero IDE ## |
||
21 | |||
22 | Open the project MINI\_LFR\_top\_libero.prj with Libero IDE v9.1. |
||
23 | 3 | Jean-Christophe Pellion | !["Libero IDE v9.1"](Capture1.PNG) |
24 | 1 | Jean-Christophe Pellion | |
25 | ### 2.1 Synthesis ### |
||
26 | Synthesis tools should be configured to use **Synplify** version **2012-03A-SP1-2**. |
||
27 | |||
28 | 6 | Jean-Christophe Pellion | Launch the synthesis step (You must not add constraint file). |
29 | 1 | Jean-Christophe Pellion | In the synplify Pro windows, click on the Run button. |
30 | |||
31 | The project status obtained should be : |
||
32 | |||
33 | !["Synplify Project Status"](Capture2.PNG) |
||
34 | |||
35 | > You must verfify the block RAM's usage. The expected value is 100. |
||
36 | 6 | Jean-Christophe Pellion | > |
37 | 1 | Jean-Christophe Pellion | > If it's around 60/70, LEON3 processor is not mapped. In this case, you must clean your project and restart the generation procedure. |
38 | |||
39 | You can close Synplify and return to Libero. |
||
40 | |||
41 | |||
42 | If the Sythesis step is green like that : |
||
43 | |||
44 | 5 | Jean-Christophe Pellion | You must activate the option `Detect new files on disk automatically` in the project settings. |
45 | 1 | Jean-Christophe Pellion | |
46 | 6 | Jean-Christophe Pellion | ![](Capture3.PNG) |
47 | 1 | Jean-Christophe Pellion | |
48 | 6 | Jean-Christophe Pellion | ![](Capture4.PNG) |
49 | 1 | Jean-Christophe Pellion | ### 2.2 Place&Route ### |
50 | |||
51 | Launch the Place&Route step. You must add the constraint files : |
||
52 | |||
53 | 6 | Jean-Christophe Pellion | * `default.pdc` (Input/Output constraint) |
54 | 1 | Jean-Christophe Pellion | * `MINI-LFR_PlaceAndRoute.sdc` (Timing constraint) |
55 | |||
56 | 6 | Jean-Christophe Pellion | ![](Capture5.PNG) |
57 | 1 | Jean-Christophe Pellion | |
58 | |||
59 | #### 2.2.1 Compile Step #### |
||
60 | 6 | Jean-Christophe Pellion | ![](Capture6.PNG) |
61 | 1 | Jean-Christophe Pellion | |
62 | 6 | Jean-Christophe Pellion | Run the Compile step. |
63 | 1 | Jean-Christophe Pellion | |
64 | #### 2.2.2 Layout Step #### |
||
65 | 6 | Jean-Christophe Pellion | ![](Capture7.PNG) |
66 | 1 | Jean-Christophe Pellion | |
67 | Run the Layout step. |
||
68 | |||
69 | In the Layout options windows, select Advanced Layout Options : |
||
70 | |||
71 | 6 | Jean-Christophe Pellion | ![](Capture8.PNG) |
72 | 1 | Jean-Christophe Pellion | |
73 | 6 | Jean-Christophe Pellion | And checked those options : |
74 | 1 | Jean-Christophe Pellion | |
75 | 6 | Jean-Christophe Pellion | ![](Capture9.PNG) |
76 | 1 | Jean-Christophe Pellion | |
77 | Click Ok and wait... |
||
78 | |||
79 | 6 | Jean-Christophe Pellion | ![](Capture10.PNG) |
80 | 1 | Jean-Christophe Pellion | #### 2.2.3 Timing Analyser #### |
81 | |||
82 | Launch theTiming Analyser. |
||
83 | |||
84 | 6 | Jean-Christophe Pellion | ![](Capture11.PNG) |
85 | 1 | Jean-Christophe Pellion | |
86 | #### 2.2.3.a SpaceWire Output #### |
||
87 | |||
88 | You must verify the SpaceWire output timing for the Max and Min delay. |
||
89 | |||
90 | 6 | Jean-Christophe Pellion | ![](Capture12.PNG) |
91 | 1 | Jean-Christophe Pellion | |
92 | 6 | Jean-Christophe Pellion | ![](Capture19.PNG) |
93 | 1 | Jean-Christophe Pellion | |
94 | The ouput skew is equal to Ouput\_SOut timing - Ouput\_DOut timing. This output skew must be positive. |
||
95 | |||
96 | > In this exemple, |
||
97 | > |
||
98 | > SPW\_NOM skew max = 13.907 - 15.882 = -1.975 ns |
||
99 | > |
||
100 | > SPW\_NOM skew min = 6.367 - 7.317 = -0.950 ns |
||
101 | 6 | Jean-Christophe Pellion | > |
102 | 1 | Jean-Christophe Pellion | > SPW\_RED skew max = 17.937 - 13.510 = 4.427 ns |
103 | 6 | Jean-Christophe Pellion | > |
104 | 1 | Jean-Christophe Pellion | > SPW\_RED skew min = 8.304 - 6.175 = 2.129 ns |
105 | > |
||
106 | > The SPW\_NOM interface must be modified. In ChipPlanner, we will move element in the SPW\_NOM path to have a positive skew in min and max delay. |
||
107 | 6 | Jean-Christophe Pellion | > ![](Capture13.PNG) |
108 | > ![](Capture14.PNG) |
||
109 | 1 | Jean-Christophe Pellion | |
110 | #### 2.2.3.b SpaceWire Input #### |
||
111 | |||
112 | You must also verify the SpaceWire input timing. For that, you must add a new set for SPW_INPUT: |
||
113 | |||
114 | 6 | Jean-Christophe Pellion | ![](Capture15.PNG) |
115 | 1 | Jean-Christophe Pellion | |
116 | and configure it like that : |
||
117 | you |
||
118 | 6 | Jean-Christophe Pellion | ![](Capture16.PNG) |
119 | 1 | Jean-Christophe Pellion | |
120 | You obtain those timing for min and max delay. |
||
121 | |||
122 | 6 | Jean-Christophe Pellion | ![](Capture17.PNG) |
123 | 1 | Jean-Christophe Pellion | |
124 | 6 | Jean-Christophe Pellion | ![](Capture18.PNG) |
125 | 1 | Jean-Christophe Pellion | |
126 | You must also add a new set for the FF setup time : |
||
127 | |||
128 | 6 | Jean-Christophe Pellion | ![](Capture20.PNG) |
129 | 1 | Jean-Christophe Pellion | |
130 | 6 | Jean-Christophe Pellion | ![](Capture21.PNG) |
131 | |||
132 | 1 | Jean-Christophe Pellion | In resume, for the input SPW_NOM interface : |
133 | |||
134 | 7 | Jean-Christophe Pellion | <table border=1 width=40% align=center> |
135 | <thead> |
||
136 | |||
137 | <tr> |
||
138 | <th colspan=2> Signal Type </th> <th> max delay</th> <th>min delay</th> |
||
139 | </tr> |
||
140 | </thead> |
||
141 | 1 | Jean-Christophe Pellion | <thead> |
142 | 7 | Jean-Christophe Pellion | <tr> |
143 | 8 | Jean-Christophe Pellion | <th colspan=4 align="center" bgcolor="#C0C0C0"> SPW_NOM_IN </th> |
144 | 7 | Jean-Christophe Pellion | </tr> |
145 | </thead> |
||
146 | <tbody> |
||
147 | <tr> <td rowspan=4>r_FF</td> <td>Strobe to CLK</td> <td>7.230 ns</td> <td>3.497 ns</td> </tr> |
||
148 | <tr> <td>Data to CLK</td> <td>8.046 ns</td> <td>3.807 ns</td> </tr> |
||
149 | <tr> <td>Data to D </td> <td>1.700 ns</td> <td>0.692 ns</td> </tr> |
||
150 | <tr> <td>D to Q </td> <td>0.888 ns</td> <td>0.413 ns</td> </tr> |
||
151 | |||
152 | <tr> <td rowspan=4>nr_FF</td> <td>Strobe to CLK</td> <td>7.315 ns</td> <td>3.543 ns</td> </tr> |
||
153 | <tr> <td>Data to CLK</td> <td>8.131 ns</td> <td>3.853 ns</td> </tr> |
||
154 | 1 | Jean-Christophe Pellion | <tr> <td>Data to D </td> <td>1.767 ns</td> <td>0.724 ns</td> </tr> |
155 | <tr> <td>D to Q </td> <td>0.888 ns</td> <td>0.413 ns</td> </tr> |
||
156 | </tbody> |
||
157 | 8 | Jean-Christophe Pellion | <thead> |
158 | <tr> |
||
159 | <th colspan=4 align="center" bgcolor="#C0C0C0"> SPW_RED_IN </th> |
||
160 | </tr> |
||
161 | </thead> |
||
162 | <tbody> |
||
163 | <tr> <td rowspan=4>r_FF</td> <td>Strobe to CLK</td> <td>11.601 ns</td> <td>6.217 ns</td> </tr> |
||
164 | <tr> <td>Data to CLK</td> <td>12.845 ns</td> <td>5.488 ns</td> </tr> |
||
165 | <tr> <td>Data to D </td> <td>2.799 ns</td> <td>1.246 ns</td> </tr> |
||
166 | <tr> <td>D to Q </td> <td>0.888 ns</td> <td>0.413 ns</td> </tr> |
||
167 | |||
168 | <tr> <td rowspan=4>nr_FF</td> <td>Strobe to CLK</td> <td>11.628 ns</td> <td>6.236 ns</td> </tr> |
||
169 | <tr> <td>Data to CLK</td> <td>12.872 ns</td> <td>5.507 ns</td> </tr> |
||
170 | <tr> <td>Data to D </td> <td>2.798 ns</td> <td>1.246 ns</td> </tr> |
||
171 | <tr> <td>D to Q </td> <td>0.888 ns</td> <td>0.413 ns</td> </tr> |
||
172 | </tbody> |
||
173 | 1 | Jean-Christophe Pellion | </table> |
174 | |||
175 | 8 | Jean-Christophe Pellion | |
176 | 16 | Jean-Christophe Pellion | The input skew is equal to : min(Time from strobe to CLK; Time from data to CLK) - Time Data to FF - FF Setup Time. This input skew must be positive. |
177 | 8 | Jean-Christophe Pellion | |
178 | <table border=1 width=40% align=center> |
||
179 | <thead> |
||
180 | |||
181 | <tr> |
||
182 | <th> skew </th> <th colspan=2>max delay</th> <th colspan=2>min delay</th> |
||
183 | </tr> |
||
184 | </thead> |
||
185 | <thead> |
||
186 | <tr> |
||
187 | <th colspan=5 align="center" bgcolor="#C0C0C0"> SPW_NOM_IN </th> |
||
188 | </tr> |
||
189 | </thead> |
||
190 | <tbody> |
||
191 | <tr> <td>skew r_FF</td> <td>4.642 ns</td> <td bgcolor="#00FF00">OK</td> <td>2.392 ns</td> <td bgcolor="#00FF00">OK</td> </tr> |
||
192 | <tr> <td>skew nr_FF</td> <td>4.660 ns</td> <td bgcolor="#00FF00">OK</td> <td>2.406 ns</td> <td bgcolor="#00FF00">OK</td> </tr> |
||
193 | </tbody> |
||
194 | <thead> |
||
195 | <tr> |
||
196 | <th colspan=5 align="center" bgcolor="#C0C0C0"> SPW_RED_IN </th> |
||
197 | </tr> |
||
198 | </thead> |
||
199 | <tbody> |
||
200 | <tr> <td>skew r_FF</td> <td>7.914 ns</td> <td bgcolor="#00FF00">OK</td> <td>3.829 ns</td> <td bgcolor="#00FF00">OK</td> </tr> |
||
201 | <tr> <td>skew nr_FF</td> <td>7.942 ns</td> <td bgcolor="#00FF00">OK</td> <td>3.848 ns</td> <td bgcolor="#00FF00">OK</td> </tr> |
||
202 | </tbody> |
||
203 | </table> |
||
204 | 9 | Jean-Christophe Pellion | |
205 | In our case, all SPW input skew are positive. |
||
206 | If MIN or MAX skew delay are not positive, you must launch the ChipPlanner tool to move r_FF and nr_FF closest to the CLK source and move XOR gate far away from input pads (SIN, DIN), nrFF:D and r_FF:D. |
||
207 | 10 | Jean-Christophe Pellion | |
208 | You can close the Timing Analyser. |
||
209 | |||
210 | #### 2.2.4 Chip Planner #### |
||
211 | |||
212 | Launch ChipPlanner to move element in the netlist and try to fit the timing requirements (skew delay for the SPW\_NOM Output interface). |
||
213 | |||
214 | ![](Capture22.PNG) |
||
215 | |||
216 | In our case, we want to increase SPW\_NOM\ output skew. For that, we must increase Ouput\_SOut timing and reduce the Ouput\_DOut timing. |
||
217 | |||
218 | 11 | Jean-Christophe Pellion | To reduce the output dout delay, we will select the last FF before the SPW\_NOM\_OUTPUT : |
219 | 10 | Jean-Christophe Pellion | |
220 | 1 | Jean-Christophe Pellion | ![](Capture23.PNG) |
221 | 11 | Jean-Christophe Pellion | |
222 | and move closest to the ouput PAD : |
||
223 | 10 | Jean-Christophe Pellion | |
224 | ![](Capture24.PNG) |
||
225 | 12 | Jean-Christophe Pellion | |
226 | To increase the output SOut delay, we will select the last FF before the SPW\_NOM\_OUTPUT : |
||
227 | |||
228 | ![](Capture25.PNG) |
||
229 | |||
230 | and move far away from the ouput PAD : |
||
231 | |||
232 | ![](Capture26.PNG) |
||
233 | |||
234 | Now, you can clicked on `Commit and Check` button and close ChipPlanner. |
||
235 | |||
236 | You must relaunch the Layout step with those selected options : |
||
237 | |||
238 | ![](Capture27.PNG) |
||
239 | |||
240 | And finally, checked the timing update with the Timing Analyser. |
||
241 | |||
242 | ### 2.2 Bitstream generation ### |
||
243 | |||
244 | Click on the Programming File tool. |
||
245 | |||
246 | 13 | Jean-Christophe Pellion | ![](Capture28.PNG) |
247 | 12 | Jean-Christophe Pellion | |
248 | It's done ! |
||
249 | 14 | Jean-Christophe Pellion | |
250 | ------- |