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="stackIdx" select="@EAST"/>
31 <xsl:template name="Define_Stack">
32 <xsl:param name="stackIdx" select="100"/>
34 <!-- Define the stack's peripheral shapes-->
35 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $stackIdx) 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="modInst" select="$modInst_"/>
42 <xsl:with-param name="modType" select="$modType_"/>
43 <xsl:with-param name="shapeId" select="../@SHAPE_ID"/>
44 <xsl:with-param name="horizIdx" select="../@STACK_HORIZ_INDEX"/>
45 <xsl:with-param name="vertiIdx" select="../@SHAPE_VERTI_INDEX"/>
51 <!-- Define the stack's memory shapes-->
52 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $stackIdx) and (@MODCLASS='MEMORY_UNIT'))]">
53 <xsl:call-template name="Define_MemoryUnit">
54 <xsl:with-param name="shapeId" 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 = $stackIdx)]">
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="stackIdx" select="$stackIdx"/>
71 <xsl:variable name="pstackH_">
72 <xsl:call-template name="_calc_Stack_Height">
73 <xsl:with-param name="stackIdx" select="$stackIdx"/>
77 <xsl:variable name="procW_" select="$periMOD_W"/>
78 <xsl:variable name="procX_" select="(ceiling($pstackW_ div 2) - ceiling($procW_ div 2))"/>
80 <xsl:variable name="numSBSs_" select="count(/EDKSYSTEM/BLKDSHAPES/SBSSHAPES/MODULE)"/>
81 <xsl:variable name="sbs_H_" select="($numSBSs_ * $SBS_LANE_H)"/>
82 <xsl:variable name="sbsGap_" select="($PROC2SBS_GAP + $sbs_H_)"/>
84 <xsl:variable name="stack_name_">
85 <xsl:call-template name="_gen_Stack_Name">
86 <xsl:with-param name="horizIdx" select="$stackIdx"/>
91 <xsl:message>Horiz index<xsl:value-of select="$stackIdx"/></xsl:message>
92 <xsl:message>Drawing stack <xsl:value-of select="$stack_name_"/></xsl:message>
95 <!-- Now use all this stuff to draw the stack-->
96 <symbol id="{$stack_name_}">
101 width = "{$pstackW_}"
102 height= "{$pstackH_}"
103 style="fill:{$COL_BG}; stroke:none;"/>
106 <!-- First draw the the processor's peripherals-->
107 <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/CMPLXSHAPES/CMPLXSHAPE[(@STACK_HORIZ_INDEX = $stackIdx)]">
108 <xsl:sort select="@STACK_VERTI_INDEX" data-type="number"/>
110 <xsl:variable name="shapeW_" select="(@MODS_W * $periMOD_W)"/>
111 <xsl:variable name="shapeX_" select="(ceiling($pstackW_ div 2) - ceiling($shapeW_ div 2))"/>
112 <xsl:variable name="shapeY_">
113 <xsl:call-template name="_calc_Stack_Shape_Y">
114 <xsl:with-param name="horizIdx" select="@STACK_HORIZ_INDEX"/>
115 <xsl:with-param name="vertiIdx" select="@SHAPE_VERTI_INDEX"/>
119 <xsl:variable name="stack_SymName_">
120 <xsl:call-template name="_gen_Stack_SymbolName">
121 <xsl:with-param name="horizIdx" select="@STACK_HORIZ_INDEX"/>
122 <xsl:with-param name="vertiIdx" select="@SHAPE_VERTI_INDEX"/>
127 <xsl:message>Drawing stack peripheral <xsl:value-of select="$stack_SymName_"/> at <xsl:value-of select="$shapeY_"/></xsl:message>
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 = $stackIdx)]">
137 <xsl:sort select="@SHAPE_VERTI_INDEX" data-type="number"/>
139 <xsl:variable name="bucketW_" select="(($MOD_BKTLANE_W * 2) + (($periMOD_W * @MODS_W) + ($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="horizIdx" select="@STACK_HORIZ_INDEX"/>
145 <xsl:with-param name="vertiIdx" 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 = $stackIdx)]">
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="horizIdx" select="@STACK_HORIZ_INDEX"/>
167 <xsl:with-param name="vertiIdx" select="@SHAPE_VERTI_INDEX"/>
171 <xsl:variable name="stack_SymName_">
172 <xsl:call-template name="_gen_Stack_SymbolName">
173 <xsl:with-param name="horizIdx" select="@STACK_HORIZ_INDEX"/>
174 <xsl:with-param name="vertiIdx" select="@SHAPE_VERTI_INDEX"/>
178 <use x="{$procX_}" y="{$procY_}" xlink:href="#{$stack_SymName_}"/>
182 <xsl:if test = "not(@IS_LIKEPROC)">
183 <text class="ipclass"
185 y="{$procY_ - 4}">PROCESSOR</text>
188 <xsl:if test = "@IS_LIKEPROC = 'TRUE'">
189 <text class="ipclass"
191 y="{$procY_ - 4}">USER MODULE</text>
199 <xsl:template name="Define_Processor">
200 <xsl:param name="procInst" select="@INSTANCE"/>
201 <xsl:param name="modType" select="/EDKSYSTEM/MODULES/MODULE[@INSTANCE=$procInst]/@MODTYPE"/>
203 <xsl:param name="procType" select="/EDKSYSTEM/MODULES/MODULE[@INSTANCE=$procInst]/@PROCTYPE"/>
206 <xsl:variable name="label_y_">
207 <xsl:value-of select="$MOD_LANE_H"/>
211 <xsl:message>The proctype is <xsl:value-of select="$procType"/></xsl:message>
214 <xsl:variable name="procH_" select="(($MOD_LANE_H * 2) + (($BIF_H + $MOD_BIF_GAP_V) * @BIFS_H) + ($MOD_LABEL_H + $MOD_BIF_GAP_V))"/>
215 <xsl:variable name="procW_" select="(($MOD_LANE_W * 2) + (($BIF_W * @BIFS_W) + $MOD_BIF_GAP_H))"/>
217 <xsl:variable name="procColor">
219 <xsl:when test="contains($modType,'microblaze')"><xsl:value-of select="$COL_PROC_BG_MB"/></xsl:when>
220 <xsl:when test="contains($modType,'ppc')"><xsl:value-of select="$COL_PROC_BG_PP"/></xsl:when>
222 <xsl:when test="$procType = 'MICROBLAZE'"><xsl:value-of select="$COL_PROC_BG_MB"/></xsl:when>
223 <xsl:when test="$procType = 'POWERPC'"><xsl:value-of select="$COL_PROC_BG_PP"/></xsl:when>
226 <xsl:value-of select="$COL_PROC_BG_USR"/>
232 <xsl:message>The proc color is <xsl:value-of select="$procColor"/></xsl:message>
236 <xsl:variable name="procName_">
237 <xsl:call-template name="_gen_Stack_SymbolName">
238 <xsl:with-param name="horizIdx" select="@STACK_HORIZ_INDEX"/>
239 <xsl:with-param name="vertiIdx" select="@SHAPE_VERTI_INDEX"/>
244 <xsl:message>The proc name is <xsl:value-of select="$procName_"/></xsl:message>
247 <symbol id="{$procName_}">
255 style="fill:{$procColor}; stroke:{$COL_WHITE}; stroke-width:2"/>
258 <rect x="{ceiling($procW_ div 2) - ceiling($MOD_LABEL_W div 2)}"
262 width= "{$MOD_LABEL_W}"
263 height="{$MOD_LABEL_H}"
264 style="fill:{$COL_WHITE}; stroke:none;"/>
266 <text class="bciptype"
267 x="{ceiling($procW_ div 2)}"
268 y="{$MOD_LANE_H + 8}">
269 <xsl:value-of select="$modType"/>
272 <text class="bciplabel"
273 x="{ceiling($procW_ div 2)}"
274 y="{$MOD_LANE_H + 16}">
275 <xsl:value-of select="$procInst"/>
279 <xsl:if test="/EDKSYSTEM/MODULES/MODULE[@INSTANCE=$procInst]/@GROUP">
281 <rect x="{ceiling($periMOD_W div 2) - ceiling($MOD_LABEL_W div 2)}"
282 y="{$MOD_LANE_H + $BIF_H + ceiling($BIF_H div 3) - 2}"
285 width= "{$MOD_LABEL_W}"
287 style="fill:{$COL_IORING_LT}; stroke:none;"/>
290 <text class="ioplblgrp" x="{ceiling($periMOD_W div 2)}" y="{$MOD_LANE_H + $BIF_H + ceiling($BIF_H div 3) + 12}">
291 <xsl:value-of select="/EDKSYSTEM/MODULES/MODULE[@INSTANCE=$procInst]/@GROUP"/>
297 <xsl:for-each select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $procInst)]/BUSINTERFACE[(@BIF_X and @BIF_Y)]">
299 <xsl:variable name="bif_busstd_">
301 <xsl:when test="@BUSSTD">
302 <xsl:value-of select="@BUSSTD"/>
305 <xsl:value-of select="'TRS'"/>
310 <xsl:variable name="bif_buscol_">
311 <xsl:call-template name="BusType2Color">
312 <xsl:with-param name="busType" select="$bif_busstd_"/>
317 <xsl:variable name="bif_name_">
319 <xsl:when test="string-length(@NAME) <= 5">
320 <xsl:value-of select="@NAME"/>
323 <xsl:value-of select="substring(@NAME,0,5)"/>
328 <xsl:variable name="bif_x_" select="(($BIF_W * @BIF_X) + ($MOD_BIF_GAP_H * @BIF_X) + ($MOD_LANE_W * 1))"/>
329 <xsl:variable name="bif_y_" select="((($BIF_H + $MOD_BIF_GAP_V) * @BIF_Y) + ($MOD_LANE_H + $MOD_LABEL_H + $MOD_BIF_GAP_V))"/>
331 <xsl:variable name="horz_line_y_" select="($bif_y_ + ceiling($BIFC_H div 2))"/>
333 <xsl:variable name="horz_line_x1_">
335 <xsl:when test="@BIF_X = '0'">0</xsl:when>
336 <xsl:otherwise><xsl:value-of select="($periMOD_W - $MOD_LANE_W)"/></xsl:otherwise>
340 <xsl:variable name="horz_line_x2_">
342 <xsl:when test="@BIF_X = '0'"><xsl:value-of select="$MOD_LANE_W"/></xsl:when>
343 <xsl:otherwise><xsl:value-of select="$periMOD_W + 1"/></xsl:otherwise>
348 <line x1="{$horz_line_x1_}"
349 y1="{$horz_line_y_ - 2}"
350 x2="{$horz_line_x2_}"
351 y2="{$horz_line_y_ - 2}"
352 style="stroke:{$bif_buscol_};stroke-width:1"/>
354 <use x="{$bif_x_}" y="{$bif_y_}" xlink:href="#{$bif_busstd_}_Bif"/>
356 <text class="biflabel"
357 x="{$bif_x_ + ceiling($BIF_W div 2)}"
358 y="{$bif_y_ + ceiling($BIF_H div 2) + 3}">
359 <xsl:value-of select="$bif_name_"/>
366 <xsl:variable name="interrupt_cntlr_">
368 <xsl:when test="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE=$procInst)]/@INTERRUPT_CNTLR">
369 <xsl:value-of select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE=$procInst)]/@INTERRUPT_CNTLR"/>
371 <xsl:otherwise>"_no_interrupt_cntlr_"</xsl:otherwise>
376 <xsl:message> The intc index should <xsl:value-of select="$interrupt_cntlr_"/></xsl:message>
377 <xsl:message> The intc index is <xsl:value-of select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $interrupt_cntlr_)]/@INTCINDEX"/></xsl:message>
379 <xsl:if test="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $interrupt_cntlr_)]/@INTCINDEX">
381 <xsl:variable name="intr_col_">
382 <xsl:call-template name="intcIdx2Color">
383 <xsl:with-param name="intcIdx" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $interrupt_cntlr_)]/@INTCINDEX"/>
387 <xsl:call-template name="_draw_InterruptedProc">
388 <xsl:with-param name="intr_col" select="$intr_col_"/>
389 <xsl:with-param name="intr_x" select="($periMOD_W - ceiling($INTR_W div 2))"/>
390 <xsl:with-param name="intr_y" select="3"/>
391 <xsl:with-param name="intr_idx" select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $interrupt_cntlr_)]/@INTCINDEX"/>