Skip to content

Commit bebdd88

Browse files
committed
Create std::mt19937 only once
1 parent ba62108 commit bebdd88

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

tests/functional/single_cells/vcd_harness.cc

+13-8
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,7 @@ struct Dump {
3434
};
3535

3636
template<size_t n>
37-
Signal<n> random_signal() {
38-
std::random_device rd; // Random device for seeding
39-
std::mt19937 gen(rd()); // Mersenne Twister engine
37+
Signal<n> random_signal(std::mt19937 &gen) {
4038
std::uniform_int_distribution<uint32_t> dist;
4139
std::array<uint32_t, (n+31)/32> words;
4240
for(auto &w : words)
@@ -52,9 +50,12 @@ struct Reset {
5250
};
5351

5452
struct Randomize {
53+
std::mt19937 &gen;
54+
Randomize(std::mt19937 &gen) : gen(gen) {}
55+
5556
template <size_t n>
5657
void operator()(const char *, Signal<n> &signal) {
57-
signal = random_signal<n>();
58+
signal = random_signal<n>(gen);
5859
}
5960
};
6061

@@ -89,19 +90,23 @@ int main(int argc, char **argv)
8990
vcd_file << "#0\n";
9091
// Set all signals to false
9192
inputs.visit(Reset());
92-
93+
9394
gold::eval(inputs, outputs, state, next_state);
9495
{
9596
Dump d(vcd_file);
9697
inputs.visit(d);
9798
outputs.visit(d);
9899
state.visit(d);
99100
}
100-
101+
102+
// Initialize random number generator once
103+
std::random_device rd;
104+
std::mt19937 gen(rd());
105+
101106
for (int step = 0; step < steps; ++step) {
102107
// Functional backend cxx
103108
vcd_file << "#" << (step + 1) << "\n";
104-
inputs.visit(Randomize());
109+
inputs.visit(Randomize(gen));
105110

106111
gold::eval(inputs, outputs, state, next_state);
107112
{
@@ -110,7 +115,7 @@ int main(int argc, char **argv)
110115
outputs.visit(d);
111116
state.visit(d);
112117
}
113-
118+
114119
state = next_state;
115120
}
116121

0 commit comments

Comments
 (0)