Advertisement
Guest User

Untitled

a guest
Jan 21st, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.40 KB | None | 0 0
  1. #include "systemc.h"
  2.  
  3. SC_MODULE(Processor1) {
  4. sc_out<int> state;
  5. sc_out<bool> error_flag;
  6. sc_out<bool> led1;
  7. sc_out<bool> led2;
  8. //Led3 obslugiwany jest przez moduł!
  9. sc_out<bool> led4;
  10. sc_out<bool> led5;
  11. sc_out<bool> ledError;
  12.  
  13. int sw = 0;
  14. bool programs[6] = { false };
  15. bool showedConfirm;
  16. bool errorFlag;
  17.  
  18. int index; // Zmienna pomocnicza
  19.  
  20. void task1() {
  21.  
  22. while (1) {
  23. cin >> sw; // Czeka na input
  24. if (sw > 0 || sw < 7) {
  25. index = sw - 1;
  26. showedConfirm = false;
  27. programs[index] = !programs[index];
  28. errorFlag = false;
  29. int error = 0;
  30.  
  31. for (int i = 0; i < 6; i++) {
  32. if (programs[i] == true)
  33. ++error;
  34. if (error > 1)
  35. errorFlag = true;
  36. }
  37.  
  38. if (programs[index] == false) // Zmiana na minus!
  39. sw = -sw;
  40.  
  41. ledError.write(errorFlag);
  42. error_flag.write(errorFlag);
  43. state.write(sw); // Zapis!
  44. wait(50, SC_NS);
  45.  
  46. if (sw == 1 && !showedConfirm) {
  47. led1.write(true);
  48. wait(10, SC_NS);
  49. showedConfirm = true;
  50. cout << "Wlaczony 1" << endl;
  51. } else if (sw == -1 && !showedConfirm) {
  52. led1.write(false);
  53. wait(10, SC_NS);
  54. showedConfirm = true;
  55. cout << "Wylaczony 1" << endl;
  56. } else if (errorFlag && !showedConfirm) {
  57. showedConfirm = true;
  58. cout << "CPU1 ERROR" << endl;
  59. }
  60. }
  61. }
  62. }
  63.  
  64. void task2() {
  65. while (1) {
  66. wait(3, SC_NS);
  67. if (sw == 2 && !showedConfirm) {
  68. showedConfirm = true;
  69. led2.write(true);
  70. wait(10, SC_NS);
  71. cout << "Wlaczony 2" << endl;
  72. } else if (sw == -2 && !showedConfirm) {
  73. showedConfirm = true;
  74. led2.write(false);
  75. wait(10, SC_NS);
  76. cout << "Wylaczony 2" << endl;
  77. }
  78. }
  79. }
  80.  
  81. void task4() {
  82. while (1) {
  83. wait(3, SC_NS);
  84. if (sw == 4 && !showedConfirm) {
  85. showedConfirm = true;
  86. led4.write(true);
  87. wait(10, SC_NS);
  88. cout << "Wlaczony 4" << endl;
  89. } else if (sw == -4 && !showedConfirm) {
  90. showedConfirm = true;
  91. led4.write(false);
  92. wait(10, SC_NS);
  93. cout << "Wylaczony 4" << endl;
  94. }
  95. }
  96. }
  97.  
  98. void task5() {
  99.  
  100. while (1) {
  101. wait(3, SC_NS);
  102. if (sw == 5 && !showedConfirm) {
  103. showedConfirm = true;
  104. led5.write(true);
  105. wait(10, SC_NS);
  106. cout << "Wlaczony 5" << endl;
  107. } else if (sw == -5 && !showedConfirm) {
  108. showedConfirm = true;
  109. led5.write(false);
  110. wait(10, SC_NS);
  111. cout << "Wylaczony 5" << endl;
  112. }
  113. }
  114. }
  115.  
  116. SC_CTOR(Processor1) {
  117. SC_THREAD(task1);
  118. SC_THREAD(task2);
  119. SC_THREAD(task4);
  120. SC_THREAD(task5);
  121.  
  122. showedConfirm = false;
  123. errorFlag = false;
  124. index = 0;
  125. }
  126. };
  127.  
  128. SC_MODULE(Processor2) {
  129. sc_in<int> state;
  130. sc_in<bool> error_flag;
  131. sc_out<bool> led6;
  132.  
  133. int lastState = 0;
  134.  
  135. void task6() {
  136. while (1) {
  137. wait(3, SC_NS);
  138. if (lastState != state) {
  139. if (state == 6) {
  140. led6.write(true);
  141. wait(10, SC_NS);
  142. cout << "Wlaczony 6" << endl;
  143. }
  144. if (state == -6) {
  145. led6.write(false);
  146. wait(10, SC_NS);
  147. cout << "Wylaczony 6" << endl;
  148. }
  149. if (error_flag) {
  150. cout << "CPU2 ERROR" << endl;
  151. }
  152. lastState = state;
  153. }
  154. }
  155. }
  156.  
  157. SC_CTOR(Processor2) {
  158. SC_THREAD(task6);
  159. }
  160. };
  161.  
  162. SC_MODULE(Module) {
  163. sc_in<int> state;
  164. sc_in<bool> error_flag;
  165. sc_out<bool> led3;
  166.  
  167. int lastState = 0;
  168.  
  169. void task3() {
  170. while (1) {
  171. wait(3, SC_NS);
  172. if (lastState != state) {
  173. if (state == 3) {
  174. led3.write(true);
  175. wait(10, SC_NS);
  176. cout << "Wlaczony 3" << endl;
  177. }
  178. if (state == -3) {
  179. led3.write(false);
  180. wait(10, SC_NS);
  181. cout << "Wylaczony 3" << endl;
  182. }
  183. if (error_flag) {
  184. cout << "ERROR FROM MODULE" << endl;
  185. }
  186. lastState = state;
  187. }
  188. }
  189. }
  190.  
  191. SC_CTOR(Module) {
  192. SC_THREAD(task3);
  193. }
  194. };
  195.  
  196. SC_MODULE(Bus) {
  197. sc_signal<int> state;
  198. sc_signal<bool> error_flag;
  199. sc_signal<bool> led1;
  200. sc_signal<bool> led2;
  201. sc_signal<bool> led3;
  202. sc_signal<bool> led4;
  203. sc_signal<bool> led5;
  204. sc_signal<bool> led6;
  205. sc_signal<bool> ledError;
  206.  
  207. SC_CTOR(Bus) {
  208.  
  209. }
  210. };
  211.  
  212. SC_MODULE(Monitor) {
  213. sc_in<bool> led1;
  214. sc_in<bool> led2;
  215. sc_in<bool> led3;
  216. sc_in<bool> led4;
  217. sc_in<bool> led5;
  218. sc_in<bool> led6;
  219. sc_in<bool> ledError;
  220.  
  221. void show() {
  222. system("cls");
  223. cout << "1: " << led1 << endl;
  224. cout << "2: " << led2 << endl;
  225. cout << "3: " << led3 << endl;
  226. cout << "4: " << led4 << endl;
  227. cout << "5: " << led5 << endl;
  228. cout << "6: " << led6 << endl;
  229. cout << "ERROR: " << ledError << endl;
  230. }
  231.  
  232. SC_CTOR(Monitor) {
  233. SC_METHOD(show);
  234. sensitive << led1;
  235. sensitive << led2;
  236. sensitive << led3;
  237. sensitive << led4;
  238. sensitive << led5;
  239. sensitive << led6;
  240. sensitive << ledError;
  241. }
  242. };
  243.  
  244. int sc_main(int argc, char** argv) {
  245. Monitor m("monitor"); // Monitor
  246. Bus bus("b"); // Bus do przesyłu danych
  247. Processor1 p1("proc1"); // CPU1
  248. Processor2 p2("proc2"); // CPU2
  249. Module mod("module"); // Module
  250.  
  251. //LEDsl
  252. p1.led1(bus.led1);
  253. p1.led2(bus.led2);
  254. p1.led4(bus.led4);
  255. p1.led5(bus.led5);
  256. p1.ledError(bus.ledError);
  257. mod.led3(bus.led3);
  258. p2.led6(bus.led6);
  259. m.led1(bus.led1);
  260. m.led2(bus.led2);
  261. m.led4(bus.led4);
  262. m.led5(bus.led5);
  263. m.ledError(bus.ledError);
  264. m.led3(bus.led3);
  265. m.led6(bus.led6);
  266.  
  267. p1.state(bus.state);
  268. p2.state(bus.state);
  269. mod.state(bus.state);
  270.  
  271. p1.error_flag(bus.error_flag);
  272. p2.error_flag(bus.error_flag);
  273. mod.error_flag(bus.error_flag);
  274.  
  275. sc_start();
  276. return 0;
  277. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement