source: trunk/platforms/tsar_generic_xbar/scripts/gen_hard_config.py @ 1012

Last change on this file since 1012 was 1012, checked in by meunier, 9 years ago
  • Update of simulation scripts for tsar_generic_xbar
File size: 6.6 KB
Line 
1
2
3
4def hard_config(x, y, x_width, y_width, p, hard_config, protocol):
5   
6    ram_tgtid = 0
7    xcu_tgtid = 1
8    dma_tgtid = 2
9    tty_tgtid = 3
10    ioc_tgtid = 4
11    nic_tgtid = 5
12    rom_tgtid = 6
13    cma_tgtid = 7
14    sim_tgtid = 8
15    fbf_tgtid = 9
16
17    nb_dma_channels = 1
18    nb_cma_channels = 0
19    nb_tty_channels = 4
20    nb_ioc_channels = 1
21
22    fbf_x_size = 1024
23    fbf_y_size = 1024
24
25    seg_rom_base = 0xbfc00000
26    seg_rom_size = 0x00100000
27
28    cluster_inc = 0x80000000 / (x * y) * 2
29    cluster_io_id = seg_rom_base >> (32 - x_width - y_width)
30    cluster_io_inc = cluster_io_id * cluster_inc
31    ram_max_size = 0x40000000 / (x * y) # 1 Go Max
32   
33    seg_ram_base = 0x00000000
34    seg_ram_size = min(0x10000000, ram_max_size)
35
36    seg_xcu_base = (cluster_inc >> 1) + (xcu_tgtid << 19)
37    seg_xcu_size = 0x00001000 # 4Ko
38
39    seg_dma_base = (cluster_inc >> 1) + (dma_tgtid << 19)
40    seg_dma_size = 0x00001000 * nb_dma_channels
41
42    def periph_address(tgtid):
43        return (cluster_inc >> 1) + cluster_io_inc + (tgtid << 19)
44
45    seg_ioc_base = periph_address(ioc_tgtid);
46    seg_ioc_size = 0x00001000
47
48    seg_tty_base = periph_address(tty_tgtid)
49    seg_tty_size = 0x00001000
50
51    seg_fbf_base = periph_address(fbf_tgtid)
52    seg_fbf_size = fbf_x_size * fbf_y_size * 2
53
54    seg_nic_base = periph_address(nic_tgtid)
55    seg_nic_size = 0x00080000
56
57    seg_cma_base = periph_address(cma_tgtid)
58    seg_cma_size = 0x00004000 * nb_cma_channels
59
60    seg_sim_base = periph_address(sim_tgtid)
61    seg_sim_size = 0x00001000
62
63    header = '''
64#ifndef _HARD_CONFIG_H_
65#define _HARD_CONFIG_H_
66
67/* Generated from run_simus.py */
68
69/* General platform parameters */
70
71#define X_SIZE                 %(x_size)d
72#define Y_SIZE                 %(y_size)d
73#define X_WIDTH                %(x_width)d
74#define Y_WIDTH                %(y_width)d
75#define P_WIDTH                4
76#define X_IO                   0
77#define Y_IO                   0
78#define NB_PROCS_MAX           %(proc_per_clus)d
79#define IRQ_PER_PROCESSOR      4
80#define RESET_ADDRESS          0x%(seg_rom_base)x
81
82
83/* Peripherals */
84
85#define RAM_TGTID              %(ram_tgtid)d
86#define XCU_TGTID              %(xcu_tgtid)d
87#define DMA_TGTID              %(dma_tgtid)d
88#define TTY_TGTID              %(tty_tgtid)d
89#define IOC_TGTID              %(ioc_tgtid)d
90#define NIC_TGTID              %(nic_tgtid)d
91#define ROM_TGTID              %(rom_tgtid)d
92#define CMA_TGTID              %(cma_tgtid)d
93#define SIM_TGTID              %(sim_tgtid)d
94#define FBF_TGTID              %(fbf_tgtid)d
95
96#define NB_TTY_CHANNELS        %(nb_tty_channels)d
97#define NB_IOC_CHANNELS        %(nb_ioc_channels)d
98#define NB_NIC_CHANNELS        0
99#define NB_CMA_CHANNELS        %(nb_cma_channels)d
100#define NB_TIM_CHANNELS        0
101#define NB_DMA_CHANNELS        %(nb_dma_channels)d
102
103#define USE_XCU                1
104#define USE_IOB                0
105#define USE_PIC                0
106#define USE_FBF                1
107
108#define USE_IOC_BDV            1
109#define USE_IOC_SDC            0
110#define USE_IOC_HBA            0
111#define USE_IOC_RDK            0
112
113#define FBF_X_SIZE             %(fbf_x_size)d
114#define FBF_Y_SIZE             %(fbf_y_size)d
115
116
117/* base addresses and sizes for physical segments */
118
119#define SEG_RAM_BASE           0x%(seg_ram_base)x
120#define SEG_RAM_SIZE           0x%(seg_ram_size)x
121
122#define SEG_CMA_BASE           0x0 // Component requires a multiple of 4K
123#define SEG_CMA_SIZE           0x0
124
125#define SEG_DMA_BASE           0x%(seg_dma_base)x
126#define SEG_DMA_SIZE           0x%(seg_dma_size)x
127
128#define SEG_FBF_BASE           0x%(seg_fbf_base)x
129#define SEG_FBF_SIZE           0x%(seg_fbf_size)x
130
131#define SEG_ICU_BASE           0xffffffff
132#define SEG_ICU_SIZE           0x0
133
134#define SEG_IOB_BASE           0xffffffff
135#define SEG_IOB_SIZE           0x0
136
137#define SEG_IOC_BASE           0x%(seg_ioc_base)x
138#define SEG_IOC_SIZE           0x%(seg_ioc_size)x
139
140#define SEG_MMC_BASE           0xffffffff
141#define SEG_MMC_SIZE           0x0
142
143#define SEG_MWR_BASE           0xffffffff
144#define SEG_MWR_SIZE           0x0
145
146#define SEG_ROM_BASE           0x%(seg_rom_base)x
147#define SEG_ROM_SIZE           0x%(seg_rom_size)x
148
149#define SEG_SIM_BASE           0x%(seg_sim_base)x
150#define SEG_SIM_SIZE           0x%(seg_sim_size)x
151
152#define SEG_NIC_BASE           0x%(seg_nic_base)x
153#define SEG_NIC_SIZE           0x%(seg_nic_size)x
154
155#define SEG_PIC_BASE           0xffffffff
156#define SEG_PIC_SIZE           0x0
157
158#define SEG_TIM_BASE           0xffffffff
159#define SEG_TIM_SIZE           0x0
160
161#define SEG_TTY_BASE           0x%(seg_tty_base)x
162#define SEG_TTY_SIZE           0x%(seg_tty_size)x
163
164#define SEG_XCU_BASE           0x%(seg_xcu_base)x
165#define SEG_XCU_SIZE           0x%(seg_xcu_size)x
166
167#define SEG_RDK_BASE           0xffffffff
168#define SEG_RDK_SIZE           0x0
169
170''' % dict(x_size = x, y_size = y, x_width = x_width, y_width = y_width,
171        proc_per_clus = p,
172        nb_tty_channels = nb_tty_channels,
173        nb_ioc_channels = nb_ioc_channels,
174        nb_cma_channels = nb_cma_channels,
175        nb_dma_channels = nb_dma_channels,
176        fbf_x_size = fbf_x_size, fbf_y_size = fbf_y_size,
177        ram_tgtid = ram_tgtid,
178        xcu_tgtid = xcu_tgtid,
179        dma_tgtid = dma_tgtid,
180        tty_tgtid = tty_tgtid,
181        ioc_tgtid = ioc_tgtid,
182        nic_tgtid = nic_tgtid,
183        rom_tgtid = rom_tgtid,
184        cma_tgtid = cma_tgtid,
185        sim_tgtid = sim_tgtid,
186        fbf_tgtid = fbf_tgtid,
187        seg_ram_base = seg_ram_base,
188        seg_ram_size = seg_ram_size,
189        seg_dma_base = seg_dma_base,
190        seg_dma_size = seg_dma_size,
191        seg_fbf_base = seg_fbf_base,
192        seg_fbf_size = seg_fbf_size,
193        seg_ioc_base = seg_ioc_base,
194        seg_ioc_size = seg_ioc_size,
195        seg_rom_base = seg_rom_base,
196        seg_rom_size = seg_rom_size,
197        seg_sim_base = seg_sim_base,
198        seg_sim_size = seg_sim_size,
199        seg_nic_base = seg_nic_base,
200        seg_nic_size = seg_nic_size,
201        seg_tty_base = seg_tty_base,
202        seg_tty_size = seg_tty_size,
203        seg_xcu_base = seg_xcu_base,
204        seg_xcu_size = seg_xcu_size)
205
206    if protocol == 'wtidl':
207        header += '#define WT_IDL\n'
208
209    header += '#endif //_HD_CONFIG_H\n'
210
211    file = open(hard_config, 'w')
212    file.write(header)
213    file.close()
214
215
216if __name__ == "__main__":
217    if len(sys.argv) != 6:
218        print "Usage: %s <x> <y> <p> <hard_config-filename> <protocol>" % argv[0]
219        print "with:"
220        print "<x>: number of clusters in X"
221        print "<y>: number of clusters in Y"
222        print "<p>: number of processors per clusters"
223        sys.exit(0)
224
225    x = argv[1]
226    y = argv[2]
227    p = argv[3]
228    hard_config_filename = argv[4]
229    protocol = argv[5]
230
231    hard_config(x, y, p, hard_config_filename, protocol)
232
233
Note: See TracBrowser for help on using the repository browser.