mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-12 20:18:20 +00:00
Create std::mt19937 only once
This commit is contained in:
parent
21bb1cf1bc
commit
e235fc704d
|
@ -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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -89,7 +90,7 @@ int main(int argc, char **argv)
|
||||||
vcd_file << "#0\n";
|
vcd_file << "#0\n";
|
||||||
// Set all signals to false
|
// Set all signals to false
|
||||||
inputs.visit(Reset());
|
inputs.visit(Reset());
|
||||||
|
|
||||||
gold::eval(inputs, outputs, state, next_state);
|
gold::eval(inputs, outputs, state, next_state);
|
||||||
{
|
{
|
||||||
Dump d(vcd_file);
|
Dump d(vcd_file);
|
||||||
|
@ -97,11 +98,15 @@ int main(int argc, char **argv)
|
||||||
outputs.visit(d);
|
outputs.visit(d);
|
||||||
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);
|
||||||
{
|
{
|
||||||
|
@ -110,7 +115,7 @@ int main(int argc, char **argv)
|
||||||
outputs.visit(d);
|
outputs.visit(d);
|
||||||
state.visit(d);
|
state.visit(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
state = next_state;
|
state = next_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue