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:exsl="http://exslt.org/common"
6 xmlns:xlink="http://www.w3.org/1999/xlink">
8 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"
9 doctype-public="-//W3C//DTD SVG 1.0//EN"
10 doctype-system="http://www.w3.org/TR/SVG/DTD/svg10.dtd"/>
14 <xsl:template name="Define_Busses">
16 <xsl:param name="drawarea_w" select="500"/>
17 <xsl:param name="drawarea_h" select="500"/>
20 <xsl:for-each select="exsl:node-set($COL_BUSSTDS)/BUSCOLOR">
22 <xsl:call-template name="Define_BusArrowsEastWest">
23 <xsl:with-param name="iBusStd" select="@BUSSTD"/>
26 <xsl:call-template name="Define_BusArrowsNorthSouth">
27 <xsl:with-param name="iBusStd" select="@BUSSTD"/>
30 <xsl:call-template name="Define_SplitBusses">
31 <xsl:with-param name="iBusStd" select="@BUSSTD"/>
36 <xsl:call-template name="Define_SharedBus">
37 <xsl:with-param name="iBusStd" select="'PLB'"/>
40 <xsl:call-template name="Define_SharedBus">
41 <xsl:with-param name="iBusStd" select="'PLBV46'"/>
44 <xsl:call-template name="Define_SharedBus">
45 <xsl:with-param name="iBusStd" select="'OPB'"/>
48 <xsl:call-template name="Define_SharedBus_Group"/>
52 <xsl:template name="Define_BusArrowsEastWest">
53 <xsl:param name="iBusStd" select="'PLB'"/>
55 <xsl:variable name="busStdColor_">
56 <xsl:call-template name="F_BusStd2RGB">
57 <xsl:with-param name="iBusStd" select="$iBusStd"/>
61 <xsl:variable name="busStdColor_lt_">
62 <xsl:call-template name="F_BusStd2RGB_LT">
63 <xsl:with-param name="iBusStd" select="$iBusStd"/>
67 <g id="{$iBusStd}_BusArrowEast">
70 L {$BLKD_BUS_ARROW_W}, {ceiling($BLKD_BUS_ARROW_H div 2)}
71 L 0,{$BLKD_BUS_ARROW_H},
72 Z" style="stroke:none; fill:{$busStdColor_}"/>
75 <g id="{$iBusStd}_BusArrowWest">
76 <use x="0" y="0" xlink:href="#{$iBusStd}_BusArrowEast" transform="scale(-1,1) translate({$BLKD_BUS_ARROW_W * -1},0)"/>
79 <g id="{$iBusStd}_BusArrowHInitiator">
81 y="{$BLKD_BUS_ARROW_G}"
82 width= "{$BLKD_BUS_ARROW_W}"
83 height="{$BLKD_P2P_BUS_W}"
84 style="stroke:none; fill:{$busStdColor_}"/>
90 <xsl:param name="bus_col" select="'OPB'"/>
93 <xsl:template name="Define_BusArrowsNorthSouth">
94 <xsl:param name="iBusStd" select="'PLB'"/>
96 <xsl:variable name="busStdColor_">
97 <xsl:call-template name="F_BusStd2RGB">
98 <xsl:with-param name="iBusStd" select="$iBusStd"/>
102 <xsl:variable name="busStdColor_lt_">
103 <xsl:call-template name="F_BusStd2RGB_LT">
104 <xsl:with-param name="iBusStd" select="$iBusStd"/>
108 <g id="{$iBusStd}_BusArrowSouth">
111 L {$BLKD_BUS_ARROW_H},0
112 L {ceiling($BLKD_BUS_ARROW_H div 2)}, {$BLKD_BUS_ARROW_W}
113 Z" style="stroke:none; fill:{$busStdColor_}"/>
116 <g id="{$iBusStd}_BusArrowNorth">
117 <use x="0" y="0" xlink:href="#{$iBusStd}_BusArrowSouth" transform="scale(1,-1) translate(0,{$BLKD_BUS_ARROW_H * -1})"/>
120 <g id="{$iBusStd}_BusArrowInitiator">
121 <rect x="{$BLKD_BUS_ARROW_G}"
123 width= "{$BLKD_BUS_ARROW_W - ($BLKD_BUS_ARROW_G * 2)}"
124 height="{$BLKD_BUS_ARROW_H}"
125 style="stroke:none; fill:{$busStdColor_}"/>
131 <xsl:template name="Draw_P2PBus">
133 <xsl:param name="iBusX" select="0"/>
134 <xsl:param name="iBusTop" select="0"/>
135 <xsl:param name="iBusBot" select="0"/>
136 <xsl:param name="iBusStd" select="'_bstd_'"/>
137 <xsl:param name="iBusName" select="'_p2pbus_'"/>
138 <xsl:param name="iBotBifType" select="'_unk_'"/>
139 <xsl:param name="iTopBifType" select="'_unk_'"/>
141 <xsl:variable name="busStdColor_">
144 <xsl:when test="@BUSSTD">
145 <xsl:call-template name="F_BusStd2RGB">
146 <xsl:with-param name="iBusStd" select="@BUSSTD"/>
150 <xsl:when test="not($iBusStd = '_bstd_')">
151 <xsl:call-template name="F_BusStd2RGB">
152 <xsl:with-param name="iBusStd" select="$iBusStd"/>
157 <xsl:call-template name="F_BusStd2RGB">
158 <xsl:with-param name="iBusStd" select="'TRS'"/>
165 <xsl:variable name="p2pH_" select="($iBusBot - $iBusTop) - ($BLKD_BUS_ARROW_H * 2)"/>
167 <xsl:variable name="botArrow_">
169 <xsl:when test="((($iBotBifType = 'INITIATOR') or ($iBotBifType = 'MASTER')) and ($iBusStd = 'FSL'))">BusArrowInitiator</xsl:when>
170 <xsl:otherwise>BusArrowSouth</xsl:otherwise>
174 <xsl:variable name="topArrow_">
176 <xsl:when test="((($iTopBifType = 'INITIATOR') or ($iTopBifType = 'MASTER')) and ($iBusStd = 'FSL'))">BusArrowInitiator</xsl:when>
177 <xsl:otherwise>BusArrowNorth</xsl:otherwise>
181 <xsl:if test="@BUSSTD">
182 <use x="{($iBusX + ceiling($BLKD_BIFC_W div 2)) - ceiling($BLKD_BUS_ARROW_W div 2)}"
183 y="{$iBusTop + ($BLKD_BIFC_H - $BLKD_BUS_ARROW_H) + $BLKD_BUS_ARROW_H}"
184 xlink:href="#{@BUSSTD}_{$topArrow_}"/>
186 <use x="{($iBusX + ceiling($BLKD_BIFC_W div 2)) - ceiling($BLKD_BUS_ARROW_W div 2)}"
187 y="{$iBusBot - $BLKD_BUS_ARROW_H}"
188 xlink:href="#{@BUSSTD}_{$botArrow_}"/>
191 <xsl:if test="(not(@BUSSTD) and not($iBusStd = '_bstd_'))">
192 <use x="{($iBusX + ceiling($BLKD_BIFC_W div 2)) - ceiling($BLKD_BUS_ARROW_W div 2)}"
193 y="{$iBusTop + ($BLKD_BIFC_H - $BLKD_BUS_ARROW_H) + $BLKD_BUS_ARROW_H}"
194 xlink:href="#{$iBusStd}_{$topArrow_}"/>
196 <use x="{($iBusX + ceiling($BLKD_BIFC_W div 2)) - ceiling($BLKD_BUS_ARROW_W div 2)}"
197 y="{$iBusBot - $BLKD_BUS_ARROW_H}"
198 xlink:href="#{$iBusStd}_{$botArrow_}"/>
202 <rect x="{($iBusX + ceiling($BLKD_BIFC_W div 2)) - ceiling($BLKD_BUS_ARROW_W div 2) + $BLKD_BUS_ARROW_G}"
203 y="{$iBusTop + $BLKD_BIFC_H + $BLKD_BUS_ARROW_H}"
204 height= "{$p2pH_ - ($BLKD_BUS_ARROW_H * 2)}"
205 width="{$BLKD_BUS_ARROW_W - ($BLKD_BUS_ARROW_G * 2)}"
206 style="stroke:none; fill:{$busStdColor_}"/>
209 <text class="p2pbuslabel"
210 x="{$iBusX + $BLKD_BUS_ARROW_W + ceiling($BLKD_BUS_ARROW_W div 2) + ceiling($BLKD_BUS_ARROW_W div 4) + 4}"
211 y="{$iBusTop + ($BLKD_BUS_ARROW_H * 3)}">
212 <xsl:value-of select="$iBusName"/>
216 <xsl:call-template name="F_WriteText">
217 <xsl:with-param name="iX" select="($iBusX + $BLKD_BUS_ARROW_W + ceiling($BLKD_BUS_ARROW_W div 2) + ceiling($BLKD_BUS_ARROW_W div 4) + 4)"/>
218 <xsl:with-param name="iY" select="($iBusTop + ($BLKD_BUS_ARROW_H * 3))"/>
219 <xsl:with-param name="iText" select="$iBusName"/>
220 <xsl:with-param name="iClass" select="'p2pbus_label'"/>
223 <xsl:if test="$G_ROOT/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $iBusName)]/@GROUP">
225 <text class="ioplblgrp"
226 x="{$iBusX + $BLKD_BUS_ARROW_W + ceiling($BLKD_BUS_ARROW_W div 2) + ceiling($BLKD_BUS_ARROW_W div 4) + 6}"
227 y="{$iBusTop + ($BLKD_BUS_ARROW_H * 10)}">
228 <xsl:value-of select="$G_ROOT/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $iBusName)]/@GROUP"/>
231 <xsl:call-template name="F_WriteText">
232 <xsl:with-param name="iX" select="(iBusX + $BLKD_BUS_ARROW_W + ceiling($BLKD_BUS_ARROW_W div 2) + ceiling($BLKD_BUS_ARROW_W div 4) + 6)"/>
233 <xsl:with-param name="iY" select="($iBusTop + ($BLKD_BUS_ARROW_H * 10))"/>
234 <xsl:with-param name="iText" select="$G_ROOT/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $iBusName)]/@GROUP"/>
235 <xsl:with-param name="iClass" select="'iogrp_label'"/>
243 <xsl:template name="Draw_Proc2ProcBus">
245 <xsl:param name="iBc_Y" select="0"/>
246 <xsl:param name="iBusStd" select="'_bstd_'"/>
247 <xsl:param name="iBusName" select="'_p2pbus_'"/>
248 <xsl:param name="iBcLeft_X" select="0"/>
249 <xsl:param name="iBcRght_X" select="0"/>
250 <xsl:param name="iLeftBifType" select="'_unk_'"/>
251 <xsl:param name="iRghtBifType" select="'_unk_'"/>
253 <xsl:variable name="busStdColor_">
254 <xsl:call-template name="F_BusStd2RGB">
255 <xsl:with-param name="iBusStd" select="$iBusStd"/>
259 <xsl:variable name="pr2pr_W_" select="($iBcRght_X - $iBcLeft_X)"/>
261 <xsl:variable name="leftArrow_">
263 <xsl:when test="((($iLeftBifType = 'INITIATOR') or ($iLeftBifType = 'MASTER')) and ($iBusStd = 'FSL'))">BusArrowHInitiator</xsl:when>
264 <xsl:otherwise>BusArrowWest</xsl:otherwise>
268 <xsl:variable name="rghtArrow_">
270 <xsl:when test="((($iRghtBifType = 'INITIATOR') or ($iRghtBifType = 'MASTER')) and ($iBusStd = 'FSL'))">BusArrowHInitiator</xsl:when>
271 <xsl:otherwise>BusArrowEast</xsl:otherwise>
276 <xsl:variable name="bus_Y_" select="($iBc_Y + ceiling($BLKD_BIFC_H div 2) - ceiling($BLKD_BUS_ARROW_H div 2))"/>
278 <use x="{$iBcLeft_X}" y="{$bus_Y_}" xlink:href="#{$iBusStd}_{$leftArrow_}"/>
279 <use x="{$iBcRght_X - $BLKD_BUS_ARROW_W}" y="{$bus_Y_}" xlink:href="#{$iBusStd}_{$rghtArrow_}"/>
281 <rect x="{$iBcLeft_X + $BLKD_BUS_ARROW_W}"
282 y="{$bus_Y_ + $BLKD_BUS_ARROW_G}"
283 width= "{$pr2pr_W_ - (2 * $BLKD_BUS_ARROW_W)}"
284 height="{$BLKD_BUS_ARROW_H - (2 * $BLKD_BUS_ARROW_G)}" style="stroke:none; fill:{$busStdColor_}"/>
287 <text class="horizp2pbuslabel"
288 x="{$iBcLeft_X + $BLKD_BUS_ARROW_W + ceiling($BLKD_BUS_ARROW_W div 2) + ceiling($BLKD_BUS_ARROW_W div 4) + 4}"
289 y="{($bus_Y_)}"><xsl:value-of select="$iBusName"/></text>
291 <text class="horizp2pbuslabel"
292 x="{$iBcRght_X - (string-length($iBusName) * 8)}"
293 y="{($bus_Y_)}"><xsl:value-of select="$iBusName"/></text>
296 <xsl:call-template name="F_WriteText">
297 <xsl:with-param name="iX" select="($iBcLeft_X + $BLKD_BUS_ARROW_W + ceiling($BLKD_BUS_ARROW_W div 2) + ceiling($BLKD_BUS_ARROW_W div 4) + 4)"/>
298 <xsl:with-param name="iY" select="$bus_Y_"/>
299 <xsl:with-param name="iText" select="$iBusName"/>
300 <xsl:with-param name="iClass" select="'p2pbus_label'"/>
303 <xsl:call-template name="F_WriteText">
304 <xsl:with-param name="iX" select="(iBcRght_X - (string-length($iBusName) * 8))"/>
305 <xsl:with-param name="iY" select="$bus_Y_"/>
306 <xsl:with-param name="iText" select="$iBusName"/>
307 <xsl:with-param name="iClass" select="'p2pbus_label'"/>
313 <xsl:template name="Draw_SplitConnBus">
315 <xsl:param name="iBc_X" select="0"/>
316 <xsl:param name="iBc_Y" select="0"/>
317 <xsl:param name="iBc_Type" select="'_unk_'"/>
318 <xsl:param name="iBc_Side" select="'_unk_'"/>
319 <xsl:param name="iBusStd" select="'_bstd_'"/>
320 <xsl:param name="iBusName" select="'_p2pbus_'"/>
322 <xsl:variable name="busStdColor_">
323 <xsl:call-template name="F_BusStd2RGB">
324 <xsl:with-param name="iBusStd" select="$iBusStd"/>
328 <xsl:variable name="connArrow_">
330 <xsl:when test="((($iBc_Type = 'INITIATOR') or ($iBc_Type = 'MASTER')) and ($iBusStd = 'FSL'))">BusArrowHInitiator</xsl:when>
331 <xsl:otherwise>BusArrowEast</xsl:otherwise>
335 <xsl:variable name="arrow_Y_" select="($iBc_Y + ceiling($BLKD_BIFC_H div 2) - ceiling($BLKD_BUS_ARROW_H div 2))"/>
337 <xsl:variable name="bus_X_">
339 <xsl:when test="$iBc_Side = '0'"><xsl:value-of select="($iBc_X - ($BLKD_BUS_ARROW_W * 2))"/></xsl:when>
340 <xsl:when test="$iBc_Side = '1'"><xsl:value-of select="($iBc_X + $BLKD_BIFC_W + $BLKD_BUS_ARROW_W)"/></xsl:when>
345 <use x="{$bus_X_}" y="{$arrow_Y_}" xlink:href="#{$busStd}_BusArrowHInitiator"/>
348 <xsl:variable name="arrow_X_">
350 <xsl:when test="$iBc_Side = '0'"><xsl:value-of select="($iBc_X - $BLKD_BUS_ARROW_W)"/></xsl:when>
351 <xsl:when test="$iBc_Side = '1'"><xsl:value-of select="($iBc_X + $BLKD_BIFC_W)"/></xsl:when>
355 <xsl:when test="(($iBusStd = 'FSL') and (($iBc_Type = 'MASTER') or ($iBc_Type = 'INITIATOR')))">
356 <use x="{$arrow_X_}" y="{$arrow_Y_}" xlink:href="#{$iBusStd}_{$connArrow_}"/>
357 <use x="{$bus_X_}" y="{$arrow_Y_}" xlink:href="#{$iBusStd}_BusArrowHInitiator"/>
359 <xsl:when test="(($iBc_Side = '1') and not($iBusStd = 'FSL') and (($iBc_Type = 'MASTER') or ($iBc_Type = 'INITIATOR')))">
360 <use x="{$arrow_X_ - $BLKD_BIFC_W}" y="{$arrow_Y_}" xlink:href="#{$iBusStd}_SplitBus_WEST"/>
362 <xsl:when test="(($iBc_Side = '1') and (($iBc_Type = 'SLAVE') or ($iBc_Type = 'TARGET') or ($iBc_Type = 'USER')))">
363 <use x="{$arrow_X_}" y="{$arrow_Y_}" xlink:href="#{$iBusStd}_SplitBus_EAST"/>
366 <use x="{$arrow_X_}" y="{$arrow_Y_}" xlink:href="#{$iBusStd}_{$connArrow_}"/>
367 <use x="{$bus_X_}" y="{$arrow_Y_}" xlink:href="#{$iBusStd}_BusArrowHInitiator"/>
371 <xsl:variable name="text_X_">
373 <xsl:when test="$iBc_Side = '0'"><xsl:value-of select="($bus_X_ - $BLKD_BUS_ARROW_W - (string-length($iBusName) * 5))"/></xsl:when>
374 <xsl:when test="$iBc_Side = '1'"><xsl:value-of select="($bus_X_ + $BLKD_BUS_ARROW_W)"/></xsl:when>
380 <text class="horizp2pbuslabel"
383 <xsl:value-of select="$iBusName"/>
386 <xsl:call-template name="F_WriteText">
387 <xsl:with-param name="iX" select="$text_X_"/>
388 <xsl:with-param name="iY" select="$arrow_Y_"/>
389 <xsl:with-param name="iText" select="$iBusName"/>
390 <xsl:with-param name="iClass" select="'p2pbus_label'"/>
396 <xsl:template name="Define_SharedBus">
398 <xsl:param name="iBusStd" select="'PLB46'"/>
400 <xsl:variable name="sharedbus_w_" select="($G_Total_DrawArea_W - ($BLKD_INNER_GAP * 2))"/>
402 <xsl:variable name="busStdColor_">
403 <xsl:call-template name="F_BusStd2RGB">
404 <xsl:with-param name="iBusStd" select="$iBusStd"/>
408 <xsl:variable name="busStdColor_lt_">
409 <xsl:call-template name="F_BusStd2RGB_LT">
410 <xsl:with-param name="iBusStd" select="$iBusStd"/>
414 <g id="{$iBusStd}_SharedBus">
415 <use x="0" y="0" xlink:href="#{$iBusStd}_BusArrowWest"/>
416 <use x="{$sharedbus_w_ - $BLKD_BUS_ARROW_W}" y="0" xlink:href="#{$iBusStd}_BusArrowEast"/>
418 <rect x="{$BLKD_BUS_ARROW_W}"
419 y="{$BLKD_BUS_ARROW_G}"
420 width= "{$sharedbus_w_ - ($BLKD_BUS_ARROW_W * 2)}"
421 height="{$BLKD_BUS_ARROW_H - (2 * $BLKD_BUS_ARROW_G)}" style="stroke:none; fill:{$busStdColor_}"/>
426 <xsl:template name="Define_SplitBusses">
428 <xsl:param name="iBusStd" select="'FSL'"/>
430 <xsl:variable name="busStdColor_">
431 <xsl:call-template name="F_BusStd2RGB">
432 <xsl:with-param name="iBusStd" select="$iBusStd"/>
436 <xsl:variable name="bifc_r_" select="ceiling($BLKD_BIFC_W div 3)"/>
438 <g id="{$iBusStd}_SplitBus_EAST">
439 <use x="0" y="0" xlink:href="#{$iBusStd}_BusArrowWest"/>
441 <rect x="{$BLKD_BUS_ARROW_W}"
442 y="{$BLKD_BUS_ARROW_G}"
443 width= "{$BLKD_BIFC_W}"
444 height="{$BLKD_BUS_ARROW_H - (2 * $BLKD_BUS_ARROW_G)}" style="stroke:none; fill:{$busStdColor_}"/>
448 <xsl:variable name="splbus_w_" select="($BLKD_BUS_ARROW_W + $BLKD_BIFC_W + $BLKD_BIFC_Wi)"/>
450 <g id="{$iBusStd}_SplitBus_WEST">
451 <use x="0" y="0" xlink:href="#{$iBusStd}_SplitBus_EAST" transform="scale(-1,1) translate({$splbus_w_ * -1},0)"/>
454 <g id="{$iBusStd}_SplitBus_OneWay">
457 y="{$BLKD_BUS_ARROW_G}"
458 width= "{($BLKD_BUS_ARROW_W * 2)}"
459 height="{$BLKD_BUS_ARROW_H - (2 * $BLKD_BUS_ARROW_G)}" style="stroke:none; fill:{$busStdColor_}"/>
461 <rect x="{($BLKD_BUS_ARROW_W * 2)}"
463 width= "{$BLKD_BUS_ARROW_H}"
464 height="{$BLKD_BUS_ARROW_H}" style="stroke:none; fill:{$busStdColor_}"/>
470 <xsl:template name="Define_SharedBus_Group">
472 <!-- The Bridges go into the shared bus shape -->
473 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/BRIDGESHAPES/MODULE">
475 <xsl:variable name="modInst_" select="@INSTANCE"/>
476 <xsl:variable name="modType_" select="$G_ROOT/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $modInst_)]/@MODTYPE"/>
478 <xsl:call-template name="Define_Peripheral">
479 <xsl:with-param name="iModVori" select="'normal'"/>
480 <xsl:with-param name="iModInst" select="$modInst_"/>
481 <xsl:with-param name="iModType" select="$modType_"/>
486 <g id="group_sharedBusses">
488 <!-- Draw the shared bus shapes first -->
489 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/SBSSHAPES/MODULE">
490 <xsl:variable name="instance_" select="@INSTANCE"/>
492 <xsl:variable name="busStd_" select="$G_ROOT/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $instance_)]/@BUSSTD"/>
493 <xsl:variable name="busIndex_" select="$G_ROOT/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $instance_)]/@BUS_INDEX"/>
495 <xsl:variable name="busY_" select="($busIndex_ * $BLKD_SBS_LANE_H)"/>
497 <use x="0" y="{$busY_}" xlink:href="#{$busStd_}_SharedBus"/>
500 <text class="sharedbuslabel"
502 y="{$busY_ + $BLKD_BUS_ARROW_H + 10}">
503 <xsl:value-of select="$instance_"/>
506 <xsl:call-template name="F_WriteText">
507 <xsl:with-param name="iX" select="'8'"/>
508 <xsl:with-param name="iY" select="($busY_ + $BLKD_BUS_ARROW_H + 10)"/>
509 <xsl:with-param name="iText" select="$instance_"/>
510 <xsl:with-param name="iClass" select="'sharedbus_label'"/>
516 <g id="KEY_SharedBus">
517 <use x="0" y="0" xlink:href="#KEY_BusArrowWest"/>
518 <use x="30" y="0" xlink:href="#KEY_BusArrowEast"/>
520 <xsl:variable name="key_col_">
521 <xsl:call-template name="F_BusStd2RGB">
522 <xsl:with-param name="iBusStd" select="'KEY'"/>
526 <rect x="{$BLKD_BUS_ARROW_W}"
527 y="{$BLKD_BUS_ARROW_G}"
528 width= "{30 - $BLKD_BUS_ARROW_W}"
529 height="{$BLKD_BUS_ARROW_H - (2 * $BLKD_BUS_ARROW_G)}" style="stroke:none; fill:{$key_col_}"/>