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