| 1 | [wiki:Component SocLib Components General Index] |
| 2 | |
| 3 | !!!! UNDER CONSTRUCTION !!!! |
| 4 | |
| 5 | = ST231 Processor Functional Description = |
| 6 | |
| 7 | This hardware component is a MicroBlaze processor core as described in [www.xilinx.com/ise/embedded/mb_ref_guide.pdf the Xilinx documentation]. |
| 8 | Note that the 9.2 version of ISE contains a pretty major evolution of the MicroBlaze that integrates a MMU, but this is not the version available within SoCLib (at least yet!). |
| 9 | This component is an ISS, which should be wrapped with an [wiki:Component/IssWrapper IssWrapper] for integration into a complete platform. |
| 10 | |
| 11 | This instruction set simulator acts as a slave to the IssWrapper and is organised identically to the |
| 12 | other Isses available within the library. |
| 13 | Currently, the execution timings are pretty rough, and are typically one cycle per instruction. |
| 14 | |
| 15 | The support for symetric and asymetric multiprocessing is hardwired using the `fsl` feature of the MicroBlaze. |
| 16 | The processor number is given at instanciation time, and accessible through `get` on `fsl0`. |
| 17 | Using other `fsl`s will lead to an abort. |
| 18 | |
| 19 | = Component definition = |
| 20 | |
| 21 | Available in source:trunk/soclib/soclib/lib/metadata/microblaze.sd |
| 22 | |
| 23 | == Usage == |
| 24 | |
| 25 | MicroBlaze has no parameters. |
| 26 | {{{ |
| 27 | Uses( 'microblaze') |
| 28 | }}} |
| 29 | |
| 30 | = Microblaze Processor ISS Implementation = |
| 31 | |
| 32 | The implementation is in |
| 33 | * source:trunk/soclib/soclib/lib/src/iss/microblaze.h |
| 34 | This defines the resources associated to the MicroBlaze along with a few |
| 35 | minimal helper functions (or methods, as they call them) |
| 36 | * source:trunk/soclib/soclib/lib/src/iss/microblaze.cpp |
| 37 | This is a large switch (as opposed to calling insn execution through |
| 38 | pointers to functions) and a few macros, as it is overall not worse to |
| 39 | traverse a switch than to move from tag to tag, seen the context necessary |
| 40 | to the execution of one instruction (at least in the MicroBlaze case). |
| 41 | |
| 42 | It is possible to compile a version of the MicroBlaze that issues the instruction |
| 43 | address along with the instruction being executed by defining `MBDEBUG` at `1` line |
| 44 | 35 of source:trunk/soclib/soclib/lib/src/iss/microblaze.cpp |
| 45 | This is quite useful to check that the processor is really interpreting correctly a |
| 46 | sequence of instructions. |
| 47 | The MicroBlaze model is now able to connect to the GDB stub, so it is possible to |
| 48 | use GDB for debugging software running on it. |
| 49 | |
| 50 | == Template parameters == |
| 51 | |
| 52 | This component has no template parameters. |
| 53 | |
| 54 | == Constructor parameters == |
| 55 | |
| 56 | {{{ |
| 57 | MicroblazeIss( |
| 58 | sc_module_name name, // Instance Name |
| 59 | int ident); // processor id |
| 60 | }}} |
| 61 | |
| 62 | == Visible registers == |
| 63 | |
| 64 | I'm not sure to understand what this means, ... |
| 65 | |
| 66 | == Interrupts == |
| 67 | |
| 68 | There is a single interrupt line on the MicroBlaze, so all the handling is |
| 69 | software based. |
| 70 | |
| 71 | == Ports == |
| 72 | |
| 73 | None, They are provided by the `IssWrapper`. |