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="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/BCLANESPACES/BCLANESPACE[(@EAST < $G_ROOT/EDKSYSTEM/BLKDIAGRAM/@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="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/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="$G_ROOT/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="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/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="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/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="F_Calc_Stack_Width">
67 <xsl:with-param name="iStackIdx" select="$iStackIdx"/>
71 <xsl:variable name="pstackH_">
72 <xsl:call-template name="F_Calc_Stack_Height">
73 <xsl:with-param name="iStackIdx" select="$iStackIdx"/>
78 <xsl:message>Proc Stack Height <xsl:value-of select="$pstackH_"/></xsl:message>
79 <xsl:message>Proc Stack Height <xsl:value-of select="$pstackH_"/></xsl:message>
82 <xsl:variable name="procW_" select="$BLKD_MOD_W"/>
83 <xsl:variable name="procX_" select="(ceiling($pstackW_ div 2) - ceiling($procW_ div 2))"/>
85 <xsl:variable name="sbsGap_" select="($BLKD_PROC2SBS_GAP + $G_Total_SharedBus_H)"/>
87 <xsl:variable name="stack_name_">
88 <xsl:call-template name="F_generate_Stack_Name">
89 <xsl:with-param name="iHorizIdx" select="$iStackIdx"/>
94 <xsl:message>Horiz index<xsl:value-of select="$stackIdx"/></xsl:message>
95 <xsl:message>Drawing stack <xsl:value-of select="$stack_name_"/></xsl:message>
98 <!-- Now use all this stuff to draw the stack-->
99 <g id="{$stack_name_}">
104 width = "{$pstackW_}"
105 height= "{$pstackH_}"
106 style="fill:{$COL_BG}; stroke:none;"/>
109 <!-- First draw the the processor's peripherals-->
110 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[(@STACK_HORIZ_INDEX = $iStackIdx)]">
111 <xsl:sort select="@STACK_VERTI_INDEX" data-type="number"/>
114 <xsl:variable name="shapeW_" select="(@MODS_W * $BLKD_MOD_W)"/>
115 <xsl:variable name="shapeX_" select="(ceiling($pstackW_ div 2) - ceiling($shapeW_ div 2))"/>
117 <xsl:variable name="stack_SymName_">
118 <xsl:call-template name="F_generate_Stack_SymbolName">
119 <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/>
120 <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/>
125 <xsl:message>Drawing stack peripheral <xsl:value-of select="$stack_SymName_"/></xsl:message>
127 <xsl:variable name="shapeY_">
128 <xsl:call-template name="F_Calc_Stack_Shape_Y">
129 <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/>
130 <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/>
134 <use x="{$shapeX_}" y="{$shapeY_}" xlink:href="#{$stack_SymName_}"/>
139 <!-- Then draw the slave buckets for the shared busses that this processor is master to -->
140 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)]">
141 <xsl:sort select="@SHAPE_VERTI_INDEX" data-type="number"/>
143 <xsl:variable name="bucketW_" select="(($BLKD_MOD_BKTLANE_W * 2) + (($BLKD_MOD_W * @MODS_W) + ($BLKD_MOD_BUCKET_G * (@MODS_W - 1))))"/>
144 <xsl:variable name="bucketX_" select="(ceiling($pstackW_ div 2) - ceiling($bucketW_ div 2))"/>
146 <xsl:variable name="bucketY_">
147 <xsl:call-template name="F_Calc_Stack_Shape_Y">
148 <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/>
149 <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/>
154 <xsl:message>SBS Bucket Y <xsl:value-of select="$bucketY_"/></xsl:message>
157 <use x="{$bucketX_}" y="{$bucketY_}" xlink:href="#sbsbucket_{@BUSNAME}"/>
159 <xsl:variable name="slavesOfTxt_">SLAVES OF <xsl:value-of select="@BUSNAME"/></xsl:variable>
161 <text class="bkt_label"
163 y="{$bucketY_ - 4}"><xsl:value-of select="$slavesOfTxt_"/></text>
166 <xsl:call-template name="F_WriteText">
167 <xsl:with-param name="iX" select="$bucketX_"/>
168 <xsl:with-param name="iY" select="($bucketY_ - 4)"/>
169 <xsl:with-param name="iText" select="$slavesOfTxt_"/>
170 <xsl:with-param name="iClass" select="'bkt_label'"/>
176 <!-- Then draw the the processor itself -->
177 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE[(@STACK_HORIZ_INDEX = $iStackIdx)]">
178 <xsl:sort select="@SHAPE_VERTI_INDEX" data-type="number"/>
180 <xsl:variable name="procY_">
181 <xsl:call-template name="F_Calc_Stack_Shape_Y">
182 <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/>
183 <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/>
187 <xsl:variable name="stack_SymName_">
188 <xsl:call-template name="F_generate_Stack_SymbolName">
189 <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/>
190 <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/>
194 <use x="{$procX_}" y="{$procY_}" xlink:href="#{$stack_SymName_}"/>
198 <xsl:if test = "not(@IS_LIKEPROC)">
199 <text class="ipclass_label"
201 y="{$procY_ - 4}">PROCESSOR</text>
204 <xsl:if test = "@IS_LIKEPROC = 'TRUE'">
206 <text class="ipclass_label"
208 y="{$procY_ - 4}">USER MODULE</text>
213 <xsl:if test = "not(@IS_LIKEPROC)">
214 <xsl:call-template name="F_WriteText">
215 <xsl:with-param name="iX" select="$procX_"/>
216 <xsl:with-param name="iY" select="($procY_ - 4)"/>
217 <xsl:with-param name="iText" select="'PROCESSOR'"/>
218 <xsl:with-param name="iClass" select="'ipclass_label'"/>
222 <xsl:if test = "@IS_LIKEPROC = 'TRUE'">
223 <xsl:call-template name="F_WriteText">
224 <xsl:with-param name="iX" select="$procX_"/>
225 <xsl:with-param name="iY" select="($procY_ - 4)"/>
226 <xsl:with-param name="iText" select="'USER MODULE'"/>
227 <xsl:with-param name="iClass" select="'ipclass_label'"/>
237 <xsl:template name="Define_Processor">
238 <xsl:param name="iProcInst" select="@INSTANCE"/>
239 <xsl:param name="iModType" select="$G_ROOT/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $iProcInst)]/@MODTYPE"/>
241 <xsl:variable name="label_y_">
242 <xsl:value-of select="$BLKD_MOD_LANE_H"/>
246 <xsl:message>The proctype is <xsl:value-of select="$procType"/></xsl:message>
249 <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))"/>
250 <xsl:variable name="procW_" select="(($BLKD_MOD_LANE_W * 2) + (($BLKD_BIF_W * @BIFS_W) + $BLKD_MOD_BIF_GAP_H))"/>
252 <xsl:variable name="procColor_">
254 <xsl:when test="contains($iModType,'microblaze')"><xsl:value-of select="$COL_PROC_BG_MB"/></xsl:when>
255 <xsl:when test="contains($iModType,'ppc')"><xsl:value-of select="$COL_PROC_BG_PP"/></xsl:when>
257 <xsl:value-of select="$COL_PROC_BG_USR"/>
263 <xsl:message>The proc color is <xsl:value-of select="$procColor"/></xsl:message>
266 <xsl:variable name="procName_">
267 <xsl:call-template name="F_generate_Stack_SymbolName">
268 <xsl:with-param name="iHorizIdx" select="@STACK_HORIZ_INDEX"/>
269 <xsl:with-param name="iVertiIdx" select="@SHAPE_VERTI_INDEX"/>
274 <xsl:message>The proc name is <xsl:value-of select="$procName_"/></xsl:message>
277 <g id="{$procName_}">
285 style="fill:{$procColor_}; stroke:{$COL_WHITE}; stroke-width:2"/>
288 <rect x="{ceiling($procW_ div 2) - ceiling($BLKD_MOD_LABEL_W div 2)}"
289 y="{$BLKD_MOD_LANE_H}"
292 width= "{$BLKD_MOD_LABEL_W}"
293 height="{$BLKD_MOD_LABEL_H}"
294 style="fill:{$COL_WHITE}; stroke:none;"/>
296 <text class="bciptype"
297 x="{ceiling($procW_ div 2)}"
298 y="{$BLKD_MOD_LANE_H + 8}">
299 <xsl:value-of select="$iModType"/>
302 <text class="bciplabel"
303 x="{ceiling($procW_ div 2)}"
304 y="{$BLKD_MOD_LANE_H + 16}">
305 <xsl:value-of select="$iProcInst"/>
309 <xsl:call-template name="F_WriteText">
310 <xsl:with-param name="iX" select="ceiling($procW_ div 2)"/>
311 <xsl:with-param name="iY" select="($BLKD_MOD_LANE_H + 8)"/>
312 <xsl:with-param name="iText" select="$iModType"/>
313 <xsl:with-param name="iClass" select="'bc_iptype'"/>
316 <xsl:call-template name="F_WriteText">
317 <xsl:with-param name="iX" select="ceiling($procW_ div 2)"/>
318 <xsl:with-param name="iY" select="($BLKD_MOD_LANE_H + 16)"/>
319 <xsl:with-param name="iText" select="$iProcInst"/>
320 <xsl:with-param name="iClass" select="'bc_ipinst'"/>
325 <xsl:if test="$G_ROOT/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $iProcInst)]/@GROUP">
327 <rect x="{ceiling($BLKD_MOD_W div 2) - ceiling($BLKD_MOD_LABEL_W div 2)}"
328 y="{$BLKD_MOD_LANE_H + $BIF_H + ceiling($BLKD_BIF_H div 3) - 2}"
331 width= "{$BLKD_MOD_LABEL_W}"
332 height="{$BLKD_BIF_H}"
333 style="fill:{$COL_IORING_LT}; stroke:none;"/>
335 <text class="ioplblgrp"
336 x="{ceiling($BLKD_MOD_W div 2)}"
337 y="{$BLKD_MOD_LANE_H + $BIF_H + ceiling($BIF_H div 3) + 12}">
338 <xsl:value-of select="$G_ROOT/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $iProcInst)]/@GROUP"/>
341 <xsl:call-template name="F_WriteText">
342 <xsl:with-param name="iX" select="ceiling($BLKD_MOD_W div 2)"/>
343 <xsl:with-param name="iY" select="($BLKD_MOD_LANE_H + $BIF_H + ceiling($BIF_H div 3) + 12)"/>
344 <xsl:with-param name="iText" select="$G_ROOT/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $iProcInst)]/@GROUP"/>
345 <xsl:with-param name="iClass" select="'iogrp_label'"/>
351 <xsl:for-each select="$G_ROOT/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $iProcInst)]/BUSINTERFACE[(@BIF_X and @BIF_Y)]">
353 <xsl:variable name="bifBusStd_">
355 <xsl:when test="@BUSSTD">
356 <xsl:value-of select="@BUSSTD"/>
359 <xsl:value-of select="'TRS'"/>
364 <xsl:variable name="bifBusColor_">
365 <xsl:call-template name="F_BusStd2RGB">
366 <xsl:with-param name="iBusStd" select="$bifBusStd_"/>
371 <xsl:variable name="bifName_">
373 <xsl:when test="string-length(@NAME) <= 5">
374 <xsl:value-of select="@NAME"/>
377 <xsl:value-of select="substring(@NAME,0,5)"/>
382 <xsl:variable name="bif_x_" select="(( $BLKD_BIF_W * @BIF_X) + ($BLKD_MOD_BIF_GAP_H * @BIF_X) + ($BLKD_MOD_LANE_W * 1))"/>
383 <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))"/>
385 <xsl:variable name="horz_line_y_" select="($bif_y_ + ceiling($BLKD_BIFC_H div 2))"/>
387 <xsl:variable name="horz_line_x1_">
389 <xsl:when test="@BIF_X = '0'">0</xsl:when>
390 <xsl:otherwise><xsl:value-of select="($BLKD_MOD_W - $BLKD_MOD_LANE_W)"/></xsl:otherwise>
394 <xsl:variable name="horz_line_x2_">
396 <xsl:when test="@BIF_X = '0'"><xsl:value-of select="$BLKD_MOD_LANE_W"/></xsl:when>
397 <xsl:otherwise><xsl:value-of select="$BLKD_MOD_W + 1"/></xsl:otherwise>
402 <line x1="{$horz_line_x1_}"
403 y1="{$horz_line_y_ - 2}"
404 x2="{$horz_line_x2_}"
405 y2="{$horz_line_y_ - 2}"
406 style="stroke:{$bifBusColor_};stroke-width:1"/>
408 <use x="{$bif_x_}" y="{$bif_y_}" xlink:href="#{$bifBusStd_}_BifLabel"/>
411 <text class="bif_label"
412 x="{$bif_x_ + ceiling($BIF_W div 2)}"
413 y="{$bif_y_ + ceiling($BIF_H div 2) + 3}">
414 <xsl:value-of select="$bifName_"/>
418 <xsl:call-template name="F_WriteText">
419 <xsl:with-param name="iX" select="($bif_x_ + ceiling($BIF_W div 2))"/>
420 <xsl:with-param name="iY" select="($bif_y_ + ceiling($BIF_H div 2) + 3)"/>
421 <xsl:with-param name="iText" select="$bifName_"/>
422 <xsl:with-param name="iClass" select="'bif_label'"/>
427 <xsl:variable name="intcIdx_">
429 <xsl:when test="$G_ROOT/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $iProcInst)]/INTERRUPTINFO/@INTC_INDEX">
430 <xsl:value-of select="$G_ROOT/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $iProcInst)]/INTERRUPTINFO/@INTC_INDEX"/>
432 <xsl:otherwise>"_no_interrupt_cntlr_"</xsl:otherwise>
437 <xsl:message> The intc index should <xsl:value-of select="$interrupt_cntlr_"/></xsl:message>
438 <xsl:message> The intc index is <xsl:value-of select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $interrupt_cntlr_)]/@INTC_INDEX"/></xsl:message>
440 <xsl:if test="$G_ROOT/EDKSYSTEM/MODULES/MODULE[(INTERRUPTINFO[(@INTC_INDEX = $intcIdx_)])]">
442 <xsl:variable name="intrColor_">
443 <xsl:call-template name="F_IntcIdx2RGB">
444 <xsl:with-param name="iIntcIdx" select="$intcIdx_"/>
446 <xsl:with-param name="iIntcIdx" select="$G_ROOT/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $interrupt_cntlr_)]/INTERRUPTINFO/@INTC_INDEX"/>
451 <xsl:call-template name="F_draw_InterruptedProc">
452 <xsl:with-param name="iIntr_X" select="($BLKD_MOD_W - ceiling($BLKD_INTR_W div 2))"/>
453 <xsl:with-param name="iIntr_Y" select="3"/>
454 <xsl:with-param name="iIntr_COL" select="$intrColor_"/>
455 <xsl:with-param name="iIntr_IDX" select="$intcIdx_"/>