#include "fractal_processor.h"
#include "simple_memory.h"
#include "AXI_bus.h"
#include "simple_LCD.h"
#include "MyDMAC.h"
#include "Mybrot.h"
SC_MODULE(SYSTEM) {
AXI_SIGNALS slave_wire[6];
AXI_SIGNALS master_wire[2];
sc_clock clk;
sc_signal <bool> brot_interrupt;
sc_signal <bool> dmac_interrupt;
fractal_processor* processor;
simple_LCD* my_LCD;
simple_memory* memory;
MyDMAC* dmac;
AXI_BUS* bus;
Mybrot *mybrot;
SC_CTOR(SYSTEM) {
processor = new fractal_processor("processor", 1);
my_LCD = new simple_LCD("myLCD", FRAME_BUFF_BASE, SCRN_WIDTH, SCRN_HEIGHT);
memory = new simple_memory("memory", RESULT_BUFF_BASE, RESULT_BUFF_SIZE);
dmac = new MyDMAC("DMAC", 2, DMAC_BASE);
bus = new AXI_BUS("Bus", 2, 4);
mybrot = new Mybrot("Brot", BROT_BASE, BROT_SIZE);
bus->clk(clk);
processor->m_interface->clk(clk);
processor->brot_interrupt(brot_interrupt);
processor->dmac_interrupt(dmac_interrupt);
memory->s_if->clk(clk);
my_LCD->s_if->clk(clk);
dmac->s_if->clk(clk);
dmac->m_if->clk(clk);
dmac->interrupt(dmac_interrupt);
mybrot->s_if->clk(clk);
mybrot->interrupt(brot_interrupt);
bind_port_signal(&(dmac->m_if->ports), master_wire[1]);
bind_port_signal(&(processor->m_interface->ports), master_wire[0]);
bind_port_signal(&(bus->mPorts[0]), master_wire[0]);
bind_port_signal(&(bus->mPorts[1]), master_wire[1]);
bind_port_signal(&(my_LCD->s_if->ports), slave_wire[0]);
bind_port_signal(&(memory->s_if->ports), slave_wire[1]);
bind_port_signal(&(dmac->s_if->ports), slave_wire[2]);
bind_port_signal(&(mybrot->s_if->ports), slave_wire[3]);
bind_port_signal(&(bus->sPorts[0]), slave_wire[0]);
bind_port_signal(&(bus->sPorts[1]), slave_wire[1]);
bind_port_signal(&(bus->sPorts[2]), slave_wire[2]);
bind_port_signal(&(bus->sPorts[3]), slave_wire[3]);
}
};