| 1 | ''' Index by Title ''' | ''' [RecentChanges Index by Date] ''' |
| 2 | |
| 3 | [[DsxvmHardware]] |
| 4 | |
| 5 | This page explain how to describe the hardware in Dsx-vm. |
| 6 | |
| 7 | == General description == |
| 8 | |
| 9 | We first start by creating a Hardware object: |
| 10 | |
| 11 | {{{ |
| 12 | Hardware(cluster_x, cluster_y, nb_proc) |
| 13 | }}} |
| 14 | - `cluster_x` : number of cluster in the abscisse axe (int) |
| 15 | - `cluster_y` : number of cluster in the ordinate axe (int) |
| 16 | - `nb_proc` : number of proc by cluster |
| 17 | |
| 18 | Both cluster_x and cluster_y parameter represent the number of cluster in the platform. If you have a non-clustered platform, you should then set each value to 1. |
| 19 | |
| 20 | == Peripehrals == |
| 21 | |
| 22 | Once we have described the platform, we could attach different peripheral to it: |
| 23 | |
| 24 | * TIMER : a timer peripheral, useful for the scheduling of the processors |
| 25 | Timer(name, pbase, channel_size, nb_channel) |
| 26 | * ICU : a concentrator of interrupt line, mandatory if we got irqs on the platform |
| 27 | ICU(name, pbase, channel_size, nb_channel) |
| 28 | * XICU : a concentrator of interrupt line and a timer, this component and the couple !Timer/Icu can't be in the same platform |
| 29 | XICU(name, pbase, channel_size, nb_channel) |
| 30 | * Dma : a dma component |
| 31 | Dma(name, pbase, channel_size, nb_channel) |
| 32 | * Tty : a multi-tty terminal |
| 33 | Tty(name, pbase, channel_size, nb_channel) |
| 34 | * Fbf : a frame-buffer |
| 35 | Fbf(name, pbase, channel_size, nb_channel) |
| 36 | * RAM : a RAM memory |
| 37 | RAM(name, pbase, size) |
| 38 | * ROM : a ROM memory, we must have one at 0xbfc00000 address with the a minimal size of 0x1000 |
| 39 | ROM(name, pbase, size) |
| 40 | * !MwmrCoprocTaskWrapper : declare a coproc which is able to simulate the a C task by wrapping it in a SystemC coproc. The coproc (a SystemC module) will only be generated if a task have been mapped |
| 41 | !MwmrCoprocTaskWrapper(name, pbase, channel_size, nb_channel, sc_name) |
| 42 | |
| 43 | The parameters are the following: |
| 44 | |
| 45 | - name : name of the component |
| 46 | - pbase : physical base address of the component |
| 47 | - channel_size : the size of one channel, or the size of the component if it doesn't support multiple channel |
| 48 | - nb_channel : number of channel, set to '1' if no channel |
| 49 | - size : size of the memory |
| 50 | - sc_name : the SystemC name of the coproc |
| 51 | |
| 52 | == Irqs == |
| 53 | |
| 54 | This is a special component able who is able to describe the the routing of the interrupt line. |
| 55 | {{{ |
| 56 | Irq(proc_id, cluster_id, icu_irq_id, peri, channel_id) |
| 57 | }}} |
| 58 | |
| 59 | - `proc_id` : the proc_id at which the irq is attached |
| 60 | - `icu_id` : the icu_id line at which the irq is attached |
| 61 | - `cluster_id` : the cluster_id which contain the proc, icu and the peri |
| 62 | - `peri` : the class of the peripheral from which the request is sent |
| 63 | - `channel_id` : the channel_id of the peripheral |
| 64 | |
| 65 | Here's an example for a one cluster platform: |
| 66 | |
| 67 | Another example for a multi-cluster platform: |