Refactor RNG out to separate DeterministicRNG class
This well also allow for better lifecycle control over the state of the RNG in the future.
This commit is contained in:
parent
59a790cd00
commit
91db413c60
124
common/nextpnr.h
124
common/nextpnr.h
@ -265,65 +265,15 @@ class IdStringDB
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class BaseCtx : public IdStringDB
|
class DeterministicRNG
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
|
uint64_t rngstate;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::unordered_map<IdString, std::unique_ptr<NetInfo>> nets;
|
DeterministicRNG() : rngstate(0x3141592653589793)
|
||||||
std::unordered_map<IdString, std::unique_ptr<CellInfo>> cells;
|
{
|
||||||
|
}
|
||||||
BaseCtx() {}
|
|
||||||
~BaseCtx() {}
|
|
||||||
|
|
||||||
Context *getCtx() { return reinterpret_cast<Context *>(this); }
|
|
||||||
|
|
||||||
const Context *getCtx() const { return reinterpret_cast<const Context *>(this); }
|
|
||||||
|
|
||||||
// --------------------------------------------------------------
|
|
||||||
|
|
||||||
bool allUiReload = false;
|
|
||||||
bool frameUiReload = false;
|
|
||||||
std::unordered_set<BelId> belUiReload;
|
|
||||||
std::unordered_set<WireId> wireUiReload;
|
|
||||||
std::unordered_set<PipId> pipUiReload;
|
|
||||||
std::unordered_set<GroupId> groupUiReload;
|
|
||||||
|
|
||||||
void refreshUi() { allUiReload = true; }
|
|
||||||
|
|
||||||
void refreshUiFrame() { frameUiReload = true; }
|
|
||||||
|
|
||||||
void refreshUiBel(BelId bel) { belUiReload.insert(bel); }
|
|
||||||
|
|
||||||
void refreshUiWire(WireId wire) { wireUiReload.insert(wire); }
|
|
||||||
|
|
||||||
void refreshUiPip(PipId pip) { pipUiReload.insert(pip); }
|
|
||||||
|
|
||||||
void refreshUiGroup(GroupId group) { groupUiReload.insert(group); }
|
|
||||||
};
|
|
||||||
|
|
||||||
NEXTPNR_NAMESPACE_END
|
|
||||||
|
|
||||||
#include "arch.h"
|
|
||||||
|
|
||||||
NEXTPNR_NAMESPACE_BEGIN
|
|
||||||
|
|
||||||
struct Context : Arch
|
|
||||||
{
|
|
||||||
bool verbose = false;
|
|
||||||
bool debug = false;
|
|
||||||
bool force = false;
|
|
||||||
bool timing_driven = true;
|
|
||||||
float target_freq = 12e6;
|
|
||||||
|
|
||||||
Context(ArchArgs args) : Arch(args) {}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------
|
|
||||||
|
|
||||||
// provided by router1.cc
|
|
||||||
bool getActualRouteDelay(WireId src_wire, WireId dst_wire, delay_t &delay);
|
|
||||||
|
|
||||||
// --------------------------------------------------------------
|
|
||||||
|
|
||||||
uint64_t rngstate = 0x3141592653589793;
|
|
||||||
|
|
||||||
uint64_t rng64()
|
uint64_t rng64()
|
||||||
{
|
{
|
||||||
@ -383,6 +333,66 @@ struct Context : Arch
|
|||||||
shuffle(a);
|
shuffle(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
class BaseCtx : public IdStringDB, public DeterministicRNG
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
std::unordered_map<IdString, std::unique_ptr<NetInfo>> nets;
|
||||||
|
std::unordered_map<IdString, std::unique_ptr<CellInfo>> cells;
|
||||||
|
|
||||||
|
BaseCtx() {}
|
||||||
|
~BaseCtx() {}
|
||||||
|
|
||||||
|
Context *getCtx() { return reinterpret_cast<Context *>(this); }
|
||||||
|
|
||||||
|
const Context *getCtx() const { return reinterpret_cast<const Context *>(this); }
|
||||||
|
|
||||||
|
// --------------------------------------------------------------
|
||||||
|
|
||||||
|
bool allUiReload = false;
|
||||||
|
bool frameUiReload = false;
|
||||||
|
std::unordered_set<BelId> belUiReload;
|
||||||
|
std::unordered_set<WireId> wireUiReload;
|
||||||
|
std::unordered_set<PipId> pipUiReload;
|
||||||
|
std::unordered_set<GroupId> groupUiReload;
|
||||||
|
|
||||||
|
void refreshUi() { allUiReload = true; }
|
||||||
|
|
||||||
|
void refreshUiFrame() { frameUiReload = true; }
|
||||||
|
|
||||||
|
void refreshUiBel(BelId bel) { belUiReload.insert(bel); }
|
||||||
|
|
||||||
|
void refreshUiWire(WireId wire) { wireUiReload.insert(wire); }
|
||||||
|
|
||||||
|
void refreshUiPip(PipId pip) { pipUiReload.insert(pip); }
|
||||||
|
|
||||||
|
void refreshUiGroup(GroupId group) { groupUiReload.insert(group); }
|
||||||
|
};
|
||||||
|
|
||||||
|
NEXTPNR_NAMESPACE_END
|
||||||
|
|
||||||
|
#include "arch.h"
|
||||||
|
|
||||||
|
NEXTPNR_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
struct Context : Arch
|
||||||
|
{
|
||||||
|
bool verbose = false;
|
||||||
|
bool debug = false;
|
||||||
|
bool force = false;
|
||||||
|
bool timing_driven = true;
|
||||||
|
float target_freq = 12e6;
|
||||||
|
|
||||||
|
Context(ArchArgs args) : Arch(args) {}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------
|
||||||
|
|
||||||
|
// provided by router1.cc
|
||||||
|
bool getActualRouteDelay(WireId src_wire, WireId dst_wire, delay_t &delay);
|
||||||
|
|
||||||
|
// --------------------------------------------------------------
|
||||||
|
|
||||||
uint32_t checksum() const;
|
uint32_t checksum() const;
|
||||||
|
|
||||||
void check() const;
|
void check() const;
|
||||||
|
Loading…
Reference in New Issue
Block a user