blob: 8a24a4e5055813b671f0e0786a1506f4f7bac1c3 [file] [log] [blame]
#!/usr/bin/env python3
import diamond
from string import Template
import re
device = "LFE5U-45F"
ncl = """
::FROM-WRITER;
design top
{
device
{
architecture sa5p00;
device LFE5U-25F;
package CABGA381;
performance "8";
}
comp SLICE_0
[,,,,A0,B0,D0,C0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,]
{
logical
{
cellmodel-name SLICE;
program "MODE:LOGIC "
"K0::H0=0 "
"K1::H1=0 "
"F0:F "
"F1:F ";
primitive K0 i3_0_lut;
primitive K1 i3_1_lut;
}
site R6C10A;
}
comp SLICE_1
[,,,,A0,B0,D0,C0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,]
{
logical
{
cellmodel-name SLICE;
program "MODE:LOGIC "
"K0::H0=0 "
"K1::H1=0 "
"F0:F "
"F1:F ";
primitive K0 i4_0_lut;
primitive K1 i4_1_lut;
}
site R6C10B;
}
comp SLICE_2
[,,,,A0,B0,D0,C0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,]
{
logical
{
cellmodel-name SLICE;
program "MODE:LOGIC "
"K0::H0=0 "
"K1::H1=0 "
"F0:F "
"F1:F ";
primitive K0 i5_0_lut;
primitive K1 i5_1_lut;
}
site R6C10C;
}
comp SLICE_3
[,,,,A0,B0,D0,C0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,]
{
logical
{
cellmodel-name SLICE;
program "MODE:LOGIC "
"K0::H0=0 "
"K1::H1=0 "
"F0:F "
"F1:F ";
primitive K0 i6_0_lut;
primitive K1 i6_1_lut;
}
site R6C10D;
}
signal q_c
{
signal-pins
// drivers
(SLICE_2, F1),
// loads
$loads;
route
$route;
}
}
"""
sinks = [
("(SLICE_0, A0)", "A0"),
("(SLICE_0, A1)", "A1"),
("(SLICE_1, A0)", "A2"),
("(SLICE_1, A1)", "A3"),
("(SLICE_2, A0)", "A4"),
("(SLICE_3, A0)", "A6"),
("(SLICE_3, A1)", "A7"),
]
timings = []
for i in range(1, 8):
loads = [sinks[j][0] for j in range(i)]
route = ["R6C10_F5_SLICE.R6C10_F5"]
for j in range(i):
destwire = sinks[j][1]
route.append("R6C10_F5.R6C10_{}".format(destwire))
route.append("R6C10_{}.R6C10_{}_SLICE".format(destwire, destwire))
loads_txt = ", \n".join(loads)
route_txt = ", \n".join(route)
desfile = "fanout_{}.ncl".format(i)
with open(desfile, "w") as ouf:
ouf.write(Template(ncl).substitute(loads=loads_txt, route=route_txt))
diamond.run(device, desfile)
with open(desfile.replace("ncl", "twr"), "r") as twrf:
for line in twrf:
m = re.match(r"\s+([0-9.]+)ns\s+R6C10C\.F1 to R6C10A\.A0\s+", line)
if m:
timings.append(float(m.group(1)))
print("")
print("")
print("Fanout\tDelay")
for i in range(len(timings)):
print("{}\t{}".format(i+1, timings[i]))