?? mdtsvgblkd_main.xsl
字號:
</xsl:variable> <xsl:variable name="bridges_w_" select="(($G_NumOfBridges * ($BLKD_MOD_W + ($BLKD_BUS_LANE_W * 2))) + $BLKD_BRIDGE_GAP)"/> <xsl:variable name="stack_y_" select="($G_SharedBus_Y - $stack_abv_sbs_ - $BLKD_PROC2SBS_GAP)"/> <xsl:variable name="stack_x_" select="($BLKD_INNER_X + $stack_line_x_ + $bridges_w_)"/> <xsl:variable name="stack_name_"> <xsl:call-template name="_gen_Stack_Name"> <xsl:with-param name="iHorizIdx" select="@EAST"/> </xsl:call-template> </xsl:variable> <use x="{$stack_x_}" y="{$stack_y_}" xlink:href="#{$stack_name_}"/> </xsl:for-each> </xsl:template> <xsl:template name="Draw_BlkDiagram_StandAloneMpmcConnections"> <xsl:variable name="mpmcInst_" select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/MPMCSHAPE/@INSTANCE"/> <xsl:variable name="lastStack_" select="(/EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH) - 1"/> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE"> <xsl:variable name="currentLane_" select="position()"/><!-- <xsl:message>Looking in space <xsl:value-of select="$currentLane_"/></xsl:message>--> <xsl:variable name="stackToEast_"> <xsl:choose> <xsl:when test="not(@WEST = $lastStack_)"><xsl:value-of select="@EAST"/></xsl:when> <xsl:when test=" (@WEST = $lastStack_)"><xsl:value-of select="'NONE'"/></xsl:when> </xsl:choose> </xsl:variable> <xsl:variable name="stackToWest_"> <xsl:choose> <xsl:when test="not(@WEST = $lastStack_)"><xsl:value-of select="'NONE'"/></xsl:when> <xsl:when test=" (@WEST = $lastStack_)"><xsl:value-of select="@WEST"/></xsl:when> </xsl:choose> </xsl:variable> <xsl:variable name="spaceAbvSbs_H_"> <xsl:call-template name="_calc_Space_AbvSbs_Height"> <xsl:with-param name="iStackToEast" select="$stackToEast_"/> <xsl:with-param name="iStackToWest" select="$stackToWest_"/> </xsl:call-template> </xsl:variable> <xsl:variable name="space_y_" select="($G_SharedBus_Y - $spaceAbvSbs_H_ - $BLKD_PROC2SBS_GAP)"/> <!-- <xsl:message>Stack To East <xsl:value-of select="$stackToEast_"/></xsl:message> <xsl:message>Stack To West <xsl:value-of select="$stackToWest_"/></xsl:message> <xsl:variable name="space_X_"> <xsl:call-template name="_calc_Space_X"> <xsl:with-param name="iStackToEast" select="$stackToEast_"/> <xsl:with-param name="iStackToWest" select="$stackToWest_"/> </xsl:call-template> </xsl:variable> <xsl:variable name="space_y_" select="($G_SharedBus_Y - $spaceAbvSbs_H_ - $BLKD_PROC2SBS_GAP)"/> <xsl:variable name="space_x_" select="($BLKD_INNER_X + $G_total_Bridges_W + $space_line_x_)"/>--> <xsl:for-each select="BUSCONNLANE[@IS_MPMCCONN]"> <!-- <xsl:variable name="bifSide_" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = BUSCONN/@INSTANCE)]/BUSINTERFACE[(@BUSNAME = @BUSNAME)]/@BIF_X"/>--> <xsl:variable name="bifInst_" select="BUSCONN/@INSTANCE"/> <xsl:variable name="busName_" select="@BUSNAME"/> <xsl:variable name="bifSide_" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $bifInst_)]/BUSINTERFACE[(@BUSNAME = $busName_)]/@BIF_X"/> <xsl:variable name="mpmcBifName_"> <xsl:choose> <xsl:when test=" (@IS_SBSCONN)"><xsl:value-of select="BUSCONN/@BUSINTERFACE"/></xsl:when> <xsl:when test="not(@IS_SBSCONN)"><xsl:value-of select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $mpmcInst_)]/BUSINTERFACE[(@BUSNAME = $busName_)]/@NAME"/></xsl:when> <xsl:otherwise><xsl:value-of select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $mpmcInst_)]/BUSINTERFACE[(@BUSNAME = $busName_)]/@NAME"/></xsl:otherwise> </xsl:choose> </xsl:variable><!-- <xsl:message>MPMC Bif Name <xsl:value-of select="$mpmcBifName_"/></xsl:message> <xsl:message>Bif Side <xsl:value-of select="$bifSide_"/></xsl:message> <xsl:message>Bus Name <xsl:value-of select="@BUSNAME"/></xsl:message> <xsl:message>Instance <xsl:value-of select="$bifInst_"/></xsl:message>--> <xsl:variable name="space_line_X_"> <xsl:call-template name="_calc_Space_X"> <xsl:with-param name="iStackToEast" select="$stackToEast_"/> <xsl:with-param name="iStackToWest" select="$stackToWest_"/> </xsl:call-template> </xsl:variable> <xsl:variable name="space_X_" select="($BLKD_INNER_X + $G_total_Bridges_W + $space_line_X_)"/> <xsl:variable name = "stackToWest_W_"> <xsl:choose> <xsl:when test="(($stackToEast_ = '0') and ($stackToWest_ = 'NONE'))">0</xsl:when> <xsl:when test="(($stackToEast_ = 'NONE') and not($stackToWest_ = 'NONE'))"> <xsl:call-template name="_calc_Stack_Width"> <xsl:with-param name="iStackIdx" select="$stackToWest_"/> </xsl:call-template> </xsl:when> <xsl:when test="(not($stackToEast_ = '0') and not($stackToEast_ = 'NONE') and ($stackToWest_ = 'NONE'))"> <xsl:call-template name="_calc_Stack_Width"> <xsl:with-param name="iStackIdx" select="($stackToEast_ - 1)"/> </xsl:call-template> </xsl:when> <xsl:otherwise>0</xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name = "stackToEast_W_"> <xsl:call-template name="_calc_Stack_Width"> <xsl:with-param name="iStackIdx" select="$stackToEast_"/> </xsl:call-template> </xsl:variable> <xsl:variable name ="extSpaceWest_W_" select="ceiling($stackToWest_W_ div 2)"/> <xsl:variable name ="extSpaceEast_W_" select="ceiling($stackToEast_W_ div 2)"/><!-- <xsl:message>extSpaceWest_W_ <xsl:value-of select="$extSpaceWest_W_"/></xsl:message> <xsl:message>extSpaceEast_W_ <xsl:value-of select="$extSpaceEast_W_"/></xsl:message> <xsl:message>Found a MPMC lane in space <xsl:value-of select="$currentLane_"/> at X <xsl:value-of select="$lane_X_"/></xsl:message> <xsl:message>mpmcBifRank <xsl:value-of select="$mpmcBifRank_"/></xsl:message>--> <!-- <xsl:variable name="laneInSpace_X_" select="($extSpaceWest_W_ + (@BUSLANE_X * $BLKD_BUS_LANE_W))"/>--> <xsl:variable name="laneInSpace_X_"> <xsl:choose> <xsl:when test="(@ORIENTED = 'EAST')"> <xsl:value-of select="($extSpaceWest_W_ + (@BUSLANE_X * $BLKD_BUS_LANE_W) - $BLKD_BUS_ARROW_W - $BLKD_P2P_BUS_W)"/> </xsl:when> <xsl:otherwise><xsl:value-of select="($extSpaceWest_W_ + (@BUSLANE_X * $BLKD_BUS_LANE_W))"/></xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="lane_X_" select="($space_X_ + $laneInSpace_X_)"/> <xsl:variable name="mpmcBifRank_" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $mpmcInst_)]/BUSINTERFACE[(@BUSNAME = @BUSNAME)]/@BIFRANK"/> <!-- <xsl:variable name="bc_X_" select="($lane_X_ + ceiling($BLKD_BIFC_W div 2) - ceiling($BLKD_BUS_ARROW_W div 2))"/> <xsl:variable name="bc_X_" select="($lane_X_ + ceiling($BLKD_BIFC_W div 2) - ceiling($BLKD_BUS_ARROW_W div 2))"/> <xsl:variable name="bc_X_" select="($lane_X_ + ceiling($BLKD_BIFC_W div 2))"/> --> <xsl:variable name="bc_Y_" select="($BLKD_INNER_Y + $BLKD_MPMC_MOD_H)"/> <xsl:variable name="bc_X_" > <xsl:choose> <xsl:when test="($bifSide_ = '0')"><xsl:value-of select="($lane_X_ + ceiling($BLKD_BIFC_W div 2))"/></xsl:when> <xsl:when test="($bifSide_ = '1')"><xsl:value-of select="($lane_X_ + $BLKD_BIFC_dx)"/></xsl:when> <xsl:otherwise> <xsl:value-of select="($lane_X_ + ceiling($BLKD_BIFC_W div 2))"/></xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="busColor_"> <xsl:call-template name="BusType2Color"> <xsl:with-param name="iBusType" select="@BUSSTD"/> </xsl:call-template> </xsl:variable> <!-- Place the MPMC bif label --> <xsl:variable name="bcl_X_" select="($bc_X_ + ceiling($BLKD_BIFC_W div 2) - ceiling($BLKD_BIF_W div 2))"/> <xsl:variable name="bcl_Y_" select="($bc_Y_ - $BLKD_BIF_H - $BLKD_BIF_GAP_H)"/> <use x="{$bcl_X_}" y="{$bcl_Y_}" xlink:href="#{@BUSSTD}_Bif"/> <text class="mpmcbiflabel" x="{$bcl_X_ + ceiling($BLKD_BIF_W div 2)}" y="{$bcl_Y_ + ceiling($BLKD_BIF_H div 2) + 3}"><xsl:value-of select="$mpmcBifName_"/></text> <!-- Place the MPMC bif --> <use x="{$bc_X_}" y="{$bc_Y_}" xlink:href="#{@BUSSTD}_busconn_{$mpmcBifRank_}"/> <xsl:variable name="bcArrow_X_" select="($bc_X_ + ceiling($BLKD_BIFC_W div 2) - ceiling($BLKD_BUS_ARROW_H div 2))"/> <xsl:variable name="bcArrow_Y_" select="($bc_Y_ + $BLKD_BIFC_H - 3)"/> <!-- Place the MPMC Arrow --> <use x="{$bcArrow_X_}" y="{$bcArrow_Y_}" xlink:href="#{@BUSSTD}_BusArrowNorth"/> <!-- Place a block to cover the gap btw MPMC and top of Bus Lane Space, or to the correct SBS For non SBS connections a vertical block will already have been drawn to the top of the space. --> <xsl:variable name="sbsDy_"> <xsl:choose> <xsl:when test="@IS_SBSCONN"><xsl:value-of select="2 + (/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $busName_)]/@BUSINDEX * $BLKD_SBS_LANE_H)"/></xsl:when> <xsl:when test="not(@IS_SBSCONN)">0</xsl:when> <xsl:otherwise>0></xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="mpmcBusHeight_"> <xsl:choose> <xsl:when test="(@IS_SBSCONN)"><xsl:value-of select="($G_SharedBus_Y - ($bcArrow_Y_ + $BLKD_BUS_ARROW_W + 4) + $sbsDy_)"/></xsl:when> <xsl:when test="not(@IS_SBSCONN)"> <xsl:choose> <xsl:when test="($space_y_ >= ($bcArrow_Y_ + $BLKD_BUS_ARROW_W + 4 + $sbsDy_))"> <xsl:value-of select="($space_y_ - ($bcArrow_Y_ + $BLKD_BUS_ARROW_W + 4 + $sbsDy_))"/> </xsl:when> <xsl:when test="($space_y_ < ($bcArrow_Y_ + $BLKD_BUS_ARROW_W + 4 + $sbsDy_))"> <xsl:value-of select="(($bcArrow_Y_ + $BLKD_BUS_ARROW_W + 4 + $sbsDy_) - $space_y_)"/> </xsl:when> </xsl:choose> </xsl:when> <xsl:otherwise><xsl:value-of select="$BLKD_BIFC_H"/></xsl:otherwise> </xsl:choose> </xsl:variable> <rect x="{$bcArrow_X_ + $BLKD_BUS_ARROW_G}" y="{$bcArrow_Y_ + $BLKD_BUS_ARROW_W + 4}" width= "{$BLKD_P2P_BUS_W}" height="{$mpmcBusHeight_}" style="stroke:none; fill:{$busColor_}"/> <!-- place the bus label here --> <text class="p2pbuslabel" x="{$bcArrow_X_ + $BLKD_BUS_ARROW_W + 6}" y="{$bcArrow_Y_ + ceiling($mpmcBusHeight_ div 2) + 6}"><xsl:value-of select="$busName_"/></text> </xsl:for-each> </xsl:for-each> </xsl:template> <!-- ======================================================================= --><!-- FUNCTION TEMPLATE --><!-- --><!-- Draw bus lane spaces on the Block Diagram --><!-- ======================================================================= --><xsl:template name="Draw_BlkDiagram_BusLaneSpaces"> <xsl:variable name="lastStack_" select="(/EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH) - 1"/> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[@EAST]"> <xsl:sort select="@EAST" data-type="number"/> <xsl:call-template name="Draw_BlkDiagram_BusLaneSpace"> <xsl:with-param name="iStackToEast" select="@EAST"/> </xsl:call-template> </xsl:for-each> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@WEST = $lastStack_)]"> <xsl:call-template name="Draw_BlkDiagram_BusLaneSpace"> <xsl:with-param name="iStackToWest" select="$lastStack_"/> </xsl:call-template> </xsl:for-each> </xsl:template> <xsl:template name="Draw_BlkDiagram_BusLaneSpace"> <xsl:param name="iStackToEast" select="'NONE'"/> <xsl:param name="iStackToWest" select="'NONE'"/> <xsl:variable name="spaceAbvSbs_H_"> <xsl:call-template name="_calc_Space_AbvSbs_Height"> <xsl:with-param name="iStackToEast" select="$iStackToEast"/> <xsl:with-param name="iStackToWest" select="$iStackToWest"/> </xsl:call-template> </xsl:variable> <xsl:variable name="spaceBlwSbs_H_"> <xsl:call-template name="_calc_Space_BlwSbs_Height"> <xsl:with-param name="iStackToEast" select="$iStackToEast"/> <xsl:with-param name="iStackToWest" select="$iStackToWest"/> </xsl:call-template> </xsl:variable> <xsl:variable name="space_line_x_"> <xsl:call-template name="_calc_Space_X"> <xsl:with-param name="iStackToEast" select="$iStackToEast"/> <xsl:with-param name="iStackToWest" select="$iStackToWest"/> </xsl:call-template> </xsl:variable> <xsl:variable name="space_y_" select="($G_SharedBus_Y - $spaceAbvSbs_H_ - $BLKD_PROC2SBS_GAP)"/> <xsl:variable name="space_x_" select="($BLKD_INNER_X + $G_total_Bridges_W + $space_line_x_)"/> <xsl:variable name="stackToEast_"> <xsl:choose> <xsl:when test="not($iStackToEast = 'NONE')"><xsl:value-of select="$iStackToEast"/></xsl:when> <xsl:otherwise>NONE</xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="stackToWest_"> <xsl:choose> <xsl:when test=" not($iStackToWest = 'NONE')"><xsl:value-of select="$iStackToWest"/></xsl:when> <xsl:when test="(not($iStackToEast = 'NONE') and not($iStackToEast = '0'))"><xsl:value-of select="($iStackToEast - 1)"/></xsl:when> <xsl:otherwise>NONE</xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="space_Name_"> <xsl:call-template name="_gen_Space_Name"> <xsl:with-param name="iStackToEast" select="$stackToEast_"/> <xsl:with-param name="iStackToWest" select="$stackToWest_"/> </xsl:call-template> </xsl:variable> <!-- <xsl:message>StackToEast is <xsl:value-of select="$iStackToEast"/></xsl:message> <xsl:message>StackToWest is <xsl:value-of select="$iStackToWest"/></xsl:message> <xsl:message>SpaceName is <xsl:value-of select="$space_Name_"/></xsl:message>--> <use x="{$space_x_}" y="{$space_y_}" xlink:href="#{$space_Name_}"/> </xsl:template> <!-- =========================================================================== --><!-- FUNCTION TEMPLATE --><!-- --><!-- Draw Bridges on the Block Diagram --><!-- =========================================================================== --><xsl:template name="Draw_BlkDiagram_Bridges"> <!-- First save all the bridge indexs in a variable --> <xsl:variable name="bridgeShapes_"> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BRIDGESHAPES/MODULE/BUSCONNS[(@ORIENTED = 'WEST')]/BUSCONN"> <BRIDGE BUSINDEX="{@BUSINDEX}" INSTANCE="{../../@INSTANCE}" POSITION="{(position() -1)}"/> <BRIDGECONN BUSINDEX="{@BUSINDEX}" INSTANCE="{../../@INSTANCE}" ORIENTED="{../@ORIENTED}" POSITION="{(position() - 1)}" BUSSTD="{@BUSSTD}" BIFRANK="{@BIFRANK}"/> <!-- So both bus conns have same position.... --> <xsl:if test="../../BUSCONNS[(@ORIENTED = 'EAST')]"> <BRIDGECONN BUSINDEX="{../../BUSCONNS[(@ORIENTED ='EAST')]/BUSCONN/@BUSINDEX}" INSTANCE="{../../@INSTANCE}" ORIENTED="EAST" POSITION="{(position() - 1)}" BUSSTD="{../../BUSCONNS[(@ORIENTED = 'EAST')]/BUSCONN/@BUSSTD}" BIFRANK="{../../BUSCONNS[(@ORIENTED = 'EAST')]/BUSCONN/@BIFRANK}"/> </xsl:if> </xsl:for-each> </xsl:variable><!-- <xsl:message>Found an east connection on <xsl:value-of select="../../@INSTANCE"/></xsl:message>--> <!-- Now layout the bridge shapes between the shared busses --> <xsl:for-each select="exsl:node-set($bridgeShapes_)/BRIDGE"> <xsl:sort select="@POSITION" data-type="number"/>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -