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="procInst" select="_processor_"/>
16 <xsl:variable name="tot_bifs_h_">
17 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $procInst)]/@BIFS_H)">0</xsl:if>
19 <xsl:if test="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $procInst)]/@BIFS_H">
20 <xsl:variable name="bifs_h_" select="(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $procInst)]/@BIFS_H)"/>
21 <xsl:value-of select="(($BIF_H + $BIF_GAP) * $bifs_h_)"/>
25 <xsl:value-of select="(($MOD_LANE_H * 2) + $tot_bifs_h_ + ($MOD_LABEL_H + $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="procInst" 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="procInst" select="_processor_"/>
64 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $procInst) and (@MODCLASS = 'MEMORY_UNIT'))])">0</xsl:if>
66 <xsl:if test="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $procInst) and (@MODCLASS='MEMORY_UNIT'))]">
68 <xsl:variable name="peri_gap_">
70 <xsl:when test="not(@CSTACK_INDEX)">
71 <xsl:value-of select="$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 = $procInst) 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="shapeId" 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="procInst" select="_processor_"/>
102 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $procInst) and not(@MODCLASS = 'MEMORY_UNIT'))])">0</xsl:if>
104 <xsl:if test="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $procInst) and not(@MODCLASS='MEMORY_UNIT'))]">
106 <xsl:variable name="peri_gap_">
107 <xsl:if test="@CSTACK_INDEX">
108 <xsl:value-of select="$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 = $procInst) 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="shapeInst" 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="stackToEast" select="'NONE'"/>
138 <xsl:param name="stackToWest" select="'NONE'"/>
141 <xsl:variable name = "stackAbvSbs_West_H_">
143 <xsl:when test="(($stackToEast = '0') and ($stackToWest = 'NONE'))">0</xsl:when>
144 <xsl:when test="(($stackToEast = 'NONE') and not($stackToWest = 'NONE'))">
145 <xsl:call-template name="_calc_Stack_AbvSbs_Height">
146 <xsl:with-param name="stackIdx" select="$stackToWest"/>
149 <xsl:when test="(not($stackToEast = '0') and ($stackToWest = 'NONE'))">
150 <xsl:call-template name="_calc_Stack_AbvSbs_Height">
151 <xsl:with-param name="stackIdx" select="($stackToEast - 1)"/>
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="stackIdx" select="$stackToEast"/>
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="stackToEast" select="'NONE'"/>
175 <xsl:param name="stackToWest" select="'NONE'"/>
177 <xsl:variable name = "stackBlwSbs_West_H_">
179 <xsl:when test="(($stackToEast = '0') and ($stackToWest = 'NONE'))">0</xsl:when>
180 <xsl:when test="(($stackToEast = 'NONE') and not($stackToWest = 'NONE'))">
181 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
182 <xsl:with-param name="stackIdx" select="$stackToWest"/>
185 <xsl:when test="(not($stackToEast = '0') and ($stackToWest = 'NONE'))">
186 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
187 <xsl:with-param name="stackIdx" select="($stackToEast - 1)"/>
194 <xsl:variable name = "stackBlwSbs_East_H_">
195 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
196 <xsl:with-param name="stackIdx" select="$stackToEast"/>
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="stackIdx" select="100"/>
213 <xsl:message>^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^</xsl:message>
216 <xsl:if test="(not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $stackIdx) and (@IS_ABVSBS))]) and
217 not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@STACK_HORIZ_INDEX = $stackIdx)]))"><xsl:value-of select="$PROC2SBS_GAP"/></xsl:if>
219 <xsl:if test="((/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $stackIdx) and (@IS_ABVSBS))]) or
220 (/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@STACK_HORIZ_INDEX = $stackIdx)]))">
223 <xsl:variable name="peri_gap_">
224 <xsl:value-of select="$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 = $stackIdx) 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="shapeInst" select="@INSTANCE"/>
264 <PERI HEIGHT="{$peri_height_ + $BIF_H}"/>
268 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $stackIdx) 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="shapeId" 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_ + $BIF_H}"/>
283 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[((@STACK_HORIZ_INDEX = $stackIdx) and (@IS_ABVSBS))]">
285 <xsl:variable name="proc_height_">
286 <xsl:call-template name="_calc_PeriShape_Height">
287 <xsl:with-param name="shapeInst" 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_ + $PROC2SBS_GAP }"/>
296 <PERI HEIGHT="{$proc_height_ + $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="stackIdx" select="100"/>
321 <!-- Store the all peripheral heights in a variable -->
322 <xsl:variable name="stack_heights_">
324 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $stackIdx) and (@IS_BLWSBS))])">
325 <STACKSHAPE HEIGHT="0"/>
328 <xsl:if test="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $stackIdx) and (@IS_BLWSBS))]">
330 <xsl:message>vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv</xsl:message>
333 <xsl:variable name="peri_gap_">
335 <xsl:when test="(@SHAPE_VERTI_INDEX)">
336 <xsl:value-of select="$BIF_H"/>
338 <xsl:otherwise>0</xsl:otherwise>
342 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $stackIdx) and not(@MODCLASS = 'MEMORY_UNIT') and (@IS_BLWSBS))]">
343 <xsl:for-each select="MODULE">
345 <xsl:message>This is below <xsl:value-of select="@INSTANCE"/></xsl:message>
347 <xsl:variable name="peri_height_">
348 <xsl:call-template name="_calc_PeriShape_Height">
349 <xsl:with-param name="shapeInst" select="@INSTANCE"/>
353 <STACKSHAPE HEIGHT="{$peri_height_ + $peri_gap_}"/>
357 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $stackIdx) and (@MODCLASS = 'MEMORY_UNIT') and (@IS_BLWSBS))]">
359 <xsl:variable name="memu_height_">
360 <xsl:call-template name="_calc_MemoryUnit_Height">
361 <xsl:with-param name="shapeId" select="@SHAPE_ID"/>
365 <STACKSHAPE HEIGHT="{$memu_height_ + $peri_gap_}"/>
368 <xsl:message>Mem_Unit : <xsl:value-of select="@SHAPE_ID"/> : <xsl:value-of select="$memu_height_ + $peri_gap_"/></xsl:message>
374 <xsl:variable name="sbsBuckets_H_">
375 <xsl:call-template name="_calc_Stack_SbsBuckets_Height">
376 <xsl:with-param name="stackIdx" select="$stackIdx"/>
380 <STACKSHAPE HEIGHT="{$sbsBuckets_H_}"/>
382 <xsl:message>Sbs Bucket H : <xsl:value-of select="$sbsBuckets_H_"/></xsl:message>
387 <xsl:message>vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv</xsl:message>
389 <xsl:value-of select="sum(exsl:node-set($stack_heights_)/STACKSHAPE/@HEIGHT)"/>
394 <xsl:template name="_calc_Stack_SbsBuckets_Height">
395 <xsl:param name="stackIdx" select="1000"/>
397 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $stackIdx)])">0</xsl:if>
399 <xsl:if test="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $stackIdx)]">
401 <!-- Store the all buckets heights in a variable -->
402 <xsl:variable name="bkt_heights_">
403 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $stackIdx)]">
405 <xsl:variable name="bkt_height_">
406 <xsl:call-template name="_calc_SbsBucket_Height">
407 <xsl:with-param name="bucketId" select="@BUSINDEX"/>
411 <xsl:message>Found shared buckets height as <xsl:value-of select="$bkt_height_"/></xsl:message>
413 <BKT HEIGHT="{$bkt_height_ + $BIF_H}"/>
417 <xsl:value-of select="sum(exsl:node-set($bkt_heights_)/BKT/@HEIGHT)"/>
422 <xsl:template name="_calc_Max_Stack_BlwSbs_Height">
424 <!-- Store the heights in a variable -->
425 <xsl:variable name="blwSbs_heights_">
427 <!-- Default, in case there are no modules or ports -->
430 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST < /EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH)]">
433 <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
436 <xsl:variable name="stack_height_">
437 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
438 <xsl:with-param name="stackIdx" select="@EAST"/>
443 <BLW HEIGHT="{$stack_height_}"/>
447 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@WEST = (/EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH -1))]">
450 <xsl:message>Last stack of index <xsl:value-of select="@WEST"/></xsl:message>
453 <xsl:variable name="stack_height_">
454 <xsl:call-template name="_calc_Stack_BlwSbs_Height">
455 <xsl:with-param name="stackIdx" select="@WEST"/>
460 <BLW HEIGHT="{$stack_height_}"/>
468 <xsl:message>Found Blw Sbs max as <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/></xsl:message>
470 <!-- Return the max of them -->
471 <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/>
475 <xsl:template name="_calc_Max_Stack_AbvSbs_Height">
477 <!-- Store the heights in a variable -->
478 <xsl:variable name="abvSbs_heights_">
480 <!-- Default, in case there are no modules or ports -->
483 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST < /EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH)]">
486 <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
489 <xsl:variable name="stack_height_">
490 <xsl:call-template name="_calc_Stack_AbvSbs_Height">
491 <xsl:with-param name="stackIdx" select="@EAST"/>
496 <xsl:message>Found stack of width <xsl:value-of select="$stack_width_"/></xsl:message>
497 <xsl:message>==============================</xsl:message>
500 <ABV HEIGHT="{$stack_height_}"/>
508 <xsl:message>Found Blw Sbs max as <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/></xsl:message>
510 <!-- Return the max of them -->
511 <xsl:value-of select="math:max(exsl:node-set($abvSbs_heights_)/ABV/@HEIGHT)"/>
515 <xsl:template name="_calc_Max_Proc_PerisAbvSbs_Height">
516 <xsl:param name="procInst" select="_processor_"/>
518 <!-- Store the heights in a variable -->
519 <xsl:variable name="abvSbs_heights_">
520 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE)">
523 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE">
524 <xsl:variable name="procInst_" select="@INSTANCE"/>
526 <xsl:message>Found Blw Sbs height as <xsl:value-of select="$blwSbs_"/></xsl:message>
527 <ABV HEIGHT="{$pAbvSbs_}"/>
530 <xsl:variable name="pAbvSbs_">
531 <xsl:call-template name="_calc_Proc_PerisAbvSbs_Height">
532 <xsl:with-param name="procInst" select="$procInst_"/>
536 <xsl:variable name="memUs_">
537 <xsl:call-template name="_calc_Proc_MemoryUnits_Height">
538 <xsl:with-param name="procInst" select="$procInst_"/>
543 <xsl:message>Found Peris Above height as <xsl:value-of select="$pAbvSbs_"/></xsl:message>
544 <xsl:message>Found MemUs Above height as <xsl:value-of select="$memUs_"/></xsl:message>
545 <xsl:message>Found PAbv Above height as <xsl:value-of select="($pAbvSbs_ + $memUs_)"/></xsl:message>
547 <ABV HEIGHT="{$pAbvSbs_ + $memUs_}"/>
552 <xsl:message>Found Abv Sbs max as <xsl:value-of select="math:max(exsl:node-set($abvSbs_heights_)/ABV/@HEIGHT)"/></xsl:message>
555 <!-- Return the max of them -->
556 <xsl:value-of select="math:max(exsl:node-set($abvSbs_heights_)/ABV/@HEIGHT)"/>
559 <xsl:template name="_calc_Max_Proc_SbsBuckets_Height___">
561 <!-- Store the heights in a variable -->
562 <xsl:variable name="blwSbs_heights_">
563 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE)">
566 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE">
567 <xsl:variable name="procInst_" select="@INSTANCE"/>
568 <xsl:variable name="sbsBktH_">
569 <xsl:call-template name="_calc_Proc_SbsBuckets_Height">
570 <xsl:with-param name="procInst" select="$procInst_"/>
574 <xsl:message>Found Blw Sbs height as <xsl:value-of select="$blwSbs_"/></xsl:message>
576 <BKT HEIGHT="{$sbsBktH_}"/>
581 <xsl:message>Found Blw Sbs max as <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/></xsl:message>
583 <!-- Return the max of them -->
584 <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BKT/@HEIGHT)"/>
587 <xsl:template name="_calc_Max_SbsBuckets_Height___">
590 <xsl:variable name="bkts_h_">
592 <xsl:variable name="h_proc_sbsBkts_">
593 <xsl:call-template name="_calc_Max_Proc_SbsBuckets_Height"/>
595 <BKT HEIGHT="{$h_proc_sbsBkts_}"/>
600 <xsl:variable name="h_perisAbvSbs_">
601 <xsl:call-template name="_calc_Proc_PerisAbvSbs_Height">
602 <xsl:with-param name="procInst" select="$procInst"/>
606 <xsl:value-of select="math:max(exsl:node-set($bkts_h_)/BKT/@HEIGHT)"/>
611 <xsl:template name="_calc_MultiProc_Stack_Height">
612 <xsl:param name="mpstack_blkd_x" select="100"/>
614 <xsl:variable name="mpStk_ShpHeights_">
615 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@HAS_MULTIPROCCONNS) and (@PSTACK_BLKD_X = $mpstack_blkd_x))])">
616 <MPSHAPE HEIGHT="0"/>
619 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@HAS_MULTIPROCCONNS) and (@PSTACK_BLKD_X = $mpstack_blkd_x))]">
620 <xsl:variable name="shpClass_" select="@MODCLASS"/>
621 <xsl:variable name="shpHeight_">
623 <xsl:when test="$shpClass_ = 'PERIPHERAL'">
625 <xsl:message>Found Multi Proc Peripheral</xsl:message>
627 <xsl:call-template name="_calc_PeriShape_Height">
628 <xsl:with-param name="shapeInst" select="MODULE/@INSTANCE"/>
631 <xsl:when test="$shpClass_ = 'MEMORY_UNIT'">
633 <xsl:message>Found Multi Proc Memory Unit</xsl:message>
635 <xsl:call-template name="_calc_MemoryUnit_Height">
636 <xsl:with-param name="cshpIndex" select="@CSHAPE_INDEX"/>
639 <xsl:otherwise>0</xsl:otherwise>
644 <xsl:message>Found <xsl:value-of select="$shpHeight_"/></xsl:message>
647 <MPSHAPE HEIGHT="{$shpHeight_}"/>
652 <xsl:message>Found stack of height <xsl:value-of select="sum(exsl:node-set($mpStk_ShpHeights_)/MPSHAPE/@HEIGHT)"/></xsl:message>
655 <xsl:value-of select="sum(exsl:node-set($mpStk_ShpHeights_)/MPSHAPE/@HEIGHT)"/>
658 <xsl:template name="_calc_Max_MultiProc_Stack_Height">
660 <!-- Store the heights in a variable -->
662 <xsl:variable name="mpStks_Heights_">
663 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE)">
666 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@PSTACK_BLKD_X)]">
667 <xsl:variable name="mpstack_height_">
668 <xsl:call-template name="_calc_MultiProc_Stack_Height">
669 <xsl:with-param name="mpstack_blkd_x" select="(@PSTACK_BLKD_X + 1)"/>
674 <xsl:message>Found <xsl:value-of select="$mpstack_height_"/></xsl:message>
676 <MPSTK HEIGHT="{$mpstack_height_}"/>
681 <!-- Return the max of them -->
682 <xsl:value-of select="math:max(exsl:node-set($mpStks_Heights_)/MPSTK/@HEIGHT)"/>
688 <xsl:template name="_calc_Stack_Shape_Y">
690 <xsl:param name="horizIdx" select="100"/>
691 <xsl:param name="vertiIdx" select="100"/>
694 <xsl:message>Y at H index <xsl:value-of select="$horizIdx"/></xsl:message>
695 <xsl:message>Y at V index <xsl:value-of select="$vertiIdx"/></xsl:message>
696 <xsl:param name="sbsGap" select="0"/>
697 <xsl:variable name="numSBSs_" select="count(/EDKSYSTEM/BLKDSHAPES/SBSSHAPES/MODULE)"/>
698 <xsl:variable name="sbs_LANE_H_" select="($numSBSs_ * $SBS_LANE_H)"/>
699 <xsl:variable name="sbsGap_" select="($PROC2SBS_GAP + $sbs_LANE_H_)"/>
702 <xsl:variable name="sbsGap_" select="((count(/EDKSYSTEM/BLKDSHAPES/SBSSHAPES/MODULE) * $SBS_LANE_H) + $PROC2SBS_GAP)"/>
704 <xsl:if test="(not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX = $vertiIdx))]) and
705 not(/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[( (@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX = $vertiIdx))]) and
706 not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[( (@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX = $vertiIdx))]))">0</xsl:if>
709 <xsl:if test="((/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX = $vertiIdx))]) or
710 (/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[( (@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX = $vertiIdx))]) or
711 (/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[( (@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX = $vertiIdx))]))">
712 <!-- Store the spaces above this one in a variable -->
713 <xsl:variable name="spaces_above_">
715 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX < $vertiIdx))])">
719 <!-- Store the height of all peripherals and memory units above this one-->
720 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX < $vertiIdx))]">
722 <xsl:if test="not(@MODCLASS='MEMORY_UNIT')">
723 <xsl:variable name="peri_height_">
724 <xsl:call-template name="_calc_Shape_Height">
725 <xsl:with-param name="shapeId" select="@SHAPE_ID"/>
729 <xsl:message>Found peri height <xsl:value-of select="$peri_height_"/></xsl:message>
732 <SPACE HEIGHT="{$peri_height_ + $BIF_H}"/>
735 <xsl:if test="(@MODCLASS='MEMORY_UNIT')">
736 <xsl:variable name="memu_height_">
737 <xsl:call-template name="_calc_MemoryUnit_Height">
738 <xsl:with-param name="shapeId" select="@SHAPE_ID"/>
742 <xsl:message>Found unit height <xsl:value-of select="$memu_height_"/></xsl:message>
744 <SPACE HEIGHT="{$memu_height_ + $BIF_H}"/>
749 <!-- Store the height of all the processors above this one-->
750 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[((@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX < $vertiIdx))]">
751 <xsl:variable name="proc_height_">
752 <xsl:call-template name="_calc_PeriShape_Height">
753 <xsl:with-param name="shapeInst" select="@INSTANCE"/>
757 <SPACE HEIGHT="{$proc_height_ + $BIF_H}"/>
761 <!-- If its a peripheral that is below the shared busses, or its a shared bus bucket -->
762 <!-- add the height of the shared busses and the processor. -->
763 <xsl:if test="(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX = $vertiIdx))]/@IS_BLWSBS)">
764 <SPACE HEIGHT="{$sbsGap_}"/>
766 <xsl:if test="(/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[((@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX = $vertiIdx))])">
767 <SPACE HEIGHT="{$sbsGap_}"/>
770 <!-- Store the height of all shared bus buckets above this one-->
771 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[((@STACK_HORIZ_INDEX = $horizIdx) and (@SHAPE_VERTI_INDEX < $vertiIdx))]">
772 <xsl:variable name="bkt_height_">
773 <xsl:call-template name="_calc_SbsBucket_Height">
774 <xsl:with-param name="bucketId" select="@BUSINDEX"/>
778 <SPACE HEIGHT="{$bkt_height_ + $BIF_H}"/>
783 <xsl:value-of select="sum(exsl:node-set($spaces_above_)/SPACE/@HEIGHT)"/>
789 <xsl:template name="_calc_Max_BusConnLane_BifY">
791 <xsl:param name="busname" select="'_busname_'"/>
793 <!-- Store the heights in a variable -->
794 <xsl:variable name="busConnYs_">
796 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE/BUSCONN)">
797 <BUSCONNY HEIGHT="0"/>
800 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE[(@BUSNAME = $busname)]/BUSCONN">
802 <xsl:variable name="peri_cstk_y_">
803 <xsl:call-template name="_calc_CStackShapesAbv_Height">
804 <xsl:with-param name="cstackIndex" select="../@CSTACK_INDEX"/>
805 <xsl:with-param name="cstackModY" select="@CSTACK_MODS_Y"/>
809 <xsl:variable name="peri_bif_dy_">
810 <xsl:value-of select="(($BIF_H + $BIF_GAP) * @BIF_Y)"/>
813 <xsl:variable name="peri_bc_y_">
814 <xsl:value-of select="($MOD_LANE_H + $MOD_LABEL_H + $BIF_GAP + $peri_bif_dy_ + ceiling($BIF_H div 2)) - ceiling($BIFC_H div 2)"/>
818 <xsl:message>Found a busconn lane</xsl:message>
820 <BUSCONNY HEIGHT="{$peri_cstk_y_ + $peri_bif_dy_ + $peri_bc_y_}"/>
825 <!-- Return the max of them -->
826 <xsl:value-of select="math:max(exsl:node-set($busConnYs_)/BUSCONNY/@HEIGHT)"/>
831 <xsl:template name="_calc_Min_BusConnLane_BifY">
833 <xsl:param name="busname" select="'_busname_'"/>
835 <!-- Store the heights in a variable -->
836 <xsl:variable name="busConnYs_">
838 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE/BUSCONN)">
839 <BUSCONNY HEIGHT="0"/>
842 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE[(@BUSNAME = $busname)]/BUSCONN">
844 <xsl:variable name="peri_cstk_y_">
845 <xsl:call-template name="_calc_CStackShapesAbv_Height">
846 <xsl:with-param name="cstackIndex" select="../@CSTACK_INDEX"/>
847 <xsl:with-param name="cstackModY" select="@CSTACK_MODS_Y"/>
851 <xsl:variable name="peri_bif_dy_">
852 <xsl:value-of select="(($BIF_H + $BIF_GAP) * @BIF_Y)"/>
855 <xsl:variable name="peri_bc_y_">
856 <xsl:value-of select="($MOD_LANE_H + $MOD_LABEL_H + $BIF_GAP + $peri_bif_dy_ + ceiling($BIF_H div 2)) - ceiling($BIFC_H div 2)"/>
860 <xsl:message>Found a busconn lane</xsl:message>
862 <BUSCONNY HEIGHT="{$peri_cstk_y_ + $peri_bc_y_}"/>
867 <!-- Return the min of them -->
868 <xsl:value-of select="math:min(exsl:node-set($busConnYs_)/BUSCONNY/@HEIGHT)"/>
872 <xsl:template name="_calc_Stack_Height">
873 <xsl:param name="stackIdx" select="100"/>
875 <xsl:variable name="stack_height_">
876 <!-- if this is called with no vert index of a shape
877 it defaults to the total height of the stack -->
878 <xsl:call-template name="_calc_Stack_Shape_Y">
879 <xsl:with-param name="horizIdx" select="$stackIdx"/>
883 <xsl:value-of select="$stack_height_"/>
890 <xsl:template name="_calc_Stack_Width">
891 <xsl:param name="stackIdx" select="100"/>
894 <xsl:message>=============Stack Idx <xsl:value-of select="$stackIdx"/>====</xsl:message>
896 <xsl:variable name="shape_widths_">
898 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[@STACK_HORIZ_INDEX = $stackIdx])">
902 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[@STACK_HORIZ_INDEX = $stackIdx])">
906 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@STACK_HORIZ_INDEX = $stackIdx)]">
908 <xsl:variable name="proc_w_">
909 <xsl:value-of select="$periMOD_W"/>
911 <xsl:message>Found processor of width <xsl:value-of select="$proc_w_"/></xsl:message>
913 <SHAPE WIDTH="{$periMOD_W}"/>
916 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[(@STACK_HORIZ_INDEX = $stackIdx)]">
918 <xsl:variable name="shpClass_" select="@MODCLASS"/>
919 <xsl:variable name="shape_w_">
922 <xsl:when test="$shpClass_ = 'PERIPHERAL'">
923 <xsl:value-of select="$periMOD_W"/>
926 <xsl:when test="$shpClass_ = 'MEMORY_UNIT'">
927 <xsl:value-of select="($periMOD_W * @MODS_W)"/>
930 <xsl:otherwise>0</xsl:otherwise>
936 <xsl:message>Found shape width <xsl:value-of select="$shape_w_"/></xsl:message>
939 <SHAPE WIDTH="{$shape_w_}"/>
942 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $stackIdx)]">
943 <xsl:variable name="bucket_w_">
944 <xsl:value-of select="(($MOD_BKTLANE_W * 2) + (($periMOD_W * @MODS_W) + ($MOD_BUCKET_G * (@MODS_W - 1))))"/>
948 <xsl:message>Found bucket of width <xsl:value-of select="$bucket_w_"/></xsl:message>
950 <SHAPE WIDTH="{$bucket_w_}"/>
955 <xsl:value-of select="math:max(exsl:node-set($shape_widths_)/SHAPE/@WIDTH)"/>
959 <xsl:template name="_calc_Stack_X">
960 <xsl:param name="stackIdx" select="0"/>
962 <!-- Store the stack widths in a variable -->
965 <xsl:message>Looking for stack indexes less than <xsl:value-of select="$stackIdx"/></xsl:message>
968 <xsl:variable name="stackspace_widths_">
970 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES[(@STACK_HORIZ_INDEX < $stackIdx)])">
971 <STACKSPACE WIDTH="0"/>
974 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES[(@STACK_HORIZ_INDEX < $stackIdx)])">
975 <STACKSPACE WIDTH="0"/>
978 <xsl:if test="not(/EDKSYSTEM/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX < $stackIdx)])">
979 <STACKSPACE WIDTH="0"/>
982 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST <= $stackIdx)]">
985 <xsl:message>==============================</xsl:message>
986 <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
989 <xsl:variable name="space_width_" select="($BUS_LANE_W * @BUSLANES_W)"/>
991 <xsl:message>Bus lane space width <xsl:value-of select="@BUSLANES_W"/></xsl:message>
992 <xsl:message>Bus lane space is <xsl:value-of select="$space_width_"/></xsl:message>
995 <xsl:variable name="stack_width_">
996 <xsl:if test="not(@EAST = $stackIdx)">
997 <xsl:call-template name="_calc_Stack_Width">
998 <xsl:with-param name="stackIdx" select="@EAST"/>
1001 <xsl:if test="(@EAST = $stackIdx)">0</xsl:if>
1005 <xsl:message>Found stack of width <xsl:value-of select="$stack_width_"/></xsl:message>
1006 <xsl:message>==============================</xsl:message>
1009 <STACKSPACE WIDTH="{$stack_width_ + $space_width_}"/>
1013 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(not(@EAST) and (@WEST = ($stackIdx -1)))]">
1014 <xsl:variable name="space_width_" select="($BUS_LANE_W * @BUSLANES_W)"/>
1017 <xsl:message>Found end space of <xsl:value-of select="$space_width_"/></xsl:message>
1019 <STACKSPACE WIDTH="{$space_width_}"/>
1025 <xsl:value-of select="sum(exsl:node-set($stackspace_widths_)/STACKSPACE/@WIDTH)"/>
1029 <xsl:template name="_calc_Space_Width">
1031 <xsl:param name="stackToWest" select="'NONE'"/>
1032 <xsl:param name="stackToEast" select="'NONE'"/>
1035 <xsl:message>Stack to West <xsl:value-of select="$stackToWest"/></xsl:message>
1036 <xsl:message>Stack to East <xsl:value-of select="$stackToEast"/></xsl:message>
1039 <xsl:variable name="spaceWidth_">
1041 <xsl:when test="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[((@EAST = $stackToEast) or (not($stackToWest = 'NONE') and (@WEST = $stackToWest)))]">
1042 <xsl:value-of select="((/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[((@EAST = $stackToEast) or (not($stackToWest = 'NONE') and (@WEST = $stackToWest)))]/@BUSLANES_W) * $BUS_LANE_W)"/>
1044 <xsl:otherwise>0</xsl:otherwise>
1049 <xsl:message>Space width <xsl:value-of select="$spaceWidth_"/></xsl:message>
1052 <xsl:value-of select="$spaceWidth_"/>
1058 <xsl:template name="_calc_Space_X">
1060 <xsl:param name="stackToWest" select="'NONE'"/>
1061 <xsl:param name="stackToEast" select="'NONE'"/>
1064 <xsl:message>Stack East <xsl:value-of select="$stackToEast"/></xsl:message>
1065 <xsl:message>Stack West <xsl:value-of select="$stackToWest"/></xsl:message>
1068 <!-- Store the stack widths in a variable -->
1071 <xsl:message>Looking for stack indexes less than <xsl:value-of select="$stackIdx"/></xsl:message>
1074 <xsl:variable name="stackspace_widths_">
1076 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES[(@STACK_HORIZ_INDEX < $stackToEast)])">
1077 <STACKSPACE WIDTH="0"/>
1080 <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES[(@STACK_HORIZ_INDEX < $stackToEast)])">
1081 <STACKSPACE WIDTH="0"/>
1084 <xsl:if test="not(/EDKSYSTEM/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX < $stackToEast)])">
1085 <STACKSPACE WIDTH="0"/>
1088 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[((@EAST < $stackToEast) or (not($stackToWest = 'NONE') and (@EAST <= $stackToWest)))]">
1091 <xsl:message>==============================</xsl:message>
1092 <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
1095 <xsl:variable name="space_width_" select="($BUS_LANE_W * @BUSLANES_W)"/>
1097 <xsl:message>Bus lane space width <xsl:value-of select="@BUSLANES_W"/></xsl:message>
1098 <xsl:message>Bus lane space is <xsl:value-of select="$space_width_"/></xsl:message>
1100 <xsl:variable name="stack_width_">
1101 <xsl:call-template name="_calc_Stack_Width">
1102 <xsl:with-param name="stackIdx" select="@EAST"/>
1103 </xsl:call-template>
1107 <xsl:message>Found stack of width <xsl:value-of select="$stack_width_"/></xsl:message>
1108 <xsl:message>==============================</xsl:message>
1111 <STACKSPACE WIDTH="{$stack_width_ + $space_width_}"/>
1115 <xsl:variable name = "stackToWest_W_">
1117 <xsl:when test="(($stackToEast = '0') and ($stackToWest = 'NONE'))">0</xsl:when>
1118 <xsl:when test="(($stackToEast = 'NONE') and not($stackToWest = 'NONE'))">
1119 <xsl:call-template name="_calc_Stack_Width">
1120 <xsl:with-param name="stackIdx" select="$stackToWest"/>
1121 </xsl:call-template>
1123 <xsl:when test="(not($stackToEast = '0') and ($stackToWest = 'NONE'))">
1124 <xsl:call-template name="_calc_Stack_Width">
1125 <xsl:with-param name="stackIdx" select="($stackToEast - 1)"/>
1126 </xsl:call-template>
1128 <xsl:otherwise>0</xsl:otherwise>
1133 <xsl:variable name = "stackToEast_W_">
1134 <xsl:call-template name="_calc_Stack_Width">
1135 <xsl:with-param name="stackIdx" select="$stackToEast"/>
1136 </xsl:call-template>
1138 <xsl:variable name ="extSpaceEast_W_" select="ceiling($stackToEast_W_ div 2)"/>
1141 <xsl:variable name ="extSpaceWest_W_" select="ceiling($stackToWest_W_ div 2)"/>
1143 <xsl:value-of select="sum(exsl:node-set($stackspace_widths_)/STACKSPACE/@WIDTH) - $extSpaceWest_W_"/>