]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/PPC405_FPU_Xilinx_Virtex4_GCC/__xps/.dswkshop/MdtSvgBLKD_Processors.xsl
Add FreeRTOS-Plus directory.
[freertos] / FreeRTOS / Demo / PPC405_FPU_Xilinx_Virtex4_GCC / __xps / .dswkshop / MdtSvgBLKD_Processors.xsl
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">
9            
10 <xsl:output method="xml" 
11                         version="1.0" 
12                         encoding="UTF-8" 
13                         indent="yes"
14                 doctype-public="-//W3C//DTD SVG 1.0//EN"
15                     doctype-system="http://www.w3.org/TR/SVG/DTD/svg10.dtd"/>
16                         
17
18 <!-- ======================= DEF BLOCK =================================== -->
19 <xsl:template name="Define_AllStacks"> 
20         
21         <xsl:for-each select="/EDKSYSTEM/BLKDSHAPES/BCLANESPACES/BCLANESPACE[(@EAST &lt; /EDKSYSTEM/BLKDSHAPES/@STACK_HORIZ_WIDTH)]">
22                         
23                 <xsl:call-template name="Define_Stack">
24                         <xsl:with-param name="iStackIdx"  select="@EAST"/>
25                 </xsl:call-template>
26                 
27         </xsl:for-each> 
28 </xsl:template>
29         
30         
31 <xsl:template name="Define_Stack"> 
32         <xsl:param name="iStackIdx"  select="100"/>
33         
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'))]"> 
36                         
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"/>
46                         </xsl:call-template>            
47                 </xsl:for-each> 
48                 
49         </xsl:for-each>
50         
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"/>
55                 </xsl:call-template>
56         </xsl:for-each>
57         
58         
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"/>            
62         </xsl:for-each> 
63                 
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"/>
68                 </xsl:call-template>            
69         </xsl:variable>
70                 
71         <xsl:variable name="pstackH_">
72                 <xsl:call-template name="_calc_Stack_Height"> 
73                         <xsl:with-param name="iStackIdx"  select="$iStackIdx"/>
74                 </xsl:call-template>            
75         </xsl:variable>
76         
77         <xsl:variable name="procW_"    select="$BLKD_MOD_W"/>
78         <xsl:variable name="procX_"    select="(ceiling($pstackW_ div 2) - ceiling($procW_ div 2))"/>
79         
80         
81         <xsl:variable name="sbsGap_"   select="($BLKD_PROC2SBS_GAP + $G_total_SharedBus_H)"/>
82
83         <xsl:variable name="stack_name_">
84                 <xsl:call-template name="_gen_Stack_Name"> 
85                         <xsl:with-param name="iHorizIdx" select="$iStackIdx"/>
86                 </xsl:call-template>            
87         </xsl:variable> 
88         
89 <!--    
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>
92 -->     
93                 
94                 <!-- Now use all this stuff to draw the stack-->        
95                 <symbol id="{$stack_name_}">
96                         <rect x="0"
97                                   y="0"
98                               rx="6" 
99                               ry="6" 
100                           width = "{$pstackW_}"
101                           height= "{$pstackH_}"
102                               style="fill:{$COL_BG}; stroke:none;"/>
103                         
104                 
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"/>
108                                 
109                                 
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))"/>
112                                 
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"/>
117                                         </xsl:call-template>            
118                                 </xsl:variable>
119                                 
120 <!--                            
121                                 <xsl:message>Drawing stack peripheral <xsl:value-of select="$stack_SymName_"/></xsl:message>
122 -->                             
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"/>
127                                         </xsl:call-template>
128                                 </xsl:variable>  
129                                 
130                                 <use   x="{$shapeX_}"  y="{$shapeY_}"  xlink:href="#{$stack_SymName_}"/> 
131                         
132                         </xsl:for-each>
133                         
134                         
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"/>
138                         
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))"/>
141                                 
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"/>
146                                         </xsl:call-template>
147                                 </xsl:variable>  
148                                 
149 <!--                            
150                                 <xsl:message>SBS Bucket Y <xsl:value-of select="$bucketY_"/></xsl:message>
151 -->                             
152                                 
153                                  <use  x="{$bucketX_}"  y="{$bucketY_}"  xlink:href="#sbsbucket_{@BUSNAME}"/> 
154                                  
155                                  <text class="ipclass"
156                                            x="{$bucketX_}" 
157                                            y="{$bucketY_ - 4}">SLAVES OF <xsl:value-of select="@BUSNAME"/></text>       
158                         </xsl:for-each>
159                         
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"/>
163                                 
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"/>
168                                         </xsl:call-template>
169                                 </xsl:variable>  
170                                 
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"/>
175                                         </xsl:call-template>            
176                                 </xsl:variable>
177                                 
178                                 <use   x="{$procX_}"  y="{$procY_}"  xlink:href="#{$stack_SymName_}"/> 
179                                 
180                                 <xsl:if test = "not(@IS_LIKEPROC)">
181                                         <text class="ipclass"
182                                                 x="{$procX_}" 
183                                                 y="{$procY_ - 4}">PROCESSOR</text>              
184                                 </xsl:if>                       
185                                   
186                                 <xsl:if test = "@IS_LIKEPROC = 'TRUE'">
187                                         <text class="ipclass"
188                                                 x="{$procX_}" 
189                                                 y="{$procY_ - 4}">USER MODULE</text>            
190                                 </xsl:if>                       
191                         
192                         </xsl:for-each>
193                 </symbol>
194 </xsl:template> 
195
196
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"/>
200 <!--    
201         <xsl:param name="procType"  select="/EDKSYSTEM/MODULES/MODULE[@INSTANCE=$procInst]/@PROCTYPE"/>
202 -->     
203         
204         <xsl:variable name="label_y_">
205                 <xsl:value-of select="$BLKD_MOD_LANE_H"/>       
206         </xsl:variable>
207         
208 <!--    
209         <xsl:message>The proctype is <xsl:value-of select="$procType"/></xsl:message>   
210 -->
211         
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))"/>        
214         
215         <xsl:variable name="procColor_">
216                 <xsl:choose>
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>
219                         <xsl:otherwise>
220                                 <xsl:value-of select="$COL_PROC_BG_USR"/>       
221                         </xsl:otherwise>
222                 </xsl:choose>
223         </xsl:variable>
224         
225 <!--    
226         <xsl:message>The proc color is <xsl:value-of select="$procColor"/></xsl:message>        
227 -->     
228         
229
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"/>
234                 </xsl:call-template>            
235         </xsl:variable> 
236         
237 <!--    
238         <xsl:message>The proc name is <xsl:value-of select="$procName_"/></xsl:message> 
239 -->     
240         
241     <symbol id="{$procName_}">
242
243                 <rect x="0"
244                       y="0"
245                           rx="6" 
246                           ry="6" 
247                       width = "{$procW_}"
248                       height= "{$procH_}"
249                           style="fill:{$procColor_}; stroke:{$COL_WHITE}; stroke-width:2"/>             
250                           
251                           
252                 <rect x="{ceiling($procW_ div 2) - ceiling($BLKD_MOD_LABEL_W div 2)}"
253                       y="{$BLKD_MOD_LANE_H}"
254                           rx="3" 
255                           ry="3" 
256                       width= "{$BLKD_MOD_LABEL_W}"
257                       height="{$BLKD_MOD_LABEL_H}"
258                           style="fill:{$COL_WHITE}; stroke:none;"/>             
259                           
260                 <text class="bciptype" 
261                           x="{ceiling($procW_ div 2)}"
262                           y="{$BLKD_MOD_LANE_H + 8}">
263                                 <xsl:value-of select="$iModType"/>
264                 </text>
265                                 
266                 <text class="bciplabel" 
267                           x="{ceiling($procW_ div 2)}"
268                           y="{$BLKD_MOD_LANE_H + 16}">
269                                 <xsl:value-of select="$iProcInst"/>
270            </text>
271            
272            
273                 <xsl:if test="/EDKSYSTEM/MODULES/MODULE[@INSTANCE=$iProcInst]/@GROUP">
274                 
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}"
277                           rx="3" 
278                           ry="3" 
279                       width= "{$BLKD_MOD_LABEL_W}"
280                       height="{$BLKD_BIF_H}"
281                           style="fill:{$COL_IORING_LT}; stroke:none;"/>         
282                           
283         
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"/>
286                         </text>
287            
288                 </xsl:if> 
289            
290            
291                 <xsl:for-each select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $iProcInst)]/BUSINTERFACE[(@BIF_X and @BIF_Y)]">
292                         
293                         <xsl:variable name="bif_busstd_">
294                                 <xsl:choose>
295                                         <xsl:when test="@BUSSTD">
296                                                 <xsl:value-of select="@BUSSTD"/>        
297                                         </xsl:when>
298                                         <xsl:otherwise>
299                                                 <xsl:value-of select="'TRS'"/>  
300                                         </xsl:otherwise>
301                                 </xsl:choose>
302                         </xsl:variable>
303                         
304                         <xsl:variable name="bif_buscol_">
305                                 <xsl:call-template name="BusType2Color">
306                                         <xsl:with-param name="iBusType" select="$bif_busstd_"/>
307                                 </xsl:call-template>
308                         </xsl:variable>
309                 
310                         
311                         <xsl:variable name="bif_name_">
312                                 <xsl:choose>
313                                         <xsl:when test="string-length(@NAME) &lt;= 5">
314                                                 <xsl:value-of select="@NAME"/>  
315                                         </xsl:when>
316                                         <xsl:otherwise>
317                                                 <xsl:value-of select="substring(@NAME,0,5)"/>   
318                                         </xsl:otherwise>
319                                 </xsl:choose>
320                         </xsl:variable>
321                         
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))"/>
324                         
325                         <xsl:variable name="horz_line_y_" select="($bif_y_ + ceiling($BLKD_BIFC_H div 2))"/>
326                         
327                         <xsl:variable name="horz_line_x1_">
328                                 <xsl:choose>
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>
331                                 </xsl:choose>
332                         </xsl:variable>
333                         
334                         <xsl:variable name="horz_line_x2_">
335                                 <xsl:choose>
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>
338                                 </xsl:choose>
339                         </xsl:variable>
340                         
341                         
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"/>
347                           
348                         <use  x="{$bif_x_}"   y="{$bif_y_}"  xlink:href="#{$bif_busstd_}_Bif"/>
349                                 
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_"/>
354                         </text>
355                         
356                 </xsl:for-each>
357                 
358                 <xsl:variable name="interrupt_cntlr_">
359                         <xsl:choose>
360                                 <xsl:when test="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE=$iProcInst)]/@INTERRUPT_CNTLR">
361                                         <xsl:value-of select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE=$iProcInst)]/@INTERRUPT_CNTLR"/>
362                                 </xsl:when>
363                                 <xsl:otherwise>"_no_interrupt_cntlr_"</xsl:otherwise>
364                         </xsl:choose>
365                 </xsl:variable>
366                         
367 <!--            
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>
370 -->             
371                 <xsl:if test="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $interrupt_cntlr_)]/@INTCINDEX">
372                         
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"/>
376                                 </xsl:call-template>    
377                         </xsl:variable>
378                         
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"/>
384                         </xsl:call-template>    
385                 </xsl:if>
386                 
387         </symbol>                         
388 </xsl:template>
389
390 </xsl:stylesheet>