/* Chooses the calculation function wanted. Accepts operand 1, operand 2 and a pointer to the operator. Returns the value calculated by the operating functions. */ float calculate(float n1, float n2, int *op) { switch (*op) { // compares to the value of the pointer to the operator. case '+': return plus1(n1,n2); break; case '-': return minus1(n1,n2); break; case '/': return divide1(n1,n2); break; case '*': return multiply1(n1,n2); break; case '^': return xor1(n1,n2); break; case '|': return or1(n1,n2); break; case '&': return and1(n1,n2); break; default: break; } }
void PrintArray(){ Lemon le1(1.4), le2(4.3), le3(2.1); Orange or1(.9), or2(0.2), or3(0.6); CitrusFruit *cfarr[] = {&or1, &le1, &or2, &le2, &or3, &le3}; for(int i = 0; i < 6; i++) PrintTheFruits(*(cfarr[i])); }
int sc_main (int argc , char *argv[]) { sc_clock clock; sc_signal<bool> reset; sc_signal<int> stimulus_line1; sc_signal<unsigned int> stimulus_line2; sc_signal_bool_vector stimulus_line3; sc_signal_bool_vector stimulus_line4; sc_signal_bool_vector stimulus_line5; sc_signal<bool> input_valid; sc_signal<bool> output_valid; sc_signal<int> result_line1; sc_signal<unsigned int> result_line2; sc_signal_bool_vector result_line3; sc_signal_bool_vector result_line4; sc_signal_bool_vector result_line5; stimulus stimulus1("stimulus_block", clock, reset, stimulus_line1, stimulus_line2, stimulus_line3, stimulus_line4, stimulus_line5, input_valid); or_1 or1 ( "process_body", clock, reset, stimulus_line1, stimulus_line2, stimulus_line3, stimulus_line4, stimulus_line5, input_valid, result_line1, result_line2, result_line3, result_line4, result_line5, output_valid); display display1 ( "display", clock, result_line1, result_line2, result_line3, result_line4, result_line5, output_valid); sc_start(); return 0; }
int sc_main(int argc, char *argv[]) { sc_signal<bool> or_1,or_2,and_3,and_4,and_5,and_6,nor_7,CO,SUM,A,B,CI; OR2 or1("or1"); OR2 or8("or8"); OR3 or2("or2"); AND2 and3("and3"); AND2 and4("and4"); AND2 and5("and5"); AND3 and6("and6"); NOR2 nor7("nor7"); INV inv9("inv9"); or1.a(A); or1.b(B); or1.o(or_1); or2.a(A); or2.b(B); or2.c(CI); or2.o(or_2); and3.a(or_1); and3.b(CI); and3.o(and_3); and4.a(A); and4.b(B); and4.o(and_4); and5.a(nor_7); and5.b(or_2); and5.o(and_5); and6.a(A); and6.b(B); and6.c(CI); and6.o(and_6); nor7.a(and_3); nor7.b(and_4); nor7.o(nor_7); or8.a(and_5); or8.b(and_6); or8.o(SUM); inv9.a(nor_7); inv9.o(CO); //sc_initialize(); // initialize the simulation engine // create the file to store simulation results sc_trace_file *tf = sc_create_vcd_trace_file("trace"); // 4: specify the signals we’d like to record in the trace file sc_trace(tf, A, "A"); sc_trace(tf, B, "B"); sc_trace(tf, CI, "CI"); sc_trace(tf, SUM, "SUM"); sc_trace(tf, CO, "CO"); // 5: put values on the input signals A=0; B=0; CI=0; // initialize the input values sc_start(10, SC_PS); for( int i = 0 ; i < 8 ; i++ ) // generate all input combinations { A = ((i & 0x1) != 0); // value of A is the bit0 of i B = ((i & 0x2) != 0); // value of B is the bit1 of i CI = ((i & 0x4) != 0); // value of CI is the bit2 of i sc_start(10, SC_PS); // evaluate } sc_close_vcd_trace_file(tf); // close file and we’re done return 0; }