mirror of https://github.com/YosysHQ/yosys.git
TimingInfo: index by (port_name,offset)
This commit is contained in:
parent
7c3b4b80ea
commit
9dcf204dec
|
@ -25,17 +25,27 @@
|
||||||
|
|
||||||
YOSYS_NAMESPACE_BEGIN
|
YOSYS_NAMESPACE_BEGIN
|
||||||
|
|
||||||
typedef std::pair<RTLIL::SigBit,RTLIL::SigBit> BitBit;
|
|
||||||
|
|
||||||
struct ModuleTiming
|
|
||||||
{
|
|
||||||
RTLIL::IdString type;
|
|
||||||
dict<BitBit, int> comb;
|
|
||||||
dict<RTLIL::SigBit, int> arrival, required;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct TimingInfo
|
struct TimingInfo
|
||||||
{
|
{
|
||||||
|
struct NameBit
|
||||||
|
{
|
||||||
|
RTLIL::IdString name;
|
||||||
|
int offset;
|
||||||
|
NameBit() {}
|
||||||
|
NameBit(const RTLIL::SigBit &b) : name(b.wire->name), offset(b.offset) {}
|
||||||
|
bool operator==(const NameBit& nb) const { return nb.name == name && nb.offset == offset; }
|
||||||
|
bool operator!=(const NameBit& nb) const { return !operator==(nb); }
|
||||||
|
unsigned int hash() const { return mkhash_add(name.hash(), offset); }
|
||||||
|
};
|
||||||
|
typedef std::pair<NameBit,NameBit> BitBit;
|
||||||
|
|
||||||
|
struct ModuleTiming
|
||||||
|
{
|
||||||
|
RTLIL::IdString type;
|
||||||
|
dict<BitBit, int> comb;
|
||||||
|
dict<NameBit, int> arrival, required;
|
||||||
|
};
|
||||||
|
|
||||||
dict<RTLIL::IdString, ModuleTiming> data;
|
dict<RTLIL::IdString, ModuleTiming> data;
|
||||||
|
|
||||||
TimingInfo()
|
TimingInfo()
|
||||||
|
|
|
@ -473,11 +473,11 @@ void prep_lut(RTLIL::Design *design, int maxlut)
|
||||||
|
|
||||||
auto &t = timing.setup_module(module);
|
auto &t = timing.setup_module(module);
|
||||||
|
|
||||||
SigBit o;
|
TimingInfo::NameBit o;
|
||||||
std::vector<int> specify;
|
std::vector<int> specify;
|
||||||
for (const auto &i : t.comb) {
|
for (const auto &i : t.comb) {
|
||||||
auto &d = i.first.second;
|
auto &d = i.first.second;
|
||||||
if (o == SigBit())
|
if (o == TimingInfo::NameBit())
|
||||||
o = d;
|
o = d;
|
||||||
else if (o != d)
|
else if (o != d)
|
||||||
log_error("(* abc9_lut *) module '%s' with has more than one output.\n", log_id(module));
|
log_error("(* abc9_lut *) module '%s' with has more than one output.\n", log_id(module));
|
||||||
|
@ -581,7 +581,8 @@ void prep_box(RTLIL::Design *design, bool dff_mode)
|
||||||
first = false;
|
first = false;
|
||||||
else
|
else
|
||||||
ss << " ";
|
ss << " ";
|
||||||
auto it = t.find(wire);
|
log_assert(GetSize(wire) == 1);
|
||||||
|
auto it = t.find(SigBit(wire,0));
|
||||||
if (it == t.end())
|
if (it == t.end())
|
||||||
// Assume that no setup time means zero
|
// Assume that no setup time means zero
|
||||||
ss << 0;
|
ss << 0;
|
||||||
|
|
Loading…
Reference in New Issue