source: trunk/platforms/tsar_generic_xbar/scripts/gen_arch_info.py @ 1023

Last change on this file since 1023 was 1023, checked in by meunier, 9 years ago
  • Update the scripts to use a common file hard_params.py in both gen_arch_info and gen_hdd
  • Adding the P_WIDTH parameter in the topcell
  • Property svn:executable set to *
File size: 5.3 KB
Line 
1#--------------------------------------------------------------------
2# File      : gen_arch_info.py
3#--------------------------------------------------------------------
4
5import getpass
6import socket
7import time
8import sys
9
10
11exec(file("hard_params.py"))
12
13def print_comments(cmd, x, y, cpu_per_cluster, bscpu):
14    print "# TSAR hardware description in BIB (Boot Information Block) format"
15    print "# This file is autogenerated by the command: " + cmd +  " %d %d %d %d" % (x, y, cpu_per_cluster, bscpu)
16    print "# It is ready to be passed to info2bib utility so the binary format can be generated"
17    print " "
18    print "# " + getpass.getuser() + " on " + socket.gethostname() + " " + time.strftime("%H:%M:%S")
19    print " "
20    print " "
21       
22def print_header(x, y, bscpu, bstty, bsdma):
23    print "[HEADER]"
24    print "        REVISION=1"
25    print "        ARCH=SOCLIB-TSAR"
26    print "        XMAX=%d" % x
27    print "        YMAX=%d" % y
28    print "        BSCPU=%d" % bscpu
29    print "        BSTTY=0x%x" % bstty
30    print "        BSDMA=0x%x" % bsdma
31    print " "
32    print " "
33
34
35def print_cluster(x, y, x_width, y_width, cpu_per_cluster):
36    mem_addr = ram_addr(x, y, x_width, y_width)
37    mem_size = ram_size(x_width, y_width)
38    xcu_base = replicated_periph_base_addr(x_width, y_width, XCU_TGTID)
39    dma_base = replicated_periph_base_addr(x_width, y_width, DMA_TGTID)
40    xcu_addr = replicated_periph_addr(x, y, x_width, y_width, xcu_base)
41    dma_addr = replicated_periph_addr(x, y, x_width, y_width, dma_base)
42    print "[CLUSTER]"
43
44    cid = x * (1 << y_width) + y
45    cpu_num = 0;
46    while (cpu_num != cpu_per_cluster):
47        gid = (cid << P_WIDTH) + cpu_num
48        print "        [CPU]    ID=%d    OUTIRQ=%d" % (gid, (cpu_num * OUTPUT_IRQ_PER_PROC)) 
49        cpu_num += 1
50   
51    print "        [DEV]    ID=RAM       BASE=%#.8x    SIZE=%#.8x    IRQ=-1    IRQTYPE=NONE" % (mem_addr, mem_size)
52    print "        [DEV]    ID=XICU      BASE=%#.8x    SIZE=%#.8x    IRQ=-1    IRQTYPE=NONE" % (xcu_addr, DMA_SIZE)
53    print "        [DEV]    ID=DMA       BASE=%#.8x    SIZE=%#.8x    IRQ=8     IRQTYPE=HWI"  % (dma_addr, XCU_SIZE)
54    print " "
55    print " "
56
57
58def print_io_cluster(x, y, x_width, y_width, cpu_per_cluster):
59    mem_addr = ram_addr(x, y, x_width, y_width)
60    mem_size = ram_size(x_width, y_width)
61
62    xcu_addr = periph_addr(x_width, y_width, XCU_TGTID)
63    dma_addr = periph_addr(x_width, y_width, DMA_TGTID)
64    ioc_addr = periph_addr(x_width, y_width, IOC_TGTID)
65    tty_base = periph_addr(x_width, y_width, TTY_TGTID)
66    fbf_addr = periph_addr(x_width, y_width, FBF_TGTID)
67   
68    print "[CLUSTER]"
69    cpu_num = 0
70    cid = x * (1 << y_width) + y
71    while (cpu_num != cpu_per_cluster):
72        gid = (cid << P_WIDTH) + cpu_num
73        print "        [CPU]    ID=%d    OUTIRQ=%d" % (gid, (cpu_num * OUTPUT_IRQ_PER_PROC)) 
74        cpu_num = cpu_num + 1
75   
76    print "        [DEV]    ID=RAM       BASE=%#.8x    SIZE=%#.8x    IRQ=-1    IRQTYPE=NONE" % (mem_addr, mem_size)
77    print "        [DEV]    ID=XICU      BASE=%#.8x    SIZE=%#.8x    IRQ=-1    IRQTYPE=NONE" % (xcu_addr, XCU_SIZE)
78    print "        [DEV]    ID=DMA       BASE=%#.8x    SIZE=%#.8x    IRQ=8     IRQTYPE=HWI"  % (dma_addr, DMA_SIZE)
79    print "        [DEV]    ID=BLKDEV    BASE=%#.8x    SIZE=%#.8x    IRQ=31    IRQTYPE=HWI"  % (ioc_addr, IOC_SIZE)
80    ntty = 0
81    irq = 16
82    while (ntty < NB_TTY_CHANNELS):
83        tty_base_i = tty_base + ntty * TTY_CHANNEL_SIZE
84        print "        [DEV]    ID=TTY       BASE=%#.8x    SIZE=%#.8x    IRQ=%d    IRQTYPE=HWI" % (tty_base_i, TTY_CHANNEL_SIZE, irq)
85        irq += 1
86        ntty += 1
87    print "        [DEV]    ID=FB        BASE=%#.8x    SIZE=%#.8x    IRQ=-1    IRQTYPE=NONE" % (fbf_addr, FBF_SIZE)
88    print " "
89    print " "
90
91def gen_arch_info(x, y, x_width, y_width, cpu_per_cluster, bscpu, arch_info_name):
92    fp = open(arch_info_name, 'w')
93    stdout = sys.stdout
94    sys.stdout = fp
95
96    x_io = get_x_io(x_width, y_width)
97    y_io = get_y_io(x_width, y_width)
98
99    ###########################################################################################
100    # we force io_cid to 0 because this is the only cluster we know which will be present
101    # in all platform where the number of clusters is independant of x_width and y_width values
102    # io_cid = 0
103    # @QM No.
104    ###########################################################################################
105
106    break_loop = 0
107    xi = 0
108    yi = 0
109    while (xi < x):
110        while (yi < y):
111            if xi == x_io and yi == y_io:
112                bsdma = periph_addr(x_width, y_width, DMA_TGTID)
113                bstty = periph_addr(x_width, y_width, TTY_TGTID)
114                break_loop = 1
115                break
116            else:
117                bsdma = "error"
118            yi = yi + 1
119
120        if break_loop == 1:
121            break
122        yi = 0
123        xi = xi + 1
124   
125    # Generate the description
126    print_comments(sys.argv[0], x, y, cpu_per_cluster, bscpu)
127    print_header(x, y, bscpu, bstty, bsdma)
128   
129    xi = 0
130    yi = 0
131    while (xi < x):
132        while (yi < y):
133            if xi == x_io and yi == y_io:
134                print_io_cluster(xi, yi, x_width, y_width, cpu_per_cluster)
135            else:
136                print_cluster(xi, yi, x_width, y_width, cpu_per_cluster)
137            yi = yi + 1
138        yi = 0
139        xi = xi + 1
140    sys.stdout = stdout
141    fp.close()
142
Note: See TracBrowser for help on using the repository browser.