Changes between Initial Version and Version 1 of MjpegCourse/ClusteredNoirqMulti


Ignore:
Timestamp:
Feb 26, 2007, 1:18:29 PM (18 years ago)
Author:
Nicolas Pouillon
Comment:

Nom hiérarchique

Legend:

Unmodified
Added
Removed
Modified
  • MjpegCourse/ClusteredNoirqMulti

    v1 v1  
     1{{{
     2#!/usr/bin/env python
     3
     4from dsx.hardware import *
     5from soclib import *
     6
     7class ClusteredNoirqMulti(SoclibGenericArchitecture):
     8    """
     9    Parameters:
     10     - min_latency: Vgmn's latency
     11     - cpus: Cpus per cluster in a list
     12     - rams: Rams per cluster in a list
     13
     14    Exports:
     15     - vgmn: global vgmn interconnect
     16     - clust[]: cluster's interconnect; contains:
     17       - cpu[]: cpu list for cluster
     18       - cram[]: cached ram list for cluster
     19       - uram[]: uncached ram list for cluster
     20       - locks: ramlocks
     21     - cpu[]: global cpu list
     22     - cram[]: global cached ram list
     23     - uram[]: global uncached ram list
     24     - locks: global ramlocks list
     25    """
     26    def cluster(self, clustno, ncpu, nram):
     27        ic = LocalCrossbar('lc%d'%clustno)
     28
     29        cpu = []
     30        cache = []
     31        for n in range(ncpu):
     32            c = Mips('mips%d_%d'%(clustno,n))
     33            xc = Xcache('cache%d_%d'%(clustno,n))
     34            c.cache // xc.cache
     35
     36            cpu.append(c)
     37            cache.append(xc)
     38
     39            xc.vci // ic.getTarget()
     40
     41        ic.cpu = cpu
     42        ic.cache = cache
     43
     44        ram = []
     45        uram = []
     46        cram = []
     47        for n in range(nram):
     48            cr = Segment('cram%d'%clustno, __remplir__)
     49            ur = Segment('uram%d'%clustno, __remplir__)
     50            uram.append(ur)
     51            cram.append(cr)
     52            r = MultiRam('ram%d'%clustno, cr, ur)
     53
     54            r.vci // ic.getInit()
     55            ram.append(r)
     56        ic.ram = ram
     57        ic.uram = uram
     58        ic.cram = cram
     59
     60        ic.locks = Locks('locks%d'%clustno)
     61        ic.locks.vci // ic.getInit()
     62       
     63        return ic
     64
     65    def architecture(self):
     66        self.vgmn = Vgmn('vgmn', self.getParam(__remplir__))
     67        self.setBase(self.vgmn)
     68
     69        nram = self.getParam('rams')
     70        ncpu = self.getParam('cpus')
     71        assert(len(nram) == len(ncpu))
     72
     73        ncluster = len(nram)
     74
     75        self.clust = []
     76        for n, nc, nr in zip(range(ncluster), ncpu, nram):
     77            ic = self.cluster(n, nc, nr)
     78            self.clust.append(ic)
     79            ic.__remplir__ // self.vgmn.getBoth()
     80       
     81        self.clust[0].ram[0].addSegment(
     82            Segment('reset', Cached, addr=0xbfc00000),
     83            Segment('excep', Cached, addr=0x80000080))
     84
     85        # export global lists
     86        add = lambda x,y: x+y
     87        self.ram = reduce(add, [self.clust[i].ram for i in range(ncluster)])
     88        self.uram = reduce(add, [self.clust[i].uram for i in range(ncluster)])
     89        self.cram = reduce(add, [self.clust[i].cram for i in range(ncluster)])
     90        self.cpu = reduce(add, [self.clust[i].cpu for i in range(ncluster)])
     91        self.locks = [self.clust[i].locks for i in range(ncluster)]
     92
     93# Ceci permet de tester l'architecture:
     94# Le bout de code dans le if ne sera exécuté que si vous faites ./clustered_noirq_multi.py
     95# et pas si vous importez clustered_noirq_multi depuis une autre description.
     96
     97if __name__ == '__main__':
     98    hard = ClusteredNoirqMulti( cpus = [1, 2, 2, 1],
     99                                rams = [1, 1, 1, 1],
     100                                min_latency = 10 )
     101    hard.dispTree()
     102    print hard.cpu
     103    print hard.ram
     104    print hard.cram
     105    print hard.uram
     106    print hard.locks
     107    hard.generate(Caba())
     108}}}