📄 mdtsvgblkd_calculations.xsl
字号:
</xsl:if> <xsl:variable name="sbsBuckets_H_"> <xsl:call-template name="_calc_Stack_SbsBuckets_Height"> <xsl:with-param name="iStackIdx" select="$iStackIdx"/> </xsl:call-template> </xsl:variable> <STACKSHAPE HEIGHT="{$sbsBuckets_H_}"/><!-- <xsl:message>Sbs Bucket H : <xsl:value-of select="$sbsBuckets_H_"/></xsl:message>--> </xsl:variable> <!-- <xsl:message>vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv</xsl:message>--> <xsl:value-of select="sum(exsl:node-set($stack_heights_)/STACKSHAPE/@HEIGHT)"/> </xsl:template> <xsl:template name="_calc_Stack_SbsBuckets_Height"> <xsl:param name="iStackIdx" select="1000"/> <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)])">0</xsl:if> <xsl:if test="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)]"> <!-- Store the all buckets heights in a variable --> <xsl:variable name="bkt_heights_"> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)]"> <xsl:variable name="bkt_height_"> <xsl:call-template name="_calc_SbsBucket_Height"> <xsl:with-param name="iBucketId" select="@BUSINDEX"/> </xsl:call-template> </xsl:variable><!-- <xsl:message>Found shared buckets height as <xsl:value-of select="$bkt_height_"/></xsl:message>--> <BKT HEIGHT="{$bkt_height_ + $BLKD_BIF_H}"/> </xsl:for-each> </xsl:variable> <xsl:value-of select="sum(exsl:node-set($bkt_heights_)/BKT/@HEIGHT)"/> </xsl:if></xsl:template> <xsl:template name="_calc_Max_Stack_BlwSbs_Height"> <!-- Store the heights in a variable --> <xsl:variable name="blwSbs_heights_"> <!-- Default, in case there are no modules or ports --> <BLW HEIGHT="0"/> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST < /EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH)]"> <!-- <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>--> <xsl:variable name="stack_height_"> <xsl:call-template name="_calc_Stack_BlwSbs_Height"> <xsl:with-param name="iStackIdx" select="@EAST"/> </xsl:call-template> </xsl:variable> <BLW HEIGHT="{$stack_height_}"/> </xsl:for-each> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@WEST = (/EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH -1))]"> <!-- <xsl:message>Last stack of index <xsl:value-of select="@WEST"/></xsl:message>--> <xsl:variable name="stack_height_"> <xsl:call-template name="_calc_Stack_BlwSbs_Height"> <xsl:with-param name="iStackIdx" select="@WEST"/> </xsl:call-template> </xsl:variable> <BLW HEIGHT="{$stack_height_}"/> </xsl:for-each> </xsl:variable> <!-- <xsl:message>Found Blw Sbs max as <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/></xsl:message>--> <!-- Return the max of them --> <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/></xsl:template> <xsl:template name="_calc_Max_Stack_AbvSbs_Height"> <!-- Store the heights in a variable --> <xsl:variable name="abvSbs_heights_"> <!-- Default, in case there are no modules or ports --> <ABV HEIGHT="0"/> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST < /EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH)]"><!-- <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>--> <xsl:variable name="stack_height_"> <xsl:call-template name="_calc_Stack_AbvSbs_Height"> <xsl:with-param name="iStackIdx" select="@EAST"/> </xsl:call-template> </xsl:variable> <!-- <xsl:message>Found stack of height <xsl:value-of select="$stack_height_"/></xsl:message> <xsl:message>==============================</xsl:message>--> <ABV HEIGHT="{$stack_height_}"/> </xsl:for-each> </xsl:variable> <!-- <xsl:message>Found Blw Sbs max as <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/></xsl:message>--> <!-- Return the max of them --> <xsl:value-of select="math:max(exsl:node-set($abvSbs_heights_)/ABV/@HEIGHT)"/></xsl:template> <xsl:template name="_calc_MultiProc_Stack_Height"> <xsl:param name="iMPStack_Blkd_X" select="100"/> <xsl:variable name="mpStk_ShpHeights_"> <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@HAS_MULTIPROCCONNS) and (@PSTACK_BLKD_X = $iMPStack_Blkd_X))])"> <MPSHAPE HEIGHT="0"/> </xsl:if> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@HAS_MULTIPROCCONNS) and (@PSTACK_BLKD_X = $iMPStack_Blkd_X))]"> <xsl:variable name="shpClass_" select="@MODCLASS"/> <xsl:variable name="shpHeight_"> <xsl:choose> <xsl:when test="$shpClass_ = 'PERIPHERAL'"><!-- <xsl:message>Found Multi Proc Peripheral</xsl:message> --> <xsl:call-template name="_calc_PeriShape_Height"> <xsl:with-param name="iShapeInst" select="MODULE/@INSTANCE"/> </xsl:call-template> </xsl:when> <xsl:when test="$shpClass_ = 'MEMORY_UNIT'"><!-- <xsl:message>Found Multi Proc Memory Unit</xsl:message> --> <xsl:call-template name="_calc_MemoryUnit_Height"> <xsl:with-param name="iShapeIndex" select="@CSHAPE_INDEX"/> </xsl:call-template> </xsl:when> <xsl:otherwise>0</xsl:otherwise> </xsl:choose> </xsl:variable> <!-- <xsl:message>Found <xsl:value-of select="$shpHeight_"/></xsl:message>--> <MPSHAPE HEIGHT="{$shpHeight_}"/> </xsl:for-each> </xsl:variable> <!-- <xsl:message>Found stack of height <xsl:value-of select="sum(exsl:node-set($mpStk_ShpHeights_)/MPSHAPE/@HEIGHT)"/></xsl:message>--> <xsl:value-of select="sum(exsl:node-set($mpStk_ShpHeights_)/MPSHAPE/@HEIGHT)"/></xsl:template><xsl:template name="_calc_Max_MultiProc_Stack_Height"> <!-- Store the heights in a variable --> <xsl:variable name="mpStks_Heights_"> <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE)"> <MPSTK HEIGHT="0"/> </xsl:if> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@PSTACK_BLKD_X)]"> <xsl:variable name="mpstack_height_"> <xsl:call-template name="_calc_MultiProc_Stack_Height"> <xsl:with-param name="iMPStack_Blkd_X" select="(@PSTACK_BLKD_X + 1)"/> </xsl:call-template> </xsl:variable> <!-- <xsl:message>Found <xsl:value-of select="$mpstack_height_"/></xsl:message>--> <MPSTK HEIGHT="{$mpstack_height_}"/> </xsl:for-each> </xsl:variable> <!-- Return the max of them --> <xsl:value-of select="math:max(exsl:node-set($mpStks_Heights_)/MPSTK/@HEIGHT)"/> </xsl:template><xsl:template name="_calc_Stack_Shape_Y"> <xsl:param name="iHorizIdx" select="100"/> <xsl:param name="iVertiIdx" select="100"/> <!-- <xsl:message>Y at H index <xsl:value-of select="$iHorizIdx"/></xsl:message> <xsl:message>Y at V index <xsl:value-of select="$iVertiIdx"/></xsl:message> <xsl:param name="sbsGap" select="0"/> <xsl:variable name="numSBSs_" select="count(/EDKSYSTEM/BLKDSHAPES/SBSSHAPES/MODULE)"/> <xsl:variable name="sbs_LANE_H_" select="($numSBSs_ * $BLKD_SBS_LANE_H)"/> <xsl:variable name="sbsGap_" select="($BLKD_PROC2SBS_GAP + $sbs_LANE_H_)"/>--> <xsl:variable name="sbsGap_" select="((count(/EDKSYSTEM/BLKDSHAPES/SBSSHAPES/MODULE) * $BLKD_SBS_LANE_H) + $BLKD_PROC2SBS_GAP)"/> <xsl:if test="(not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]) and not(/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[( (@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]) and not(/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[( (@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]))">0</xsl:if> <xsl:if test="((/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]) or (/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[( (@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]) or (/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[( (@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]))"> <!-- Store the spaces above this one in a variable --> <xsl:variable name="spaces_above_"> <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX < $iVertiIdx))])"> <SPACE HEIGHT="0"/> </xsl:if> <!-- Store the height of all peripherals and memory units above this one--> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX < $iVertiIdx))]"> <xsl:if test="not(@MODCLASS='MEMORY_UNIT')"> <xsl:variable name="peri_height_"> <xsl:call-template name="_calc_Shape_Height"> <xsl:with-param name="iShapeId" select="@SHAPE_ID"/> </xsl:call-template> </xsl:variable><!-- <xsl:message>Found peri height <xsl:value-of select="$peri_height_"/></xsl:message>--> <SPACE HEIGHT="{$peri_height_ + $BLKD_BIF_H}"/> </xsl:if> <xsl:if test="(@MODCLASS='MEMORY_UNIT')"> <xsl:variable name="memu_height_"> <xsl:call-template name="_calc_MemoryUnit_Height"> <xsl:with-param name="iShapeId" select="@SHAPE_ID"/> </xsl:call-template> </xsl:variable><!-- <xsl:message>Found unit height <xsl:value-of select="$memu_height_"/></xsl:message>--> <SPACE HEIGHT="{$memu_height_ + $BLKD_BIF_H}"/> </xsl:if> </xsl:for-each> <!-- Store the height of all the processors above this one--> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX < $iVertiIdx))]"> <xsl:variable name="proc_height_"> <xsl:call-template name="_calc_PeriShape_Height"> <xsl:with-param name="iShapeInst" select="@INSTANCE"/> </xsl:call-template> </xsl:variable> <SPACE HEIGHT="{$proc_height_ + $BLKD_BIF_H}"/> </xsl:for-each> <!-- If its a peripheral that is below the shared busses, or its a shared bus bucket --> <!-- add the height of the shared busses and the processor. --> <xsl:if test="(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]/@IS_BLWSBS)"> <SPACE HEIGHT="{$sbsGap_}"/> </xsl:if> <xsl:if test="(/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))])"> <SPACE HEIGHT="{$sbsGap_}"/> </xsl:if> <!-- Store the height of all shared bus buckets above this one--> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX < $iVertiIdx))]"> <xsl:variable name="bkt_height_"> <xsl:call-template name="_calc_SbsBucket_Height"> <xsl:with-param name="iBucketId" select="@BUSINDEX"/> </xsl:call-template> </xsl:variable> <SPACE HEIGHT="{$bkt_height_ + $BLKD_BIF_H}"/> </xsl:for-each> </xsl:variable> <xsl:value-of select="sum(exsl:node-set($spaces_above_)/SPACE/@HEIGHT)"/> </xsl:if> </xsl:template> <xsl:template name="_calc_Max_BusConnLane_BifY"> <xsl:param name="iBusName" select="'_busname_'"/> <!-- Store the heights in a variable --> <xsl:variable name="busConnYs_"> <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE/BUSCONN)"> <BUSCONNY HEIGHT="0"/> </xsl:if> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE[(@BUSNAME = $iBusName)]/BUSCONN"> <xsl:variable name="peri_cstk_y_"> <xsl:call-template name="_calc_CStackShapesAbv_Height"> <xsl:with-param name="iCStackIndex" select="../@CSTACK_INDEX"/> <xsl:with-param name="ICStackModY" select="@CSTACK_MODS_Y"/> </xsl:call-template> </xsl:variable> <xsl:variable name="peri_bif_dy_"> <xsl:value-of select="(($BLKD_BIF_H + $BLKD_BIF_GAP_H) * @BIF_Y)"/> </xsl:variable> <xsl:variable name="peri_bc_y_"> <xsl:value-of select="($BLKD_MOD_LANE_H + $BLKD_MOD_LABEL_H + $BLKD_BIF_GAP_H + $peri_bif_dy_ + ceiling($BLKD_BIF_H div 2)) - ceiling($BLKD_BIFC_H div 2)"/> </xsl:variable> <!-- <xsl:message>Found a busconn lane</xsl:message>--> <BUSCONNY HEIGHT="{$peri_cstk_y_ + $peri_bif_dy_ + $peri_bc_y_}"/> </xsl:for-each> </xsl:variable> <!-- Return the max of them --> <xsl:value-of select="math:max(exsl:node-set($busConnYs_)/BUSCONNY/@HEIGHT)"/> </xsl:template> <xsl:template name="_calc_Min_BusConnLane_BifY">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -