]> git.sur5r.net Git - freertos/blob - Demo/PPC405_Xilinx_Virtex4_GCC/__xps/.dswkshop/MdtXdsSVG_BlkdProcessors.xsl
eba0d4707ac6c35185e5d5de1e4d07cc720278e5
[freertos] / Demo / PPC405_Xilinx_Virtex4_GCC / __xps / .dswkshop / MdtXdsSVG_BlkdProcessors.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="stackIdx"  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="stackIdx"  select="100"/>
33         
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'))]"> 
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="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"/>
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 = $stackIdx) and (@MODCLASS='MEMORY_UNIT'))]">
53                 <xsl:call-template name="Define_MemoryUnit"> 
54                         <xsl:with-param name="shapeId"  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 = $stackIdx)]"> 
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="stackIdx"  select="$stackIdx"/>
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="stackIdx"  select="$stackIdx"/>
74                 </xsl:call-template>            
75         </xsl:variable>
76         
77         <xsl:variable name="procW_"    select="$periMOD_W"/>
78         <xsl:variable name="procX_"    select="(ceiling($pstackW_ div 2) - ceiling($procW_ div 2))"/>
79         
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_)"/>
83
84         <xsl:variable name="stack_name_">
85                 <xsl:call-template name="_gen_Stack_Name"> 
86                         <xsl:with-param name="horizIdx" select="$stackIdx"/>
87                 </xsl:call-template>            
88         </xsl:variable> 
89         
90 <!--    
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>
93 -->     
94                 
95                 <!-- Now use all this stuff to draw the stack-->        
96                 <symbol id="{$stack_name_}">
97                         <rect x="0"
98                                   y="0"
99                               rx="6" 
100                               ry="6" 
101                           width = "{$pstackW_}"
102                           height= "{$pstackH_}"
103                               style="fill:{$COL_BG}; stroke:none;"/>
104                         
105                 
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"/>
109                                 
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"/>
116                                         </xsl:call-template>
117                                 </xsl:variable>  
118                                 
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"/>
123                                         </xsl:call-template>            
124                                 </xsl:variable>
125                                 
126 <!--                            
127                                 <xsl:message>Drawing stack peripheral <xsl:value-of select="$stack_SymName_"/> at <xsl:value-of select="$shapeY_"/></xsl:message>
128 -->                             
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 = $stackIdx)]">    
137                                 <xsl:sort select="@SHAPE_VERTI_INDEX" data-type="number"/>
138                         
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))"/>
141                                 
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"/>
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 = $stackIdx)]">
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="horizIdx"  select="@STACK_HORIZ_INDEX"/>
167                                                 <xsl:with-param name="vertiIdx"  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="horizIdx" select="@STACK_HORIZ_INDEX"/>
174                                                 <xsl:with-param name="vertiIdx" select="@SHAPE_VERTI_INDEX"/>
175                                         </xsl:call-template>            
176                                 </xsl:variable>
177                                 
178                                 <use   x="{$procX_}"  y="{$procY_}"  xlink:href="#{$stack_SymName_}"/> 
179 <!--                            
180 -->                             
181                                 
182                                 <xsl:if test = "not(@IS_LIKEPROC)">
183                                         <text class="ipclass"
184                                                 x="{$procX_}" 
185                                                 y="{$procY_ - 4}">PROCESSOR</text>              
186                                 </xsl:if>                       
187                                   
188                                 <xsl:if test = "@IS_LIKEPROC = 'TRUE'">
189                                         <text class="ipclass"
190                                                 x="{$procX_}" 
191                                                 y="{$procY_ - 4}">USER MODULE</text>            
192                                 </xsl:if>                       
193                         
194                         </xsl:for-each>
195                 </symbol>
196 </xsl:template> 
197
198
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"/>
202 <!--    
203         <xsl:param name="procType"  select="/EDKSYSTEM/MODULES/MODULE[@INSTANCE=$procInst]/@PROCTYPE"/>
204 -->     
205         
206         <xsl:variable name="label_y_">
207                 <xsl:value-of select="$MOD_LANE_H"/>    
208         </xsl:variable>
209         
210 <!--    
211         <xsl:message>The proctype is <xsl:value-of select="$procType"/></xsl:message>   
212 -->
213         
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))"/>    
216         
217         <xsl:variable name="procColor">
218                 <xsl:choose>
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>
221 <!--                    
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>
224 -->     
225                         <xsl:otherwise>
226                                 <xsl:value-of select="$COL_PROC_BG_USR"/>       
227                         </xsl:otherwise>
228                 </xsl:choose>
229         </xsl:variable>
230         
231 <!--    
232         <xsl:message>The proc color is <xsl:value-of select="$procColor"/></xsl:message>        
233 -->     
234         
235
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"/>
240                 </xsl:call-template>            
241         </xsl:variable> 
242         
243 <!--    
244         <xsl:message>The proc name is <xsl:value-of select="$procName_"/></xsl:message> 
245 -->     
246         
247     <symbol id="{$procName_}">
248
249                 <rect x="0"
250                       y="0"
251                           rx="6" 
252                           ry="6" 
253                       width = "{$procW_}"
254                       height= "{$procH_}"
255                           style="fill:{$procColor}; stroke:{$COL_WHITE}; stroke-width:2"/>              
256                           
257                           
258                 <rect x="{ceiling($procW_ div 2) - ceiling($MOD_LABEL_W div 2)}"
259                       y="{$MOD_LANE_H}"
260                           rx="3" 
261                           ry="3" 
262                       width= "{$MOD_LABEL_W}"
263                       height="{$MOD_LABEL_H}"
264                           style="fill:{$COL_WHITE}; stroke:none;"/>             
265                           
266                 <text class="bciptype" 
267                           x="{ceiling($procW_ div 2)}"
268                           y="{$MOD_LANE_H + 8}">
269                                 <xsl:value-of select="$modType"/>
270                 </text>
271                                 
272                 <text class="bciplabel" 
273                           x="{ceiling($procW_ div 2)}"
274                           y="{$MOD_LANE_H + 16}">
275                                 <xsl:value-of select="$procInst"/>
276            </text>
277            
278            
279                 <xsl:if test="/EDKSYSTEM/MODULES/MODULE[@INSTANCE=$procInst]/@GROUP">
280                 
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}"
283                           rx="3" 
284                           ry="3" 
285                       width= "{$MOD_LABEL_W}"
286                       height="{$BIF_H}"
287                           style="fill:{$COL_IORING_LT}; stroke:none;"/>         
288                           
289         
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"/>
292                         </text>
293            
294                 </xsl:if> 
295            
296            
297                 <xsl:for-each select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $procInst)]/BUSINTERFACE[(@BIF_X and @BIF_Y)]">
298                         
299                         <xsl:variable name="bif_busstd_">
300                                 <xsl:choose>
301                                         <xsl:when test="@BUSSTD">
302                                                 <xsl:value-of select="@BUSSTD"/>        
303                                         </xsl:when>
304                                         <xsl:otherwise>
305                                                 <xsl:value-of select="'TRS'"/>  
306                                         </xsl:otherwise>
307                                 </xsl:choose>
308                         </xsl:variable>
309                         
310                         <xsl:variable name="bif_buscol_">
311                                 <xsl:call-template name="BusType2Color">
312                                         <xsl:with-param name="busType" select="$bif_busstd_"/>
313                                 </xsl:call-template>
314                         </xsl:variable>
315                 
316                         
317                         <xsl:variable name="bif_name_">
318                                 <xsl:choose>
319                                         <xsl:when test="string-length(@NAME) &lt;= 5">
320                                                 <xsl:value-of select="@NAME"/>  
321                                         </xsl:when>
322                                         <xsl:otherwise>
323                                                 <xsl:value-of select="substring(@NAME,0,5)"/>   
324                                         </xsl:otherwise>
325                                 </xsl:choose>
326                         </xsl:variable>
327                         
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))"/>
330                         
331                         <xsl:variable name="horz_line_y_" select="($bif_y_ + ceiling($BIFC_H div 2))"/>
332                         
333                         <xsl:variable name="horz_line_x1_">
334                                 <xsl:choose>
335                                         <xsl:when test="@BIF_X = '0'">0</xsl:when>
336                                         <xsl:otherwise><xsl:value-of select="($periMOD_W - $MOD_LANE_W)"/></xsl:otherwise>
337                                 </xsl:choose>
338                         </xsl:variable>
339                         
340                         <xsl:variable name="horz_line_x2_">
341                                 <xsl:choose>
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>
344                                 </xsl:choose>
345                         </xsl:variable>
346                         
347                         
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"/>
353                           
354                         <use  x="{$bif_x_}"   y="{$bif_y_}"  xlink:href="#{$bif_busstd_}_Bif"/>
355                                 
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_"/>
360                         </text>
361                         
362                         
363                         
364                 </xsl:for-each>
365                 
366                 <xsl:variable name="interrupt_cntlr_">
367                         <xsl:choose>
368                                 <xsl:when test="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE=$procInst)]/@INTERRUPT_CNTLR">
369                                         <xsl:value-of select="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE=$procInst)]/@INTERRUPT_CNTLR"/>
370                                 </xsl:when>
371                                 <xsl:otherwise>"_no_interrupt_cntlr_"</xsl:otherwise>
372                         </xsl:choose>
373                 </xsl:variable>
374                         
375 <!--            
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>
378 -->             
379                 <xsl:if test="/EDKSYSTEM/MODULES/MODULE[(@INSTANCE = $interrupt_cntlr_)]/@INTCINDEX">
380                         
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"/>
384                                 </xsl:call-template>    
385                         </xsl:variable>
386                         
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"/>
392                         </xsl:call-template>    
393                 </xsl:if>
394                 
395         </symbol>                         
396 </xsl:template>
397
398 </xsl:stylesheet>