]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/PPC405_FPU_Xilinx_Virtex4_GCC/__xps/.dswkshop/MdtSvgBLKD_Calculations.xsl
Prepare for V9.0.0 release.
[freertos] / FreeRTOS / Demo / PPC405_FPU_Xilinx_Virtex4_GCC / __xps / .dswkshop / MdtSvgBLKD_Calculations.xsl
1 <?xml version="1.0" standalone="no"?>
2
3 <xsl:stylesheet version="1.0"
4            xmlns:svg="http://www.w3.org/2000/svg"
5            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
6            xmlns:exsl="http://exslt.org/common"
7            xmlns:xlink="http://www.w3.org/1999/xlink">
8                 
9 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"
10                doctype-public="-//W3C//DTD SVG 1.0//EN"
11                    doctype-system="http://www.w3.org/TR/SVG/DTD/svg10.dtd"/>
12         
13 <xsl:template name="_calc_Proc_Height">
14         <xsl:param name="iProcInst"  select="_processor_"/>
15         
16         <xsl:variable name="tot_bifs_h_">
17                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $iProcInst)]/@BIFS_H)">0</xsl:if>
18                 
19                 <xsl:if test="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $iProcInst)]/@BIFS_H">
20                         <xsl:variable name="bifs_h_" select="(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $iProcInst)]/@BIFS_H)"/>
21                         <xsl:value-of select="(($BLKD_BIF_H + $BLKD_BIF_GAP) * $bifs_h_)"/>     
22                 </xsl:if>
23         </xsl:variable> 
24         
25         <xsl:value-of select="(($BLKD_MOD_LANE_H * 2) + $tot_bifs_h_ + ($BLKD_MOD_LABEL_H + $BLKD_BIF_GAP))"/>  
26 </xsl:template>
27
28 <xsl:template name="_calc_Max_Proc_Height">
29
30         <!-- Store the heights in a variable -->        
31         <xsl:variable name="proc_heights_">
32         
33                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE)">
34                         <PROC HEIGHT="0"/>
35                 </xsl:if>
36                 
37                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE">
38                         <xsl:variable name="procInst_" select="@INSTANCE"/> 
39                         <xsl:variable name="proc_height_">
40                                 <xsl:call-template name="_calc_Proc_Height">    
41                                         <xsl:with-param name="iProcInst" select="$procInst_"/>
42                                 </xsl:call-template>    
43                         </xsl:variable>
44                         
45 <!--                    
46                         <xsl:message>Found Proc height as <xsl:value-of select="$proc_height_"/></xsl:message>
47 -->                     
48                         <PROC HEIGHT="{$proc_height_}"/>
49                 </xsl:for-each>
50         </xsl:variable>
51         
52         <!-- Return the max of them --> 
53 <!--    
54         <xsl:message>Found Proc ax as <xsl:value-of select="math:max(exsl:node-set($proc_heights_)/PROC/@HEIGHT)"/></xsl:message>
55 -->     
56
57         <xsl:value-of select="math:max(exsl:node-set($proc_heights_)/PROC/@HEIGHT)"/>
58 </xsl:template>
59
60
61 <xsl:template name="_calc_Proc_MemoryUnits_Height">
62         <xsl:param name="iProcInst"  select="_processor_"/>
63         
64         <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and (@MODCLASS = 'MEMORY_UNIT'))])">0</xsl:if>
65         
66         <xsl:if test="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and (@MODCLASS='MEMORY_UNIT'))]">
67                 
68         <xsl:variable name="peri_gap_">
69                 <xsl:choose>
70                         <xsl:when test="not(@CSTACK_INDEX)">
71                                 <xsl:value-of select="$BLKD_BIF_H"/>
72                         </xsl:when>
73                         <xsl:otherwise>0</xsl:otherwise>
74                 </xsl:choose>   
75         </xsl:variable> 
76                         
77                 
78                 <!-- Store the all memory unit heights in a variable -->
79                 <xsl:variable name="memU_heights_">
80                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and (@MODCLASS='MEMORY_UNIT'))]">
81 <!--                            
82                                 <xsl:variable name="unitId_" select="@PSTACK_MODS_Y"/>
83 -->                             
84                                 <xsl:variable name="unitHeight_">
85                                         <xsl:call-template name="_calc_MemoryUnit_Height">      
86                                                 <xsl:with-param name="iShapeId" select="@SHAPE_ID"/>
87                                         </xsl:call-template>    
88                                 </xsl:variable>
89                                 
90                                 <MEM_UNIT HEIGHT="{$unitHeight_ + $peri_gap_}"/>
91                         </xsl:for-each>
92                 </xsl:variable>
93                 
94                 <xsl:value-of select="sum(exsl:node-set($memU_heights_)/MEM_UNIT/@HEIGHT)"/>
95         </xsl:if>
96 </xsl:template>
97         
98
99 <xsl:template name="_calc_Proc_Peripherals_Height">
100         <xsl:param name="iProcInst"  select="_processor_"/>
101         
102         <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and not(@MODCLASS = 'MEMORY_UNIT'))])">0</xsl:if>
103         
104         <xsl:if test="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and not(@MODCLASS='MEMORY_UNIT'))]">
105         
106                 <xsl:variable name="peri_gap_">
107                         <xsl:if test="@CSTACK_INDEX">
108                                 <xsl:value-of select="$BLKD_BIF_H"/>
109                         </xsl:if>
110                         <xsl:if test="not(@IS_CSTACK)">0</xsl:if>
111                 </xsl:variable>
112         
113                 <!-- Store the all peripheral heights in a variable -->
114                 <xsl:variable name="peri_heights_">
115                         
116                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and not(@MODCLASS='MEMORY_UNIT'))]">
117                                 <xsl:for-each select="MODULE">
118 <!--                                    
119                                         <xsl:message><xsl:value-of select="@INSTANCE"/></xsl:message>           
120 -->                                     
121                                         <xsl:variable name="peri_height_">
122                                                 <xsl:call-template name="_calc_PeriShape_Height">       
123                                                         <xsl:with-param name="iShapeInst" select="@INSTANCE"/>
124                                                 </xsl:call-template>    
125                                         </xsl:variable>
126                                         <PERI HEIGHT="{$peri_height_ + $peri_gap_}"/>
127                                 </xsl:for-each>         
128                         </xsl:for-each>
129                 </xsl:variable>
130                 
131                 <xsl:value-of select="sum(exsl:node-set($peri_heights_)/PERI/@HEIGHT)"/>
132         </xsl:if>
133 </xsl:template>
134         
135         
136 <xsl:template name="_calc_Space_AbvSbs_Height">
137         <xsl:param name="iStackToEast"  select="'NONE'"/>
138         <xsl:param name="iStackToWest"  select="'NONE'"/>
139         
140         
141         <xsl:variable name = "stackAbvSbs_West_H_">
142                 <xsl:choose>
143                         <xsl:when test="(($iStackToEast = '0')   and     ($iStackToWest = 'NONE'))">0</xsl:when>
144                         <xsl:when test="(($iStackToEast = 'NONE') and not($iStackToWest = 'NONE'))">
145                                 <xsl:call-template name="_calc_Stack_AbvSbs_Height">
146                                         <xsl:with-param name="iStackIdx"  select="$iStackToWest"/>
147                                 </xsl:call-template>
148                         </xsl:when>
149                         <xsl:when test="(not($iStackToEast = '0') and ($iStackToWest = 'NONE'))">
150                                 <xsl:call-template name="_calc_Stack_AbvSbs_Height">
151                                         <xsl:with-param name="iStackIdx"  select="($iStackToEast - 1)"/>
152                                 </xsl:call-template>
153                         </xsl:when>
154                         <xsl:otherwise>0</xsl:otherwise>
155                 </xsl:choose>
156         </xsl:variable>
157         
158         <xsl:variable name = "stackAbvSbs_East_H_">
159                 <xsl:call-template name="_calc_Stack_AbvSbs_Height">
160                         <xsl:with-param name="iStackIdx"  select="$iStackToEast"/>
161                 </xsl:call-template>
162         </xsl:variable>
163         
164         <xsl:variable name="stackAbvSbs_heights_">
165                 <STACK HEIGHT="{$stackAbvSbs_East_H_}"/>
166                 <STACK HEIGHT="{$stackAbvSbs_West_H_}"/>
167         </xsl:variable>
168         
169         <xsl:value-of select="math:max(exsl:node-set($stackAbvSbs_heights_)/STACK/@HEIGHT)"/>
170 </xsl:template>
171
172         
173 <xsl:template name="_calc_Space_BlwSbs_Height">
174         <xsl:param name="iStackToEast"  select="'NONE'"/>
175         <xsl:param name="iStackToWest"  select="'NONE'"/>
176                 
177         <xsl:variable name = "stackBlwSbs_West_H_">
178                 <xsl:choose>
179                         <xsl:when test="(($iStackToEast = '0')    and    ($iStackToWest = 'NONE'))">0</xsl:when>
180                         <xsl:when test="(($iStackToEast = 'NONE') and not($iStackToWest = 'NONE'))">
181                                 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
182                                         <xsl:with-param name="iStackIdx"  select="$iStackToWest"/>
183                                 </xsl:call-template>
184                         </xsl:when>
185                         <xsl:when test="(not($iStackToEast = '0') and    ($iStackToWest = 'NONE'))">
186                                 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
187                                         <xsl:with-param name="iStackIdx"  select="($iStackToEast - 1)"/>
188                                 </xsl:call-template>
189                         </xsl:when>
190                 </xsl:choose>
191         </xsl:variable>
192         
193         
194         <xsl:variable name = "stackBlwSbs_East_H_">
195                 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
196                         <xsl:with-param name="iStackIdx"  select="$iStackToEast"/>
197                 </xsl:call-template>
198         </xsl:variable>
199         
200         <xsl:variable name="stackBlwSbs_heights_">
201                 <STACK HEIGHT="{$stackBlwSbs_East_H_}"/>
202                 <STACK HEIGHT="{$stackBlwSbs_West_H_}"/>
203         </xsl:variable>
204         
205         <xsl:value-of select="math:max(exsl:node-set($stackBlwSbs_heights_)/STACK/@HEIGHT)"/>
206 </xsl:template>
207         
208
209         
210 <xsl:template name="_calc_Stack_AbvSbs_Height">
211         <xsl:param name="iStackIdx"  select="100"/>
212 <!--    
213         <xsl:message>^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^</xsl:message>
214 -->     
215         
216         <xsl:if test="(not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@IS_ABVSBS))]) and
217                                    not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@STACK_HORIZ_INDEX = $iStackIdx)]))"><xsl:value-of select="$BLKD_PROC2SBS_GAP"/></xsl:if>
218         
219         <xsl:if test="((/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@IS_ABVSBS))]) or
220                                    (/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[      (@STACK_HORIZ_INDEX = $iStackIdx)]))">
221                 
222 <!--                    
223                 <xsl:variable name="peri_gap_">
224                         <xsl:value-of select="$BLKD_BIF_H"/>
225                         <xsl:choose>
226                                 <xsl:when test="(@SHAPE_VERTI_INDEX)">
227                                 </xsl:when>
228                                 <xsl:otherwise>0</xsl:otherwise>
229                         </xsl:choose>   
230                 </xsl:variable> 
231 -->                     
232                         
233 <!--            
234                 <xsl:message>The gap is <xsl:value-of select="$peri_gap_"/></xsl:message>
235                 <xsl:message>The gap is <xsl:value-of select="$peri_gap_"/></xsl:message>
236                 <xsl:message>================================</xsl:message>
237                 <xsl:message>================================</xsl:message>
238                 <xsl:message>This is above <xsl:value-of select="@INSTANCE"/></xsl:message>
239                 <xsl:message><xsl:value-of select="@INSTANCE"/> : <xsl:value-of select="$peri_height_"/></xsl:message>
240 -->     
241         
242         
243                 <!-- Store the all peripheral heights in a variable -->
244                 <xsl:variable name="peri_heights_">
245                         
246                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and not(@MODCLASS = 'MEMORY_UNIT') and (@IS_ABVSBS))]">
247                                 <xsl:for-each select="MODULE">
248 <!--                                    
249                                         <xsl:message>This is above <xsl:value-of select="@INSTANCE"/></xsl:message>
250 -->                                     
251                                         
252                                         <xsl:variable name="peri_height_">
253 <!--                                            
254                                                 <xsl:call-template name="_calc_Shape_Height">   
255                                                         <xsl:with-param name="shapeId" select="@SHAPE_ID"/>
256                                                 </xsl:call-template>    
257 -->      
258         
259                                                 <xsl:call-template name="_calc_PeriShape_Height">       
260                                                         <xsl:with-param name="iShapeInst" select="@INSTANCE"/>
261                                                 </xsl:call-template>    
262                                         </xsl:variable>
263                                         
264                                         <PERI HEIGHT="{$peri_height_ + $BLKD_BIF_H}"/>
265                                 </xsl:for-each>
266                         </xsl:for-each>
267                         
268                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@MODCLASS = 'MEMORY_UNIT') and (@IS_ABVSBS))]">
269                         
270                                 <xsl:variable name="memu_height_">
271                                         <xsl:call-template name="_calc_MemoryUnit_Height">      
272                                                 <xsl:with-param name="iShapeId" select="@SHAPE_ID"/>
273                                         </xsl:call-template>    
274                                 </xsl:variable>
275                         
276 <!--                            
277                                 <xsl:message>Mem_Unit : <xsl:value-of select="@SHAPE_ID"/> : <xsl:value-of select="$memu_height_ + $peri_gap_"/></xsl:message>
278 -->                             
279                                 <PERI HEIGHT="{$memu_height_ + $BLKD_BIF_H}"/>
280                         
281                         </xsl:for-each>
282                         
283                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@IS_ABVSBS))]">
284                                         
285                                 <xsl:variable name="proc_height_">
286                                         <xsl:call-template name="_calc_PeriShape_Height">       
287                                                 <xsl:with-param name="iShapeInst" select="@INSTANCE"/>
288                                         </xsl:call-template>    
289                                 </xsl:variable>
290                                 
291 <!--                            
292                 <xsl:message>===================================</xsl:message>
293                 <xsl:message>Processor : <xsl:value-of select="@INSTANCE"/> : <xsl:value-of select="$peri_height_ + $peri_gap_"/></xsl:message>
294                                 <PERI HEIGHT="{$proc_height_ + $BLKD_PROC2SBS_GAP }"/>
295 -->                                     
296                                 <PERI HEIGHT="{$proc_height_ + $BLKD_BIF_H}"/>
297                                 
298                         </xsl:for-each>
299                 
300                 </xsl:variable>
301                 
302 <!--            
303         <xsl:message><xsl:value-of select="@INSTANCE"/> : <xsl:value-of select="$peri_height_ + $peri_gap_"/></xsl:message>
304         <xsl:message>================================</xsl:message>
305 -->
306                 
307 <!--            
308         <xsl:message>^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^</xsl:message>
309 -->             
310                 <xsl:value-of select="sum(exsl:node-set($peri_heights_)/PERI/@HEIGHT)"/>
311         </xsl:if>
312         
313 </xsl:template>
314         
315 <xsl:template name="_calc_Stack_BlwSbs_Height">
316         <xsl:param name="iStackIdx"  select="100"/>
317         
318                 <!-- Store the all peripheral heights in a variable -->
319                 <xsl:variable name="stack_heights_">
320                         
321                         <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@IS_BLWSBS))])">
322                                 <STACKSHAPE HEIGHT="0"/>
323                         </xsl:if>
324                         
325                         <xsl:if test="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@IS_BLWSBS))]">
326         
327                                 <xsl:variable name="peri_gap_">
328                                         <xsl:choose>
329                                                 <xsl:when test="(@SHAPE_VERTI_INDEX)">
330                                                         <xsl:value-of select="$BLKD_BIF_H"/>
331                                                 </xsl:when>
332                                                 <xsl:otherwise>0</xsl:otherwise>
333                                         </xsl:choose>   
334                                 </xsl:variable> 
335                                 
336                                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and not(@MODCLASS = 'MEMORY_UNIT') and (@IS_BLWSBS))]">
337                                         <xsl:for-each select="MODULE">
338 <!--                                    
339                                         <xsl:message>This is below <xsl:value-of select="@INSTANCE"/></xsl:message>
340 -->     
341                                                 <xsl:variable name="peri_height_">
342                                                         <xsl:call-template name="_calc_PeriShape_Height">       
343                                                                 <xsl:with-param name="iShapeInst" select="@INSTANCE"/>
344                                                         </xsl:call-template>    
345                                                 </xsl:variable>
346                                                 
347                                                 <STACKSHAPE HEIGHT="{$peri_height_ + $peri_gap_}"/>
348                                         </xsl:for-each>
349                                 </xsl:for-each>
350                 
351                                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@MODCLASS = 'MEMORY_UNIT') and (@IS_BLWSBS))]">
352                         
353                                         <xsl:variable name="memu_height_">
354                                                 <xsl:call-template name="_calc_MemoryUnit_Height">      
355                                                         <xsl:with-param name="iShapeId" select="@SHAPE_ID"/>
356                                                 </xsl:call-template>    
357                                         </xsl:variable>
358                         
359                                         <STACKSHAPE HEIGHT="{$memu_height_ + $peri_gap_}"/>
360                                 
361 <!--                            
362                                 <xsl:message>Mem_Unit : <xsl:value-of select="@SHAPE_ID"/> : <xsl:value-of select="$memu_height_ + $peri_gap_"/></xsl:message>
363 -->     
364                         
365                         </xsl:for-each>
366                 </xsl:if>
367                         
368                 <xsl:variable name="sbsBuckets_H_">
369                         <xsl:call-template name="_calc_Stack_SbsBuckets_Height">
370                                 <xsl:with-param name="iStackIdx" select="$iStackIdx"/>
371                         </xsl:call-template>    
372                 </xsl:variable>
373                         
374                         <STACKSHAPE HEIGHT="{$sbsBuckets_H_}"/>
375 <!--                    
376                         <xsl:message>Sbs Bucket H : <xsl:value-of select="$sbsBuckets_H_"/></xsl:message>
377 -->
378                 </xsl:variable>
379                 
380 <!--            
381                 <xsl:message>vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv</xsl:message>
382 -->             
383                 <xsl:value-of select="sum(exsl:node-set($stack_heights_)/STACKSHAPE/@HEIGHT)"/>
384         
385 </xsl:template>
386         
387
388 <xsl:template name="_calc_Stack_SbsBuckets_Height">
389         <xsl:param name="iStackIdx"  select="1000"/>
390         
391         <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)])">0</xsl:if>
392         
393         <xsl:if test="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)]">
394         
395                 <!-- Store the all buckets heights in a variable -->
396                 <xsl:variable name="bkt_heights_">
397                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)]">
398                 
399                                 <xsl:variable name="bkt_height_">
400                                         <xsl:call-template name="_calc_SbsBucket_Height">       
401                                                 <xsl:with-param name="iBucketId" select="@BUSINDEX"/>
402                                         </xsl:call-template>    
403                                 </xsl:variable>
404 <!--                            
405                                 <xsl:message>Found shared buckets height as <xsl:value-of select="$bkt_height_"/></xsl:message>
406 -->                             
407                                 <BKT HEIGHT="{$bkt_height_ + $BLKD_BIF_H}"/>
408                         </xsl:for-each>
409                 </xsl:variable>
410                 
411                 <xsl:value-of select="sum(exsl:node-set($bkt_heights_)/BKT/@HEIGHT)"/>
412         </xsl:if>
413 </xsl:template>
414
415         
416 <xsl:template name="_calc_Max_Stack_BlwSbs_Height">
417
418         <!-- Store the heights in a variable -->        
419         <xsl:variable name="blwSbs_heights_">
420                 
421                 <!-- Default, in case there are no modules or ports -->         
422                 <BLW HEIGHT="0"/>
423                 
424                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST &lt; /EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH)]">
425         
426 <!--                    
427                         <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
428 -->     
429                         
430                         <xsl:variable name="stack_height_">
431                                 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
432                                         <xsl:with-param name="iStackIdx"  select="@EAST"/>
433                                 </xsl:call-template>
434                         </xsl:variable>
435                         
436                         
437                         <BLW HEIGHT="{$stack_height_}"/>
438                         
439                 </xsl:for-each>
440                 
441                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@WEST = (/EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH -1))]">
442                         
443 <!--                    
444                         <xsl:message>Last stack of index <xsl:value-of select="@WEST"/></xsl:message>
445 -->                     
446                         
447                         <xsl:variable name="stack_height_">
448                                 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
449                                         <xsl:with-param name="iStackIdx"  select="@WEST"/>
450                                 </xsl:call-template>
451                         </xsl:variable>
452                         
453                         
454                         <BLW HEIGHT="{$stack_height_}"/>
455                         
456                 </xsl:for-each>
457                 
458                 
459         </xsl:variable>
460         
461 <!--    
462         <xsl:message>Found Blw Sbs max as <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/></xsl:message>
463 -->     
464         <!-- Return the max of them --> 
465         <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/>
466 </xsl:template>
467         
468         
469 <xsl:template name="_calc_Max_Stack_AbvSbs_Height">
470
471         <!-- Store the heights in a variable -->        
472         <xsl:variable name="abvSbs_heights_">
473                 
474                 <!-- Default, in case there are no modules or ports -->         
475                 <ABV HEIGHT="0"/>
476                 
477                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST &lt; /EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH)]">
478                         
479 <!--                    
480                         <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
481 -->     
482                         
483                         <xsl:variable name="stack_height_">
484                                 <xsl:call-template name="_calc_Stack_AbvSbs_Height">
485                                         <xsl:with-param name="iStackIdx"  select="@EAST"/>
486                                 </xsl:call-template>
487                         </xsl:variable>
488                         
489 <!--                    
490                         <xsl:message>Found stack of width <xsl:value-of select="$stack_width_"/></xsl:message>
491                         <xsl:message>==============================</xsl:message>
492 -->                     
493                         
494                         <ABV HEIGHT="{$stack_height_}"/>
495                         
496                 </xsl:for-each>
497                 
498                 
499         </xsl:variable>
500         
501 <!--    
502         <xsl:message>Found Blw Sbs max as <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/></xsl:message>
503 -->     
504         <!-- Return the max of them --> 
505         <xsl:value-of select="math:max(exsl:node-set($abvSbs_heights_)/ABV/@HEIGHT)"/>
506 </xsl:template>
507         
508         
509 <xsl:template name="_calc_Max_Proc_PerisAbvSbs_Height">
510         <xsl:param name="iProcInst"  select="_processor_"/>
511         
512         <!-- Store the heights in a variable -->        
513         <xsl:variable name="abvSbs_heights_">
514                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE)">
515                         <ABV HEIGHT="0"/>
516                 </xsl:if>
517                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE">
518                         <xsl:variable name="procInst_" select="@INSTANCE"/> 
519 <!--                    
520                         <xsl:message>Found Blw Sbs height as <xsl:value-of select="$blwSbs_"/></xsl:message>
521                         <ABV HEIGHT="{$pAbvSbs_}"/>
522 -->                     
523                         
524                         <xsl:variable name="pAbvSbs_">
525                                 <xsl:call-template name="_calc_Proc_PerisAbvSbs_Height">        
526                                         <xsl:with-param name="iProcInst" select="$iProcInst_"/>
527                                 </xsl:call-template>    
528                         </xsl:variable>
529                         
530                         <xsl:variable name="memUs_">
531                                 <xsl:call-template name="_calc_Proc_MemoryUnits_Height">        
532                                         <xsl:with-param name="iProcInst" select="$iProcInst_"/>
533                                 </xsl:call-template>    
534                         </xsl:variable>
535                         
536 <!--                    
537                         <xsl:message>Found Peris Above height as <xsl:value-of select="$pAbvSbs_"/></xsl:message>
538                         <xsl:message>Found MemUs Above height as <xsl:value-of select="$memUs_"/></xsl:message>
539                         <xsl:message>Found PAbv Above height as <xsl:value-of select="($pAbvSbs_ + $memUs_)"/></xsl:message>
540 -->                     
541                         <ABV HEIGHT="{$pAbvSbs_ + $memUs_}"/>
542                 </xsl:for-each>
543         </xsl:variable>
544         
545 <!--    
546         <xsl:message>Found Abv Sbs max as <xsl:value-of select="math:max(exsl:node-set($abvSbs_heights_)/ABV/@HEIGHT)"/></xsl:message>
547 -->     
548         
549         <!-- Return the max of them --> 
550         <xsl:value-of select="math:max(exsl:node-set($abvSbs_heights_)/ABV/@HEIGHT)"/>
551 </xsl:template>
552         
553
554 <xsl:template name="_calc_MultiProc_Stack_Height">
555         <xsl:param name="iMPStack_Blkd_X"  select="100"/>
556         
557                 <xsl:variable name="mpStk_ShpHeights_">
558                         <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@HAS_MULTIPROCCONNS) and (@PSTACK_BLKD_X = $iMPStack_Blkd_X))])">
559                                 <MPSHAPE HEIGHT="0"/>
560                         </xsl:if>
561                         
562                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@HAS_MULTIPROCCONNS) and (@PSTACK_BLKD_X = $iMPStack_Blkd_X))]">
563                                 <xsl:variable name="shpClass_" select="@MODCLASS"/> 
564                                 <xsl:variable name="shpHeight_">
565                                         <xsl:choose>
566                                                 <xsl:when test="$shpClass_ = 'PERIPHERAL'">
567 <!--                                                    
568                                                         <xsl:message>Found Multi Proc Peripheral</xsl:message> 
569 -->     
570                                                         <xsl:call-template name="_calc_PeriShape_Height">       
571                                                                 <xsl:with-param name="iShapeInst" select="MODULE/@INSTANCE"/>
572                                                         </xsl:call-template>    
573                                                 </xsl:when>
574                                                 <xsl:when test="$shpClass_ = 'MEMORY_UNIT'">
575 <!--                                                    
576                                                         <xsl:message>Found Multi Proc Memory Unit</xsl:message> 
577 -->     
578                                                         <xsl:call-template name="_calc_MemoryUnit_Height">      
579                                                                 <xsl:with-param name="iShapeIndex"  select="@CSHAPE_INDEX"/>
580                                                         </xsl:call-template>    
581                                                 </xsl:when>
582                                                 <xsl:otherwise>0</xsl:otherwise>
583                                         </xsl:choose>
584                                 </xsl:variable>
585                                 
586 <!--                            
587                                 <xsl:message>Found <xsl:value-of select="$shpHeight_"/></xsl:message>
588 -->                             
589                                 
590                                 <MPSHAPE HEIGHT="{$shpHeight_}"/>
591                         </xsl:for-each>
592         </xsl:variable>
593         
594 <!--    
595         <xsl:message>Found stack of height <xsl:value-of select="sum(exsl:node-set($mpStk_ShpHeights_)/MPSHAPE/@HEIGHT)"/></xsl:message>
596 -->     
597         
598         <xsl:value-of select="sum(exsl:node-set($mpStk_ShpHeights_)/MPSHAPE/@HEIGHT)"/>
599 </xsl:template>
600
601 <xsl:template name="_calc_Max_MultiProc_Stack_Height">
602         
603         <!-- Store the heights in a variable -->        
604         
605         <xsl:variable name="mpStks_Heights_">
606                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE)">
607                         <MPSTK HEIGHT="0"/>
608                 </xsl:if>
609                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@PSTACK_BLKD_X)]">
610                         <xsl:variable name="mpstack_height_">
611                                 <xsl:call-template name="_calc_MultiProc_Stack_Height">
612                                         <xsl:with-param name="iMPStack_Blkd_X" select="(@PSTACK_BLKD_X + 1)"/>
613                                 </xsl:call-template>
614                         </xsl:variable>
615                         
616 <!--                    
617                         <xsl:message>Found <xsl:value-of select="$mpstack_height_"/></xsl:message>
618 -->                     
619                         <MPSTK HEIGHT="{$mpstack_height_}"/>
620                 </xsl:for-each>
621                 
622         </xsl:variable>
623
624                 <!-- Return the max of them --> 
625         <xsl:value-of select="math:max(exsl:node-set($mpStks_Heights_)/MPSTK/@HEIGHT)"/>
626         
627 </xsl:template>
628
629
630
631 <xsl:template name="_calc_Stack_Shape_Y">
632         
633         <xsl:param name="iHorizIdx"  select="100"/>
634         <xsl:param name="iVertiIdx"  select="100"/>
635         
636         
637 <!--    
638         <xsl:message>Y at H index <xsl:value-of select="$iHorizIdx"/></xsl:message>
639         <xsl:message>Y at V index <xsl:value-of select="$iVertiIdx"/></xsl:message>
640         <xsl:param name="sbsGap"    select="0"/>
641         <xsl:variable name="numSBSs_"     select="count(/EDKSYSTEM/BLKDSHAPES/SBSSHAPES/MODULE)"/>      
642         <xsl:variable name="sbs_LANE_H_"    select="($numSBSs_ * $BLKD_SBS_LANE_H)"/>
643         <xsl:variable name="sbsGap_"   select="($BLKD_PROC2SBS_GAP + $sbs_LANE_H_)"/>
644 -->     
645         
646         <xsl:variable name="sbsGap_" select="((count(/EDKSYSTEM/BLKDSHAPES/SBSSHAPES/MODULE) * $BLKD_SBS_LANE_H) + $BLKD_PROC2SBS_GAP)"/>       
647         
648         <xsl:if test="(not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]) and  
649                            not(/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(  (@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]) and
650                            not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(     (@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]))">0</xsl:if>
651         
652         
653         <xsl:if test="((/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))])   or  
654                            (/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(  (@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))])   or
655                            (/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(     (@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]))">
656                 <!-- Store the spaces above this one in a variable -->
657                 <xsl:variable name="spaces_above_">
658                 
659                         <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX &lt; $iVertiIdx))])">
660                                 <SPACE HEIGHT="0"/>
661                         </xsl:if>
662                         
663                         <!-- Store the height of all peripherals and memory units above this one-->
664                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx)  and (@SHAPE_VERTI_INDEX &lt; $iVertiIdx))]">
665                                 
666                                 <xsl:if test="not(@MODCLASS='MEMORY_UNIT')">    
667                                         <xsl:variable name="peri_height_">
668                                                 <xsl:call-template name="_calc_Shape_Height">   
669                                                         <xsl:with-param name="iShapeId" select="@SHAPE_ID"/>
670                                                 </xsl:call-template>    
671                                         </xsl:variable>
672 <!--                                    
673                                         <xsl:message>Found peri height <xsl:value-of select="$peri_height_"/></xsl:message>
674 -->     
675                                         <SPACE HEIGHT="{$peri_height_ + $BLKD_BIF_H}"/>
676                                 </xsl:if>
677                                 
678                                 <xsl:if test="(@MODCLASS='MEMORY_UNIT')">       
679                                         <xsl:variable name="memu_height_">
680                                                 <xsl:call-template name="_calc_MemoryUnit_Height">      
681                                                         <xsl:with-param name="iShapeId" select="@SHAPE_ID"/>
682                                                 </xsl:call-template>    
683                                         </xsl:variable>
684 <!--                                    
685                                         <xsl:message>Found unit height <xsl:value-of select="$memu_height_"/></xsl:message>
686 -->                                     
687                                         <SPACE HEIGHT="{$memu_height_ + $BLKD_BIF_H}"/>
688                                 </xsl:if>
689                                 
690                         </xsl:for-each>
691                         
692                         <!-- Store the height of all the processors above this one-->
693                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[((@STACK_HORIZ_INDEX = $iHorizIdx)  and (@SHAPE_VERTI_INDEX &lt; $iVertiIdx))]">
694                                 <xsl:variable name="proc_height_">
695                                                 <xsl:call-template name="_calc_PeriShape_Height">       
696                                                         <xsl:with-param name="iShapeInst" select="@INSTANCE"/>
697                                                 </xsl:call-template>    
698                                 </xsl:variable>
699                                 
700                                 <SPACE HEIGHT="{$proc_height_ + $BLKD_BIF_H}"/>
701                         </xsl:for-each>
702                         
703                         <!-- If its a peripheral that is below the shared busses, or its a shared bus bucket -->
704                         <!-- add the height of the shared busses and the processor.                           -->
705                         <xsl:if  test="(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]/@IS_BLWSBS)">
706                                 <SPACE HEIGHT="{$sbsGap_}"/>
707                         </xsl:if>
708                         <xsl:if test="(/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))])">
709                                 <SPACE HEIGHT="{$sbsGap_}"/>
710                         </xsl:if>
711                         
712                         <!-- Store the height of all shared bus buckets above this one-->
713                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[((@STACK_HORIZ_INDEX = $iHorizIdx)  and (@SHAPE_VERTI_INDEX &lt; $iVertiIdx))]">
714                                 <xsl:variable name="bkt_height_">
715                                         <xsl:call-template name="_calc_SbsBucket_Height">
716                                                 <xsl:with-param name="iBucketId" select="@BUSINDEX"/>
717                                         </xsl:call-template>    
718                                 </xsl:variable>
719                                 
720                                 <SPACE HEIGHT="{$bkt_height_ + $BLKD_BIF_H}"/>
721                         </xsl:for-each>
722                         
723                 </xsl:variable>
724                 
725                 <xsl:value-of select="sum(exsl:node-set($spaces_above_)/SPACE/@HEIGHT)"/>
726         </xsl:if>
727         
728 </xsl:template>
729         
730         
731 <xsl:template name="_calc_Max_BusConnLane_BifY">
732         
733         <xsl:param name="iBusName" select="'_busname_'"/>
734         
735         <!-- Store the heights in a variable -->        
736         <xsl:variable name="busConnYs_">
737                 
738                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE/BUSCONN)">
739                         <BUSCONNY HEIGHT="0"/>
740                 </xsl:if>
741                 
742                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE[(@BUSNAME = $iBusName)]/BUSCONN">
743                         
744                         <xsl:variable name="peri_cstk_y_">
745                                 <xsl:call-template name="_calc_CStackShapesAbv_Height">
746                                         <xsl:with-param name="iCStackIndex"  select="../@CSTACK_INDEX"/>
747                                         <xsl:with-param name="ICStackModY"   select="@CSTACK_MODS_Y"/>
748                                 </xsl:call-template>    
749                         </xsl:variable> 
750                                 
751                                 <xsl:variable name="peri_bif_dy_">
752                                         <xsl:value-of select="(($BLKD_BIF_H + $BLKD_BIF_GAP)  * @BIF_Y)"/>
753                                 </xsl:variable>
754                                 
755                                 <xsl:variable name="peri_bc_y_">
756                                         <xsl:value-of select="($BLKD_MOD_LANE_H + $BLKD_MOD_LABEL_H + $BLKD_BIF_GAP + $peri_bif_dy_ + ceiling($BLKD_BIF_H div 2)) - ceiling($BLKD_BIFC_H div 2)"/>
757                                 </xsl:variable>
758                         
759 <!--                    
760                         <xsl:message>Found a busconn lane</xsl:message>
761 -->                     
762                         <BUSCONNY HEIGHT="{$peri_cstk_y_ + $peri_bif_dy_ + $peri_bc_y_}"/>
763                 </xsl:for-each>
764                 
765         </xsl:variable>
766
767                 <!-- Return the max of them --> 
768         <xsl:value-of select="math:max(exsl:node-set($busConnYs_)/BUSCONNY/@HEIGHT)"/>
769         
770 </xsl:template>
771         
772         
773 <xsl:template name="_calc_Min_BusConnLane_BifY">
774         
775         <xsl:param name="iBusName" select="'_busname_'"/>
776         
777         <!-- Store the heights in a variable -->        
778         <xsl:variable name="busConnYs_">
779                 
780                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE/BUSCONN)">
781                         <BUSCONNY HEIGHT="0"/>
782                 </xsl:if>
783                 
784                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE[(@BUSNAME = $iBusName)]/BUSCONN">
785                         
786                         <xsl:variable name="peri_cstk_y_">
787                                 <xsl:call-template name="_calc_CStackShapesAbv_Height">
788                                         <xsl:with-param name="iCStackIndex"  select="../@CSTACK_INDEX"/>
789                                         <xsl:with-param name="iCStackModY"   select="@CSTACK_MODS_Y"/>
790                                 </xsl:call-template>    
791                         </xsl:variable> 
792                                 
793                                 <xsl:variable name="peri_bif_dy_">
794                                         <xsl:value-of select="(($BLKD_BIF_H + $BLKD_BIF_GAP)  * @BIF_Y)"/>
795                                 </xsl:variable>
796                                 
797                                 <xsl:variable name="peri_bc_y_">
798                                         <xsl:value-of select="($BLKD_MOD_LANE_H + $BLKD_MOD_LABEL_H + $BLKD_BIF_GAP + $peri_bif_dy_ + ceiling($BLKD_BIF_H div 2)) - ceiling($BLKD_BIFC_H div 2)"/>
799                                 </xsl:variable>
800                         
801 <!--                    
802                         <xsl:message>Found a busconn lane</xsl:message>
803 -->                     
804                         <BUSCONNY HEIGHT="{$peri_cstk_y_ + $peri_bc_y_}"/>
805                 </xsl:for-each>
806                 
807         </xsl:variable>
808
809                 <!-- Return the min of them --> 
810         <xsl:value-of select="math:min(exsl:node-set($busConnYs_)/BUSCONNY/@HEIGHT)"/>
811         
812 </xsl:template>
813         
814 <xsl:template name="_calc_Stack_Height">
815         <xsl:param name="iStackIdx"  select="100"/>
816         
817         <xsl:variable name="stack_height_">
818                 <!-- if this is called with no vert index of a shape 
819                          it defaults to the total height of the stack -->
820                 <xsl:call-template name="_calc_Stack_Shape_Y">
821                         <xsl:with-param name="iHorizIdx"  select="$iStackIdx"/>
822                 </xsl:call-template>
823         </xsl:variable>
824         
825         <xsl:value-of select="$stack_height_"/>
826 </xsl:template>
827         
828 <!--    
829 -->     
830         
831         
832 <xsl:template name="_calc_Stack_Width">
833         <xsl:param name="iStackIdx"  select="100"/>
834         
835 <!--    
836         <xsl:message>=============Stack Idx <xsl:value-of select="$iStackIdx"/>====</xsl:message>                       
837 -->     
838         <xsl:variable name="shape_widths_">     
839                 
840                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[@STACK_HORIZ_INDEX = $iStackIdx])">
841                         <SHAPE WIDTH="0"/>
842                 </xsl:if>
843                         
844                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[@STACK_HORIZ_INDEX = $iStackIdx])">
845                         <SHAPE WIDTH="0"/>
846                 </xsl:if>
847                         
848                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@STACK_HORIZ_INDEX = $iStackIdx)]">
849 <!--                    
850                         <xsl:variable name="proc_w_">
851                                 <xsl:value-of select="$BLKD_MOD_W"/>
852                         </xsl:variable>
853                         <xsl:message>Found processor of width <xsl:value-of select="$proc_w_"/></xsl:message>
854 -->     
855                         <SHAPE WIDTH="{$BLKD_MOD_W}"/>
856                 </xsl:for-each>
857                         
858                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[(@STACK_HORIZ_INDEX = $iStackIdx)]">
859                                 
860                         <xsl:variable name="shpClass_" select="@MODCLASS"/> 
861                         <xsl:variable name="shape_w_">
862                                 <xsl:choose>
863                                                 
864                                                 <xsl:when test="$shpClass_ = 'PERIPHERAL'">
865                                                         <xsl:value-of select="$BLKD_MOD_W"/>
866                                                 </xsl:when>
867                                                 
868                                                 <xsl:when test="$shpClass_ = 'MEMORY_UNIT'">
869                                                         <xsl:value-of select="($BLKD_MOD_W * @MODS_W)"/>
870                                                 </xsl:when>
871                                                 
872                                                 <xsl:otherwise>0</xsl:otherwise>
873                                                 
874                                         </xsl:choose>
875                                 </xsl:variable>
876                                 
877 <!--            
878                         <xsl:message>Found shape width <xsl:value-of select="$shape_w_"/></xsl:message>
879 -->                             
880                                 
881                         <SHAPE WIDTH="{$shape_w_}"/>
882                 </xsl:for-each>
883                         
884                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)]">
885                         <xsl:variable name="bucket_w_">
886                                   <xsl:value-of select="(($BLKD_MOD_BKTLANE_W * 2) + (($BLKD_MOD_W * @MODS_W) + ($BLKD_MOD_BUCKET_G * (@MODS_W - 1))))"/>
887                         </xsl:variable>
888                         
889 <!--                            
890                         <xsl:message>Found bucket of width <xsl:value-of select="$bucket_w_"/></xsl:message>
891 -->                             
892                         <SHAPE WIDTH="{$bucket_w_}"/>
893                 </xsl:for-each>
894                         
895         </xsl:variable>
896         
897         <xsl:value-of select="math:max(exsl:node-set($shape_widths_)/SHAPE/@WIDTH)"/>
898 </xsl:template>
899         
900         
901 <xsl:template name="_calc_Stack_X">
902         <xsl:param name="iStackIdx"  select="0"/>
903 <!--    
904         <xsl:message>Looking for stack indexes less than <xsl:value-of select="$iStackIdx"/></xsl:message>
905 -->     
906         
907         <!-- Store the stack widths in a variable -->   
908         <xsl:variable name="stackspace_widths_">
909                 
910                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES[(@STACK_HORIZ_INDEX &lt; $iStackIdx)])">
911                         <STACKSPACE WIDTH="0"/>
912                 </xsl:if>
913                 
914                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES[(@STACK_HORIZ_INDEX &lt; $iStackIdx)])">
915                         <STACKSPACE WIDTH="0"/>
916                 </xsl:if>
917                 
918                 <xsl:if test="not(/EDKSYSTEM/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX &lt; $iStackIdx)])">
919                         <STACKSPACE WIDTH="0"/>
920                 </xsl:if>
921                 
922                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST &lt;= $iStackIdx)]">
923                         
924 <!--            
925                         <xsl:message>==============================</xsl:message>
926                         <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
927                         <xsl:message>Bus lane space width <xsl:value-of select="@BUSLANES_W"/></xsl:message>
928                         <xsl:message>Bus lane space is <xsl:value-of select="$space_width_"/></xsl:message>
929 -->     
930                         <xsl:variable name="space_width_" select="($BLKD_BUS_LANE_W * @BUSLANES_W)"/>
931                         <xsl:variable name="stack_width_">
932                                 <xsl:if test="not(@EAST = $iStackIdx)">
933                                         <xsl:call-template name="_calc_Stack_Width">
934                                                 <xsl:with-param name="iStackIdx"  select="@EAST"/>
935                                         </xsl:call-template>
936                                 </xsl:if>
937                                 <xsl:if test="(@EAST = $iStackIdx)">0</xsl:if>
938                         </xsl:variable>
939                         
940 <!--                    
941                         <xsl:message>Found stack of width <xsl:value-of select="$stack_width_"/></xsl:message>
942                         <xsl:message>==============================</xsl:message>
943 -->                     
944                         
945                         <STACKSPACE WIDTH="{$stack_width_ + $space_width_}"/>
946                         
947                 </xsl:for-each>
948                 
949                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(not(@EAST) and (@WEST = ($iStackIdx -1)))]">
950                         <xsl:variable name="space_width_" select="($BLKD_BUS_LANE_W * @BUSLANES_W)"/>
951                         
952 <!--                    
953                         <xsl:message>Found end space of <xsl:value-of select="$space_width_"/></xsl:message>
954 -->                     
955                         <STACKSPACE WIDTH="{$space_width_}"/>
956                 </xsl:for-each>
957                 
958                 
959         </xsl:variable>
960         
961         <xsl:value-of select="sum(exsl:node-set($stackspace_widths_)/STACKSPACE/@WIDTH)"/>
962         
963 </xsl:template> 
964         
965 <xsl:template name="_calc_Space_Width">
966         
967         <xsl:param name="iStackToWest"  select="'NONE'"/>
968         <xsl:param name="iStackToEast"  select="'NONE'"/>
969         
970 <!--    
971         <xsl:message>Stack to West <xsl:value-of select="$stackToWest"/></xsl:message>
972         <xsl:message>Stack to East <xsl:value-of select="$stackToEast"/></xsl:message>
973 -->     
974         
975         <xsl:variable name="spaceWidth_">
976                 <xsl:choose>
977                         <xsl:when test="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[((@EAST = $iStackToEast) or (not($iStackToWest = 'NONE') and (@WEST = $iStackToWest)))]">
978                                 <xsl:value-of select="((/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[((@EAST = $iStackToEast) or (not($iStackToWest = 'NONE') and (@WEST = $iStackToWest)))]/@BUSLANES_W) * $BLKD_BUS_LANE_W)"/>
979                         </xsl:when>     
980                         <xsl:otherwise>0</xsl:otherwise>        
981                 </xsl:choose>   
982         </xsl:variable> 
983         
984 <!--    
985         <xsl:message>Space width <xsl:value-of select="$spaceWidth_"/></xsl:message>
986 -->     
987         
988         <xsl:value-of select="$spaceWidth_"/>
989 </xsl:template>
990         
991         
992 <xsl:template name="_calc_Space_X">
993         
994         <xsl:param name="iStackToWest"  select="'NONE'"/>
995         <xsl:param name="iStackToEast"  select="'NONE'"/>
996         
997 <!--    
998         <xsl:message>Stack East <xsl:value-of select="$stackToEast"/></xsl:message>
999         <xsl:message>Stack West <xsl:value-of select="$stackToWest"/></xsl:message>
1000 -->     
1001         
1002         <!-- Store the stack widths in a variable -->   
1003         
1004 <!--    
1005         <xsl:message>Looking for stack indexes less than <xsl:value-of select="$stackIdx"/></xsl:message>
1006 -->     
1007         
1008         <xsl:variable name="stackspace_widths_">
1009                 
1010                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES[(@STACK_HORIZ_INDEX &lt; $iStackToEast)])">
1011                         <STACKSPACE WIDTH="0"/>
1012                 </xsl:if>
1013                 
1014                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES[(@STACK_HORIZ_INDEX &lt; $iStackToEast)])">
1015                         <STACKSPACE WIDTH="0"/>
1016                 </xsl:if>
1017                 
1018                 <xsl:if test="not(/EDKSYSTEM/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX &lt; $iStackToEast)])">
1019                         <STACKSPACE WIDTH="0"/>
1020                 </xsl:if>
1021                 
1022                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[((@EAST &lt; $iStackToEast) or (not($iStackToWest = 'NONE') and (@EAST &lt;= $iStackToWest)))]">
1023                         
1024 <!--            
1025                         <xsl:message>==============================</xsl:message>
1026                         <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
1027 -->     
1028                         
1029                         <xsl:variable name="space_width_" select="($BLKD_BUS_LANE_W * @BUSLANES_W)"/>
1030 <!--                    
1031                         <xsl:message>Bus lane space width <xsl:value-of select="@BUSLANES_W"/></xsl:message>
1032                         <xsl:message>Bus lane space is <xsl:value-of select="$space_width_"/></xsl:message>
1033 -->     
1034                                 <xsl:variable name="stack_width_">
1035                                         <xsl:call-template name="_calc_Stack_Width">
1036                                                 <xsl:with-param name="iStackIdx"  select="@EAST"/>
1037                                         </xsl:call-template>
1038                                 </xsl:variable>
1039                         
1040 <!--                    
1041                         <xsl:message>Found stack of width <xsl:value-of select="$stack_width_"/></xsl:message>
1042                         <xsl:message>==============================</xsl:message>
1043 -->                     
1044                         
1045                         <STACKSPACE WIDTH="{$stack_width_ + $space_width_}"/>
1046                 </xsl:for-each>
1047         </xsl:variable>
1048         
1049         <xsl:variable name = "stackToWest_W_">
1050                 <xsl:choose>
1051                         <xsl:when test="(($iStackToEast = '0')   and     ($iStackToWest = 'NONE'))">0</xsl:when>
1052                         <xsl:when test="(($iStackToEast = 'NONE') and not($iStackToWest = 'NONE'))">
1053                                 <xsl:call-template name="_calc_Stack_Width">
1054                                         <xsl:with-param name="iStackIdx"  select="$iStackToWest"/>
1055                                 </xsl:call-template>
1056                         </xsl:when>
1057                         <xsl:when test="(not($iStackToEast = '0') and ($iStackToWest = 'NONE'))">
1058                                 <xsl:call-template name="_calc_Stack_Width">
1059                                         <xsl:with-param name="iStackIdx"  select="($iStackToEast - 1)"/>
1060                                 </xsl:call-template>
1061                         </xsl:when>
1062                         <xsl:otherwise>0</xsl:otherwise>
1063                 </xsl:choose>
1064         </xsl:variable>
1065         
1066 <!--    
1067         <xsl:variable name = "stackToEast_W_">
1068                 <xsl:call-template name="_calc_Stack_Width">
1069                         <xsl:with-param name="stackIdx"  select="$stackToEast"/>
1070                 </xsl:call-template>
1071         </xsl:variable>
1072         <xsl:variable name ="extSpaceEast_W_" select="ceiling($stackToEast_W_ div 2)"/>
1073 -->     
1074         
1075         <xsl:variable name ="extSpaceWest_W_" select="ceiling($stackToWest_W_ div 2)"/>
1076          
1077         <xsl:value-of select="sum(exsl:node-set($stackspace_widths_)/STACKSPACE/@WIDTH) - $extSpaceWest_W_"/>
1078 </xsl:template> 
1079
1080 </xsl:stylesheet>