3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-04-14 04:48:46 +00:00

Create std::mt19937 only once

This commit is contained in:
Roland Coeurjoly 2024-06-27 02:09:19 +02:00 committed by Emily Schmidt
parent 21bb1cf1bc
commit e235fc704d

View file

@ -34,9 +34,7 @@ struct Dump {
}; };
template<size_t n> template<size_t n>
Signal<n> random_signal() { Signal<n> random_signal(std::mt19937 &gen) {
std::random_device rd; // Random device for seeding
std::mt19937 gen(rd()); // Mersenne Twister engine
std::uniform_int_distribution<uint32_t> dist; std::uniform_int_distribution<uint32_t> dist;
std::array<uint32_t, (n+31)/32> words; std::array<uint32_t, (n+31)/32> words;
for(auto &w : words) for(auto &w : words)
@ -52,9 +50,12 @@ struct Reset {
}; };
struct Randomize { struct Randomize {
std::mt19937 &gen;
Randomize(std::mt19937 &gen) : gen(gen) {}
template <size_t n> template <size_t n>
void operator()(const char *, Signal<n> &signal) { void operator()(const char *, Signal<n> &signal) {
signal = random_signal<n>(); signal = random_signal<n>(gen);
} }
}; };
@ -98,10 +99,14 @@ int main(int argc, char **argv)
state.visit(d); state.visit(d);
} }
// Initialize random number generator once
std::random_device rd;
std::mt19937 gen(rd());
for (int step = 0; step < steps; ++step) { for (int step = 0; step < steps; ++step) {
// Functional backend cxx // Functional backend cxx
vcd_file << "#" << (step + 1) << "\n"; vcd_file << "#" << (step + 1) << "\n";
inputs.visit(Randomize()); inputs.visit(Randomize(gen));
gold::eval(inputs, outputs, state, next_state); gold::eval(inputs, outputs, state, next_state);
{ {