📄 mdtsvgblkd_processors.xsl
字号:
<?xml version="1.0" standalone="no"?><xsl:stylesheet version="1.0" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:math="http://exslt.org/math" xmlns:exsl="http://exslt.org/common" xmlns:xlink="http://www.w3.org/1999/xlink" extension-element-prefixes="math"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" doctype-public="-//W3C//DTD SVG 1.0//EN" doctype-system="http://www.w3.org/TR/SVG/DTD/svg10.dtd"/> <!-- ======================= DEF BLOCK =================================== --><xsl:template name="Define_AllStacks"> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST < /EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH)]"> <xsl:call-template name="Define_Stack"> <xsl:with-param name="iStackIdx" select="@EAST"/> </xsl:call-template> </xsl:for-each> </xsl:template> <xsl:template name="Define_Stack"> <xsl:param name="iStackIdx" select="100"/> <!-- Define the stack's peripheral shapes--> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and not(@MODCLASS = 'MEMORY_UNIT'))]"> <xsl:for-each select="MODULE"> <xsl:variable name="modInst_" select="@INSTANCE"/> <xsl:variable name="modType_" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE=$modInst_)]/@MODTYPE"/> <xsl:call-template name="Define_Peripheral"> <xsl:with-param name="iModInst" select="$modInst_"/> <xsl:with-param name="iModType" select="$modType_"/> <xsl:with-param name="iShapeId" select="../@SHAPE_ID"/> <xsl:with-param name="iHorizIdx" select="../@STACK_HORIZ_INDEX"/> <xsl:with-param name="iVertiIdx" select="../@SHAPE_VERTI_INDEX"/> </xsl:call-template> </xsl:for-each> </xsl:for-each> <!-- Define the stack's memory shapes--> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@MODCLASS='MEMORY_UNIT'))]"> <xsl:call-template name="Define_MemoryUnit"> <xsl:with-param name="iShapeId" select="@SHAPE_ID"/> </xsl:call-template> </xsl:for-each> <!-- Define the stack's processors--> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[@INSTANCE and @BIFS_W and @BIFS_H and (@STACK_HORIZ_INDEX = $iStackIdx)]"> <xsl:call-template name="Define_Processor"/> </xsl:for-each> <!-- Make an inventory of all the things in this processor's stack --> <xsl:variable name="pstackW_"> <xsl:call-template name="_calc_Stack_Width"> <xsl:with-param name="iStackIdx" select="$iStackIdx"/> </xsl:call-template> </xsl:variable> <xsl:variable name="pstackH_"> <xsl:call-template name="_calc_Stack_Height"> <xsl:with-param name="iStackIdx" select="$iStackIdx"/> </xsl:call-template> </xsl:variable> <xsl:variable name="procW_" select="$BLKD_MOD_W"/> <xsl:variable name="procX_" select="(ceiling($pstackW_ div 2) - ceiling($procW_ div 2))"/> <xsl:variable name="sbsGap_" select="($BLKD_PROC2SBS_GAP + $G_total_SharedBus_H)"/> <xsl:variable name="stack_name_"> <xsl:call-template name="_gen_Stack_Name"> <xsl:with-param name="iHorizIdx" select="$iStackIdx"/> </xsl:call-template> </xsl:variable> <!-- <xsl:message>Horiz index<xsl:value-of select="$stackIdx"/></xsl:message> <xsl:message>Drawing stack <xsl:value-of select="$stack_name_"/></xsl:message>--> <!-- Now use all this stuff to draw the stack--> <symbol id="{$stack_name_}"> <rect x="0" y="0" rx="6" ry="6" width = "{$pstackW_}" height= "{$pstackH_}" style="fill:{$COL_BG}; stroke:none;"/> <!-- First draw the the processor's peripherals--> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[(@STACK_HORIZ_INDEX = $iStackIdx)]"> <xsl:sort select="@STACK_VERTI_INDEX" data-type="number"/> <xsl:variable name="shapeW_" select="(@MODS_W * $BLKD_MOD_W)"/> <xsl:variable name="shapeX_" select="(ceiling($pstackW_ div 2) - ceiling($shapeW_ div 2))"/> <xsl:variable name="stack_SymName_"> <xsl:call-template name="_gen_Stack_SymbolName"> <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/> <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/> </xsl:call-template> </xsl:variable> <!-- <xsl:message>Drawing stack peripheral <xsl:value-of select="$stack_SymName_"/></xsl:message>--> <xsl:variable name="shapeY_"> <xsl:call-template name="_calc_Stack_Shape_Y"> <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/> <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/> </xsl:call-template> </xsl:variable> <use x="{$shapeX_}" y="{$shapeY_}" xlink:href="#{$stack_SymName_}"/> </xsl:for-each> <!-- Then draw the slave buckets for the shared busses that this processor is master to --> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)]"> <xsl:sort select="@SHAPE_VERTI_INDEX" data-type="number"/> <xsl:variable name="bucketW_" select="(($BLKD_MOD_BKTLANE_W * 2) + (($BLKD_MOD_W * @MODS_W) + ($BLKD_MOD_BUCKET_G * (@MODS_W - 1))))"/> <xsl:variable name="bucketX_" select="(ceiling($pstackW_ div 2) - ceiling($bucketW_ div 2))"/> <xsl:variable name="bucketY_"> <xsl:call-template name="_calc_Stack_Shape_Y"> <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/> <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/> </xsl:call-template> </xsl:variable> <!-- <xsl:message>SBS Bucket Y <xsl:value-of select="$bucketY_"/></xsl:message>--> <use x="{$bucketX_}" y="{$bucketY_}" xlink:href="#sbsbucket_{@BUSNAME}"/> <text class="ipclass" x="{$bucketX_}" y="{$bucketY_ - 4}">SLAVES OF <xsl:value-of select="@BUSNAME"/></text> </xsl:for-each> <!-- Then draw the the processor itself --> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@STACK_HORIZ_INDEX = $iStackIdx)]"> <xsl:sort select="@SHAPE_VERTI_INDEX" data-type="number"/> <xsl:variable name="procY_"> <xsl:call-template name="_calc_Stack_Shape_Y"> <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/> <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/> </xsl:call-template> </xsl:variable> <xsl:variable name="stack_SymName_"> <xsl:call-template name="_gen_Stack_SymbolName"> <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/> <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/> </xsl:call-template> </xsl:variable> <use x="{$procX_}" y="{$procY_}" xlink:href="#{$stack_SymName_}"/> <xsl:if test = "not(@IS_LIKEPROC)"> <text class="ipclass" x="{$procX_}" y="{$procY_ - 4}">PROCESSOR</text> </xsl:if> <xsl:if test = "@IS_LIKEPROC = 'TRUE'"> <text class="ipclass" x="{$procX_}" y="{$procY_ - 4}">USER MODULE</text> </xsl:if> </xsl:for-each> </symbol></xsl:template> <xsl:template name="Define_Processor"> <xsl:param name="iProcInst" select="@INSTANCE"/> <xsl:param name="iModType" select="/EDKSYSTEM/MODULES/MODULE[@INSTANCE=$iProcInst]/@MODTYPE"/><!-- <xsl:param name="procType" select="/EDKSYSTEM/MODULES/MODULE[@INSTANCE=$procInst]/@PROCTYPE"/>--> <xsl:variable name="label_y_"> <xsl:value-of select="$BLKD_MOD_LANE_H"/> </xsl:variable> <!-- <xsl:message>The proctype is <xsl:value-of select="$procType"/></xsl:message> --> <xsl:variable name="procH_" select="(($BLKD_MOD_LANE_H * 2) + (($BLKD_BIF_H + $BLKD_BIF_GAP_V) * @BIFS_H) + ($BLKD_MOD_LABEL_H + $BLKD_BIF_GAP_V))"/> <xsl:variable name="procW_" select="(($BLKD_MOD_LANE_W * 2) + (($BLKD_BIF_W * @BIFS_W) + $BLKD_BIF_GAP_H))"/> <xsl:variable name="procColor_"> <xsl:choose> <xsl:when test="contains($iModType,'microblaze')"><xsl:value-of select="$COL_PROC_BG_MB"/></xsl:when> <xsl:when test="contains($iModType,'ppc')"><xsl:value-of select="$COL_PROC_BG_PP"/></xsl:when> <xsl:otherwise> <xsl:value-of select="$COL_PROC_BG_USR"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <!-- <xsl:message>The proc color is <xsl:value-of select="$procColor"/></xsl:message> --> <xsl:variable name="procName_"> <xsl:call-template name="_gen_Stack_SymbolName"> <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/> <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/> </xsl:call-template> </xsl:variable> <!-- <xsl:message>The proc name is <xsl:value-of select="$procName_"/></xsl:message> --> <symbol id="{$procName_}"> <rect x="0" y="0" rx="6" ry="6" width = "{$procW_}" height= "{$procH_}" style="fill:{$procColor_}; stroke:{$COL_WHITE}; stroke-width:2"/> <rect x="{ceiling($procW_ div 2) - ceiling($BLKD_MOD_LABEL_W div 2)}" y="{$BLKD_MOD_LANE_H}" rx="3" ry="3" width= "{$BLKD_MOD_LABEL_W}" height="{$BLKD_MOD_LABEL_H}" style="fill:{$COL_WHITE}; stroke:none;"/> <text class="bciptype" x="{ceiling($procW_ div 2)}" y="{$BLKD_MOD_LANE_H + 8}"> <xsl:value-of select="$iModType"/> </text> <text class="bciplabel" x="{ceiling($procW_ div 2)}" y="{$BLKD_MOD_LANE_H + 16}"> <xsl:value-of select="$iProcInst"/> </text> <xsl:if test="/EDKSYSTEM/MODULES/MODULE[@INSTANCE=$iProcInst]/@GROUP"> <rect x="{ceiling($BLKD_MOD_W div 2) - ceiling($BLKD_MOD_LABEL_W div 2)}" y="{$BLKD_MOD_LANE_H + $BIF_H + ceiling($BLKD_BIF_H div 3) - 2}" rx="3" ry="3" width= "{$BLKD_MOD_LABEL_W}" height="{$BLKD_BIF_H}" style="fill:{$COL_IORING_LT}; stroke:none;"/> <text class="ioplblgrp" x="{ceiling($BLKD_MOD_W div 2)}" y="{$BLKD_MOD_LANE_H + $BIF_H + ceiling($BIF_H div 3) + 12}"> <xsl:value-of select="/EDKSYSTEM/MODULES/MODULE[@INSTANCE = $iProcInst]/@GROUP"/> </text> </xsl:if> <xsl:for-each select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $iProcInst)]/BUSINTERFACE[(@BIF_X and @BIF_Y)]"> <xsl:variable name="bif_busstd_"> <xsl:choose> <xsl:when test="@BUSSTD"> <xsl:value-of select="@BUSSTD"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="'TRS'"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="bif_buscol_"> <xsl:call-template name="BusType2Color"> <xsl:with-param name="iBusType" select="$bif_busstd_"/> </xsl:call-template> </xsl:variable> <xsl:variable name="bif_name_"> <xsl:choose> <xsl:when test="string-length(@NAME) <= 5"> <xsl:value-of select="@NAME"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="substring(@NAME,0,5)"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="bif_x_" select="(( $BLKD_BIF_W * @BIF_X) + ($BLKD_BIF_GAP_H * @BIF_X) + ($BLKD_MOD_LANE_W * 1))"/> <xsl:variable name="bif_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="horz_line_y_" select="($bif_y_ + ceiling($BLKD_BIFC_H div 2))"/> <xsl:variable name="horz_line_x1_"> <xsl:choose> <xsl:when test="@BIF_X = '0'">0</xsl:when> <xsl:otherwise><xsl:value-of select="($BLKD_MOD_W - $BLKD_MOD_LANE_W)"/></xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="horz_line_x2_"> <xsl:choose> <xsl:when test="@BIF_X = '0'"><xsl:value-of select="$BLKD_MOD_LANE_W"/></xsl:when> <xsl:otherwise><xsl:value-of select="$BLKD_MOD_W + 1"/></xsl:otherwise> </xsl:choose> </xsl:variable> <line x1="{$horz_line_x1_}" y1="{$horz_line_y_ - 2}" x2="{$horz_line_x2_}" y2="{$horz_line_y_ - 2}" style="stroke:{$bif_buscol_};stroke-width:1"/> <use x="{$bif_x_}" y="{$bif_y_}" xlink:href="#{$bif_busstd_}_Bif"/> <text class="biflabel" x="{$bif_x_ + ceiling($BIF_W div 2)}" y="{$bif_y_ + ceiling($BIF_H div 2) + 3}"> <xsl:value-of select="$bif_name_"/> </text> </xsl:for-each> <xsl:variable name="interrupt_cntlr_"> <xsl:choose> <xsl:when test="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE=$iProcInst)]/@INTERRUPT_CNTLR"> <xsl:value-of select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE=$iProcInst)]/@INTERRUPT_CNTLR"/> </xsl:when> <xsl:otherwise>"_no_interrupt_cntlr_"</xsl:otherwise> </xsl:choose> </xsl:variable> <!-- <xsl:message> The intc index should <xsl:value-of select="$interrupt_cntlr_"/></xsl:message> <xsl:message> The intc index is <xsl:value-of select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $interrupt_cntlr_)]/@INTCINDEX"/></xsl:message>--> <xsl:if test="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $interrupt_cntlr_)]/@INTCINDEX"> <xsl:variable name="intr_col_"> <xsl:call-template name="intcIdx2Color"> <xsl:with-param name="iIntcIdx" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $interrupt_cntlr_)]/@INTCINDEX"/> </xsl:call-template> </xsl:variable> <xsl:call-template name="_draw_InterruptedProc"> <xsl:with-param name="iIntr_X" select="($BLKD_MOD_W - ceiling($BLKD_INTR_W div 2))"/> <xsl:with-param name="iIntr_Y" select="3"/> <xsl:with-param name="iIntr_COL" select="$intr_col_"/> <xsl:with-param name="iIntr_IDX" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $interrupt_cntlr_)]/@INTCINDEX"/> </xsl:call-template> </xsl:if> </symbol> </xsl:template></xsl:stylesheet>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -