diff options
author | Clifford Wolf <clifford@clifford.at> | 2018-08-04 16:54:12 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2018-08-04 16:54:12 +0200 |
commit | 31fe52581b34e58189310637ef55b82041c1e04a (patch) | |
tree | d389eda9bba44b35d0960706bfee8455f9eaf8c3 /ice40/arch.cc | |
parent | bd36cc12755e4c90cfdaaa593e5af31c5ba38fa5 (diff) | |
download | nextpnr-31fe52581b34e58189310637ef55b82041c1e04a.tar.gz nextpnr-31fe52581b34e58189310637ef55b82041c1e04a.tar.bz2 nextpnr-31fe52581b34e58189310637ef55b82041c1e04a.zip |
Add generation of models to tmfuzz
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'ice40/arch.cc')
-rw-r--r-- | ice40/arch.cc | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/ice40/arch.cc b/ice40/arch.cc index d44d8c19..3b9a6992 100644 --- a/ice40/arch.cc +++ b/ice40/arch.cc @@ -651,6 +651,7 @@ delay_t Arch::predictDelay(const NetInfo *net_info, const PortRef &sink) const return 250; } +#if 1 int xd = sink_loc.x - driver_loc.x, yd = sink_loc.y - driver_loc.y; int xscale = 120, yscale = 120, offset = 0; @@ -665,6 +666,35 @@ delay_t Arch::predictDelay(const NetInfo *net_info, const PortRef &sink) const offset += 260; return xscale * abs(xd) + yscale * abs(yd) + offset; +#else + float model1_param_offset = 902.1066988; + float model1_param_norm1 = 169.80428447; + float model1_param_norm2 = -503.28635487; + float model1_param_norm3 = 402.96583807; + + float model2_param_offset = -1.09578873e+03; + float model2_param_linear = 5.01094876e-01; + float model2_param_sqrt = 4.71761281e+01; + + float dx = fabsf(sink_loc.x - driver_loc.x); + float dy = fabsf(sink_loc.y - driver_loc.y); + float norm1 = dx + dy; + + float dx2 = dx * dx; + float dy2 = dy * dy; + float norm2 = sqrtf(dx2 + dy2); + + float dx3 = dx2 * dx; + float dy3 = dy2 * dy; + float norm3 = powf(dx3 + dy3, 1.0/3.0); + + float v = model1_param_offset; + v += model1_param_norm1 * norm1; + v += model1_param_norm2 * norm2; + v += model1_param_norm3 * norm3; + + return model2_param_offset + model2_param_linear * v + model2_param_sqrt * sqrtf(v); +#endif } delay_t Arch::getBudgetOverride(const NetInfo *net_info, const PortRef &sink, delay_t budget) const |