]> git.sur5r.net Git - freertos/blob - Demo/PPC405_Xilinx_Virtex4_GCC/__xps/.dswkshop/MdtXdsSVG_BlkDCalculations.xsl
ddec6127867703a1caa5815e85ce7a3efef2c22f
[freertos] / Demo / PPC405_Xilinx_Virtex4_GCC / __xps / .dswkshop / MdtXdsSVG_BlkDCalculations.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="procInst"  select="_processor_"/>
15         
16         <xsl:variable name="tot_bifs_h_">
17                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $procInst)]/@BIFS_H)">0</xsl:if>
18                 
19                 <xsl:if test="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $procInst)]/@BIFS_H">
20                         <xsl:variable name="bifs_h_" select="(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $procInst)]/@BIFS_H)"/>
21                         <xsl:value-of select="(($BIF_H + $BIF_GAP) * $bifs_h_)"/>       
22                 </xsl:if>
23         </xsl:variable> 
24         
25         <xsl:value-of select="(($MOD_LANE_H * 2) + $tot_bifs_h_ + ($MOD_LABEL_H + $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="procInst" 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="procInst"  select="_processor_"/>
63         
64         <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $procInst) and (@MODCLASS = 'MEMORY_UNIT'))])">0</xsl:if>
65         
66         <xsl:if test="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $procInst) 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="$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 = $procInst) 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="shapeId" 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="procInst"  select="_processor_"/>
101         
102         <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $procInst) and not(@MODCLASS = 'MEMORY_UNIT'))])">0</xsl:if>
103         
104         <xsl:if test="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $procInst) and not(@MODCLASS='MEMORY_UNIT'))]">
105         
106                 <xsl:variable name="peri_gap_">
107                         <xsl:if test="@CSTACK_INDEX">
108                                 <xsl:value-of select="$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 = $procInst) 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="shapeInst" 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="stackToEast"  select="'NONE'"/>
138         <xsl:param name="stackToWest"  select="'NONE'"/>
139         
140         
141         <xsl:variable name = "stackAbvSbs_West_H_">
142                 <xsl:choose>
143                         <xsl:when test="(($stackToEast = '0')   and     ($stackToWest = 'NONE'))">0</xsl:when>
144                         <xsl:when test="(($stackToEast = 'NONE') and not($stackToWest = 'NONE'))">
145                                 <xsl:call-template name="_calc_Stack_AbvSbs_Height">
146                                         <xsl:with-param name="stackIdx"  select="$stackToWest"/>
147                                 </xsl:call-template>
148                         </xsl:when>
149                         <xsl:when test="(not($stackToEast = '0') and ($stackToWest = 'NONE'))">
150                                 <xsl:call-template name="_calc_Stack_AbvSbs_Height">
151                                         <xsl:with-param name="stackIdx"  select="($stackToEast - 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="stackIdx"  select="$stackToEast"/>
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="stackToEast"  select="'NONE'"/>
175         <xsl:param name="stackToWest"  select="'NONE'"/>
176                 
177         <xsl:variable name = "stackBlwSbs_West_H_">
178                 <xsl:choose>
179                         <xsl:when test="(($stackToEast = '0')    and    ($stackToWest = 'NONE'))">0</xsl:when>
180                         <xsl:when test="(($stackToEast = 'NONE') and not($stackToWest = 'NONE'))">
181                                 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
182                                         <xsl:with-param name="stackIdx"  select="$stackToWest"/>
183                                 </xsl:call-template>
184                         </xsl:when>
185                         <xsl:when test="(not($stackToEast = '0') and    ($stackToWest = 'NONE'))">
186                                 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
187                                         <xsl:with-param name="stackIdx"  select="($stackToEast - 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="stackIdx"  select="$stackToEast"/>
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="stackIdx"  select="100"/>
212 <!--    
213         <xsl:message>^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^</xsl:message>
214 -->     
215         
216         <xsl:if test="(not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $stackIdx) and (@IS_ABVSBS))]) and
217                                    not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@STACK_HORIZ_INDEX = $stackIdx)]))"><xsl:value-of select="$PROC2SBS_GAP"/></xsl:if>
218         
219         <xsl:if test="((/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $stackIdx) and (@IS_ABVSBS))]) or
220                                    (/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@STACK_HORIZ_INDEX = $stackIdx)]))">
221                 
222 <!--                    
223                 <xsl:variable name="peri_gap_">
224                         <xsl:value-of select="$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 = $stackIdx) 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="shapeInst" select="@INSTANCE"/>
261                                                 </xsl:call-template>    
262                                         </xsl:variable>
263                                         
264                                         <PERI HEIGHT="{$peri_height_ + $BIF_H}"/>
265                                 </xsl:for-each>
266                         </xsl:for-each>
267                         
268                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $stackIdx) 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="shapeId" 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_ + $BIF_H}"/>
280                         
281                         </xsl:for-each>
282                         
283                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[((@STACK_HORIZ_INDEX = $stackIdx) and (@IS_ABVSBS))]">
284                                         
285                                 <xsl:variable name="proc_height_">
286                                         <xsl:call-template name="_calc_PeriShape_Height">       
287                                                 <xsl:with-param name="shapeInst" 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_ + $PROC2SBS_GAP }"/>
295 -->                                     
296                                 <PERI HEIGHT="{$proc_height_ + $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="stackIdx"  select="100"/>
317         
318 <!--    
319 -->     
320                         
321                 <!-- Store the all peripheral heights in a variable -->
322                 <xsl:variable name="stack_heights_">
323                         
324                         <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $stackIdx) and (@IS_BLWSBS))])">
325                                 <STACKSHAPE HEIGHT="0"/>
326                         </xsl:if>
327                         
328                         <xsl:if test="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $stackIdx) and (@IS_BLWSBS))]">
329 <!--            
330                 <xsl:message>vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv</xsl:message>
331 -->     
332         
333                                 <xsl:variable name="peri_gap_">
334                                         <xsl:choose>
335                                                 <xsl:when test="(@SHAPE_VERTI_INDEX)">
336                                                         <xsl:value-of select="$BIF_H"/>
337                                                 </xsl:when>
338                                                 <xsl:otherwise>0</xsl:otherwise>
339                                         </xsl:choose>   
340                                 </xsl:variable> 
341                                 
342                                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $stackIdx) and not(@MODCLASS = 'MEMORY_UNIT') and (@IS_BLWSBS))]">
343                                         <xsl:for-each select="MODULE">
344 <!--                                    
345                                         <xsl:message>This is below <xsl:value-of select="@INSTANCE"/></xsl:message>
346 -->     
347                                                 <xsl:variable name="peri_height_">
348                                                         <xsl:call-template name="_calc_PeriShape_Height">       
349                                                                 <xsl:with-param name="shapeInst" select="@INSTANCE"/>
350                                                         </xsl:call-template>    
351                                                 </xsl:variable>
352                                                 
353                                                 <STACKSHAPE HEIGHT="{$peri_height_ + $peri_gap_}"/>
354                                         </xsl:for-each>
355                                 </xsl:for-each>
356                 
357                                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $stackIdx) and (@MODCLASS = 'MEMORY_UNIT') and (@IS_BLWSBS))]">
358                         
359                                         <xsl:variable name="memu_height_">
360                                                 <xsl:call-template name="_calc_MemoryUnit_Height">      
361                                                         <xsl:with-param name="shapeId" select="@SHAPE_ID"/>
362                                                 </xsl:call-template>    
363                                         </xsl:variable>
364                         
365                                         <STACKSHAPE HEIGHT="{$memu_height_ + $peri_gap_}"/>
366                                 
367 <!--                            
368                                 <xsl:message>Mem_Unit : <xsl:value-of select="@SHAPE_ID"/> : <xsl:value-of select="$memu_height_ + $peri_gap_"/></xsl:message>
369 -->     
370                         
371                         </xsl:for-each>
372                 </xsl:if>
373                         
374                 <xsl:variable name="sbsBuckets_H_">
375                         <xsl:call-template name="_calc_Stack_SbsBuckets_Height">
376                                 <xsl:with-param name="stackIdx" select="$stackIdx"/>
377                         </xsl:call-template>    
378                 </xsl:variable>
379                         
380                         <STACKSHAPE HEIGHT="{$sbsBuckets_H_}"/>
381 <!--                    
382                         <xsl:message>Sbs Bucket H : <xsl:value-of select="$sbsBuckets_H_"/></xsl:message>
383 -->
384                 </xsl:variable>
385                 
386 <!--            
387                 <xsl:message>vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv</xsl:message>
388 -->             
389                 <xsl:value-of select="sum(exsl:node-set($stack_heights_)/STACKSHAPE/@HEIGHT)"/>
390         
391 </xsl:template>
392         
393
394 <xsl:template name="_calc_Stack_SbsBuckets_Height">
395         <xsl:param name="stackIdx"  select="1000"/>
396         
397         <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $stackIdx)])">0</xsl:if>
398         
399         <xsl:if test="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $stackIdx)]">
400         
401                 <!-- Store the all buckets heights in a variable -->
402                 <xsl:variable name="bkt_heights_">
403                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $stackIdx)]">
404                 
405                                 <xsl:variable name="bkt_height_">
406                                         <xsl:call-template name="_calc_SbsBucket_Height">       
407                                                 <xsl:with-param name="bucketId" select="@BUSINDEX"/>
408                                         </xsl:call-template>    
409                                 </xsl:variable>
410 <!--                            
411                                 <xsl:message>Found shared buckets height as <xsl:value-of select="$bkt_height_"/></xsl:message>
412 -->                             
413                                 <BKT HEIGHT="{$bkt_height_ + $BIF_H}"/>
414                         </xsl:for-each>
415                 </xsl:variable>
416                 
417                 <xsl:value-of select="sum(exsl:node-set($bkt_heights_)/BKT/@HEIGHT)"/>
418         </xsl:if>
419 </xsl:template>
420
421         
422 <xsl:template name="_calc_Max_Stack_BlwSbs_Height">
423
424         <!-- Store the heights in a variable -->        
425         <xsl:variable name="blwSbs_heights_">
426                 
427                 <!-- Default, in case there are no modules or ports -->         
428                 <BLW HEIGHT="0"/>
429                 
430                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST &lt; /EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH)]">
431         
432 <!--                    
433                         <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
434 -->     
435                         
436                         <xsl:variable name="stack_height_">
437                                 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
438                                         <xsl:with-param name="stackIdx"  select="@EAST"/>
439                                 </xsl:call-template>
440                         </xsl:variable>
441                         
442                         
443                         <BLW HEIGHT="{$stack_height_}"/>
444                         
445                 </xsl:for-each>
446                 
447                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@WEST = (/EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH -1))]">
448                         
449 <!--                    
450                         <xsl:message>Last stack of index <xsl:value-of select="@WEST"/></xsl:message>
451 -->                     
452                         
453                         <xsl:variable name="stack_height_">
454                                 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
455                                         <xsl:with-param name="stackIdx"  select="@WEST"/>
456                                 </xsl:call-template>
457                         </xsl:variable>
458                         
459                         
460                         <BLW HEIGHT="{$stack_height_}"/>
461                         
462                 </xsl:for-each>
463                 
464                 
465         </xsl:variable>
466         
467 <!--    
468         <xsl:message>Found Blw Sbs max as <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/></xsl:message>
469 -->     
470         <!-- Return the max of them --> 
471         <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/>
472 </xsl:template>
473         
474         
475 <xsl:template name="_calc_Max_Stack_AbvSbs_Height">
476
477         <!-- Store the heights in a variable -->        
478         <xsl:variable name="abvSbs_heights_">
479                 
480                 <!-- Default, in case there are no modules or ports -->         
481                 <ABV HEIGHT="0"/>
482                 
483                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST &lt; /EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH)]">
484                         
485 <!--                    
486                         <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
487 -->     
488                         
489                         <xsl:variable name="stack_height_">
490                                 <xsl:call-template name="_calc_Stack_AbvSbs_Height">
491                                         <xsl:with-param name="stackIdx"  select="@EAST"/>
492                                 </xsl:call-template>
493                         </xsl:variable>
494                         
495 <!--                    
496                         <xsl:message>Found stack of width <xsl:value-of select="$stack_width_"/></xsl:message>
497                         <xsl:message>==============================</xsl:message>
498 -->                     
499                         
500                         <ABV HEIGHT="{$stack_height_}"/>
501                         
502                 </xsl:for-each>
503                 
504                 
505         </xsl:variable>
506         
507 <!--    
508         <xsl:message>Found Blw Sbs max as <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/></xsl:message>
509 -->     
510         <!-- Return the max of them --> 
511         <xsl:value-of select="math:max(exsl:node-set($abvSbs_heights_)/ABV/@HEIGHT)"/>
512 </xsl:template>
513         
514         
515 <xsl:template name="_calc_Max_Proc_PerisAbvSbs_Height">
516         <xsl:param name="procInst"  select="_processor_"/>
517         
518         <!-- Store the heights in a variable -->        
519         <xsl:variable name="abvSbs_heights_">
520                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE)">
521                         <ABV HEIGHT="0"/>
522                 </xsl:if>
523                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE">
524                         <xsl:variable name="procInst_" select="@INSTANCE"/> 
525 <!--                    
526                         <xsl:message>Found Blw Sbs height as <xsl:value-of select="$blwSbs_"/></xsl:message>
527                         <ABV HEIGHT="{$pAbvSbs_}"/>
528 -->                     
529                         
530                         <xsl:variable name="pAbvSbs_">
531                                 <xsl:call-template name="_calc_Proc_PerisAbvSbs_Height">        
532                                         <xsl:with-param name="procInst" select="$procInst_"/>
533                                 </xsl:call-template>    
534                         </xsl:variable>
535                         
536                         <xsl:variable name="memUs_">
537                                 <xsl:call-template name="_calc_Proc_MemoryUnits_Height">        
538                                         <xsl:with-param name="procInst" select="$procInst_"/>
539                                 </xsl:call-template>    
540                         </xsl:variable>
541                         
542 <!--                    
543                         <xsl:message>Found Peris Above height as <xsl:value-of select="$pAbvSbs_"/></xsl:message>
544                         <xsl:message>Found MemUs Above height as <xsl:value-of select="$memUs_"/></xsl:message>
545                         <xsl:message>Found PAbv Above height as <xsl:value-of select="($pAbvSbs_ + $memUs_)"/></xsl:message>
546 -->                     
547                         <ABV HEIGHT="{$pAbvSbs_ + $memUs_}"/>
548                 </xsl:for-each>
549         </xsl:variable>
550         
551 <!--    
552         <xsl:message>Found Abv Sbs max as <xsl:value-of select="math:max(exsl:node-set($abvSbs_heights_)/ABV/@HEIGHT)"/></xsl:message>
553 -->     
554         
555         <!-- Return the max of them --> 
556         <xsl:value-of select="math:max(exsl:node-set($abvSbs_heights_)/ABV/@HEIGHT)"/>
557 </xsl:template>
558         
559 <xsl:template name="_calc_Max_Proc_SbsBuckets_Height___">
560
561         <!-- Store the heights in a variable -->        
562         <xsl:variable name="blwSbs_heights_">
563                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE)">
564                         <BLW HEIGHT="0"/>
565                 </xsl:if>
566                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE">
567                         <xsl:variable name="procInst_" select="@INSTANCE"/> 
568                         <xsl:variable name="sbsBktH_">
569                                 <xsl:call-template name="_calc_Proc_SbsBuckets_Height"> 
570                                         <xsl:with-param name="procInst" select="$procInst_"/>
571                                 </xsl:call-template>    
572                         </xsl:variable>
573 <!--                    
574                         <xsl:message>Found Blw Sbs height as <xsl:value-of select="$blwSbs_"/></xsl:message>
575 -->                     
576                         <BKT HEIGHT="{$sbsBktH_}"/>
577                 </xsl:for-each>
578         </xsl:variable>
579         
580 <!--    
581         <xsl:message>Found Blw Sbs max as <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/></xsl:message>
582 -->     
583         <!-- Return the max of them --> 
584         <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BKT/@HEIGHT)"/>
585 </xsl:template>
586         
587 <xsl:template name="_calc_Max_SbsBuckets_Height___">
588         
589         
590         <xsl:variable name="bkts_h_">
591                 
592                 <xsl:variable name="h_proc_sbsBkts_">
593                         <xsl:call-template name="_calc_Max_Proc_SbsBuckets_Height"/>    
594                 </xsl:variable>
595                 <BKT HEIGHT="{$h_proc_sbsBkts_}"/>
596                 
597         </xsl:variable> 
598         
599 <!--    
600         <xsl:variable name="h_perisAbvSbs_">
601                 <xsl:call-template name="_calc_Proc_PerisAbvSbs_Height">        
602                         <xsl:with-param name="procInst" select="$procInst"/>
603                 </xsl:call-template>    
604         </xsl:variable>
605 -->     
606         <xsl:value-of select="math:max(exsl:node-set($bkts_h_)/BKT/@HEIGHT)"/>
607 </xsl:template>
608         
609         
610
611 <xsl:template name="_calc_MultiProc_Stack_Height">
612         <xsl:param name="mpstack_blkd_x"  select="100"/>
613         
614                 <xsl:variable name="mpStk_ShpHeights_">
615                         <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@HAS_MULTIPROCCONNS) and (@PSTACK_BLKD_X = $mpstack_blkd_x))])">
616                                 <MPSHAPE HEIGHT="0"/>
617                         </xsl:if>
618                         
619                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@HAS_MULTIPROCCONNS) and (@PSTACK_BLKD_X = $mpstack_blkd_x))]">
620                                 <xsl:variable name="shpClass_" select="@MODCLASS"/> 
621                                 <xsl:variable name="shpHeight_">
622                                         <xsl:choose>
623                                                 <xsl:when test="$shpClass_ = 'PERIPHERAL'">
624 <!--                                                    
625                                                         <xsl:message>Found Multi Proc Peripheral</xsl:message> 
626 -->     
627                                                         <xsl:call-template name="_calc_PeriShape_Height">       
628                                                                 <xsl:with-param name="shapeInst" select="MODULE/@INSTANCE"/>
629                                                         </xsl:call-template>    
630                                                 </xsl:when>
631                                                 <xsl:when test="$shpClass_ = 'MEMORY_UNIT'">
632 <!--                                                    
633                                                         <xsl:message>Found Multi Proc Memory Unit</xsl:message> 
634 -->     
635                                                         <xsl:call-template name="_calc_MemoryUnit_Height">      
636                                                                 <xsl:with-param name="cshpIndex"  select="@CSHAPE_INDEX"/>
637                                                         </xsl:call-template>    
638                                                 </xsl:when>
639                                                 <xsl:otherwise>0</xsl:otherwise>
640                                         </xsl:choose>
641                                 </xsl:variable>
642                                 
643 <!--                            
644                                 <xsl:message>Found <xsl:value-of select="$shpHeight_"/></xsl:message>
645 -->                             
646                                 
647                                 <MPSHAPE HEIGHT="{$shpHeight_}"/>
648                         </xsl:for-each>
649         </xsl:variable>
650         
651 <!--    
652         <xsl:message>Found stack of height <xsl:value-of select="sum(exsl:node-set($mpStk_ShpHeights_)/MPSHAPE/@HEIGHT)"/></xsl:message>
653 -->     
654         
655         <xsl:value-of select="sum(exsl:node-set($mpStk_ShpHeights_)/MPSHAPE/@HEIGHT)"/>
656 </xsl:template>
657
658 <xsl:template name="_calc_Max_MultiProc_Stack_Height">
659         
660         <!-- Store the heights in a variable -->        
661         
662         <xsl:variable name="mpStks_Heights_">
663                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE)">
664                         <MPSTK HEIGHT="0"/>
665                 </xsl:if>
666                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@PSTACK_BLKD_X)]">
667                         <xsl:variable name="mpstack_height_">
668                                 <xsl:call-template name="_calc_MultiProc_Stack_Height">
669                                         <xsl:with-param name="mpstack_blkd_x" select="(@PSTACK_BLKD_X + 1)"/>
670                                 </xsl:call-template>
671                         </xsl:variable>
672                         
673 <!--                    
674                         <xsl:message>Found <xsl:value-of select="$mpstack_height_"/></xsl:message>
675 -->                     
676                         <MPSTK HEIGHT="{$mpstack_height_}"/>
677                 </xsl:for-each>
678                 
679         </xsl:variable>
680
681                 <!-- Return the max of them --> 
682         <xsl:value-of select="math:max(exsl:node-set($mpStks_Heights_)/MPSTK/@HEIGHT)"/>
683         
684 </xsl:template>
685
686
687
688 <xsl:template name="_calc_Stack_Shape_Y">
689         
690         <xsl:param name="horizIdx"  select="100"/>
691         <xsl:param name="vertiIdx"  select="100"/>
692         
693 <!--    
694         <xsl:message>Y at H index <xsl:value-of select="$horizIdx"/></xsl:message>
695         <xsl:message>Y at V index <xsl:value-of select="$vertiIdx"/></xsl:message>
696         <xsl:param name="sbsGap"    select="0"/>
697         <xsl:variable name="numSBSs_"     select="count(/EDKSYSTEM/BLKDSHAPES/SBSSHAPES/MODULE)"/>      
698         <xsl:variable name="sbs_LANE_H_"    select="($numSBSs_ * $SBS_LANE_H)"/>
699         <xsl:variable name="sbsGap_"   select="($PROC2SBS_GAP + $sbs_LANE_H_)"/>
700 -->     
701         
702         <xsl:variable name="sbsGap_" select="((count(/EDKSYSTEM/BLKDSHAPES/SBSSHAPES/MODULE) * $SBS_LANE_H) + $PROC2SBS_GAP)"/> 
703         
704         <xsl:if test="(not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX = $vertiIdx))]) and  
705                            not(/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(  (@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX = $vertiIdx))])   and
706                            not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(     (@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX = $vertiIdx))]))">0</xsl:if>
707         
708         
709         <xsl:if test="((/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX = $vertiIdx))])   or  
710                            (/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(  (@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX = $vertiIdx))])   or
711                            (/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(     (@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX = $vertiIdx))]))">
712                 <!-- Store the spaces above this one in a variable -->
713                 <xsl:variable name="spaces_above_">
714                 
715                         <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX &lt; $vertiIdx))])">
716                                 <SPACE HEIGHT="0"/>
717                         </xsl:if>
718                         
719                         <!-- Store the height of all peripherals and memory units above this one-->
720                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $horizIdx)  and (@SHAPE_VERTI_INDEX &lt; $vertiIdx))]">
721                                 
722                                 <xsl:if test="not(@MODCLASS='MEMORY_UNIT')">    
723                                         <xsl:variable name="peri_height_">
724                                                 <xsl:call-template name="_calc_Shape_Height">   
725                                                         <xsl:with-param name="shapeId" select="@SHAPE_ID"/>
726                                                 </xsl:call-template>    
727                                         </xsl:variable>
728 <!--                                    
729                                         <xsl:message>Found peri height <xsl:value-of select="$peri_height_"/></xsl:message>
730 -->     
731         
732                                         <SPACE HEIGHT="{$peri_height_ + $BIF_H}"/>
733                                 </xsl:if>
734                                 
735                                 <xsl:if test="(@MODCLASS='MEMORY_UNIT')">       
736                                         <xsl:variable name="memu_height_">
737                                                 <xsl:call-template name="_calc_MemoryUnit_Height">      
738                                                         <xsl:with-param name="shapeId" select="@SHAPE_ID"/>
739                                                 </xsl:call-template>    
740                                         </xsl:variable>
741 <!--                                    
742                                         <xsl:message>Found unit height <xsl:value-of select="$memu_height_"/></xsl:message>
743 -->                                     
744                                         <SPACE HEIGHT="{$memu_height_ + $BIF_H}"/>
745                                 </xsl:if>
746                                 
747                         </xsl:for-each>
748                         
749                         <!-- Store the height of all the processors above this one-->
750                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[((@STACK_HORIZ_INDEX = $horizIdx)  and (@SHAPE_VERTI_INDEX &lt; $vertiIdx))]">
751                                 <xsl:variable name="proc_height_">
752                                                 <xsl:call-template name="_calc_PeriShape_Height">       
753                                                         <xsl:with-param name="shapeInst" select="@INSTANCE"/>
754                                                 </xsl:call-template>    
755                                 </xsl:variable>
756                                 
757                                 <SPACE HEIGHT="{$proc_height_ + $BIF_H}"/>
758                         </xsl:for-each>
759                         
760                         
761                         <!-- If its a peripheral that is below the shared busses, or its a shared bus bucket -->
762                         <!-- add the height of the shared busses and the processor.                           -->
763                         <xsl:if  test="(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX = $vertiIdx))]/@IS_BLWSBS)">
764                                 <SPACE HEIGHT="{$sbsGap_}"/>
765                         </xsl:if>
766                         <xsl:if test="(/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[((@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX = $vertiIdx))])">
767                                 <SPACE HEIGHT="{$sbsGap_}"/>
768                         </xsl:if>
769                         
770                         <!-- Store the height of all shared bus buckets above this one-->
771                         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[((@STACK_HORIZ_INDEX = $horizIdx)  and (@SHAPE_VERTI_INDEX &lt; $vertiIdx))]">
772                                 <xsl:variable name="bkt_height_">
773                                         <xsl:call-template name="_calc_SbsBucket_Height">
774                                                 <xsl:with-param name="bucketId" select="@BUSINDEX"/>
775                                         </xsl:call-template>    
776                                 </xsl:variable>
777                                 
778                                 <SPACE HEIGHT="{$bkt_height_ + $BIF_H}"/>
779                         </xsl:for-each>
780                         
781                 </xsl:variable>
782                 
783                 <xsl:value-of select="sum(exsl:node-set($spaces_above_)/SPACE/@HEIGHT)"/>
784         </xsl:if>
785         
786 </xsl:template>
787         
788         
789 <xsl:template name="_calc_Max_BusConnLane_BifY">
790         
791         <xsl:param name="busname" select="'_busname_'"/>
792         
793         <!-- Store the heights in a variable -->        
794         <xsl:variable name="busConnYs_">
795                 
796                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE/BUSCONN)">
797                         <BUSCONNY HEIGHT="0"/>
798                 </xsl:if>
799                 
800                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE[(@BUSNAME = $busname)]/BUSCONN">
801                         
802                         <xsl:variable name="peri_cstk_y_">
803                                 <xsl:call-template name="_calc_CStackShapesAbv_Height">
804                                         <xsl:with-param name="cstackIndex"  select="../@CSTACK_INDEX"/>
805                                         <xsl:with-param name="cstackModY"   select="@CSTACK_MODS_Y"/>
806                                 </xsl:call-template>    
807                         </xsl:variable> 
808                                 
809                                 <xsl:variable name="peri_bif_dy_">
810                                         <xsl:value-of select="(($BIF_H + $BIF_GAP)  * @BIF_Y)"/>
811                                 </xsl:variable>
812                                 
813                                 <xsl:variable name="peri_bc_y_">
814                                         <xsl:value-of select="($MOD_LANE_H + $MOD_LABEL_H + $BIF_GAP + $peri_bif_dy_ + ceiling($BIF_H div 2)) - ceiling($BIFC_H div 2)"/>
815                                 </xsl:variable>
816                         
817 <!--                    
818                         <xsl:message>Found a busconn lane</xsl:message>
819 -->                     
820                         <BUSCONNY HEIGHT="{$peri_cstk_y_ + $peri_bif_dy_ + $peri_bc_y_}"/>
821                 </xsl:for-each>
822                 
823         </xsl:variable>
824
825                 <!-- Return the max of them --> 
826         <xsl:value-of select="math:max(exsl:node-set($busConnYs_)/BUSCONNY/@HEIGHT)"/>
827         
828 </xsl:template>
829         
830         
831 <xsl:template name="_calc_Min_BusConnLane_BifY">
832         
833         <xsl:param name="busname" select="'_busname_'"/>
834         
835         <!-- Store the heights in a variable -->        
836         <xsl:variable name="busConnYs_">
837                 
838                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE/BUSCONN)">
839                         <BUSCONNY HEIGHT="0"/>
840                 </xsl:if>
841                 
842                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE[(@BUSNAME = $busname)]/BUSCONN">
843                         
844                         <xsl:variable name="peri_cstk_y_">
845                                 <xsl:call-template name="_calc_CStackShapesAbv_Height">
846                                         <xsl:with-param name="cstackIndex"  select="../@CSTACK_INDEX"/>
847                                         <xsl:with-param name="cstackModY"   select="@CSTACK_MODS_Y"/>
848                                 </xsl:call-template>    
849                         </xsl:variable> 
850                                 
851                                 <xsl:variable name="peri_bif_dy_">
852                                         <xsl:value-of select="(($BIF_H + $BIF_GAP)  * @BIF_Y)"/>
853                                 </xsl:variable>
854                                 
855                                 <xsl:variable name="peri_bc_y_">
856                                         <xsl:value-of select="($MOD_LANE_H + $MOD_LABEL_H + $BIF_GAP + $peri_bif_dy_ + ceiling($BIF_H div 2)) - ceiling($BIFC_H div 2)"/>
857                                 </xsl:variable>
858                         
859 <!--                    
860                         <xsl:message>Found a busconn lane</xsl:message>
861 -->                     
862                         <BUSCONNY HEIGHT="{$peri_cstk_y_ + $peri_bc_y_}"/>
863                 </xsl:for-each>
864                 
865         </xsl:variable>
866
867                 <!-- Return the min of them --> 
868         <xsl:value-of select="math:min(exsl:node-set($busConnYs_)/BUSCONNY/@HEIGHT)"/>
869         
870 </xsl:template>
871         
872 <xsl:template name="_calc_Stack_Height">
873         <xsl:param name="stackIdx"  select="100"/>
874         
875         <xsl:variable name="stack_height_">
876                 <!-- if this is called with no vert index of a shape 
877                          it defaults to the total height of the stack -->
878                 <xsl:call-template name="_calc_Stack_Shape_Y">
879                         <xsl:with-param name="horizIdx"  select="$stackIdx"/>
880                 </xsl:call-template>
881         </xsl:variable>
882         
883         <xsl:value-of select="$stack_height_"/>
884 </xsl:template>
885         
886 <!--    
887 -->     
888         
889         
890 <xsl:template name="_calc_Stack_Width">
891         <xsl:param name="stackIdx"  select="100"/>
892         
893 <!--    
894         <xsl:message>=============Stack Idx <xsl:value-of select="$stackIdx"/>====</xsl:message>                        
895 -->     
896         <xsl:variable name="shape_widths_">     
897                 
898                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[@STACK_HORIZ_INDEX = $stackIdx])">
899                         <SHAPE WIDTH="0"/>
900                 </xsl:if>
901                         
902                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[@STACK_HORIZ_INDEX = $stackIdx])">
903                         <SHAPE WIDTH="0"/>
904                 </xsl:if>
905                         
906                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@STACK_HORIZ_INDEX = $stackIdx)]">
907 <!--                    
908                         <xsl:variable name="proc_w_">
909                                 <xsl:value-of select="$periMOD_W"/>
910                         </xsl:variable>
911                         <xsl:message>Found processor of width <xsl:value-of select="$proc_w_"/></xsl:message>
912 -->     
913                         <SHAPE WIDTH="{$periMOD_W}"/>
914                 </xsl:for-each>
915                         
916                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[(@STACK_HORIZ_INDEX = $stackIdx)]">
917                                 
918                         <xsl:variable name="shpClass_" select="@MODCLASS"/> 
919                         <xsl:variable name="shape_w_">
920                                 <xsl:choose>
921                                                 
922                                                 <xsl:when test="$shpClass_ = 'PERIPHERAL'">
923                                                         <xsl:value-of select="$periMOD_W"/>
924                                                 </xsl:when>
925                                                 
926                                                 <xsl:when test="$shpClass_ = 'MEMORY_UNIT'">
927                                                         <xsl:value-of select="($periMOD_W * @MODS_W)"/>
928                                                 </xsl:when>
929                                                 
930                                                 <xsl:otherwise>0</xsl:otherwise>
931                                                 
932                                         </xsl:choose>
933                                 </xsl:variable>
934                                 
935 <!--            
936                         <xsl:message>Found shape width <xsl:value-of select="$shape_w_"/></xsl:message>
937 -->                             
938                                 
939                         <SHAPE WIDTH="{$shape_w_}"/>
940                 </xsl:for-each>
941                         
942                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $stackIdx)]">
943                         <xsl:variable name="bucket_w_">
944                                   <xsl:value-of select="(($MOD_BKTLANE_W * 2) + (($periMOD_W * @MODS_W) + ($MOD_BUCKET_G * (@MODS_W - 1))))"/>
945                         </xsl:variable>
946                         
947 <!--                            
948                         <xsl:message>Found bucket of width <xsl:value-of select="$bucket_w_"/></xsl:message>
949 -->                             
950                         <SHAPE WIDTH="{$bucket_w_}"/>
951                 </xsl:for-each>
952                         
953         </xsl:variable>
954         
955         <xsl:value-of select="math:max(exsl:node-set($shape_widths_)/SHAPE/@WIDTH)"/>
956 </xsl:template>
957         
958         
959 <xsl:template name="_calc_Stack_X">
960         <xsl:param name="stackIdx"  select="0"/>
961         
962         <!-- Store the stack widths in a variable -->   
963         
964 <!--    
965         <xsl:message>Looking for stack indexes less than <xsl:value-of select="$stackIdx"/></xsl:message>
966 -->     
967         
968         <xsl:variable name="stackspace_widths_">
969                 
970                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES[(@STACK_HORIZ_INDEX &lt; $stackIdx)])">
971                         <STACKSPACE WIDTH="0"/>
972                 </xsl:if>
973                 
974                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES[(@STACK_HORIZ_INDEX &lt; $stackIdx)])">
975                         <STACKSPACE WIDTH="0"/>
976                 </xsl:if>
977                 
978                 <xsl:if test="not(/EDKSYSTEM/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX &lt; $stackIdx)])">
979                         <STACKSPACE WIDTH="0"/>
980                 </xsl:if>
981                 
982                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST &lt;= $stackIdx)]">
983                         
984 <!--            
985                         <xsl:message>==============================</xsl:message>
986                         <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
987 -->     
988                         
989                         <xsl:variable name="space_width_" select="($BUS_LANE_W * @BUSLANES_W)"/>
990 <!--                    
991                         <xsl:message>Bus lane space width <xsl:value-of select="@BUSLANES_W"/></xsl:message>
992                         <xsl:message>Bus lane space is <xsl:value-of select="$space_width_"/></xsl:message>
993 -->     
994                         
995                                 <xsl:variable name="stack_width_">
996                                         <xsl:if test="not(@EAST = $stackIdx)">
997                                                 <xsl:call-template name="_calc_Stack_Width">
998                                                         <xsl:with-param name="stackIdx"  select="@EAST"/>
999                                                 </xsl:call-template>
1000                                         </xsl:if>
1001                                         <xsl:if test="(@EAST = $stackIdx)">0</xsl:if>
1002                                 </xsl:variable>
1003                         
1004 <!--                    
1005                         <xsl:message>Found stack of width <xsl:value-of select="$stack_width_"/></xsl:message>
1006                         <xsl:message>==============================</xsl:message>
1007 -->                     
1008                         
1009                         <STACKSPACE WIDTH="{$stack_width_ + $space_width_}"/>
1010                         
1011                 </xsl:for-each>
1012                 
1013                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(not(@EAST) and (@WEST = ($stackIdx -1)))]">
1014                         <xsl:variable name="space_width_" select="($BUS_LANE_W * @BUSLANES_W)"/>
1015                         
1016 <!--                    
1017                         <xsl:message>Found end space of <xsl:value-of select="$space_width_"/></xsl:message>
1018 -->                     
1019                         <STACKSPACE WIDTH="{$space_width_}"/>
1020                 </xsl:for-each>
1021                 
1022                 
1023         </xsl:variable>
1024         
1025         <xsl:value-of select="sum(exsl:node-set($stackspace_widths_)/STACKSPACE/@WIDTH)"/>
1026         
1027 </xsl:template> 
1028         
1029 <xsl:template name="_calc_Space_Width">
1030         
1031         <xsl:param name="stackToWest"  select="'NONE'"/>
1032         <xsl:param name="stackToEast"  select="'NONE'"/>
1033         
1034 <!--    
1035         <xsl:message>Stack to West <xsl:value-of select="$stackToWest"/></xsl:message>
1036         <xsl:message>Stack to East <xsl:value-of select="$stackToEast"/></xsl:message>
1037 -->     
1038         
1039         <xsl:variable name="spaceWidth_">
1040                 <xsl:choose>
1041                         <xsl:when test="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[((@EAST = $stackToEast) or (not($stackToWest = 'NONE') and (@WEST = $stackToWest)))]">
1042                                 <xsl:value-of select="((/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[((@EAST = $stackToEast) or (not($stackToWest = 'NONE') and (@WEST = $stackToWest)))]/@BUSLANES_W) * $BUS_LANE_W)"/>
1043                         </xsl:when>     
1044                         <xsl:otherwise>0</xsl:otherwise>        
1045                 </xsl:choose>   
1046         </xsl:variable> 
1047         
1048 <!--    
1049         <xsl:message>Space width <xsl:value-of select="$spaceWidth_"/></xsl:message>
1050 -->     
1051         
1052         <xsl:value-of select="$spaceWidth_"/>
1053 </xsl:template>
1054         
1055         
1056         
1057         
1058 <xsl:template name="_calc_Space_X">
1059         
1060         <xsl:param name="stackToWest"  select="'NONE'"/>
1061         <xsl:param name="stackToEast"  select="'NONE'"/>
1062         
1063 <!--    
1064         <xsl:message>Stack East <xsl:value-of select="$stackToEast"/></xsl:message>
1065         <xsl:message>Stack West <xsl:value-of select="$stackToWest"/></xsl:message>
1066 -->     
1067         
1068         <!-- Store the stack widths in a variable -->   
1069         
1070 <!--    
1071         <xsl:message>Looking for stack indexes less than <xsl:value-of select="$stackIdx"/></xsl:message>
1072 -->     
1073         
1074         <xsl:variable name="stackspace_widths_">
1075                 
1076                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES[(@STACK_HORIZ_INDEX &lt; $stackToEast)])">
1077                         <STACKSPACE WIDTH="0"/>
1078                 </xsl:if>
1079                 
1080                 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES[(@STACK_HORIZ_INDEX &lt; $stackToEast)])">
1081                         <STACKSPACE WIDTH="0"/>
1082                 </xsl:if>
1083                 
1084                 <xsl:if test="not(/EDKSYSTEM/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX &lt; $stackToEast)])">
1085                         <STACKSPACE WIDTH="0"/>
1086                 </xsl:if>
1087                 
1088                 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[((@EAST &lt; $stackToEast) or (not($stackToWest = 'NONE') and (@EAST &lt;= $stackToWest)))]">
1089                         
1090 <!--            
1091                         <xsl:message>==============================</xsl:message>
1092                         <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
1093 -->     
1094                         
1095                         <xsl:variable name="space_width_" select="($BUS_LANE_W * @BUSLANES_W)"/>
1096 <!--                    
1097                         <xsl:message>Bus lane space width <xsl:value-of select="@BUSLANES_W"/></xsl:message>
1098                         <xsl:message>Bus lane space is <xsl:value-of select="$space_width_"/></xsl:message>
1099 -->     
1100                                 <xsl:variable name="stack_width_">
1101                                         <xsl:call-template name="_calc_Stack_Width">
1102                                                 <xsl:with-param name="stackIdx"  select="@EAST"/>
1103                                         </xsl:call-template>
1104                                 </xsl:variable>
1105                         
1106 <!--                    
1107                         <xsl:message>Found stack of width <xsl:value-of select="$stack_width_"/></xsl:message>
1108                         <xsl:message>==============================</xsl:message>
1109 -->                     
1110                         
1111                         <STACKSPACE WIDTH="{$stack_width_ + $space_width_}"/>
1112                 </xsl:for-each>
1113         </xsl:variable>
1114         
1115         <xsl:variable name = "stackToWest_W_">
1116                 <xsl:choose>
1117                         <xsl:when test="(($stackToEast = '0')   and     ($stackToWest = 'NONE'))">0</xsl:when>
1118                         <xsl:when test="(($stackToEast = 'NONE') and not($stackToWest = 'NONE'))">
1119                                 <xsl:call-template name="_calc_Stack_Width">
1120                                         <xsl:with-param name="stackIdx"  select="$stackToWest"/>
1121                                 </xsl:call-template>
1122                         </xsl:when>
1123                         <xsl:when test="(not($stackToEast = '0') and ($stackToWest = 'NONE'))">
1124                                 <xsl:call-template name="_calc_Stack_Width">
1125                                         <xsl:with-param name="stackIdx"  select="($stackToEast - 1)"/>
1126                                 </xsl:call-template>
1127                         </xsl:when>
1128                         <xsl:otherwise>0</xsl:otherwise>
1129                 </xsl:choose>
1130         </xsl:variable>
1131         
1132 <!--    
1133         <xsl:variable name = "stackToEast_W_">
1134                 <xsl:call-template name="_calc_Stack_Width">
1135                         <xsl:with-param name="stackIdx"  select="$stackToEast"/>
1136                 </xsl:call-template>
1137         </xsl:variable>
1138         <xsl:variable name ="extSpaceEast_W_" select="ceiling($stackToEast_W_ div 2)"/>
1139 -->     
1140         
1141         <xsl:variable name ="extSpaceWest_W_" select="ceiling($stackToWest_W_ div 2)"/>
1142          
1143         <xsl:value-of select="sum(exsl:node-set($stackspace_widths_)/STACKSPACE/@WIDTH) - $extSpaceWest_W_"/>
1144 </xsl:template> 
1145
1146 </xsl:stylesheet>