Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- ////////////////////////////////////////////////////////////////////
- // Part 1 : Include files //
- ////////////////////////////////////////////////////////////////////
- #include "mips32.h"
- #include "vci_xcache_wrapper.h"
- #include "vci_xicu.h"
- #include "vci_vgmn.h"
- #include "vci_ram.h"
- #include "vci_rom.h"
- #include "mapping_table.h"
- #include "vci_multi_tty.h"
- int _main(int argc, char *argv[])
- {
- using namespace sc_core;
- // Avoid repeating these everywhere
- using soclib::common::IntTab;
- using soclib::common::Segment;
- typedef soclib::common::Mips32ElIss Processor;
- // Define our VCI parameters
- typedef soclib::caba::VciParams<4,9,32,1,1,1,8,1,1,1> vci_param;
- ////////////////////////////////////////////////////////////////////
- // Part 2 : Mapping table //
- ////////////////////////////////////////////////////////////////////
- soclib::common::MappingTable maptab(32, IntTab(8), IntTab(8), 0xf0000000);
- maptab.add(Segment("xicu", 0xd2200000, 0x00001000, IntTab(3), false));
- maptab.add(Segment("tty", 0xd0200000, 0x00000040, IntTab(2), false));
- maptab.add(Segment("ram", 0x70000000, 0x00100000, IntTab(1), false));
- maptab.add(Segment("bootrom", 0xbfc00000, 0x00001000, IntTab(0), false));
- maptab.add(Segment("datarom", 0x60000000, 0x00100000, IntTab(0), false));
- ////////////////////////////////////////////////////////////////////
- // Part 3 : signals //
- ////////////////////////////////////////////////////////////////////
- sc_clock signal_clk("signal_clk");
- sc_signal<bool> signal_resetn("signal_resetn");
- sc_signal<bool> signal_cpu_it[Processor::n_irq];
- sc_signal<bool> signal_tty_irq0("signal_tty_irq0");
- soclib::caba::VciSignals<vci_param> signal_vci_proc("signal_vci_proc");
- soclib::caba::VciSignals<vci_param> signal_vci_xicu("signal_vci_xicu");
- soclib::caba::VciSignals<vci_param> signal_vci_tty("signal_vci_tty");
- soclib::caba::VciSignals<vci_param> signal_vci_ram("signal_vci_ram");
- soclib::caba::VciSignals<vci_param> signal_vci_rom("signal_vci_rom");
- ////////////////////////////////////////////////////////////////////
- // Part 4 : instances //
- ////////////////////////////////////////////////////////////////////
- soclib::common::Loader loader("mutekh/kernel-soclib-mips32el.out");
- soclib::caba::VciXcacheWrapper<vci_param, Processor> cpu("cpu", 0, maptab, IntTab(0), 1, 8, 4, 1, 8, 4);
- soclib::caba::VciXicu<vci_param> vcixicu("vcixicu", maptab, IntTab(3), 4, 0, 0, 1);
- soclib::caba::VciMultiTty<vci_param> vcitty("vcitty", IntTab(2), maptab, "vcitty0", NULL);
- soclib::caba::VciRam<vci_param> ram("ram", IntTab(1), maptab, loader);
- soclib::caba::VciRom<vci_param> rom("rom", IntTab(0), maptab, loader);
- soclib::caba::VciVgmn<vci_param> vgmn("vgmn", maptab, 1, 4, 2, 8);
- ////////////////////////////////////////////////////////////////////
- // Part 5 : netlist //
- ////////////////////////////////////////////////////////////////////
- cpu.p_clk(signal_clk);
- cpu.p_resetn(signal_resetn);
- for ( size_t irq=0; irq<Processor::n_irq; ++irq )
- cpu.p_irq[irq](signal_cpu_it[irq]);
- cpu.p_vci(signal_vci_proc);
- vcixicu.p_clk(signal_clk);
- vcixicu.p_resetn(signal_resetn);
- vcixicu.p_vci(signal_vci_xicu);
- vcixicu.p_irq[0](signal_cpu_it[0]);
- //sc_trace_file * my_trace_file;
- //my_trace_file = sc_create_vcd_trace_file("system_trace");
- //sc_trace(my_trace_file, signal_vci_xicu, "test");
- rom.p_clk(signal_clk);
- rom.p_resetn(signal_resetn);
- rom.p_vci(signal_vci_rom);
- ram.p_clk(signal_clk);
- ram.p_resetn(signal_resetn);
- ram.p_vci(signal_vci_ram);
- vcitty.p_clk(signal_clk);
- vcitty.p_resetn(signal_resetn);
- vcitty.p_vci(signal_vci_tty);
- vcitty.p_irq[0](signal_tty_irq0);
- vgmn.p_clk(signal_clk);
- vgmn.p_resetn(signal_resetn);
- vgmn.p_to_initiator[0](signal_vci_proc);
- vgmn.p_to_target[0](signal_vci_rom);
- vgmn.p_to_target[1](signal_vci_ram);
- vgmn.p_to_target[2](signal_vci_tty);
- vgmn.p_to_target[3](signal_vci_xicu);
- sc_start(sc_core::sc_time(0, SC_NS));
- signal_resetn = false;
- sc_start(sc_core::sc_time(1, SC_NS));
- signal_resetn = true;
- ////////////////////////////////////////////////////////////////////
- // Part 6 : simulate //
- ////////////////////////////////////////////////////////////////////
- sc_start();
- return EXIT_SUCCESS;
- }
- int sc_main (int argc, char *argv[])
- {
- try {
- return _main(argc, argv);
- } catch (std::exception &e) {
- std::cout << e.what() << std::endl;
- } catch (...) {
- std::cout << "Unknown exception occured" << std::endl;
- throw;
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement