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