| Version 4 (modified by , 19 years ago) (diff) | 
|---|
Platform Compilation
Prerequisites
We'll assume your SoclibConf is valid.
In order to compile a platform with soclib-cc, you need:
- Your 'top-cell' SystemC netlist,
- A platform description file, listing all used components and their parameters.
Your 'top-cell' file should
- Include all soclib component definitions
- Paths are relative to systemc/include
 
- Define a sc_main,
- Create the components, signals, ...
- Connect them
- Run simulation.
Your platform description should be a python-parseable file, defining
variable todo', instance of type Platform'. Arguments passed to
`Platform' are the used components, and you custom files (You may want
to link in more than one custom .cc file).
Example
I will only use a mapping table, instanciate it, and compile a platform:
File top.cc:
#include <iostream>
#include <systemc.h>
#include "common/mapping_table.h"
int sc_main(int argc, char **argv)
{
    using soclib::common::IntTab;
    using soclib::common::MappingTable;
    using soclib::common::Segment;
    MappingTable mt(32, IntTab(2), IntTab(2), 0x300000);
    mt.add( Segment("reset", 0xbfc00000, 0x800,  IntTab(0), true) );
    mt.add( Segment("excep", 0x80000080, 0x100,  IntTab(0), true) );
    mt.add( Segment("data",  0x40000000, 0x4000, IntTab(1), true) );
    mt.add( Segment("code",  0x04000000, 0x4000, IntTab(2), true) );
    std::cout
        << "Mapping table is:" << std::endl
        << mt << std::endl;
    return 0;
}
File platform_desc:
todo = Platform(
    Uses('mapping_table'),
    Source('top.cc'),
)
Now the compilation:
$ soclib-cc -p platform_desc soclib-cc: Entering directory `/Users/nipo/labo/soclib/rose/soclib' CxxSource gen repos/release/soclib::common::MappingTable_mapping_table.cc CreateDir gen repos/release CxxSource gen repos/release/soclib::common::AddressDecodingTable_input_t=unsigned_int,output_t=bool_address_decoding_table.cc CxxSource gen repos/release/soclib::common::AddressDecodingTable_input_t=unsigned_int,output_t=int_address_decoding_table.cc CxxSource gen repos/release/soclib::common::AddressMaskingTable_data_t=unsigned_int_address_masking_table.cc CxxSource gen repos/release/soclib::common::Segment_segment.cc CxxCompile compile repos/release/soclib::common::MappingTable_mapping_table.o CxxCompile compile repos/release/soclib::common::AddressDecodingTable_input_t=unsigned_int,output_t=bool_address_decoding_table.o CxxCompile compile repos/release/soclib::common::AddressDecodingTable_input_t=unsigned_int,output_t=int_address_decoding_table.o CxxCompile compile repos/release/soclib::common::AddressMaskingTable_data_t=unsigned_int_address_masking_table.o CxxCompile compile repos/release/soclib::common::Segment_segment.o CxxCompile compile top.o CxxLink link system.x $
And running:
$ ./system.x
             SystemC 2.2.05jun06_beta --- Aug 29 2006 16:42:34
        Copyright (c) 1996-2006 by all Contributors
                    ALL RIGHTS RESERVED
Mapping table is:
Mapping table: ad:(2)
 <Segment "reset": @0xbfc00000, 0x800 bytes, (0), cached>
 <Segment "excep": @0x80000080, 0x100 bytes, (0), cached>
 <Segment "data": @0x40000000, 0x4000 bytes, (1), cached>
 <Segment "code": @0x4000000, 0x4000 bytes, (2), cached>
$ 
For complete examples, watch in `/path/to/soclib/platforms/'.


