#ifndef __SYSC_CPU_FULL_ADDER_HPP #define __SYSC_CPU_FULL_ADDER_HPP #include "systemc.h" #include "../cpu_and/cpu_and.hpp" #include "../cpu_or/cpu_or.hpp" #include "../cpu_not/cpu_not.hpp" #include "../cpu_half_adder/cpu_half_adder.hpp" /* SC_MODULE (cpu_and2) { sc_in in_a; sc_in in_b; sc_port,2> out_c; void do_and2() { //out_c[0]->write( in_a.read() && in_b.read() ); for (int i=0; iwrite(in_a.read() && in_b.read()); } } SC_CTOR(cpu_and2) { SC_METHOD(do_and2); sensitive << in_a << in_b; } }; */ SC_MODULE (cpu_full_adder) { //Inputs sc_in in_a; sc_in in_b; sc_in in_c; sc_out out_sum; sc_out out_carry; cpu_half_adder *halfadd1,*halfadd2; cpu_or *or1; sc_signal sig_half1half2, sig_half1or1, sig_half2or1; void do_full_adder() { /* 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_full_adder) { halfadd1 = new cpu_half_adder("HALFADD1"); halfadd2 = new cpu_half_adder("HALFADD2"); or1 = new cpu_or("OR1"); halfadd1->in_a(in_a); halfadd1->in_b(in_b); halfadd1->out_sum(sig_half1half2); halfadd1->out_carry(sig_half1or1); halfadd2->in_a(sig_half1half2); halfadd2->in_b(in_c); halfadd2->out_sum(out_sum); halfadd2->out_carry(sig_half2or1); or1->in_a(sig_half1or1); or1->in_b(sig_half2or1); or1->out_c(out_carry); //SC_METHOD(do_dmux); //sensitive << in_a << in_b << in_sel; } }; #endif