Changes between Initial Version and Version 1 of ClusteredNoirqMulti


Ignore:
Timestamp:
Jul 6, 2011, 7:26:01 PM (13 years ago)
Author:
Joel Porquet
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ClusteredNoirqMulti

    v1 v1  
     1{{{
     2#!/usr/bin/env python
     3
     4import dsx
     5import soclib
     6
     7def _cluster(arch, no,
     8             ncpu, nram,
     9             icache_lines, icache_words,
     10             dcache_lines, dcache_words):
     11
     12    crossbar = arch.create('caba:vci_local_crossbar', 'lc%d'%no)
     13
     14    for i in range(ncpu):
     15        cn = arch.cpu_num
     16        arch.cpu_num += 1
     17
     18        cpu = arch.create('caba:vci_xcache_wrapper', 'cpu%d_%d'%(no,i),
     19                           iss_t='common:mips32el',
     20                           ident = cn,
     21                           icache_ways = 1,
     22                           icache_sets = icache_lines,
     23                           icache_words = icache_words,
     24                           dcache_ways = 1,
     25                           dcache_sets = dcache_lines,
     26                           dcache_words = dcache_words,
     27                           )
     28
     29        crossbar.to_initiator.new() // cpu.vci
     30
     31    for i in range(nram):
     32        ram = arch.create('caba:vci_ram', 'ram%d_%d'%(no,i))
     33        base = 0x10000000*(1+no)+0x1000000*i
     34        ram.addSegment('cram%d_%d'%(no,i), base, 0x100000, True)
     35        ram.addSegment('uram%d_%d'%(no,i), base + 0x400000, 0x100000, False)
     36        ram.vci // crossbar.to_target.new()
     37
     38    if no == 0:
     39        ram.addSegment('boot', 0xbfc00000, 0x1000,True)
     40        ram.addSegment('excep', 0x80000080, 0x1000,True)
     41
     42    return crossbar
     43
     44def ClusteredNoirqMulti(
     45    cpus = [1],
     46    rams = [1],
     47    min_latency = 10,
     48    icache_lines = 32,
     49    icache_words = 8,
     50    dcache_lines = 32,
     51    dcache_words = 8 ):
     52
     53    arch = soclib.Architecture(
     54                         cell_size = 4,
     55                         plen_size = 9,
     56                         addr_size = 32,
     57                         rerror_size = 1,
     58                         clen_size = 1,
     59                         rflag_size = 1,
     60                         srcid_size = 8,
     61                         pktid_size = 1,
     62                         trdid_size = 1,
     63                         wrplen_size = 1
     64                         )
     65    arch.cpu_num = 0
     66
     67    mt = arch.create('common:mapping_table',
     68              'mapping_table',
     69              addr_bits = [5,3],
     70              srcid_bits = [4,4],
     71              cacheability_mask = 0xc00000)
     72
     73    arch.create('common:loader', 'loader')
     74
     75    vgmn = arch.create('caba:vci_vgmn', 'vgmn0', min_latency = min_latency, fifo_depth = 8, mt = mt)
     76
     77    for no, (ncpu, nram) in enumerate(zip(cpus, rams)):
     78        lc = _cluster(
     79            arch, no,
     80            ncpu = ncpu, nram = nram,
     81            icache_lines = icache_lines, icache_words = icache_words,
     82            dcache_lines = dcache_lines, dcache_words = dcache_words)
     83        vgmn.to_initiator.new() // lc.initiator_to_up
     84        vgmn.to_target.new() // lc.target_to_up
     85
     86        # if cluster == 0
     87        #   add tg at address 0x16400000
     88        ...
     89
     90        # if cluster == 3
     91        #   add ramdac at address 0x46400000
     92        ...
     93
     94    tty = arch.create('caba:vci_multi_tty', 'tty', names = ['tty0'])
     95    tty.addSegment('tty', 0x95400000, 0x20, False)
     96    tty.vci // lc.to_target.new()
     97
     98    return arch
     99}}}