1 |
5 |
leonous |
// Verilated -*- SystemC -*-
|
2 |
|
|
#include "Valu_tb.h" // For This
|
3 |
|
|
#include "Valu_tb__Syms.h"
|
4 |
|
|
|
5 |
|
|
//--------------------
|
6 |
|
|
// STATIC VARIABLES
|
7 |
|
|
|
8 |
|
|
|
9 |
|
|
//--------------------
|
10 |
|
|
|
11 |
|
|
VL_SC_CTOR_IMP(Valu_tb)
|
12 |
|
|
#if (SYSTEMC_VERSION>20011000)
|
13 |
|
|
: systemc_clk("systemc_clk")
|
14 |
|
|
#endif
|
15 |
|
|
{
|
16 |
|
|
Valu_tb__Syms* __restrict vlSymsp = __VlSymsp = new Valu_tb__Syms(this, name());
|
17 |
|
|
Valu_tb* __restrict vlTOPp VL_ATTR_UNUSED = vlSymsp->TOPp;
|
18 |
|
|
VL_CELL (v, Valu_tb_alu_tb);
|
19 |
|
|
// Sensitivities on all clocks and combo inputs
|
20 |
|
|
SC_METHOD(eval);
|
21 |
|
|
sensitive << systemc_clk;
|
22 |
|
|
|
23 |
|
|
// Reset internal values
|
24 |
|
|
|
25 |
|
|
// Reset structure values
|
26 |
|
|
__Vcellinp__v__systemc_clk = VL_RAND_RESET_I(1);
|
27 |
|
|
__VinpClk__TOP__v__clk = VL_RAND_RESET_I(1);
|
28 |
|
|
__VinpClk__TOP__v__alu_inst0__DOT__reset = VL_RAND_RESET_I(1);
|
29 |
|
|
__VinpClk__TOP__v__finished = VL_RAND_RESET_I(1);
|
30 |
|
|
__Vclklast__TOP____VinpClk__TOP__v__clk = VL_RAND_RESET_I(1);
|
31 |
|
|
__Vclklast__TOP____VinpClk__TOP__v__alu_inst0__DOT__reset = VL_RAND_RESET_I(1);
|
32 |
|
|
__Vclklast__TOP____VinpClk__TOP__v__finished = VL_RAND_RESET_I(1);
|
33 |
|
|
__Vchglast__TOP__v__clk = VL_RAND_RESET_I(1);
|
34 |
|
|
__Vchglast__TOP__v__finished = VL_RAND_RESET_I(1);
|
35 |
|
|
__Vchglast__TOP__v__alu_inst0__DOT__reset = VL_RAND_RESET_I(1);
|
36 |
|
|
__Vchglast__TOP__v__alu_inst0__DOT__datapath__DOT__adder_in_b = VL_RAND_RESET_I(8);
|
37 |
|
|
__Vchglast__TOP__v__alu_inst0__DOT__datapath__DOT__carry = VL_RAND_RESET_I(1);
|
38 |
|
|
}
|
39 |
|
|
|
40 |
|
|
void Valu_tb::__Vconfigure(Valu_tb__Syms* vlSymsp, bool first) {
|
41 |
|
|
if (0 && first) {} // Prevent unused
|
42 |
|
|
this->__VlSymsp = vlSymsp;
|
43 |
|
|
}
|
44 |
|
|
|
45 |
|
|
Valu_tb::~Valu_tb() {
|
46 |
|
|
delete __VlSymsp; __VlSymsp=NULL;
|
47 |
|
|
}
|
48 |
|
|
|
49 |
|
|
//--------------------
|
50 |
|
|
|
51 |
|
|
|
52 |
|
|
void Valu_tb::eval() {
|
53 |
|
|
Valu_tb__Syms* __restrict vlSymsp = this->__VlSymsp; // Setup global symbol table
|
54 |
|
|
Valu_tb* __restrict vlTOPp VL_ATTR_UNUSED = vlSymsp->TOPp;
|
55 |
|
|
// Initialize
|
56 |
|
|
if (VL_UNLIKELY(!vlSymsp->__Vm_didInit)) _eval_initial_loop(vlSymsp);
|
57 |
|
|
// Evaluate till stable
|
58 |
|
|
VL_DEBUG_IF(cout<<"\n----TOP Evaluate Valu_tb::eval"<<endl; );
|
59 |
|
|
int __VclockLoop = 0;
|
60 |
|
|
IData __Vchange=1;
|
61 |
|
|
while (VL_LIKELY(__Vchange)) {
|
62 |
|
|
VL_DEBUG_IF(cout<<" Clock loop"<<endl;);
|
63 |
|
|
vlSymsp->__Vm_activity = true;
|
64 |
|
|
_eval(vlSymsp);
|
65 |
|
|
__Vchange = _change_request(vlSymsp);
|
66 |
|
|
if (++__VclockLoop > 100) vl_fatal(__FILE__,__LINE__,__FILE__,"Verilated model didn't converge");
|
67 |
|
|
}
|
68 |
|
|
}
|
69 |
|
|
|
70 |
|
|
void Valu_tb::_eval_initial_loop(Valu_tb__Syms* __restrict vlSymsp) {
|
71 |
|
|
vlSymsp->__Vm_didInit = true;
|
72 |
|
|
_eval_initial(vlSymsp);
|
73 |
|
|
vlSymsp->__Vm_activity = true;
|
74 |
|
|
int __VclockLoop = 0;
|
75 |
|
|
IData __Vchange=1;
|
76 |
|
|
while (VL_LIKELY(__Vchange)) {
|
77 |
|
|
_eval_settle(vlSymsp);
|
78 |
|
|
_eval(vlSymsp);
|
79 |
|
|
__Vchange = _change_request(vlSymsp);
|
80 |
|
|
if (++__VclockLoop > 100) vl_fatal(__FILE__,__LINE__,__FILE__,"Verilated model didn't DC converge");
|
81 |
|
|
}
|
82 |
|
|
}
|
83 |
|
|
|
84 |
|
|
//--------------------
|
85 |
|
|
// Internal Methods
|
86 |
|
|
|
87 |
|
|
void Valu_tb::_settle__TOP__1(Valu_tb__Syms* __restrict vlSymsp) {
|
88 |
|
|
VL_DEBUG_IF(cout<<" Valu_tb::_settle__TOP__1"<<endl; );
|
89 |
|
|
Valu_tb* __restrict vlTOPp VL_ATTR_UNUSED = vlSymsp->TOPp;
|
90 |
|
|
// Body
|
91 |
|
|
VL_ASSIGN_IS(1,vlTOPp->__Vcellinp__v__systemc_clk, vlTOPp->systemc_clk);
|
92 |
|
|
}
|
93 |
|
|
|
94 |
|
|
void Valu_tb::_combo__TOP__2(Valu_tb__Syms* __restrict vlSymsp) {
|
95 |
|
|
VL_DEBUG_IF(cout<<" Valu_tb::_combo__TOP__2"<<endl; );
|
96 |
|
|
Valu_tb* __restrict vlTOPp VL_ATTR_UNUSED = vlSymsp->TOPp;
|
97 |
|
|
// Body
|
98 |
|
|
VL_ASSIGN_IS(1,vlTOPp->__Vcellinp__v__systemc_clk, vlTOPp->systemc_clk);
|
99 |
|
|
vlSymsp->TOP__v.systemc_clk = vlTOPp->__Vcellinp__v__systemc_clk;
|
100 |
|
|
}
|
101 |
|
|
|
102 |
|
|
void Valu_tb::_settle__TOP__3(Valu_tb__Syms* __restrict vlSymsp) {
|
103 |
|
|
VL_DEBUG_IF(cout<<" Valu_tb::_settle__TOP__3"<<endl; );
|
104 |
|
|
Valu_tb* __restrict vlTOPp VL_ATTR_UNUSED = vlSymsp->TOPp;
|
105 |
|
|
// Body
|
106 |
|
|
vlSymsp->TOP__v.systemc_clk = vlTOPp->__Vcellinp__v__systemc_clk;
|
107 |
|
|
}
|
108 |
|
|
|
109 |
|
|
void Valu_tb::_eval(Valu_tb__Syms* __restrict vlSymsp) {
|
110 |
|
|
VL_DEBUG_IF(cout<<" Valu_tb::_eval"<<endl; );
|
111 |
|
|
Valu_tb* __restrict vlTOPp VL_ATTR_UNUSED = vlSymsp->TOPp;
|
112 |
|
|
// Body
|
113 |
|
|
vlSymsp->TOP__v._combo__TOP__v__2(vlSymsp);
|
114 |
|
|
vlTOPp->_combo__TOP__2(vlSymsp);
|
115 |
|
|
vlSymsp->TOP__v._combo__TOP__v__4(vlSymsp);
|
116 |
|
|
if (((~ (IData)(vlTOPp->__VinpClk__TOP__v__clk))
|
117 |
|
|
& (IData)(vlTOPp->__Vclklast__TOP____VinpClk__TOP__v__clk))) {
|
118 |
|
|
vlSymsp->TOP__v._sequent__TOP__v__6(vlSymsp);
|
119 |
|
|
}
|
120 |
|
|
if ((((IData)(vlTOPp->__VinpClk__TOP__v__alu_inst0__DOT__reset)
|
121 |
|
|
& (~ (IData)(vlTOPp->__Vclklast__TOP____VinpClk__TOP__v__alu_inst0__DOT__reset)))
|
122 |
|
|
| ((IData)(vlTOPp->__VinpClk__TOP__v__clk)
|
123 |
|
|
& (~ (IData)(vlTOPp->__Vclklast__TOP____VinpClk__TOP__v__clk))))) {
|
124 |
|
|
vlSymsp->TOP__v._sequent__TOP__v__7(vlSymsp);
|
125 |
|
|
}
|
126 |
|
|
vlSymsp->TOP__v._combo__TOP__v__8(vlSymsp);
|
127 |
|
|
if ((((IData)(vlTOPp->__VinpClk__TOP__v__clk) &
|
128 |
|
|
(~ (IData)(vlTOPp->__Vclklast__TOP____VinpClk__TOP__v__clk)))
|
129 |
|
|
| ((IData)(vlTOPp->__VinpClk__TOP__v__finished)
|
130 |
|
|
& (~ (IData)(vlTOPp->__Vclklast__TOP____VinpClk__TOP__v__finished))))) {
|
131 |
|
|
vlSymsp->TOP__v._sequent__TOP__v__10(vlSymsp);
|
132 |
|
|
}
|
133 |
|
|
if (((~ (IData)(vlTOPp->__VinpClk__TOP__v__clk))
|
134 |
|
|
& (IData)(vlTOPp->__Vclklast__TOP____VinpClk__TOP__v__clk))) {
|
135 |
|
|
vlSymsp->TOP__v._sequent__TOP__v__11(vlSymsp);
|
136 |
|
|
}
|
137 |
|
|
if ((((IData)(vlTOPp->__VinpClk__TOP__v__alu_inst0__DOT__reset)
|
138 |
|
|
& (~ (IData)(vlTOPp->__Vclklast__TOP____VinpClk__TOP__v__alu_inst0__DOT__reset)))
|
139 |
|
|
| ((IData)(vlTOPp->__VinpClk__TOP__v__clk)
|
140 |
|
|
& (~ (IData)(vlTOPp->__Vclklast__TOP____VinpClk__TOP__v__clk))))) {
|
141 |
|
|
vlSymsp->TOP__v._sequent__TOP__v__12(vlSymsp);
|
142 |
|
|
}
|
143 |
|
|
vlSymsp->TOP__v._combo__TOP__v__14(vlSymsp);
|
144 |
|
|
if ((((IData)(vlTOPp->__VinpClk__TOP__v__alu_inst0__DOT__reset)
|
145 |
|
|
& (~ (IData)(vlTOPp->__Vclklast__TOP____VinpClk__TOP__v__alu_inst0__DOT__reset)))
|
146 |
|
|
| ((IData)(vlTOPp->__VinpClk__TOP__v__clk)
|
147 |
|
|
& (~ (IData)(vlTOPp->__Vclklast__TOP____VinpClk__TOP__v__clk))))) {
|
148 |
|
|
vlSymsp->TOP__v._sequent__TOP__v__15(vlSymsp);
|
149 |
|
|
}
|
150 |
|
|
vlSymsp->TOP__v._combo__TOP__v__17(vlSymsp);
|
151 |
|
|
// Final
|
152 |
|
|
vlTOPp->__Vclklast__TOP____VinpClk__TOP__v__clk
|
153 |
|
|
= vlTOPp->__VinpClk__TOP__v__clk;
|
154 |
|
|
vlTOPp->__Vclklast__TOP____VinpClk__TOP__v__alu_inst0__DOT__reset
|
155 |
|
|
= vlTOPp->__VinpClk__TOP__v__alu_inst0__DOT__reset;
|
156 |
|
|
vlTOPp->__Vclklast__TOP____VinpClk__TOP__v__finished
|
157 |
|
|
= vlTOPp->__VinpClk__TOP__v__finished;
|
158 |
|
|
vlTOPp->__VinpClk__TOP__v__clk = vlSymsp->TOP__v.clk;
|
159 |
|
|
vlTOPp->__VinpClk__TOP__v__alu_inst0__DOT__reset
|
160 |
|
|
= vlSymsp->TOP__v.alu_inst0__DOT__reset;
|
161 |
|
|
vlTOPp->__VinpClk__TOP__v__finished = vlSymsp->TOP__v.finished;
|
162 |
|
|
}
|
163 |
|
|
|
164 |
|
|
void Valu_tb::_eval_initial(Valu_tb__Syms* __restrict vlSymsp) {
|
165 |
|
|
VL_DEBUG_IF(cout<<" Valu_tb::_eval_initial"<<endl; );
|
166 |
|
|
Valu_tb* __restrict vlTOPp VL_ATTR_UNUSED = vlSymsp->TOPp;
|
167 |
|
|
// Body
|
168 |
|
|
vlSymsp->TOP__v._initial__TOP__v(vlSymsp);
|
169 |
|
|
}
|
170 |
|
|
|
171 |
|
|
void Valu_tb::final() {
|
172 |
|
|
VL_DEBUG_IF(cout<<" Valu_tb::final"<<endl; );
|
173 |
|
|
// Variables
|
174 |
|
|
Valu_tb__Syms* __restrict vlSymsp = this->__VlSymsp;
|
175 |
|
|
Valu_tb* __restrict vlTOPp VL_ATTR_UNUSED = vlSymsp->TOPp;
|
176 |
|
|
}
|
177 |
|
|
|
178 |
|
|
void Valu_tb::_eval_settle(Valu_tb__Syms* __restrict vlSymsp) {
|
179 |
|
|
VL_DEBUG_IF(cout<<" Valu_tb::_eval_settle"<<endl; );
|
180 |
|
|
Valu_tb* __restrict vlTOPp VL_ATTR_UNUSED = vlSymsp->TOPp;
|
181 |
|
|
// Body
|
182 |
|
|
vlSymsp->TOP__v._settle__TOP__v__1(vlSymsp);
|
183 |
|
|
vlTOPp->_settle__TOP__1(vlSymsp);
|
184 |
|
|
vlTOPp->_settle__TOP__3(vlSymsp);
|
185 |
|
|
vlSymsp->TOP__v._settle__TOP__v__3(vlSymsp);
|
186 |
|
|
vlSymsp->TOP__v._settle__TOP__v__5(vlSymsp);
|
187 |
|
|
vlSymsp->TOP__v._settle__TOP__v__9(vlSymsp);
|
188 |
|
|
vlSymsp->TOP__v._settle__TOP__v__13(vlSymsp);
|
189 |
|
|
vlSymsp->TOP__v._settle__TOP__v__16(vlSymsp);
|
190 |
|
|
}
|
191 |
|
|
|
192 |
|
|
bool Valu_tb::_change_request(Valu_tb__Syms* __restrict vlSymsp) {
|
193 |
|
|
VL_DEBUG_IF(cout<<" Valu_tb::_change_request"<<endl; );
|
194 |
|
|
Valu_tb* __restrict vlTOPp VL_ATTR_UNUSED = vlSymsp->TOPp;
|
195 |
|
|
// Body
|
196 |
|
|
// Change detection
|
197 |
|
|
IData __req = false; // Logically a bool
|
198 |
|
|
__req |= ((vlSymsp->TOP__v.clk ^ vlTOPp->__Vchglast__TOP__v__clk)
|
199 |
|
|
| (vlSymsp->TOP__v.finished ^ vlTOPp->__Vchglast__TOP__v__finished)
|
200 |
|
|
| (vlSymsp->TOP__v.alu_inst0__DOT__reset ^ vlTOPp->__Vchglast__TOP__v__alu_inst0__DOT__reset)
|
201 |
|
|
| (vlSymsp->TOP__v.alu_inst0__DOT__datapath__DOT__adder_in_b ^ vlTOPp->__Vchglast__TOP__v__alu_inst0__DOT__datapath__DOT__adder_in_b)
|
202 |
|
|
| (vlSymsp->TOP__v.alu_inst0__DOT__datapath__DOT__carry ^ vlTOPp->__Vchglast__TOP__v__alu_inst0__DOT__datapath__DOT__carry));
|
203 |
|
|
VL_DEBUG_IF( if(__req && ((vlSymsp->TOP__v.clk ^ vlTOPp->__Vchglast__TOP__v__clk))) cout<<" CHANGE: alu_tb.v:59: clk"<<endl; );
|
204 |
|
|
VL_DEBUG_IF( if(__req && ((vlSymsp->TOP__v.finished ^ vlTOPp->__Vchglast__TOP__v__finished))) cout<<" CHANGE: alu_tb.v:81: finished"<<endl; );
|
205 |
|
|
VL_DEBUG_IF( if(__req && ((vlSymsp->TOP__v.alu_inst0__DOT__reset ^ vlTOPp->__Vchglast__TOP__v__alu_inst0__DOT__reset))) cout<<" CHANGE: /home/leonous/projects/verilog/ecpu/components/alu/rtl/verilog/alu.v:40: alu_inst0.reset"<<endl; );
|
206 |
|
|
VL_DEBUG_IF( if(__req && ((vlSymsp->TOP__v.alu_inst0__DOT__datapath__DOT__adder_in_b ^ vlTOPp->__Vchglast__TOP__v__alu_inst0__DOT__datapath__DOT__adder_in_b))) cout<<" CHANGE: /home/leonous/projects/verilog/ecpu/components/alu/rtl/verilog/alu_datapath.v:80: alu_inst0.datapath.adder_in_b"<<endl; );
|
207 |
|
|
VL_DEBUG_IF( if(__req && ((vlSymsp->TOP__v.alu_inst0__DOT__datapath__DOT__carry ^ vlTOPp->__Vchglast__TOP__v__alu_inst0__DOT__datapath__DOT__carry))) cout<<" CHANGE: /home/leonous/projects/verilog/ecpu/components/alu/rtl/verilog/alu_datapath.v:91: alu_inst0.datapath.carry"<<endl; );
|
208 |
|
|
// Final
|
209 |
|
|
vlTOPp->__Vchglast__TOP__v__clk = vlSymsp->TOP__v.clk;
|
210 |
|
|
vlTOPp->__Vchglast__TOP__v__finished = vlSymsp->TOP__v.finished;
|
211 |
|
|
vlTOPp->__Vchglast__TOP__v__alu_inst0__DOT__reset
|
212 |
|
|
= vlSymsp->TOP__v.alu_inst0__DOT__reset;
|
213 |
|
|
vlTOPp->__Vchglast__TOP__v__alu_inst0__DOT__datapath__DOT__adder_in_b
|
214 |
|
|
= vlSymsp->TOP__v.alu_inst0__DOT__datapath__DOT__adder_in_b;
|
215 |
|
|
vlTOPp->__Vchglast__TOP__v__alu_inst0__DOT__datapath__DOT__carry
|
216 |
|
|
= vlSymsp->TOP__v.alu_inst0__DOT__datapath__DOT__carry;
|
217 |
|
|
return __req;
|
218 |
|
|
}
|