diff --git a/ecp5/arch.cc b/ecp5/arch.cc index 55fe5704..79f65562 100644 --- a/ecp5/arch.cc +++ b/ecp5/arch.cc @@ -413,6 +413,8 @@ delay_t Arch::estimateDelay(WireId src, WireId dst) const return 200 * (abs(src.location.x - dst.location.x) + abs(src.location.y - dst.location.y)); } +delay_t Arch::getBudgetOverride(const PortRef &pr, delay_t v) const { return v; } + // ----------------------------------------------------------------------- bool Arch::place() { return placer1(getCtx()); } diff --git a/ecp5/arch.h b/ecp5/arch.h index b6aac9cf..860b086d 100644 --- a/ecp5/arch.h +++ b/ecp5/arch.h @@ -780,6 +780,7 @@ struct Arch : BaseCtx delay_t getRipupDelayPenalty() const { return 200; } float getDelayNS(delay_t v) const { return v * 0.001; } uint32_t getDelayChecksum(delay_t v) const { return v; } + delay_t getBudgetOverride(const PortRef &pr, delay_t v) const; // ------------------------------------------------- diff --git a/generic/arch.cc b/generic/arch.cc index 5c9864ab..03a6b122 100644 --- a/generic/arch.cc +++ b/generic/arch.cc @@ -403,6 +403,8 @@ delay_t Arch::estimateDelay(WireId src, WireId dst) const return (dx + dy) * grid_distance_to_delay; } +delay_t Arch::getBudgetOverride(const PortRef &pr, delay_t v) const { return v; } + // --------------------------------------------------------------- bool Arch::place() { return placer1(getCtx()); } diff --git a/generic/arch.h b/generic/arch.h index 01a90ee1..df21fbe4 100644 --- a/generic/arch.h +++ b/generic/arch.h @@ -198,6 +198,7 @@ struct Arch : BaseCtx delay_t getRipupDelayPenalty() const { return 1.0; } float getDelayNS(delay_t v) const { return v; } uint32_t getDelayChecksum(delay_t v) const { return 0; } + delay_t getBudgetOverride(const PortRef &pr, delay_t v) const; bool pack() { return true; } bool place(); diff --git a/ice40/arch.cc b/ice40/arch.cc index 3803f842..fec35a0f 100644 --- a/ice40/arch.cc +++ b/ice40/arch.cc @@ -587,6 +587,13 @@ delay_t Arch::estimateDelay(WireId src, WireId dst) const return xscale * abs(xd) + yscale * abs(yd) + offset; } +delay_t Arch::getBudgetOverride(const PortRef &pr, delay_t v) const +{ + if (pr.port == id("COUT")) + return 0; + return v; +} + // ----------------------------------------------------------------------- bool Arch::place() { return placer1(getCtx()); } diff --git a/ice40/arch.h b/ice40/arch.h index 51cbe725..048a9053 100644 --- a/ice40/arch.h +++ b/ice40/arch.h @@ -688,6 +688,7 @@ struct Arch : BaseCtx delay_t getRipupDelayPenalty() const { return 200; } float getDelayNS(delay_t v) const { return v * 0.001; } uint32_t getDelayChecksum(delay_t v) const { return v; } + delay_t getBudgetOverride(const PortRef &pr, delay_t v) const; // -------------------------------------------------