1 <?xml version="1.0" standalone="no"?>
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">
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"/>
13 <xsl:template name="_calc_Proc_Height">
14 <xsl:param name="iProcInst" select="_processor_"/>
16 <xsl:variable name="tot_bifs_h_">
17 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $iProcInst)]/@BIFS_H)">0</xsl:if>
19 <xsl:if test="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $iProcInst)]/@BIFS_H">
20 <xsl:variable name="bifs_h_" select="(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $iProcInst)]/@BIFS_H)"/>
21 <xsl:value-of select="(($BLKD_BIF_H + $BLKD_BIF_GAP) * $bifs_h_)"/>
25 <xsl:value-of select="(($BLKD_MOD_LANE_H * 2) + $tot_bifs_h_ + ($BLKD_MOD_LABEL_H + $BLKD_BIF_GAP))"/>
28 <xsl:template name="_calc_Max_Proc_Height">
30 <!-- Store the heights in a variable -->
31 <xsl:variable name="proc_heights_">
33 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE)">
37 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE">
38 <xsl:variable name="procInst_" select="@INSTANCE"/>
39 <xsl:variable name="proc_height_">
40 <xsl:call-template name="_calc_Proc_Height">
41 <xsl:with-param name="iProcInst" select="$procInst_"/>
46 <xsl:message>Found Proc height as <xsl:value-of select="$proc_height_"/></xsl:message>
48 <PROC HEIGHT="{$proc_height_}"/>
52 <!-- Return the max of them -->
54 <xsl:message>Found Proc ax as <xsl:value-of select="math:max(exsl:node-set($proc_heights_)/PROC/@HEIGHT)"/></xsl:message>
57 <xsl:value-of select="math:max(exsl:node-set($proc_heights_)/PROC/@HEIGHT)"/>
61 <xsl:template name="_calc_Proc_MemoryUnits_Height">
62 <xsl:param name="iProcInst" select="_processor_"/>
64 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and (@MODCLASS = 'MEMORY_UNIT'))])">0</xsl:if>
66 <xsl:if test="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and (@MODCLASS='MEMORY_UNIT'))]">
68 <xsl:variable name="peri_gap_">
70 <xsl:when test="not(@CSTACK_INDEX)">
71 <xsl:value-of select="$BLKD_BIF_H"/>
73 <xsl:otherwise>0</xsl:otherwise>
78 <!-- Store the all memory unit heights in a variable -->
79 <xsl:variable name="memU_heights_">
80 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and (@MODCLASS='MEMORY_UNIT'))]">
82 <xsl:variable name="unitId_" select="@PSTACK_MODS_Y"/>
84 <xsl:variable name="unitHeight_">
85 <xsl:call-template name="_calc_MemoryUnit_Height">
86 <xsl:with-param name="iShapeId" select="@SHAPE_ID"/>
90 <MEM_UNIT HEIGHT="{$unitHeight_ + $peri_gap_}"/>
94 <xsl:value-of select="sum(exsl:node-set($memU_heights_)/MEM_UNIT/@HEIGHT)"/>
99 <xsl:template name="_calc_Proc_Peripherals_Height">
100 <xsl:param name="iProcInst" select="_processor_"/>
102 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and not(@MODCLASS = 'MEMORY_UNIT'))])">0</xsl:if>
104 <xsl:if test="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and not(@MODCLASS='MEMORY_UNIT'))]">
106 <xsl:variable name="peri_gap_">
107 <xsl:if test="@CSTACK_INDEX">
108 <xsl:value-of select="$BLKD_BIF_H"/>
110 <xsl:if test="not(@IS_CSTACK)">0</xsl:if>
113 <!-- Store the all peripheral heights in a variable -->
114 <xsl:variable name="peri_heights_">
116 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and not(@MODCLASS='MEMORY_UNIT'))]">
117 <xsl:for-each select="MODULE">
119 <xsl:message><xsl:value-of select="@INSTANCE"/></xsl:message>
121 <xsl:variable name="peri_height_">
122 <xsl:call-template name="_calc_PeriShape_Height">
123 <xsl:with-param name="iShapeInst" select="@INSTANCE"/>
126 <PERI HEIGHT="{$peri_height_ + $peri_gap_}"/>
131 <xsl:value-of select="sum(exsl:node-set($peri_heights_)/PERI/@HEIGHT)"/>
136 <xsl:template name="_calc_Space_AbvSbs_Height">
137 <xsl:param name="iStackToEast" select="'NONE'"/>
138 <xsl:param name="iStackToWest" select="'NONE'"/>
141 <xsl:variable name = "stackAbvSbs_West_H_">
143 <xsl:when test="(($iStackToEast = '0') and ($iStackToWest = 'NONE'))">0</xsl:when>
144 <xsl:when test="(($iStackToEast = 'NONE') and not($iStackToWest = 'NONE'))">
145 <xsl:call-template name="_calc_Stack_AbvSbs_Height">
146 <xsl:with-param name="iStackIdx" select="$iStackToWest"/>
149 <xsl:when test="(not($iStackToEast = '0') and ($iStackToWest = 'NONE'))">
150 <xsl:call-template name="_calc_Stack_AbvSbs_Height">
151 <xsl:with-param name="iStackIdx" select="($iStackToEast - 1)"/>
154 <xsl:otherwise>0</xsl:otherwise>
158 <xsl:variable name = "stackAbvSbs_East_H_">
159 <xsl:call-template name="_calc_Stack_AbvSbs_Height">
160 <xsl:with-param name="iStackIdx" select="$iStackToEast"/>
164 <xsl:variable name="stackAbvSbs_heights_">
165 <STACK HEIGHT="{$stackAbvSbs_East_H_}"/>
166 <STACK HEIGHT="{$stackAbvSbs_West_H_}"/>
169 <xsl:value-of select="math:max(exsl:node-set($stackAbvSbs_heights_)/STACK/@HEIGHT)"/>
173 <xsl:template name="_calc_Space_BlwSbs_Height">
174 <xsl:param name="iStackToEast" select="'NONE'"/>
175 <xsl:param name="iStackToWest" select="'NONE'"/>
177 <xsl:variable name = "stackBlwSbs_West_H_">
179 <xsl:when test="(($iStackToEast = '0') and ($iStackToWest = 'NONE'))">0</xsl:when>
180 <xsl:when test="(($iStackToEast = 'NONE') and not($iStackToWest = 'NONE'))">
181 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
182 <xsl:with-param name="iStackIdx" select="$iStackToWest"/>
185 <xsl:when test="(not($iStackToEast = '0') and ($iStackToWest = 'NONE'))">
186 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
187 <xsl:with-param name="iStackIdx" select="($iStackToEast - 1)"/>
194 <xsl:variable name = "stackBlwSbs_East_H_">
195 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
196 <xsl:with-param name="iStackIdx" select="$iStackToEast"/>
200 <xsl:variable name="stackBlwSbs_heights_">
201 <STACK HEIGHT="{$stackBlwSbs_East_H_}"/>
202 <STACK HEIGHT="{$stackBlwSbs_West_H_}"/>
205 <xsl:value-of select="math:max(exsl:node-set($stackBlwSbs_heights_)/STACK/@HEIGHT)"/>
210 <xsl:template name="_calc_Stack_AbvSbs_Height">
211 <xsl:param name="iStackIdx" select="100"/>
213 <xsl:message>^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^</xsl:message>
216 <xsl:if test="(not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@IS_ABVSBS))]) and
217 not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@STACK_HORIZ_INDEX = $iStackIdx)]))"><xsl:value-of select="$BLKD_PROC2SBS_GAP"/></xsl:if>
219 <xsl:if test="((/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@IS_ABVSBS))]) or
220 (/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[ (@STACK_HORIZ_INDEX = $iStackIdx)]))">
223 <xsl:variable name="peri_gap_">
224 <xsl:value-of select="$BLKD_BIF_H"/>
226 <xsl:when test="(@SHAPE_VERTI_INDEX)">
228 <xsl:otherwise>0</xsl:otherwise>
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>
243 <!-- Store the all peripheral heights in a variable -->
244 <xsl:variable name="peri_heights_">
246 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and not(@MODCLASS = 'MEMORY_UNIT') and (@IS_ABVSBS))]">
247 <xsl:for-each select="MODULE">
249 <xsl:message>This is above <xsl:value-of select="@INSTANCE"/></xsl:message>
252 <xsl:variable name="peri_height_">
254 <xsl:call-template name="_calc_Shape_Height">
255 <xsl:with-param name="shapeId" select="@SHAPE_ID"/>
259 <xsl:call-template name="_calc_PeriShape_Height">
260 <xsl:with-param name="iShapeInst" select="@INSTANCE"/>
264 <PERI HEIGHT="{$peri_height_ + $BLKD_BIF_H}"/>
268 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@MODCLASS = 'MEMORY_UNIT') and (@IS_ABVSBS))]">
270 <xsl:variable name="memu_height_">
271 <xsl:call-template name="_calc_MemoryUnit_Height">
272 <xsl:with-param name="iShapeId" select="@SHAPE_ID"/>
277 <xsl:message>Mem_Unit : <xsl:value-of select="@SHAPE_ID"/> : <xsl:value-of select="$memu_height_ + $peri_gap_"/></xsl:message>
279 <PERI HEIGHT="{$memu_height_ + $BLKD_BIF_H}"/>
283 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@IS_ABVSBS))]">
285 <xsl:variable name="proc_height_">
286 <xsl:call-template name="_calc_PeriShape_Height">
287 <xsl:with-param name="iShapeInst" select="@INSTANCE"/>
292 <xsl:message>===================================</xsl:message>
293 <xsl:message>Processor : <xsl:value-of select="@INSTANCE"/> : <xsl:value-of select="$peri_height_ + $peri_gap_"/></xsl:message>
294 <PERI HEIGHT="{$proc_height_ + $BLKD_PROC2SBS_GAP }"/>
296 <PERI HEIGHT="{$proc_height_ + $BLKD_BIF_H}"/>
303 <xsl:message><xsl:value-of select="@INSTANCE"/> : <xsl:value-of select="$peri_height_ + $peri_gap_"/></xsl:message>
304 <xsl:message>================================</xsl:message>
308 <xsl:message>^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^</xsl:message>
310 <xsl:value-of select="sum(exsl:node-set($peri_heights_)/PERI/@HEIGHT)"/>
315 <xsl:template name="_calc_Stack_BlwSbs_Height">
316 <xsl:param name="iStackIdx" select="100"/>
318 <!-- Store the all peripheral heights in a variable -->
319 <xsl:variable name="stack_heights_">
321 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@IS_BLWSBS))])">
322 <STACKSHAPE HEIGHT="0"/>
325 <xsl:if test="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@IS_BLWSBS))]">
327 <xsl:variable name="peri_gap_">
329 <xsl:when test="(@SHAPE_VERTI_INDEX)">
330 <xsl:value-of select="$BLKD_BIF_H"/>
332 <xsl:otherwise>0</xsl:otherwise>
336 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and not(@MODCLASS = 'MEMORY_UNIT') and (@IS_BLWSBS))]">
337 <xsl:for-each select="MODULE">
339 <xsl:message>This is below <xsl:value-of select="@INSTANCE"/></xsl:message>
341 <xsl:variable name="peri_height_">
342 <xsl:call-template name="_calc_PeriShape_Height">
343 <xsl:with-param name="iShapeInst" select="@INSTANCE"/>
347 <STACKSHAPE HEIGHT="{$peri_height_ + $peri_gap_}"/>
351 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@MODCLASS = 'MEMORY_UNIT') and (@IS_BLWSBS))]">
353 <xsl:variable name="memu_height_">
354 <xsl:call-template name="_calc_MemoryUnit_Height">
355 <xsl:with-param name="iShapeId" select="@SHAPE_ID"/>
359 <STACKSHAPE HEIGHT="{$memu_height_ + $peri_gap_}"/>
362 <xsl:message>Mem_Unit : <xsl:value-of select="@SHAPE_ID"/> : <xsl:value-of select="$memu_height_ + $peri_gap_"/></xsl:message>
368 <xsl:variable name="sbsBuckets_H_">
369 <xsl:call-template name="_calc_Stack_SbsBuckets_Height">
370 <xsl:with-param name="iStackIdx" select="$iStackIdx"/>
374 <STACKSHAPE HEIGHT="{$sbsBuckets_H_}"/>
376 <xsl:message>Sbs Bucket H : <xsl:value-of select="$sbsBuckets_H_"/></xsl:message>
381 <xsl:message>vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv</xsl:message>
383 <xsl:value-of select="sum(exsl:node-set($stack_heights_)/STACKSHAPE/@HEIGHT)"/>
388 <xsl:template name="_calc_Stack_SbsBuckets_Height">
389 <xsl:param name="iStackIdx" select="1000"/>
391 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)])">0</xsl:if>
393 <xsl:if test="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)]">
395 <!-- Store the all buckets heights in a variable -->
396 <xsl:variable name="bkt_heights_">
397 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)]">
399 <xsl:variable name="bkt_height_">
400 <xsl:call-template name="_calc_SbsBucket_Height">
401 <xsl:with-param name="iBucketId" select="@BUSINDEX"/>
405 <xsl:message>Found shared buckets height as <xsl:value-of select="$bkt_height_"/></xsl:message>
407 <BKT HEIGHT="{$bkt_height_ + $BLKD_BIF_H}"/>
411 <xsl:value-of select="sum(exsl:node-set($bkt_heights_)/BKT/@HEIGHT)"/>
416 <xsl:template name="_calc_Max_Stack_BlwSbs_Height">
418 <!-- Store the heights in a variable -->
419 <xsl:variable name="blwSbs_heights_">
421 <!-- Default, in case there are no modules or ports -->
424 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST < /EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH)]">
427 <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
430 <xsl:variable name="stack_height_">
431 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
432 <xsl:with-param name="iStackIdx" select="@EAST"/>
437 <BLW HEIGHT="{$stack_height_}"/>
441 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@WEST = (/EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH -1))]">
444 <xsl:message>Last stack of index <xsl:value-of select="@WEST"/></xsl:message>
447 <xsl:variable name="stack_height_">
448 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
449 <xsl:with-param name="iStackIdx" select="@WEST"/>
454 <BLW HEIGHT="{$stack_height_}"/>
462 <xsl:message>Found Blw Sbs max as <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/></xsl:message>
464 <!-- Return the max of them -->
465 <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/>
469 <xsl:template name="_calc_Max_Stack_AbvSbs_Height">
471 <!-- Store the heights in a variable -->
472 <xsl:variable name="abvSbs_heights_">
474 <!-- Default, in case there are no modules or ports -->
477 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST < /EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH)]">
480 <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
483 <xsl:variable name="stack_height_">
484 <xsl:call-template name="_calc_Stack_AbvSbs_Height">
485 <xsl:with-param name="iStackIdx" select="@EAST"/>
490 <xsl:message>Found stack of width <xsl:value-of select="$stack_width_"/></xsl:message>
491 <xsl:message>==============================</xsl:message>
494 <ABV HEIGHT="{$stack_height_}"/>
502 <xsl:message>Found Blw Sbs max as <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/></xsl:message>
504 <!-- Return the max of them -->
505 <xsl:value-of select="math:max(exsl:node-set($abvSbs_heights_)/ABV/@HEIGHT)"/>
509 <xsl:template name="_calc_Max_Proc_PerisAbvSbs_Height">
510 <xsl:param name="iProcInst" select="_processor_"/>
512 <!-- Store the heights in a variable -->
513 <xsl:variable name="abvSbs_heights_">
514 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE)">
517 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE">
518 <xsl:variable name="procInst_" select="@INSTANCE"/>
520 <xsl:message>Found Blw Sbs height as <xsl:value-of select="$blwSbs_"/></xsl:message>
521 <ABV HEIGHT="{$pAbvSbs_}"/>
524 <xsl:variable name="pAbvSbs_">
525 <xsl:call-template name="_calc_Proc_PerisAbvSbs_Height">
526 <xsl:with-param name="iProcInst" select="$iProcInst_"/>
530 <xsl:variable name="memUs_">
531 <xsl:call-template name="_calc_Proc_MemoryUnits_Height">
532 <xsl:with-param name="iProcInst" select="$iProcInst_"/>
537 <xsl:message>Found Peris Above height as <xsl:value-of select="$pAbvSbs_"/></xsl:message>
538 <xsl:message>Found MemUs Above height as <xsl:value-of select="$memUs_"/></xsl:message>
539 <xsl:message>Found PAbv Above height as <xsl:value-of select="($pAbvSbs_ + $memUs_)"/></xsl:message>
541 <ABV HEIGHT="{$pAbvSbs_ + $memUs_}"/>
546 <xsl:message>Found Abv Sbs max as <xsl:value-of select="math:max(exsl:node-set($abvSbs_heights_)/ABV/@HEIGHT)"/></xsl:message>
549 <!-- Return the max of them -->
550 <xsl:value-of select="math:max(exsl:node-set($abvSbs_heights_)/ABV/@HEIGHT)"/>
554 <xsl:template name="_calc_MultiProc_Stack_Height">
555 <xsl:param name="iMPStack_Blkd_X" select="100"/>
557 <xsl:variable name="mpStk_ShpHeights_">
558 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@HAS_MULTIPROCCONNS) and (@PSTACK_BLKD_X = $iMPStack_Blkd_X))])">
559 <MPSHAPE HEIGHT="0"/>
562 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@HAS_MULTIPROCCONNS) and (@PSTACK_BLKD_X = $iMPStack_Blkd_X))]">
563 <xsl:variable name="shpClass_" select="@MODCLASS"/>
564 <xsl:variable name="shpHeight_">
566 <xsl:when test="$shpClass_ = 'PERIPHERAL'">
568 <xsl:message>Found Multi Proc Peripheral</xsl:message>
570 <xsl:call-template name="_calc_PeriShape_Height">
571 <xsl:with-param name="iShapeInst" select="MODULE/@INSTANCE"/>
574 <xsl:when test="$shpClass_ = 'MEMORY_UNIT'">
576 <xsl:message>Found Multi Proc Memory Unit</xsl:message>
578 <xsl:call-template name="_calc_MemoryUnit_Height">
579 <xsl:with-param name="iShapeIndex" select="@CSHAPE_INDEX"/>
582 <xsl:otherwise>0</xsl:otherwise>
587 <xsl:message>Found <xsl:value-of select="$shpHeight_"/></xsl:message>
590 <MPSHAPE HEIGHT="{$shpHeight_}"/>
595 <xsl:message>Found stack of height <xsl:value-of select="sum(exsl:node-set($mpStk_ShpHeights_)/MPSHAPE/@HEIGHT)"/></xsl:message>
598 <xsl:value-of select="sum(exsl:node-set($mpStk_ShpHeights_)/MPSHAPE/@HEIGHT)"/>
601 <xsl:template name="_calc_Max_MultiProc_Stack_Height">
603 <!-- Store the heights in a variable -->
605 <xsl:variable name="mpStks_Heights_">
606 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE)">
609 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@PSTACK_BLKD_X)]">
610 <xsl:variable name="mpstack_height_">
611 <xsl:call-template name="_calc_MultiProc_Stack_Height">
612 <xsl:with-param name="iMPStack_Blkd_X" select="(@PSTACK_BLKD_X + 1)"/>
617 <xsl:message>Found <xsl:value-of select="$mpstack_height_"/></xsl:message>
619 <MPSTK HEIGHT="{$mpstack_height_}"/>
624 <!-- Return the max of them -->
625 <xsl:value-of select="math:max(exsl:node-set($mpStks_Heights_)/MPSTK/@HEIGHT)"/>
631 <xsl:template name="_calc_Stack_Shape_Y">
633 <xsl:param name="iHorizIdx" select="100"/>
634 <xsl:param name="iVertiIdx" select="100"/>
638 <xsl:message>Y at H index <xsl:value-of select="$iHorizIdx"/></xsl:message>
639 <xsl:message>Y at V index <xsl:value-of select="$iVertiIdx"/></xsl:message>
640 <xsl:param name="sbsGap" select="0"/>
641 <xsl:variable name="numSBSs_" select="count(/EDKSYSTEM/BLKDSHAPES/SBSSHAPES/MODULE)"/>
642 <xsl:variable name="sbs_LANE_H_" select="($numSBSs_ * $BLKD_SBS_LANE_H)"/>
643 <xsl:variable name="sbsGap_" select="($BLKD_PROC2SBS_GAP + $sbs_LANE_H_)"/>
646 <xsl:variable name="sbsGap_" select="((count(/EDKSYSTEM/BLKDSHAPES/SBSSHAPES/MODULE) * $BLKD_SBS_LANE_H) + $BLKD_PROC2SBS_GAP)"/>
648 <xsl:if test="(not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]) and
649 not(/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[( (@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]) and
650 not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[( (@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]))">0</xsl:if>
653 <xsl:if test="((/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]) or
654 (/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[( (@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]) or
655 (/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[( (@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]))">
656 <!-- Store the spaces above this one in a variable -->
657 <xsl:variable name="spaces_above_">
659 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX < $iVertiIdx))])">
663 <!-- Store the height of all peripherals and memory units above this one-->
664 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX < $iVertiIdx))]">
666 <xsl:if test="not(@MODCLASS='MEMORY_UNIT')">
667 <xsl:variable name="peri_height_">
668 <xsl:call-template name="_calc_Shape_Height">
669 <xsl:with-param name="iShapeId" select="@SHAPE_ID"/>
673 <xsl:message>Found peri height <xsl:value-of select="$peri_height_"/></xsl:message>
675 <SPACE HEIGHT="{$peri_height_ + $BLKD_BIF_H}"/>
678 <xsl:if test="(@MODCLASS='MEMORY_UNIT')">
679 <xsl:variable name="memu_height_">
680 <xsl:call-template name="_calc_MemoryUnit_Height">
681 <xsl:with-param name="iShapeId" select="@SHAPE_ID"/>
685 <xsl:message>Found unit height <xsl:value-of select="$memu_height_"/></xsl:message>
687 <SPACE HEIGHT="{$memu_height_ + $BLKD_BIF_H}"/>
692 <!-- Store the height of all the processors above this one-->
693 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX < $iVertiIdx))]">
694 <xsl:variable name="proc_height_">
695 <xsl:call-template name="_calc_PeriShape_Height">
696 <xsl:with-param name="iShapeInst" select="@INSTANCE"/>
700 <SPACE HEIGHT="{$proc_height_ + $BLKD_BIF_H}"/>
703 <!-- If its a peripheral that is below the shared busses, or its a shared bus bucket -->
704 <!-- add the height of the shared busses and the processor. -->
705 <xsl:if test="(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]/@IS_BLWSBS)">
706 <SPACE HEIGHT="{$sbsGap_}"/>
708 <xsl:if test="(/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))])">
709 <SPACE HEIGHT="{$sbsGap_}"/>
712 <!-- Store the height of all shared bus buckets above this one-->
713 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX < $iVertiIdx))]">
714 <xsl:variable name="bkt_height_">
715 <xsl:call-template name="_calc_SbsBucket_Height">
716 <xsl:with-param name="iBucketId" select="@BUSINDEX"/>
720 <SPACE HEIGHT="{$bkt_height_ + $BLKD_BIF_H}"/>
725 <xsl:value-of select="sum(exsl:node-set($spaces_above_)/SPACE/@HEIGHT)"/>
731 <xsl:template name="_calc_Max_BusConnLane_BifY">
733 <xsl:param name="iBusName" select="'_busname_'"/>
735 <!-- Store the heights in a variable -->
736 <xsl:variable name="busConnYs_">
738 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE/BUSCONN)">
739 <BUSCONNY HEIGHT="0"/>
742 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE[(@BUSNAME = $iBusName)]/BUSCONN">
744 <xsl:variable name="peri_cstk_y_">
745 <xsl:call-template name="_calc_CStackShapesAbv_Height">
746 <xsl:with-param name="iCStackIndex" select="../@CSTACK_INDEX"/>
747 <xsl:with-param name="ICStackModY" select="@CSTACK_MODS_Y"/>
751 <xsl:variable name="peri_bif_dy_">
752 <xsl:value-of select="(($BLKD_BIF_H + $BLKD_BIF_GAP) * @BIF_Y)"/>
755 <xsl:variable name="peri_bc_y_">
756 <xsl:value-of select="($BLKD_MOD_LANE_H + $BLKD_MOD_LABEL_H + $BLKD_BIF_GAP + $peri_bif_dy_ + ceiling($BLKD_BIF_H div 2)) - ceiling($BLKD_BIFC_H div 2)"/>
760 <xsl:message>Found a busconn lane</xsl:message>
762 <BUSCONNY HEIGHT="{$peri_cstk_y_ + $peri_bif_dy_ + $peri_bc_y_}"/>
767 <!-- Return the max of them -->
768 <xsl:value-of select="math:max(exsl:node-set($busConnYs_)/BUSCONNY/@HEIGHT)"/>
773 <xsl:template name="_calc_Min_BusConnLane_BifY">
775 <xsl:param name="iBusName" select="'_busname_'"/>
777 <!-- Store the heights in a variable -->
778 <xsl:variable name="busConnYs_">
780 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE/BUSCONN)">
781 <BUSCONNY HEIGHT="0"/>
784 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE[(@BUSNAME = $iBusName)]/BUSCONN">
786 <xsl:variable name="peri_cstk_y_">
787 <xsl:call-template name="_calc_CStackShapesAbv_Height">
788 <xsl:with-param name="iCStackIndex" select="../@CSTACK_INDEX"/>
789 <xsl:with-param name="iCStackModY" select="@CSTACK_MODS_Y"/>
793 <xsl:variable name="peri_bif_dy_">
794 <xsl:value-of select="(($BLKD_BIF_H + $BLKD_BIF_GAP) * @BIF_Y)"/>
797 <xsl:variable name="peri_bc_y_">
798 <xsl:value-of select="($BLKD_MOD_LANE_H + $BLKD_MOD_LABEL_H + $BLKD_BIF_GAP + $peri_bif_dy_ + ceiling($BLKD_BIF_H div 2)) - ceiling($BLKD_BIFC_H div 2)"/>
802 <xsl:message>Found a busconn lane</xsl:message>
804 <BUSCONNY HEIGHT="{$peri_cstk_y_ + $peri_bc_y_}"/>
809 <!-- Return the min of them -->
810 <xsl:value-of select="math:min(exsl:node-set($busConnYs_)/BUSCONNY/@HEIGHT)"/>
814 <xsl:template name="_calc_Stack_Height">
815 <xsl:param name="iStackIdx" select="100"/>
817 <xsl:variable name="stack_height_">
818 <!-- if this is called with no vert index of a shape
819 it defaults to the total height of the stack -->
820 <xsl:call-template name="_calc_Stack_Shape_Y">
821 <xsl:with-param name="iHorizIdx" select="$iStackIdx"/>
825 <xsl:value-of select="$stack_height_"/>
832 <xsl:template name="_calc_Stack_Width">
833 <xsl:param name="iStackIdx" select="100"/>
836 <xsl:message>=============Stack Idx <xsl:value-of select="$iStackIdx"/>====</xsl:message>
838 <xsl:variable name="shape_widths_">
840 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[@STACK_HORIZ_INDEX = $iStackIdx])">
844 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[@STACK_HORIZ_INDEX = $iStackIdx])">
848 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@STACK_HORIZ_INDEX = $iStackIdx)]">
850 <xsl:variable name="proc_w_">
851 <xsl:value-of select="$BLKD_MOD_W"/>
853 <xsl:message>Found processor of width <xsl:value-of select="$proc_w_"/></xsl:message>
855 <SHAPE WIDTH="{$BLKD_MOD_W}"/>
858 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[(@STACK_HORIZ_INDEX = $iStackIdx)]">
860 <xsl:variable name="shpClass_" select="@MODCLASS"/>
861 <xsl:variable name="shape_w_">
864 <xsl:when test="$shpClass_ = 'PERIPHERAL'">
865 <xsl:value-of select="$BLKD_MOD_W"/>
868 <xsl:when test="$shpClass_ = 'MEMORY_UNIT'">
869 <xsl:value-of select="($BLKD_MOD_W * @MODS_W)"/>
872 <xsl:otherwise>0</xsl:otherwise>
878 <xsl:message>Found shape width <xsl:value-of select="$shape_w_"/></xsl:message>
881 <SHAPE WIDTH="{$shape_w_}"/>
884 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)]">
885 <xsl:variable name="bucket_w_">
886 <xsl:value-of select="(($BLKD_MOD_BKTLANE_W * 2) + (($BLKD_MOD_W * @MODS_W) + ($BLKD_MOD_BUCKET_G * (@MODS_W - 1))))"/>
890 <xsl:message>Found bucket of width <xsl:value-of select="$bucket_w_"/></xsl:message>
892 <SHAPE WIDTH="{$bucket_w_}"/>
897 <xsl:value-of select="math:max(exsl:node-set($shape_widths_)/SHAPE/@WIDTH)"/>
901 <xsl:template name="_calc_Stack_X">
902 <xsl:param name="iStackIdx" select="0"/>
904 <xsl:message>Looking for stack indexes less than <xsl:value-of select="$iStackIdx"/></xsl:message>
907 <!-- Store the stack widths in a variable -->
908 <xsl:variable name="stackspace_widths_">
910 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES[(@STACK_HORIZ_INDEX < $iStackIdx)])">
911 <STACKSPACE WIDTH="0"/>
914 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES[(@STACK_HORIZ_INDEX < $iStackIdx)])">
915 <STACKSPACE WIDTH="0"/>
918 <xsl:if test="not(/EDKSYSTEM/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX < $iStackIdx)])">
919 <STACKSPACE WIDTH="0"/>
922 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST <= $iStackIdx)]">
925 <xsl:message>==============================</xsl:message>
926 <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
927 <xsl:message>Bus lane space width <xsl:value-of select="@BUSLANES_W"/></xsl:message>
928 <xsl:message>Bus lane space is <xsl:value-of select="$space_width_"/></xsl:message>
930 <xsl:variable name="space_width_" select="($BLKD_BUS_LANE_W * @BUSLANES_W)"/>
931 <xsl:variable name="stack_width_">
932 <xsl:if test="not(@EAST = $iStackIdx)">
933 <xsl:call-template name="_calc_Stack_Width">
934 <xsl:with-param name="iStackIdx" select="@EAST"/>
937 <xsl:if test="(@EAST = $iStackIdx)">0</xsl:if>
941 <xsl:message>Found stack of width <xsl:value-of select="$stack_width_"/></xsl:message>
942 <xsl:message>==============================</xsl:message>
945 <STACKSPACE WIDTH="{$stack_width_ + $space_width_}"/>
949 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(not(@EAST) and (@WEST = ($iStackIdx -1)))]">
950 <xsl:variable name="space_width_" select="($BLKD_BUS_LANE_W * @BUSLANES_W)"/>
953 <xsl:message>Found end space of <xsl:value-of select="$space_width_"/></xsl:message>
955 <STACKSPACE WIDTH="{$space_width_}"/>
961 <xsl:value-of select="sum(exsl:node-set($stackspace_widths_)/STACKSPACE/@WIDTH)"/>
965 <xsl:template name="_calc_Space_Width">
967 <xsl:param name="iStackToWest" select="'NONE'"/>
968 <xsl:param name="iStackToEast" select="'NONE'"/>
971 <xsl:message>Stack to West <xsl:value-of select="$stackToWest"/></xsl:message>
972 <xsl:message>Stack to East <xsl:value-of select="$stackToEast"/></xsl:message>
975 <xsl:variable name="spaceWidth_">
977 <xsl:when test="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[((@EAST = $iStackToEast) or (not($iStackToWest = 'NONE') and (@WEST = $iStackToWest)))]">
978 <xsl:value-of select="((/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[((@EAST = $iStackToEast) or (not($iStackToWest = 'NONE') and (@WEST = $iStackToWest)))]/@BUSLANES_W) * $BLKD_BUS_LANE_W)"/>
980 <xsl:otherwise>0</xsl:otherwise>
985 <xsl:message>Space width <xsl:value-of select="$spaceWidth_"/></xsl:message>
988 <xsl:value-of select="$spaceWidth_"/>
992 <xsl:template name="_calc_Space_X">
994 <xsl:param name="iStackToWest" select="'NONE'"/>
995 <xsl:param name="iStackToEast" select="'NONE'"/>
998 <xsl:message>Stack East <xsl:value-of select="$stackToEast"/></xsl:message>
999 <xsl:message>Stack West <xsl:value-of select="$stackToWest"/></xsl:message>
1002 <!-- Store the stack widths in a variable -->
1005 <xsl:message>Looking for stack indexes less than <xsl:value-of select="$stackIdx"/></xsl:message>
1008 <xsl:variable name="stackspace_widths_">
1010 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES[(@STACK_HORIZ_INDEX < $iStackToEast)])">
1011 <STACKSPACE WIDTH="0"/>
1014 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES[(@STACK_HORIZ_INDEX < $iStackToEast)])">
1015 <STACKSPACE WIDTH="0"/>
1018 <xsl:if test="not(/EDKSYSTEM/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX < $iStackToEast)])">
1019 <STACKSPACE WIDTH="0"/>
1022 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[((@EAST < $iStackToEast) or (not($iStackToWest = 'NONE') and (@EAST <= $iStackToWest)))]">
1025 <xsl:message>==============================</xsl:message>
1026 <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
1029 <xsl:variable name="space_width_" select="($BLKD_BUS_LANE_W * @BUSLANES_W)"/>
1031 <xsl:message>Bus lane space width <xsl:value-of select="@BUSLANES_W"/></xsl:message>
1032 <xsl:message>Bus lane space is <xsl:value-of select="$space_width_"/></xsl:message>
1034 <xsl:variable name="stack_width_">
1035 <xsl:call-template name="_calc_Stack_Width">
1036 <xsl:with-param name="iStackIdx" select="@EAST"/>
1037 </xsl:call-template>
1041 <xsl:message>Found stack of width <xsl:value-of select="$stack_width_"/></xsl:message>
1042 <xsl:message>==============================</xsl:message>
1045 <STACKSPACE WIDTH="{$stack_width_ + $space_width_}"/>
1049 <xsl:variable name = "stackToWest_W_">
1051 <xsl:when test="(($iStackToEast = '0') and ($iStackToWest = 'NONE'))">0</xsl:when>
1052 <xsl:when test="(($iStackToEast = 'NONE') and not($iStackToWest = 'NONE'))">
1053 <xsl:call-template name="_calc_Stack_Width">
1054 <xsl:with-param name="iStackIdx" select="$iStackToWest"/>
1055 </xsl:call-template>
1057 <xsl:when test="(not($iStackToEast = '0') and ($iStackToWest = 'NONE'))">
1058 <xsl:call-template name="_calc_Stack_Width">
1059 <xsl:with-param name="iStackIdx" select="($iStackToEast - 1)"/>
1060 </xsl:call-template>
1062 <xsl:otherwise>0</xsl:otherwise>
1067 <xsl:variable name = "stackToEast_W_">
1068 <xsl:call-template name="_calc_Stack_Width">
1069 <xsl:with-param name="stackIdx" select="$stackToEast"/>
1070 </xsl:call-template>
1072 <xsl:variable name ="extSpaceEast_W_" select="ceiling($stackToEast_W_ div 2)"/>
1075 <xsl:variable name ="extSpaceWest_W_" select="ceiling($stackToWest_W_ div 2)"/>
1077 <xsl:value-of select="sum(exsl:node-set($stackspace_widths_)/STACKSPACE/@WIDTH) - $extSpaceWest_W_"/>