#ifndef __SYSC_CPU_MUX_HPP #define __SYSC_CPU_MUX_HPP #include "systemc.h" #include "../cpu_and/cpu_and.hpp" #include "../cpu_or/cpu_or.hpp" #include "../cpu_not/cpu_not.hpp" SC_MODULE (cpu_mux) { //Inputs sc_in in_a; sc_in in_b; sc_in in_sel; sc_out out_c; cpu_and *and1, *and2; cpu_or *or1; cpu_not *not1; sc_signal sig_and1or1; sc_signal sig_and2or1; sc_signal sig_not1and1; sc_signal sig_out1,conn1; void do_mux() { if (in_sel.read() == 0) { out_c.write(in_a.read()); } if (in_sel.read() == 1) { out_c.write(in_b.read()); } } SC_CTOR(cpu_mux) { and1 = new cpu_and("AND1"); and2 = new cpu_and("AND2"); or1 = new cpu_or("OR1"); not1 = new cpu_not("NOT1"); and1->in_a(in_a); and1->in_b(sig_not1and1); and1->out_c(sig_and1or1); //and1->out_c(out_c); not1->in_a(in_sel); not1->out_b(sig_not1and1); //not1->out_b(out_c); and2->in_a(in_b); and2->in_b(in_sel); and2->out_c(sig_and2or1); //and2->out_c(out_c); or1->in_a(sig_and1or1); or1->in_b(sig_and2or1); //or1->in_a(and1->out_c); //or1->in_b(and2->out_c); or1->out_c(out_c); //SC_METHOD(do_mux); //sensitive << in_a << in_b << in_sel; } }; #endif