1 <?xml version="1.0" standalone="no"?>
2 <xsl:stylesheet version="1.0"
3 xmlns:svg="http://www.w3.org/2000/svg"
4 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
5 xmlns:math="http://exslt.org/math"
6 xmlns:exsl="http://exslt.org/common"
7 xmlns:xlink="http://www.w3.org/1999/xlink"
8 extension-element-prefixes="math">
10 <xsl:output method="xml"
14 doctype-public="-//W3C//DTD SVG 1.0//EN"
15 doctype-system="http://www.w3.org/TR/SVG/DTD/svg10.dtd"/>
18 <!-- ======================= DEF BLOCK =================================== -->
19 <xsl:template name="Define_AllStacks">
21 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST < /EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH)]">
23 <xsl:call-template name="Define_Stack">
24 <xsl:with-param name="iStackIdx" select="@EAST"/>
31 <xsl:template name="Define_Stack">
32 <xsl:param name="iStackIdx" select="100"/>
34 <!-- Define the stack's peripheral shapes-->
35 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and not(@MODCLASS = 'MEMORY_UNIT'))]">
37 <xsl:for-each select="MODULE">
38 <xsl:variable name="modInst_" select="@INSTANCE"/>
39 <xsl:variable name="modType_" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE=$modInst_)]/@MODTYPE"/>
40 <xsl:call-template name="Define_Peripheral">
41 <xsl:with-param name="iModInst" select="$modInst_"/>
42 <xsl:with-param name="iModType" select="$modType_"/>
43 <xsl:with-param name="iShapeId" select="../@SHAPE_ID"/>
44 <xsl:with-param name="iHorizIdx" select="../@STACK_HORIZ_INDEX"/>
45 <xsl:with-param name="iVertiIdx" select="../@SHAPE_VERTI_INDEX"/>
51 <!-- Define the stack's memory shapes-->
52 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@MODCLASS='MEMORY_UNIT'))]">
53 <xsl:call-template name="Define_MemoryUnit">
54 <xsl:with-param name="iShapeId" select="@SHAPE_ID"/>
59 <!-- Define the stack's processors-->
60 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[@INSTANCE and @BIFS_W and @BIFS_H and (@STACK_HORIZ_INDEX = $iStackIdx)]">
61 <xsl:call-template name="Define_Processor"/>
64 <!-- Make an inventory of all the things in this processor's stack -->
65 <xsl:variable name="pstackW_">
66 <xsl:call-template name="_calc_Stack_Width">
67 <xsl:with-param name="iStackIdx" select="$iStackIdx"/>
71 <xsl:variable name="pstackH_">
72 <xsl:call-template name="_calc_Stack_Height">
73 <xsl:with-param name="iStackIdx" select="$iStackIdx"/>
77 <xsl:variable name="procW_" select="$BLKD_MOD_W"/>
78 <xsl:variable name="procX_" select="(ceiling($pstackW_ div 2) - ceiling($procW_ div 2))"/>
81 <xsl:variable name="sbsGap_" select="($BLKD_PROC2SBS_GAP + $G_total_SharedBus_H)"/>
83 <xsl:variable name="stack_name_">
84 <xsl:call-template name="_gen_Stack_Name">
85 <xsl:with-param name="iHorizIdx" select="$iStackIdx"/>
90 <xsl:message>Horiz index<xsl:value-of select="$stackIdx"/></xsl:message>
91 <xsl:message>Drawing stack <xsl:value-of select="$stack_name_"/></xsl:message>
94 <!-- Now use all this stuff to draw the stack-->
95 <symbol id="{$stack_name_}">
100 width = "{$pstackW_}"
101 height= "{$pstackH_}"
102 style="fill:{$COL_BG}; stroke:none;"/>
105 <!-- First draw the the processor's peripherals-->
106 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[(@STACK_HORIZ_INDEX = $iStackIdx)]">
107 <xsl:sort select="@STACK_VERTI_INDEX" data-type="number"/>
110 <xsl:variable name="shapeW_" select="(@MODS_W * $BLKD_MOD_W)"/>
111 <xsl:variable name="shapeX_" select="(ceiling($pstackW_ div 2) - ceiling($shapeW_ div 2))"/>
113 <xsl:variable name="stack_SymName_">
114 <xsl:call-template name="_gen_Stack_SymbolName">
115 <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/>
116 <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/>
121 <xsl:message>Drawing stack peripheral <xsl:value-of select="$stack_SymName_"/></xsl:message>
123 <xsl:variable name="shapeY_">
124 <xsl:call-template name="_calc_Stack_Shape_Y">
125 <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/>
126 <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/>
130 <use x="{$shapeX_}" y="{$shapeY_}" xlink:href="#{$stack_SymName_}"/>
135 <!-- Then draw the slave buckets for the shared busses that this processor is master to -->
136 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)]">
137 <xsl:sort select="@SHAPE_VERTI_INDEX" data-type="number"/>
139 <xsl:variable name="bucketW_" select="(($BLKD_MOD_BKTLANE_W * 2) + (($BLKD_MOD_W * @MODS_W) + ($BLKD_MOD_BUCKET_G * (@MODS_W - 1))))"/>
140 <xsl:variable name="bucketX_" select="(ceiling($pstackW_ div 2) - ceiling($bucketW_ div 2))"/>
142 <xsl:variable name="bucketY_">
143 <xsl:call-template name="_calc_Stack_Shape_Y">
144 <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/>
145 <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/>
150 <xsl:message>SBS Bucket Y <xsl:value-of select="$bucketY_"/></xsl:message>
153 <use x="{$bucketX_}" y="{$bucketY_}" xlink:href="#sbsbucket_{@BUSNAME}"/>
155 <text class="ipclass"
157 y="{$bucketY_ - 4}">SLAVES OF <xsl:value-of select="@BUSNAME"/></text>
160 <!-- Then draw the the processor itself -->
161 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/PROCSHAPES/MODULE[(@STACK_HORIZ_INDEX = $iStackIdx)]">
162 <xsl:sort select="@SHAPE_VERTI_INDEX" data-type="number"/>
164 <xsl:variable name="procY_">
165 <xsl:call-template name="_calc_Stack_Shape_Y">
166 <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/>
167 <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/>
171 <xsl:variable name="stack_SymName_">
172 <xsl:call-template name="_gen_Stack_SymbolName">
173 <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/>
174 <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/>
178 <use x="{$procX_}" y="{$procY_}" xlink:href="#{$stack_SymName_}"/>
180 <xsl:if test = "not(@IS_LIKEPROC)">
181 <text class="ipclass"
183 y="{$procY_ - 4}">PROCESSOR</text>
186 <xsl:if test = "@IS_LIKEPROC = 'TRUE'">
187 <text class="ipclass"
189 y="{$procY_ - 4}">USER MODULE</text>
197 <xsl:template name="Define_Processor">
198 <xsl:param name="iProcInst" select="@INSTANCE"/>
199 <xsl:param name="iModType" select="/EDKSYSTEM/MODULES/MODULE[@INSTANCE=$iProcInst]/@MODTYPE"/>
201 <xsl:param name="procType" select="/EDKSYSTEM/MODULES/MODULE[@INSTANCE=$procInst]/@PROCTYPE"/>
204 <xsl:variable name="label_y_">
205 <xsl:value-of select="$BLKD_MOD_LANE_H"/>
209 <xsl:message>The proctype is <xsl:value-of select="$procType"/></xsl:message>
212 <xsl:variable name="procH_" select="(($BLKD_MOD_LANE_H * 2) + (($BLKD_BIF_H + $BLKD_MOD_BIF_GAP_V) * @BIFS_H) + ($BLKD_MOD_LABEL_H + $BLKD_MOD_BIF_GAP_V))"/>
213 <xsl:variable name="procW_" select="(($BLKD_MOD_LANE_W * 2) + (($BLKD_BIF_W * @BIFS_W) + $BLKD_MOD_BIF_GAP_H))"/>
215 <xsl:variable name="procColor_">
217 <xsl:when test="contains($iModType,'microblaze')"><xsl:value-of select="$COL_PROC_BG_MB"/></xsl:when>
218 <xsl:when test="contains($iModType,'ppc')"><xsl:value-of select="$COL_PROC_BG_PP"/></xsl:when>
220 <xsl:value-of select="$COL_PROC_BG_USR"/>
226 <xsl:message>The proc color is <xsl:value-of select="$procColor"/></xsl:message>
230 <xsl:variable name="procName_">
231 <xsl:call-template name="_gen_Stack_SymbolName">
232 <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/>
233 <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/>
238 <xsl:message>The proc name is <xsl:value-of select="$procName_"/></xsl:message>
241 <symbol id="{$procName_}">
249 style="fill:{$procColor_}; stroke:{$COL_WHITE}; stroke-width:2"/>
252 <rect x="{ceiling($procW_ div 2) - ceiling($BLKD_MOD_LABEL_W div 2)}"
253 y="{$BLKD_MOD_LANE_H}"
256 width= "{$BLKD_MOD_LABEL_W}"
257 height="{$BLKD_MOD_LABEL_H}"
258 style="fill:{$COL_WHITE}; stroke:none;"/>
260 <text class="bciptype"
261 x="{ceiling($procW_ div 2)}"
262 y="{$BLKD_MOD_LANE_H + 8}">
263 <xsl:value-of select="$iModType"/>
266 <text class="bciplabel"
267 x="{ceiling($procW_ div 2)}"
268 y="{$BLKD_MOD_LANE_H + 16}">
269 <xsl:value-of select="$iProcInst"/>
273 <xsl:if test="/EDKSYSTEM/MODULES/MODULE[@INSTANCE=$iProcInst]/@GROUP">
275 <rect x="{ceiling($BLKD_MOD_W div 2) - ceiling($BLKD_MOD_LABEL_W div 2)}"
276 y="{$BLKD_MOD_LANE_H + $BIF_H + ceiling($BLKD_BIF_H div 3) - 2}"
279 width= "{$BLKD_MOD_LABEL_W}"
280 height="{$BLKD_BIF_H}"
281 style="fill:{$COL_IORING_LT}; stroke:none;"/>
284 <text class="ioplblgrp" x="{ceiling($BLKD_MOD_W div 2)}" y="{$BLKD_MOD_LANE_H + $BIF_H + ceiling($BIF_H div 3) + 12}">
285 <xsl:value-of select="/EDKSYSTEM/MODULES/MODULE[@INSTANCE = $iProcInst]/@GROUP"/>
291 <xsl:for-each select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $iProcInst)]/BUSINTERFACE[(@BIF_X and @BIF_Y)]">
293 <xsl:variable name="bif_busstd_">
295 <xsl:when test="@BUSSTD">
296 <xsl:value-of select="@BUSSTD"/>
299 <xsl:value-of select="'TRS'"/>
304 <xsl:variable name="bif_buscol_">
305 <xsl:call-template name="BusType2Color">
306 <xsl:with-param name="iBusType" select="$bif_busstd_"/>
311 <xsl:variable name="bif_name_">
313 <xsl:when test="string-length(@NAME) <= 5">
314 <xsl:value-of select="@NAME"/>
317 <xsl:value-of select="substring(@NAME,0,5)"/>
322 <xsl:variable name="bif_x_" select="(( $BLKD_BIF_W * @BIF_X) + ($BLKD_MOD_BIF_GAP_H * @BIF_X) + ($BLKD_MOD_LANE_W * 1))"/>
323 <xsl:variable name="bif_y_" select="((($BLKD_BIF_H + $BLKD_MOD_BIF_GAP_V) * @BIF_Y) + ($BLKD_MOD_LANE_H + $BLKD_MOD_LABEL_H + $BLKD_MOD_BIF_GAP_V))"/>
325 <xsl:variable name="horz_line_y_" select="($bif_y_ + ceiling($BLKD_BIFC_H div 2))"/>
327 <xsl:variable name="horz_line_x1_">
329 <xsl:when test="@BIF_X = '0'">0</xsl:when>
330 <xsl:otherwise><xsl:value-of select="($BLKD_MOD_W - $BLKD_MOD_LANE_W)"/></xsl:otherwise>
334 <xsl:variable name="horz_line_x2_">
336 <xsl:when test="@BIF_X = '0'"><xsl:value-of select="$BLKD_MOD_LANE_W"/></xsl:when>
337 <xsl:otherwise><xsl:value-of select="$BLKD_MOD_W + 1"/></xsl:otherwise>
342 <line x1="{$horz_line_x1_}"
343 y1="{$horz_line_y_ - 2}"
344 x2="{$horz_line_x2_}"
345 y2="{$horz_line_y_ - 2}"
346 style="stroke:{$bif_buscol_};stroke-width:1"/>
348 <use x="{$bif_x_}" y="{$bif_y_}" xlink:href="#{$bif_busstd_}_Bif"/>
350 <text class="biflabel"
351 x="{$bif_x_ + ceiling($BIF_W div 2)}"
352 y="{$bif_y_ + ceiling($BIF_H div 2) + 3}">
353 <xsl:value-of select="$bif_name_"/>
358 <xsl:variable name="interrupt_cntlr_">
360 <xsl:when test="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE=$iProcInst)]/@INTERRUPT_CNTLR">
361 <xsl:value-of select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE=$iProcInst)]/@INTERRUPT_CNTLR"/>
363 <xsl:otherwise>"_no_interrupt_cntlr_"</xsl:otherwise>
368 <xsl:message> The intc index should <xsl:value-of select="$interrupt_cntlr_"/></xsl:message>
369 <xsl:message> The intc index is <xsl:value-of select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $interrupt_cntlr_)]/@INTCINDEX"/></xsl:message>
371 <xsl:if test="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $interrupt_cntlr_)]/@INTCINDEX">
373 <xsl:variable name="intr_col_">
374 <xsl:call-template name="intcIdx2Color">
375 <xsl:with-param name="iIntcIdx" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $interrupt_cntlr_)]/@INTCINDEX"/>
379 <xsl:call-template name="_draw_InterruptedProc">
380 <xsl:with-param name="iIntr_X" select="($BLKD_MOD_W - ceiling($BLKD_INTR_W div 2))"/>
381 <xsl:with-param name="iIntr_Y" select="3"/>
382 <xsl:with-param name="iIntr_COL" select="$intr_col_"/>
383 <xsl:with-param name="iIntr_IDX" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $interrupt_cntlr_)]/@INTCINDEX"/>