📄 mdtsvgblkd_main.xsl
字号:
<?xml version="1.0" standalone="no"?><xsl:stylesheet version="1.0" xmlns:svg="http://www.w3.org/2000/svg" xmlns:exsl="http://exslt.org/common" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:math="http://exslt.org/math" xmlns:xlink="http://www.w3.org/1999/xlink" extension-element-prefixes="math"> <xsl:include href="MdtSVG_Colors.xsl"/><xsl:include href="MdtSVG_BifShapes.xsl"/> <xsl:include href="MdtSvgBLKD_Busses.xsl"/><xsl:include href="MdtSvgBLKD_IOPorts.xsl"/><xsl:include href="MdtSvgBLKD_Dimensions.xsl"/><xsl:include href="MdtSvgBLKD_Processors.xsl"/><xsl:include href="MdtSvgBLKD_Peripherals.xsl"/><xsl:include href="MdtSvgBLKD_Calculations.xsl"/><xsl:include href="MdtSvgBLKD_BusLaneSpaces.xsl"/> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" doctype-public="-//W3C//DTD SVG 1.0//EN" doctype-system="svg10.dtd"/> <xsl:param name="ADD_VIEWBOX" select="'FALSE'"/> <xsl:param name="IN_TESTMODE" select="'FALSE'"/><xsl:param name="CSS_SVG_DIAGRAMS" select="'MdtSVG_Diagrams.css'"/> <!-- =========================================================================== CALCULATE GLOBAL DIMENSIONS BASED ON BLKDSHAPES DEF IN INPUT XML ===========================================================================--> <xsl:variable name="G_total_StandAloneMpmc_H"> <xsl:if test="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/MPMCSHAPE"> <xsl:value-of select="($BLKD_MPMC_MOD_H + $BLKD_MPMC2PROC_GAP)"/> </xsl:if> <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/MPMCSHAPE)">0</xsl:if></xsl:variable> <xsl:variable name="G_max_Stack_BlwSbs_H"> <xsl:call-template name="_calc_Max_Stack_BlwSbs_Height"/></xsl:variable><xsl:variable name="G_max_Stack_AbvSbs_H"> <xsl:call-template name="_calc_Max_Stack_AbvSbs_Height"/></xsl:variable> <xsl:variable name="G_total_Stacks_W"> <xsl:call-template name="_calc_Stack_X"> <xsl:with-param name="iStackIdx" select="(/EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH)"/> </xsl:call-template></xsl:variable> <xsl:variable name="G_NumOfSharedBusses" select="count(/EDKSYSTEM/BLKDSHAPES/SBSSHAPES/MODULE)"/><xsl:variable name="G_total_SharedBus_H" select="($G_NumOfSharedBusses * $BLKD_SBS_LANE_H)"/><xsl:variable name="G_NumOfBridges" select="count(/EDKSYSTEM/BLKDSHAPES/BRIDGESHAPES/MODULE)"/><xsl:variable name="G_total_Bridges_W" select="(($G_NumOfBridges * ($BLKD_MOD_W + ($BLKD_BUS_LANE_W * 2))) + $BLKD_BRIDGE_GAP)"/> <xsl:variable name="G_total_drawarea_CLC" select="($G_total_Stacks_W + $G_total_Bridges_W + ($BLKD_INNER_GAP * 2))"/> <xsl:variable name="G_total_drawarea_W"> <xsl:if test="$G_total_drawarea_CLC > ($BLKD_KEY_W + $BLKD_SPECS_W + $BLKD_SPECS2KEY_GAP)"> <xsl:value-of select="$G_total_drawarea_CLC"/> </xsl:if> <xsl:if test="not($G_total_drawarea_CLC > ($BLKD_KEY_W + $BLKD_SPECS2KEY_GAP + $BLKD_SPECS_W))"> <xsl:value-of select="($BLKD_KEY_W + $BLKD_SPECS_W + $BLKD_SPECS2KEY_GAP)"/> </xsl:if></xsl:variable> <xsl:variable name="G_IpBucketMods_H"> <xsl:if test="/EDKSYSTEM/BLKDSHAPES/IPBUCKET/@MODS_H"><xsl:value-of select="/EDKSYSTEM/BLKDSHAPES/IPBUCKET/@MODS_H"/></xsl:if> <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/IPBUCKET/@MODS_H)">0</xsl:if></xsl:variable><xsl:variable name="G_total_IpBucket_H" select="($G_IpBucketMods_H * ($BLKD_MOD_H + $BLKD_BIF_H))"/> <xsl:variable name="G_total_UnkBucket_H"> <xsl:if test="/EDKSYSTEM/BLKDSHAPES/UNKBUCKET"> <xsl:variable name="unkBucketMods_H_"> <xsl:if test="/EDKSYSTEM/BLKDSHAPES/UNKBUCKET/@MODS_H"><xsl:value-of select="/EDKSYSTEM/BLKDSHAPES/UNKBUCKET/@MODS_H"/></xsl:if> <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/UNKBUCKET/@MODS_H)">0</xsl:if> </xsl:variable> <xsl:variable name="total_UnkMod_H_" select="($unkBucketMods_H_ * ($BLKD_MOD_H + $BLKD_BIF_H))"/> <xsl:variable name="unkBucketBifs_H_"> <xsl:if test="/EDKSYSTEM/BLKDSHAPES/UNKBUCKET/@BIFS_H"><xsl:value-of select="/EDKSYSTEM/BLKDSHAPES/UNKBUCKET/@BIFS_H"/></xsl:if> <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/UNKBUCKET/@BIFS_H)">0</xsl:if> </xsl:variable> <xsl:variable name="total_UnkBif_H_" select="($unkBucketBifs_H_ * ($BLKD_MOD_H + $BLKD_BIF_H))"/> <xsl:value-of select="($total_UnkBif_H_ + $total_UnkMod_H_)"/> </xsl:if> <xsl:if test="not(/EDKSYSTEM/BLKDSHAPES/UNKBUCKET)">0</xsl:if></xsl:variable> <xsl:variable name="G_SharedBus_Y" select="($BLKD_INNER_Y + $G_total_StandAloneMpmc_H + $G_max_Stack_AbvSbs_H + $BLKD_PROC2SBS_GAP)"/> <!-- =========================================================================== Calculate the width of the Block Diagram based on the total number of buslanes and modules in the design. If there are no buslanes or modules, a default width, just wide enough to display the KEY and SPECS is used =========================================================================== --><xsl:variable name="G_total_blkd_W" select="($G_total_drawarea_W + (($BLKD_PRTCHAN_W + $BLKD_IORCHAN_W)* 2))"/><xsl:variable name="G_total_diag_W" select="$G_total_blkd_W"/> <!-- =========================================================================== --><!-- Calculate the height of the Block Diagram based on the total number of --><!-- buslanes and modules in the design. Take into account special shapes such --><!-- as MultiProc shapes. --><!-- =========================================================================== --> <xsl:variable name="G_total_drawarea_H" select="($G_total_StandAloneMpmc_H + $G_max_Stack_AbvSbs_H + $BLKD_PROC2SBS_GAP + $G_total_SharedBus_H + $G_max_Stack_BlwSbs_H + $BLKD_SBS2IP_GAP + $G_total_IpBucket_H + $BLKD_IP2UNK_GAP + $G_total_UnkBucket_H + ($BLKD_INNER_GAP * 2))"/><xsl:variable name="G_total_blkd_H" select="($G_total_drawarea_H + (($BLKD_PRTCHAN_H + $BLKD_IORCHAN_H)* 2))"/> <xsl:variable name="G_total_diag_H"> <xsl:if test="($IN_TESTMODE = 'TRUE')"> <xsl:message>Generating Blkdiagram in TestMode </xsl:message> <xsl:value-of select="$G_total_blkd_H"/> </xsl:if> <xsl:if test="(not($IN_TESTMODE) or ($IN_TESTMODE = 'FALSE'))"> <xsl:value-of select="($G_total_blkd_H + $BLKD_DRAWAREA2KEY_GAP + $BLKD_KEY_H)"/> </xsl:if></xsl:variable> <!-- ======================= MAIN SVG BLOCK =============================== --><xsl:template match="EDKSYSTEM"> <!--<xsl:message>MABV is <xsl:value-of select="$G_max_Stack_AbvSbs_H"/></xsl:message><xsl:message>MBLW is <xsl:value-of select="$G_max_Stack_BlwSbs_H"/></xsl:message><xsl:message>STCK_W is <xsl:value-of select="$G_total_Stacks_W"/></xsl:message><xsl:message>BRDG_W is <xsl:value-of select="$G_total_Bridges_W"/></xsl:message><xsl:message>MPMC is <xsl:value-of select="$G_total_StandAloneMpmc_H"/></xsl:message><xsl:message>IPBK is <xsl:value-of select="$G_total_IpBucket_H"/></xsl:message><xsl:message>Blkd Total is <xsl:value-of select="$blkd_H_"/></xsl:message><xsl:message>max abv is <xsl:value-of select="$max_Stack_AbvSbs_H_"/></xsl:message><xsl:message>max blw is <xsl:value-of select="$max_Stack_BlwSbs_H_"/></xsl:message><xsl:message>Ip Bkt is <xsl:value-of select="$totalIpBkt_H_"/></xsl:message><xsl:message>Sbs is <xsl:value-of select="$totalSbs_H_"/></xsl:message><xsl:message>Unk Bkt is <xsl:value-of select="$totalUnkBkt_H_"/></xsl:message><xsl:message>Blkd DrawArea height as <xsl:value-of select="$total_drawarea_H_"/></xsl:message>--><!--specify a css for the file --><xsl:processing-instruction name="xml-stylesheet">href="<xsl:value-of select="$CSS_SVG_DIAGRAMS"/>" type="text/css"</xsl:processing-instruction><xsl:variable name="BLKD_ZOOM_Y"> <xsl:choose> <xsl:when test="($ADD_VIEWBOX = 'TRUE')"> <xsl:value-of select="($G_total_diag_H * 2)"/> </xsl:when> <xsl:otherwise>0</xsl:otherwise> </xsl:choose></xsl:variable> <xsl:text> </xsl:text><svg width="{$G_total_diag_W}" height="{$G_total_diag_H}" viewBox="0 0 0 {$BLKD_ZOOM_Y}"> <!-- =============================================== Layout All the various definitions =============================================== --> <defs> <!-- Diagram Key Definition --> <xsl:call-template name="Define_BlkDiagram_Key"/> <!-- Diagram Specs Definition --> <xsl:call-template name="Define_BlkDiagram_Specs"> <xsl:with-param name="iArch" select="@ARCH"/> <xsl:with-param name="iPart" select="@PART"/> <xsl:with-param name="iTimeStamp" select="@TIMESTAMP"/> <xsl:with-param name="iEdkVersion" select="@EDKVERSION"/> </xsl:call-template> <!-- IO Port Defs --> <xsl:call-template name="Define_IOPorts"/> <!-- BIF Defs --> <xsl:call-template name="Define_BifTypes"/> <!-- Bus Defs --> <xsl:call-template name="Define_Busses"/> <!-- Shared Bus Buckets Defs --> <xsl:call-template name="Define_SBSBuckets"/> <!-- IP Bucket Defs --> <xsl:call-template name="Define_IPBucket"/> <!-- Stack Defs --> <xsl:call-template name="Define_AllStacks"/> <!-- Space Defs --> <xsl:call-template name="Define_BusLaneSpaces"/> <!-- Main MPMC Defs --> <xsl:if test="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/MPMCSHAPE"> <xsl:call-template name="Define_StandAlone_MPMC"/> </xsl:if> </defs> <!-- =============================================== --><!-- Draw Outlines --><!-- =============================================== --> <!-- The surrounding black liner --> <rect x="0" y="0" width ="{$G_total_diag_W}" height="{$G_total_diag_H}" style="fill:{$COL_WHITE}; stroke:{$COL_BLACK};stroke-width:4"/> <!-- The outer IO channel --> <rect x="{$BLKD_PRTCHAN_W}" y="{$BLKD_PRTCHAN_H}" width= "{$G_total_blkd_W - ($BLKD_PRTCHAN_W * 2)}" height="{$G_total_blkd_H - ($BLKD_PRTCHAN_H * 2)}" style="fill:{$COL_IORING}"/> <!-- The Diagram's drawing area --> <rect x="{$BLKD_PRTCHAN_W + $BLKD_IORCHAN_W}" y="{$BLKD_PRTCHAN_H + $BLKD_IORCHAN_H}" width= "{$G_total_drawarea_W}" height="{$G_total_drawarea_H}" rx="8" ry="8" style="fill:{$COL_BG}"/> <!-- =============================================== --><!-- Draw All the various components --><!-- =============================================== --> <!-- Layout the IO Ports --> <xsl:if test="(not($IN_TESTMODE) or ($IN_TESTMODE = 'FALSE'))"> <xsl:call-template name="Draw_IOPorts"/> </xsl:if> <!-- Layout the Shapes --> <xsl:call-template name="Draw_BlkDiagram_Shapes"/> </svg> <!-- ======================= END MAIN SVG BLOCK =============================== --></xsl:template> <xsl:template name="Draw_BlkDiagram_Shapes"> <!-- =========================================================== Draw the shared busses =========================================================== --> <use x="{$BLKD_INNER_X}" y="{$G_SharedBus_Y}" xlink:href="#group_sharedBusses"/> <!-- =========================================================== Draw the Bus Lane Spaces =========================================================== --> <xsl:call-template name="Draw_BlkDiagram_BusLaneSpaces"/> <!-- =========================================================== Draw the Bridges =========================================================== --> <xsl:call-template name="Draw_BlkDiagram_Bridges"/> <!-- =========================================================== Draw the Stacks =========================================================== --> <xsl:call-template name="Draw_BlkDiagram_Stacks"/> <!-- =========================================================== Draw the Stand Alone MPMC, (if any) =========================================================== --> <xsl:if test="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/MPMCSHAPE"> <xsl:variable name="mpmc_inst_" select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/MPMCSHAPE/@INSTANCE"/> <use x="{$BLKD_INNER_X}" y="{$BLKD_INNER_Y}" xlink:href="#mpmcmodule_{$mpmc_inst_}"/> <!-- =========================================================== Draw the connections to the Stand Alone MPMC =========================================================== --> <xsl:call-template name="Draw_BlkDiagram_StandAloneMpmcConnections"/> </xsl:if> <!-- =========================================================== Draw the Ip Bucket =========================================================== --> <xsl:call-template name="Draw_BlkDiagram_IPBucket"/> <!-- =========================================================== Draw the Key =========================================================== --> <xsl:if test="(not($IN_TESTMODE) or ($IN_TESTMODE = 'FALSE'))"> <use x="{$G_total_blkd_W - $BLKD_KEY_W - $BLKD_PRTCHAN_W}" y="{$G_total_blkd_H + $BLKD_DRAWAREA2KEY_GAP - 8}" xlink:href="#BlkDiagram_Key"/> </xsl:if> <!-- =========================================================== Draw the Specs =========================================================== --> <xsl:if test="(not($IN_TESTMODE) or ($IN_TESTMODE = 'FALSE'))"> <use x="{$BLKD_PRTCHAN_W}" y="{$G_total_blkd_H + $BLKD_DRAWAREA2KEY_GAP - 8}" xlink:href="#BlkDiagram_Specs"/> </xsl:if> <!-- ************************************************************ *************** DONE DRAWING BLOCK DIAGRAM ************** ************************************************************ --> </xsl:template> <!-- ======================================================================= --><!-- FUNCTION TEMPLATE --><!-- --><!-- Draw stacks on the Block Diagram --><!-- ======================================================================= --><xsl:template name="Draw_BlkDiagram_Stacks"> <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST < /EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH)]"> <xsl:variable name="stack_line_x_"> <xsl:call-template name="_calc_Stack_X"> <xsl:with-param name="iStackIdx" select="@EAST"/> </xsl:call-template> </xsl:variable> <xsl:variable name="stack_abv_sbs_"> <xsl:call-template name="_calc_Stack_AbvSbs_Height"> <xsl:with-param name="iStackIdx" select="@EAST"/> </xsl:call-template>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -