📄 mdtsvgblkd_buslanespaces.xsl
字号:
<xsl:variable name="h_bus_ul_y_" select="$bus_y_"/> <xsl:variable name="h_bus_height_" select="$BLKD_P2P_BUS_W"/> <xsl:variable name="h_bus_width_"> <xsl:choose> <xsl:when test="@BIFSIDE='0'"> <xsl:value-of select="($adjusted_X_ - $bus_x_ - $BLKD_BUS_ARROW_W)"/> </xsl:when> <xsl:when test="@BIFSIDE='1'"> <xsl:value-of select="$bus_x_ - $h_bus_ul_x_"/> </xsl:when> </xsl:choose> </xsl:variable> <!-- <xsl:message>bc_X_ <xsl:value-of select="@X"/></xsl:message> <xsl:message>bus_X_ <xsl:value-of select="$bus_x_"/></xsl:message> <xsl:message>bif side <xsl:value-of select="@BIFSIDE"/></xsl:message> <xsl:message>h_bus_ul_x <xsl:value-of select="$h_bus_ul_x_"/></xsl:message> <xsl:message>h_bus_ul_x_dx_ <xsl:value-of select="$h_bus_ul_x_dx_"/></xsl:message> <xsl:message>h_bus_width <xsl:value-of select="$h_bus_width_"/></xsl:message> <xsl:message>h_bus_ul_y <xsl:value-of select="$h_bus_ul_y_"/></xsl:message>--> <!-- Place the bus connection --> <use x="{@X}" y="{@Y}" xlink:href="#{@BUSSTD}_busconn_{@BIFRANK}"/> <!-- Draw the arrow --> <xsl:choose> <xsl:when test="@BIFSIDE='0'"> <use x="{@X - $BLKD_BUS_ARROW_W}" y="{@Y + ceiling($BLKD_BIFC_H div 2) - ceiling($BLKD_BUS_ARROW_H div 2)}" xlink:href="#{@BUSSTD}_BusArrowEast"/> </xsl:when> <xsl:when test="@BIFSIDE='1'"> <use x="{(@X + $BLKD_BIFC_W)}" y="{@Y + ceiling($BLKD_BIFC_H div 2) - ceiling($BLKD_BUS_ARROW_H div 2)}" xlink:href="#{@BUSSTD}_BusArrowWest"/> </xsl:when> </xsl:choose> <!-- Draw the horizontal part of the bus --> <rect x="{$h_bus_ul_x_}" y="{$h_bus_ul_y_}" width= "{$h_bus_width_}" height="{$h_bus_height_}" style="stroke:none; fill:{$busColor_}"/><!-- --> </xsl:for-each> <xsl:variable name="busTop_" select="math:min(exsl:node-set($memConn_heights_)/MEMCONN/@Y)"/> <xsl:variable name="busBot_" select="math:max(exsl:node-set($memConn_heights_)/MEMCONN/@Y)"/> <xsl:variable name="busName_" select="exsl:node-set($memConn_heights_)/MEMCONN/@BUSNAME"/> <xsl:variable name="busSide_" select="exsl:node-set($memConn_heights_)/MEMCONN/@BIFSIDE"/><!-- <xsl:if test="($busSide_ = '0')"> <xsl:for-each select="exsl:node-set($memConn_heights_)/MEMCONN"> <xsl:message>mc_X_ <xsl:value-of select="@X"/></xsl:message> </xsl:for-each> <xsl:message>bcInSpace_X_ <xsl:value-of select="($bcInSpace_X_ + $BLKD_P2P_BUS_W)"/></xsl:message> <xsl:message> ========= </xsl:message> </xsl:if>--> <xsl:variable name="leftmost_x_" select="math:min(exsl:node-set($memConn_heights_)/MEMCONN/@X)"/> <!-- Hack to fix CR473515 --> <xsl:variable name="v_bus_x_dx_"> <xsl:choose> <xsl:when test="(($busSide_ = '0') and (($leftmost_x_ - ($bcInSpace_X_ + $BLKD_P2P_BUS_W)) <= $BLKD_P2P_BUS_W))">-4</xsl:when> <xsl:otherwise><xsl:value-of select="$BLKD_P2P_BUS_W"/></xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="v_bus_y_" select="$busTop_ + ceiling($BLKD_BIFC_H div 2) - ceiling($BLKD_P2P_BUS_W div 2)"/> <xsl:variable name="v_bus_x_"> <xsl:choose> <xsl:when test="$busSide_ ='0'"> <xsl:value-of select="($bcInSpace_X_ + $v_bus_x_dx_)"/> </xsl:when> <xsl:when test="$busSide_ ='1'"> <xsl:value-of select="($bcInSpace_X_ + $BLKD_P2P_BUS_W)"/> </xsl:when> </xsl:choose> </xsl:variable> <!-- Draw the vertical part of the bus --> <rect x="{$v_bus_x_}" y="{$v_bus_y_}" width= "{$BLKD_P2P_BUS_W}" height="{($busBot_ - $busTop_) + $BLKD_P2P_BUS_W}" style="stroke:none; fill:{$busColor_}"/><!-- Hack to fix CR473515 --> <xsl:if test="($busSide_ ='0')"> <rect x="{$v_bus_x_}" y="{$v_bus_y_ + ($busBot_ - $busTop_)}" width= "{$BLKD_P2P_BUS_W * 2}" height="{$BLKD_P2P_BUS_W}" style="stroke:none; fill:{$busColor_}"/> </xsl:if> <!-- <xsl:message>v_bus_x <xsl:value-of select="$v_bus_x_"/></xsl:message>--> <!-- Place the bus label.--> <text class="p2pbuslabel" x="{$bcInSpace_X_ + $BLKD_BUS_ARROW_W + ceiling($BLKD_BUS_ARROW_W div 2) + ceiling($BLKD_BUS_ARROW_W div 4) + 6}" y="{$busTop_ + ($BLKD_BUS_ARROW_H * 3)}"> <xsl:value-of select="$busName_"/> </text> </xsl:template> <!-- =========================================================== Handle generic Point to Point connections ===========================================================--> <xsl:template name="BCLaneSpace_PointToPoint"> <xsl:param name="iBusStd" select="'NONE'"/> <xsl:param name="iBusName" select="'NONE'"/> <xsl:param name="iBifRank" select="'NONE'"/> <xsl:param name="iStackToEast" select="'NONE'"/> <xsl:param name="iStackToWest" select="'NONE'"/> <xsl:param name="iStackToEast_W" select="0"/> <xsl:param name="iStackToWest_W" select="0"/> <xsl:param name="iLaneInSpace_X" select="0"/> <xsl:variable name="busColor_"> <xsl:call-template name="BusType2Color"> <xsl:with-param name="iBusType" select="$iBusStd"/> </xsl:call-template> </xsl:variable> <xsl:variable name="busColor_lt_"> <xsl:call-template name="BusType2LightColor"> <xsl:with-param name="iBusType" select="$iBusStd"/> </xsl:call-template> </xsl:variable> <xsl:variable name="space_W_"> <xsl:call-template name="_calc_Space_Width"> <xsl:with-param name="iStackToEast" select="$iStackToEast"/> <xsl:with-param name="iStackToWest" select="$iStackToWest"/> </xsl:call-template> </xsl:variable> <xsl:variable name ="extSpaceWest_W_" select="ceiling($iStackToWest_W div 2)"/> <xsl:variable name ="extSpaceEast_W_" select="ceiling($iStackToEast_W div 2)"/> <xsl:variable name="bcInSpace_X_" select="($iLaneInSpace_X + ceiling($BLKD_BIFC_W div 2) - ceiling($BLKD_BUS_ARROW_W div 2))"/> <xsl:variable name="p2pInstance_" select="BUSCONN[(@BIF_Y)]/@INSTANCE"/> <xsl:variable name="p2pshp_hori_idx_"> <xsl:choose> <xsl:when test="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $p2pInstance_)]"> <xsl:value-of select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $p2pInstance_)]/@STACK_HORIZ_INDEX"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[(MODULE[(@INSTANCE = $p2pInstance_)])]/@STACK_HORIZ_INDEX"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="p2pshp_vert_idx_"> <xsl:choose> <xsl:when test="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $p2pInstance_)]"> <xsl:value-of select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $p2pInstance_)]/@SHAPE_VERTI_INDEX"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[(MODULE[(@INSTANCE = $p2pInstance_)])]/@SHAPE_VERTI_INDEX"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <!-- <xsl:variable name="p2pshp_hori_idx_" select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $procInstance_)]/@STACK_HORIZ_INDEX"/> <xsl:variable name="p2pshp_vert_idx_" select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $procInstance_)]/@SHAPE_VERTI_INDEX"/>--> <xsl:variable name="p2pshp_Y_"> <xsl:call-template name="_calc_Stack_Shape_Y"> <xsl:with-param name="iHorizIdx" select="$p2pshp_hori_idx_"/> <xsl:with-param name="iVertiIdx" select="$p2pshp_vert_idx_"/> </xsl:call-template> </xsl:variable> <xsl:variable name="cmplxStack_H_diff_"> <xsl:choose> <xsl:when test=" (($iStackToEast = 'NONE') or ($iStackToWest = 'NONE'))">0</xsl:when> <xsl:when test="not(($iStackToEast = 'NONE') or ($iStackToWest = 'NONE'))"> <xsl:variable name="stackToWest_AbvSbs_H_"> <xsl:call-template name="_calc_Stack_AbvSbs_Height"> <xsl:with-param name="iStackIdx" select="$iStackToWest"/> </xsl:call-template> </xsl:variable> <xsl:variable name="stackToEast_AbvSbs_H_"> <xsl:call-template name="_calc_Stack_AbvSbs_Height"> <xsl:with-param name="iStackIdx" select="$iStackToEast"/> </xsl:call-template> </xsl:variable> <!-- <xsl:message>stack to west H <xsl:value-of select="$stackToWest_AbvSbs_H_"/></xsl:message> <xsl:message>stack to east H <xsl:value-of select="$stackToEast_AbvSbs_H_"/></xsl:message>--> <xsl:choose> <xsl:when test="(($p2pshp_hori_idx_ = $iStackToEast) and ($stackToWest_AbvSbs_H_ > $stackToEast_AbvSbs_H_))"> <xsl:value-of select="($stackToWest_AbvSbs_H_ - $stackToEast_AbvSbs_H_)"/> </xsl:when> <xsl:when test="(($p2pshp_hori_idx_ = $iStackToWest) and ($stackToEast_AbvSbs_H_ > $stackToWest_AbvSbs_H_))"> <xsl:value-of select="($stackToEast_AbvSbs_H_ - $stackToWest_AbvSbs_H_)"/> </xsl:when> <xsl:otherwise>0</xsl:otherwise> </xsl:choose> </xsl:when> </xsl:choose> </xsl:variable> <xsl:variable name="procStack_H_diff_"> <xsl:choose> <xsl:when test=" (($iStackToEast = 'NONE') or ($iStackToWest = 'NONE'))">0</xsl:when> <xsl:when test="not(($iStackToEast = 'NONE') or ($iStackToWest = 'NONE'))"> <xsl:variable name="stackToWest_AbvSbs_H_"> <xsl:call-template name="_calc_Stack_AbvSbs_Height"> <xsl:with-param name="iStackIdx" select="$iStackToWest"/> </xsl:call-template> </xsl:variable> <xsl:variable name="stackToEast_AbvSbs_H_"> <xsl:call-template name="_calc_Stack_AbvSbs_Height"> <xsl:with-param name="iStackIdx" select="$iStackToEast"/> </xsl:call-template> </xsl:variable> <!-- <xsl:message>stack to west H <xsl:value-of select="$stackToWest_AbvSbs_H_"/></xsl:message> <xsl:message>stack to east H <xsl:value-of select="$stackToEast_AbvSbs_H_"/></xsl:message>--> <xsl:choose> <xsl:when test="(($p2pshp_hori_idx_ = $iStackToEast) and ($stackToWest_AbvSbs_H_ > $stackToEast_AbvSbs_H_))"> <xsl:value-of select="($stackToWest_AbvSbs_H_ - $stackToEast_AbvSbs_H_)"/> </xsl:when> <xsl:when test="(($p2pshp_hori_idx_ = $iStackToWest) and ($stackToEast_AbvSbs_H_ > $stackToWest_AbvSbs_H_))"> <xsl:value-of select="($stackToEast_AbvSbs_H_ - $stackToWest_AbvSbs_H_)"/> </xsl:when> <xsl:otherwise>0</xsl:otherwise> </xsl:choose> </xsl:when> </xsl:choose> </xsl:variable> <!-- Store the conns in a variable --> <xsl:variable name="p2pConn_heights_"> <xsl:for-each select="BUSCONN"> <xsl:variable name="bifName_" select="@BUSINTERFACE"/> <xsl:choose> <xsl:when test="@IS_PROCCONN and @BIF_Y"> <!-- <xsl:message>Proc <xsl:value-of select="$procInstance_"/></xsl:message>--> <xsl:variable name="procBif_Y_" select="((($BLKD_BIF_H + $BLKD_BIF_GAP_V) * @BIF_Y) + ($BLKD_MOD_LANE_H + $BLKD_MOD_LABEL_H + $BLKD_BIF_GAP_V))"/> <xsl:variable name="procBifRank_" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $p2pInstance_)]/BUSINTERFACE[(@NAME = $bifName_)]/@BIFRANK"/> <xsl:variable name="procBusName_" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $p2pInstance_)]/BUSINTERFACE[(@NAME = $bifName_)]/@BUSNAME"/> <xsl:variable name="procBifSide_" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $p2pInstance_)]/BUSINTERFACE[(@NAME = $bifName_)]/@BIF_X"/> <xsl:variable name="bcProc_Y_" select="($p2pshp_Y_ + $procBif_Y_ + ceiling($BIF_H div 2) - ceiling($BLKD_BIFC_H div 2) + $procStack_H_diff_)"/> <xsl:variable name="bcProc_X_"> <xsl:choose> <xsl:when test="$procBifSide_ = '0'"> <xsl:value-of select="($space_W_ + $extSpaceWest_W_ + $extSpaceEast_W_ - (ceiling($BLKD_MOD_W div 2) + $BLKD_BIFC_W))"/> </xsl:when> <xsl:when test="$procBifSide_ = '1'"> <xsl:value-of select="ceiling($BLKD_MOD_W div 2)"/> </xsl:when> <xsl:otherwise>0</xsl:otherwise> </xsl:choose> </xsl:variable> <P2PCONN X="{$bcProc_X_}" Y="{$bcProc_Y_}" BUSNAME= "{$procBusName_}" BUSSTD="{$iBusStd}" BIFRANK="{$procBifRank_}" BIFSIDE="{$procBifSide_}"/> <!-- <xsl:message>bcProc_X_ <xsl:value-of select="$bcProc_X_"/></xsl:message> <xsl:message>bcProc_Y_ <xsl:value-of select="$bcProc_Y_"/></xsl:message> <P2PCONN X="{$bcInSpace_X_}" Y="{$bcProc_Y_}" BUSSTD="{$busStd}" BIFRANK="{$procBifRank_}" BIFSIDE="{$procBifSide_}" STACK_ID=""/>--> </xsl:when>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -