Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "systemc.h"
- SC_MODULE(Processor1) {
- sc_out<int> state;
- sc_out<bool> error_flag;
- sc_out<bool> led1;
- sc_out<bool> led2;
- //Led3 obslugiwany jest przez moduł!
- sc_out<bool> led4;
- sc_out<bool> led5;
- sc_out<bool> ledError;
- int sw = 0;
- bool programs[6] = { false };
- bool showedConfirm;
- bool errorFlag;
- int index; // Zmienna pomocnicza
- void task1() {
- while (1) {
- cin >> sw; // Czeka na input
- if (sw > 0 || sw < 7) {
- index = sw - 1;
- showedConfirm = false;
- programs[index] = !programs[index];
- errorFlag = false;
- int error = 0;
- for (int i = 0; i < 6; i++) {
- if (programs[i] == true)
- ++error;
- if (error > 1)
- errorFlag = true;
- }
- if (programs[index] == false) // Zmiana na minus!
- sw = -sw;
- ledError.write(errorFlag);
- error_flag.write(errorFlag);
- state.write(sw); // Zapis!
- wait(50, SC_NS);
- if (sw == 1 && !showedConfirm) {
- led1.write(true);
- wait(10, SC_NS);
- showedConfirm = true;
- cout << "Wlaczony 1" << endl;
- } else if (sw == -1 && !showedConfirm) {
- led1.write(false);
- wait(10, SC_NS);
- showedConfirm = true;
- cout << "Wylaczony 1" << endl;
- } else if (errorFlag && !showedConfirm) {
- showedConfirm = true;
- cout << "CPU1 ERROR" << endl;
- }
- }
- }
- }
- void task2() {
- while (1) {
- wait(3, SC_NS);
- if (sw == 2 && !showedConfirm) {
- showedConfirm = true;
- led2.write(true);
- wait(10, SC_NS);
- cout << "Wlaczony 2" << endl;
- } else if (sw == -2 && !showedConfirm) {
- showedConfirm = true;
- led2.write(false);
- wait(10, SC_NS);
- cout << "Wylaczony 2" << endl;
- }
- }
- }
- void task4() {
- while (1) {
- wait(3, SC_NS);
- if (sw == 4 && !showedConfirm) {
- showedConfirm = true;
- led4.write(true);
- wait(10, SC_NS);
- cout << "Wlaczony 4" << endl;
- } else if (sw == -4 && !showedConfirm) {
- showedConfirm = true;
- led4.write(false);
- wait(10, SC_NS);
- cout << "Wylaczony 4" << endl;
- }
- }
- }
- void task5() {
- while (1) {
- wait(3, SC_NS);
- if (sw == 5 && !showedConfirm) {
- showedConfirm = true;
- led5.write(true);
- wait(10, SC_NS);
- cout << "Wlaczony 5" << endl;
- } else if (sw == -5 && !showedConfirm) {
- showedConfirm = true;
- led5.write(false);
- wait(10, SC_NS);
- cout << "Wylaczony 5" << endl;
- }
- }
- }
- SC_CTOR(Processor1) {
- SC_THREAD(task1);
- SC_THREAD(task2);
- SC_THREAD(task4);
- SC_THREAD(task5);
- showedConfirm = false;
- errorFlag = false;
- index = 0;
- }
- };
- SC_MODULE(Processor2) {
- sc_in<int> state;
- sc_in<bool> error_flag;
- sc_out<bool> led6;
- int lastState = 0;
- void task6() {
- while (1) {
- wait(3, SC_NS);
- if (lastState != state) {
- if (state == 6) {
- led6.write(true);
- wait(10, SC_NS);
- cout << "Wlaczony 6" << endl;
- }
- if (state == -6) {
- led6.write(false);
- wait(10, SC_NS);
- cout << "Wylaczony 6" << endl;
- }
- if (error_flag) {
- cout << "CPU2 ERROR" << endl;
- }
- lastState = state;
- }
- }
- }
- SC_CTOR(Processor2) {
- SC_THREAD(task6);
- }
- };
- SC_MODULE(Module) {
- sc_in<int> state;
- sc_in<bool> error_flag;
- sc_out<bool> led3;
- int lastState = 0;
- void task3() {
- while (1) {
- wait(3, SC_NS);
- if (lastState != state) {
- if (state == 3) {
- led3.write(true);
- wait(10, SC_NS);
- cout << "Wlaczony 3" << endl;
- }
- if (state == -3) {
- led3.write(false);
- wait(10, SC_NS);
- cout << "Wylaczony 3" << endl;
- }
- if (error_flag) {
- cout << "ERROR FROM MODULE" << endl;
- }
- lastState = state;
- }
- }
- }
- SC_CTOR(Module) {
- SC_THREAD(task3);
- }
- };
- SC_MODULE(Bus) {
- sc_signal<int> state;
- sc_signal<bool> error_flag;
- sc_signal<bool> led1;
- sc_signal<bool> led2;
- sc_signal<bool> led3;
- sc_signal<bool> led4;
- sc_signal<bool> led5;
- sc_signal<bool> led6;
- sc_signal<bool> ledError;
- SC_CTOR(Bus) {
- }
- };
- SC_MODULE(Monitor) {
- sc_in<bool> led1;
- sc_in<bool> led2;
- sc_in<bool> led3;
- sc_in<bool> led4;
- sc_in<bool> led5;
- sc_in<bool> led6;
- sc_in<bool> ledError;
- void show() {
- system("cls");
- cout << "1: " << led1 << endl;
- cout << "2: " << led2 << endl;
- cout << "3: " << led3 << endl;
- cout << "4: " << led4 << endl;
- cout << "5: " << led5 << endl;
- cout << "6: " << led6 << endl;
- cout << "ERROR: " << ledError << endl;
- }
- SC_CTOR(Monitor) {
- SC_METHOD(show);
- sensitive << led1;
- sensitive << led2;
- sensitive << led3;
- sensitive << led4;
- sensitive << led5;
- sensitive << led6;
- sensitive << ledError;
- }
- };
- int sc_main(int argc, char** argv) {
- Monitor m("monitor"); // Monitor
- Bus bus("b"); // Bus do przesyłu danych
- Processor1 p1("proc1"); // CPU1
- Processor2 p2("proc2"); // CPU2
- Module mod("module"); // Module
- //LEDsl
- p1.led1(bus.led1);
- p1.led2(bus.led2);
- p1.led4(bus.led4);
- p1.led5(bus.led5);
- p1.ledError(bus.ledError);
- mod.led3(bus.led3);
- p2.led6(bus.led6);
- m.led1(bus.led1);
- m.led2(bus.led2);
- m.led4(bus.led4);
- m.led5(bus.led5);
- m.ledError(bus.ledError);
- m.led3(bus.led3);
- m.led6(bus.led6);
- p1.state(bus.state);
- p2.state(bus.state);
- mod.state(bus.state);
- p1.error_flag(bus.error_flag);
- p2.error_flag(bus.error_flag);
- mod.error_flag(bus.error_flag);
- sc_start();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement