-
Notifications
You must be signed in to change notification settings - Fork 40
/
Copy pathtest_const_prop_many_forks.cpp
83 lines (60 loc) · 2.11 KB
/
test_const_prop_many_forks.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/******************************************************************************
* Copyright (c) 2020, Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception.
*
*****************************************************************************/
//
// Created by ripopov on 10/18/18.
//
#include <systemc.h>
#include <sct_assert.h>
SC_MODULE(test_module) {
static constexpr int LINE_INDEX_NUM = 10;
static constexpr int CACHE_WAY_NUM = 10;
static constexpr int PORT_NUM = 10;
bool updateLru[PORT_NUM+1];
bool updateDirty[PORT_NUM+1];
sc_int<32> updateLine[PORT_NUM+1];
sc_int<32> updateWay[PORT_NUM+1];
sc_int<32> lruMemory[LINE_INDEX_NUM][CACHE_WAY_NUM];
bool dirtyMemory[LINE_INDEX_NUM][CACHE_WAY_NUM];
sc_in<bool> clk;
SC_CTOR(test_module) {
SC_CTHREAD(test_thread, clk.pos());
async_reset_signal_is(din, 0);
}
sc_signal<bool> din;
void test_thread() {
int x;
for (int i = 0; i < LINE_INDEX_NUM; i++) {
for (int j = 0; j < CACHE_WAY_NUM; j++) {
bool b = 0;
for (unsigned port = 0; port < PORT_NUM+1; port++) {
b = b || updateLru[port] && updateLine[port] == i &&
updateWay[port] == j;
}
if (b) lruMemory[i][j] = 0;
bool d = 0;
for (unsigned port = 0; port < PORT_NUM; port++) {
d = d || updateDirty[port] && updateLine[port] == i &&
updateWay[port] == j;
}
if (d) dirtyMemory[i][j] = 1;
if (updateDirty[PORT_NUM] && updateLine[PORT_NUM] == i &&
updateWay[PORT_NUM] == j) dirtyMemory[i][j] = 0;
if (b&&d)
x = 12;
else
x = 12;
}
}
sct_assert_const(x == 12);
}
};
int sc_main(int argc, char **argv) {
auto tmod = std::make_unique<test_module>("tmod");
sc_clock clk{"clk", 10 , SC_NS};
tmod->clk(clk);
return 0;
}