📄 mdtsvgblkd_buslanespaces.xsl
字号:
</xsl:variable> <xsl:variable name="h_bus_ul_y_"> <xsl:choose> <xsl:when test="($is_blwSbs_ = 'TRUE') and ($vert_line_y1_ > $vert_line_y2_)"> <xsl:value-of select="$vert_line_y1_ - ceiling($BLKD_P2P_BUS_W div 2)"/> </xsl:when> <xsl:when test="($is_blwSbs_ = 'TRUE') and ($vert_line_y2_ > $vert_line_y1_)"> <xsl:value-of select="$vert_line_y2_ - ceiling($BLKD_P2P_BUS_W div 2)"/> </xsl:when> <xsl:when test="($is_abvSbs_ = 'TRUE') and ($vert_line_y1_ > $vert_line_y2_)"> <xsl:value-of select="$vert_line_y2_ - ceiling($BLKD_P2P_BUS_W div 2)"/> </xsl:when> <xsl:when test="($is_abvSbs_ = 'TRUE') and ($vert_line_y2_ > $vert_line_y1_)"> <xsl:value-of select="$vert_line_y1_ - ceiling($BLKD_P2P_BUS_W div 2)"/> </xsl:when> </xsl:choose> </xsl:variable> <xsl:variable name="h_bus_height_" select="$BLKD_P2P_BUS_W"/> <xsl:variable name="h_bus_width_"> <xsl:choose> <xsl:when test="@ORIENTED='WEST'"> <xsl:value-of select="$v_bus_ul_x_ - $h_bus_ul_x_ + $BLKD_P2P_BUS_W"/> </xsl:when> <xsl:when test="@ORIENTED='EAST'"> <xsl:value-of select="($bc_X_ - $v_bus_ul_x_) + ceiling(($BLKD_BIFC_W - $BLKD_BIFC_Wi) div 2) + 1"/> </xsl:when> </xsl:choose> </xsl:variable> <rect x="{$v_bus_ul_x_}" y="{$v_bus_ul_y_ - 2}" width= "{$v_bus_width_}" height="{$v_bus_height_}" style="stroke:none; fill:{$busColor_}"/> <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:template> <!-- =========================================================== Handle connections from processors to Memory UNITs ===========================================================--> <xsl:template name="BCLaneSpace_ProcBifToMemoryUnit"> <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:message>Stack To East <xsl:value-of select="$iStackToEast"/></xsl:message> <xsl:message>Stack to West <xsl:value-of select="$iStackToWest"/></xsl:message> <xsl:message>Stack to East Width <xsl:value-of select="$iStackToEast_W"/></xsl:message> <xsl:message>Stack to West Width <xsl:value-of select="$iStackToWest_W"/></xsl:message> <xsl:message>Shared Bus Y <xsl:value-of select="$iSpaceSharedBus_Y"/></xsl:message> <xsl:message>Lane in space X <xsl:value-of select="$iLaneInSpace_X"/></xsl:message> <xsl:variable name="bcInSpace_X_" select="($laneInSpace_X + ceiling($BLKD_BIFC_W div 2) - ceiling($BLKD_BUS_ARROW_W div 2))"/> --> <xsl:variable name="bcInSpace_X_" select="$iLaneInSpace_X"/> <xsl:variable name="procInstance_" select="BUSCONN[@IS_PROCCONN]/@INSTANCE"/> <xsl:variable name="mem_procshp_hori_idx_" select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $procInstance_)]/@STACK_HORIZ_INDEX"/> <xsl:variable name="mem_procshp_vert_idx_" select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@INSTANCE = $procInstance_)]/@SHAPE_VERTI_INDEX"/> <xsl:variable name="mem_procshp_Y_"> <xsl:call-template name="_calc_Stack_Shape_Y"> <xsl:with-param name="iHorizIdx" select="$mem_procshp_hori_idx_"/> <xsl:with-param name="iVertiIdx" select="$mem_procshp_vert_idx_"/> </xsl:call-template> </xsl:variable> <xsl:variable name="busColor_"> <xsl:call-template name="BusType2Color"> <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="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="(($mem_procshp_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="(($mem_procshp_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="mem_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="(($mem_procshp_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="(($mem_procshp_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="memConn_heights_"> <xsl:for-each select="BUSCONN"> <xsl:variable name="bifName_" select="@BUSINTERFACE"/> <xsl:choose> <xsl:when test="@IS_PROCCONN and @BIF_Y"> <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 = $procInstance_)]/BUSINTERFACE[(@NAME = $bifName_)]/@BIFRANK"/> <xsl:variable name="procBusName_" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $procInstance_)]/BUSINTERFACE[(@NAME = $bifName_)]/@BUSNAME"/> <xsl:variable name="procBifSide_" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $procInstance_)]/BUSINTERFACE[(@NAME = $bifName_)]/@BIF_X"/> <xsl:variable name="bcProc_Y_" select="($mem_procshp_Y_ + $procBif_Y_ + ceiling($BLKD_BIF_H div 2) - ceiling($BLKD_BIFC_H div 2) + $mem_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> <MEMCONN X="{$bcProc_X_}" Y="{$bcProc_Y_}" BUSNAME="{$procBusName_}" BUSSTD="{$iBusStd}" BIFRANK="{$procBifRank_}" BIFSIDE="{$procBifSide_}"/> </xsl:when> <xsl:otherwise> <xsl:variable name="memcInstance_" select="@INSTANCE"/> <xsl:variable name="memcshp_vert_idx_" select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[MODULE[(@INSTANCE = $memcInstance_)]]/@SHAPE_VERTI_INDEX"/> <xsl:variable name="memcBifSide_" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $memcInstance_)]/BUSINTERFACE[(@NAME = $bifName_)]/@BIF_X"/> <xsl:variable name="memcBif_Y_" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $memcInstance_)]/BUSINTERFACE[(@NAME = $bifName_)]/@BIF_Y"/> <xsl:variable name="memshp_Y_"> <xsl:call-template name="_calc_Stack_Shape_Y"> <xsl:with-param name="iHorizIdx" select="$mem_procshp_hori_idx_"/> <xsl:with-param name="iVertiIdx" select="$memcshp_vert_idx_"/> </xsl:call-template> </xsl:variable> <xsl:variable name="memcMOD_W_" select="((/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[MODULE[(@INSTANCE = $memcInstance_)]]/@MODS_W) * $BLKD_MOD_W)"/> <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="memcConn_Y_"> <xsl:choose> <xsl:when test="(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[MODULE[(@INSTANCE = $memcInstance_)]]/@MODS_H = 1)"> <xsl:value-of select="($memshp_Y_ + ($BLKD_MOD_LANE_H + $BLKD_MOD_LABEL_H + $BLKD_BIF_GAP_V) + ($memcBif_Y_ * ($BLKD_BIF_H + $BLKD_BIF_GAP_V)) + ceiling($BIF_H div 2) - ceiling($BLKD_BIFC_H div 2) + $cmplxStack_H_diff_)"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="($memshp_Y_ + $BLKD_MOD_H + $BLKD_MOD_LANE_H + ($memcBif_Y_ * ($BLKD_BIF_H + $BLKD_BIF_GAP_V)) + ceiling($BLKD_BIF_H div 2) - ceiling($BLKD_BIFC_H div 2) + $cmplxStack_H_diff_)"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="memcConn_X_"> <xsl:choose> <xsl:when test="$memcBifSide_ = '0'"> <xsl:value-of select="($space_W_ + $extSpaceWest_W_ + $extSpaceEast_W_ - (ceiling($memcMOD_W_ div 2) + $BLKD_BIFC_W))"/> </xsl:when> <xsl:when test="$memcBifSide_ = '1'"> <xsl:value-of select="ceiling($memcMOD_W_ div 2)"/> </xsl:when> </xsl:choose> </xsl:variable> <xsl:variable name="memcBifRank_" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $memcInstance_)]/BUSINTERFACE[(@NAME = $bifName_)]/@BIFRANK"/> <xsl:variable name="memcBusName_" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $memcInstance_)]/BUSINTERFACE[(@NAME = $bifName_)]/@BUSNAME"/> <MEMCONN X="{$memcConn_X_}" Y="{$memcConn_Y_}" BUSNAME="{$memcBusName_}" BUSSTD="{$iBusStd}" BIFRANK="{$memcBifRank_}" BIFSIDE="{$memcBifSide_}"/><!-- --> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:variable> <!-- Draw the busconnection and horizontal lines.--> <xsl:for-each select="exsl:node-set($memConn_heights_)/MEMCONN"> <xsl:variable name="bus_x_" select="($bcInSpace_X_ + ceiling($BLKD_BIFC_W div 2))"/> <xsl:variable name="bus_y_" select="@Y + ceiling($BLKD_BIFC_H div 2) - ceiling($BLKD_P2P_BUS_W div 2)"/> <xsl:variable name="adjusted_X_"> <xsl:choose> <xsl:when test="((@X < ($bus_x_ + $BLKD_BUS_ARROW_W)) and (@BIFSIDE ='0'))"> <xsl:value-of select="(@X + $BLKD_P2P_BUS_W)"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="@X"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <!-- <xsl:choose> <xsl:when test="((@X < ($bus_x_ + $BLKD_BUS_ARROW_W)) and (@BIFSIDE ='0'))"> <xsl:message>Adjusting...</xsl:message> </xsl:when> </xsl:choose>--> <xsl:variable name="h_bus_ul_x_dx_"> <xsl:choose> <xsl:when test="((@X < ($bus_x_ + $BLKD_BUS_ARROW_W)) and (@BIFSIDE='0'))"> <xsl:value-of select="$BLKD_P2P_BUS_W"/> </xsl:when> <xsl:otherwise>0</xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="h_bus_ul_x_"> <xsl:choose> <xsl:when test="@BIFSIDE='0'"> <xsl:value-of select="($bus_x_ - $h_bus_ul_x_dx_)"/> </xsl:when> <xsl:when test="@BIFSIDE='1'"> <xsl:value-of select="(@X + $BLKD_BIFC_W + $BLKD_BUS_ARROW_W)"/> </xsl:when> </xsl:choose> </xsl:variable>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -