|
1 | 1 | #include <systemc.h> |
| 2 | +#include <cstdlib> |
| 3 | + |
| 4 | +#define IPS_FILTER_KERNEL_SIZE 3 |
| 5 | +#define DELAY_TIME (IPS_FILTER_KERNEL_SIZE * IPS_FILTER_KERNEL_SIZE * 1) + 4 + 2 + 1 |
2 | 6 |
|
3 | 7 | SC_MODULE (testbench) { |
4 | | - sc_out<sc_uint<8> > img_window[9]; |
| 8 | + sc_out<sc_uint<8> > img_window[IPS_FILTER_KERNEL_SIZE*IPS_FILTER_KERNEL_SIZE]; |
5 | 9 | sc_in<sc_uint<8> > mean; |
6 | 10 |
|
7 | 11 | SC_CTOR (testbench) { |
8 | 12 | SC_THREAD(process); |
9 | 13 | } |
10 | 14 |
|
11 | 15 | void process() { |
12 | | - for (int i = 0; i < 9; i++){ |
13 | | - img_window[i] = 0; |
| 16 | + |
| 17 | +#ifdef TEST_MODE_ONE_WINDOW |
| 18 | + run_one_window(); |
| 19 | +#endif //TEST_MODE_ONE_WINDOW |
| 20 | + sc_stop(); |
| 21 | + } |
| 22 | + |
| 23 | +#ifdef TEST_MODE_ONE_WINDOW |
| 24 | + void run_one_window() |
| 25 | + { |
| 26 | + sc_uint<8> local_window[IPS_FILTER_KERNEL_SIZE * IPS_FILTER_KERNEL_SIZE]; |
| 27 | + sc_uint<8> result; |
| 28 | + |
| 29 | + #ifdef IPS_DEBUG_EN |
| 30 | + #ifdef TEST_MODE_ONE_WINDOW_RANDOM |
| 31 | + SC_REPORT_INFO("TEST_MODE_ONE_WINDOW_NORMAL", "Running test"); |
| 32 | + #elif defined(TEST_MODE_ONE_WINDOW_NORMAL) |
| 33 | + SC_REPORT_INFO("TEST_MODE_ONE_WINDOW_NORMAL", "Running test"); |
| 34 | + #else |
| 35 | + SC_REPORT_INFO("TEST_MODE_ONE_WINDOW_DEFAULT", "Running test"); |
| 36 | + #endif // TEST_MODE_ONE_WINDOW_RANDOM |
| 37 | + SC_REPORT_INFO("Initialize window", "Window value"); |
| 38 | + #endif // IPS_DEBUG_EN |
| 39 | + |
| 40 | + // Initialize image window |
| 41 | + for (int i = 0; i < IPS_FILTER_KERNEL_SIZE; i++) |
| 42 | + { |
| 43 | + for (int j = 0; j < IPS_FILTER_KERNEL_SIZE; j++) |
| 44 | + { |
| 45 | + sc_uint<8> value; |
| 46 | + |
| 47 | +#ifdef TEST_MODE_ONE_WINDOW_RANDOM |
| 48 | + value = (sc_uint<8> ) (rand() % 256); |
| 49 | +#elif defined(TEST_MODE_ONE_WINDOW_NORMAL) |
| 50 | + value = (sc_uint<8> ) (i * IPS_FILTER_KERNEL_SIZE + j); |
| 51 | +#else |
| 52 | + value = (sc_uint<8> ) i; |
| 53 | +#endif // TEST_MODE_ONE_WINDOW |
| 54 | + |
| 55 | + local_window[i * IPS_FILTER_KERNEL_SIZE + j] = value; |
| 56 | +#ifdef IPS_DEBUG_EN |
| 57 | + std::cout << "[" << (int) local_window[i * IPS_FILTER_KERNEL_SIZE + j] << "]"; |
| 58 | +#endif // IPS_DUMP_EN |
| 59 | + } |
| 60 | + |
| 61 | +#ifdef IPS_DEBUG_EN |
| 62 | + std::cout << std::endl; |
| 63 | +#endif // IPS_DEBUG_EN |
14 | 64 | } |
15 | | - wait(10, SC_NS); |
16 | | - std::cout << "Result: " << mean << std::endl; |
17 | | - std::cout << "HERE" << std::endl; |
18 | | - for (int i = 0; i < 9; i++){ |
19 | | - img_window[i] = i; |
| 65 | + |
| 66 | + for (int i = 0; i < IPS_FILTER_KERNEL_SIZE*IPS_FILTER_KERNEL_SIZE; i++) { |
| 67 | +#ifdef IPS_DEBUG_EN |
| 68 | + SC_REPORT_INFO("[DEBUG]", "Writing to image window port the value:"); |
| 69 | + std::cout << "Iteration: " << i << " local_window = " << local_window[i] << std::endl; |
| 70 | +#endif // IPS_DEBUG_EN |
| 71 | + img_window[i].write(local_window[i]); //Write to port |
20 | 72 | } |
21 | | - wait(10, SC_NS); |
22 | | - std::cout << "Result: " << mean << std::endl; |
23 | | - sc_stop(); |
| 73 | + |
| 74 | + wait(DELAY_TIME + 10, SC_NS); |
| 75 | + result = mean.read(); |
| 76 | + |
| 77 | +#ifdef IPS_DEBUG_EN |
| 78 | + SC_REPORT_INFO("TEST_MODE_ONE_WINDOW", "filtering"); |
| 79 | + std::cout << "Result = " << result << std::endl; |
| 80 | +#endif // IPS_DEBUG_E |
| 81 | + |
| 82 | + //delete [] img_window; |
24 | 83 | } |
| 84 | + #endif //TEST_MODE_ONE_WINDOW |
25 | 85 | }; |
0 commit comments