blob: 02b5933f45a77c0cc23c1c25720fb3086a8dd928 [file] [log] [blame]
#!/usr/bin/env python3
import design
import pytrellis
import database
def make_counter(des, name, size, clock, q):
sum = None
carry = None
for i in range(size):
slice_name = "{}[{}]".format(name, i)
so_name = "{}[{}]_sum".format(name, i)
co_name = "{}[{}]_carry".format(name, i)
q_name = q[i]
if i == 0:
sum_lut = [1, 0] * 8
carry_lut = [0, 1] * 8
des.inst_slice(name=slice_name, a0=q_name, a1=q_name, f0=so_name, f1=co_name, clk=clock, q0=q_name,
params={
"K0.INIT": sum_lut,
"K1.INIT": carry_lut,
"CEMUX": "1",
"GSR": "DISABLED",
"REG0.REGSET": "RESET"
})
else:
sum_lut = [1, 0, 0, 1] * 4
carry_lut = [0, 1, 1, 1] * 4
last_co = "{}[{}]_carry".format(name, i - 1)
des.inst_slice(name=slice_name, a0=q_name, a1=q_name, b0=last_co, b1=last_co, f0=so_name, f1=co_name,
clk=clock, q0=q_name,
params={
"K0.INIT": sum_lut,
"K1.INIT": carry_lut,
"CEMUX": "1",
"GSR": "DISABLED",
"REG0.REGSET": "RESET"
})
def make_bus(name, size):
return ["{}[{}]".format(name, i) for i in range(size)]
def main():
pytrellis.load_database(database.get_db_root())
des = design.Design("LFE5U-45F")
ctr_q = make_bus("Q", 8)
des.router.bind_net_to_port("clk", "R62C89_JQ5") #random input! check!
make_counter(des, "ctr", 8, "clk", ctr_q)
des.make_bitstream("counter.bit")
if __name__ == "__main__":
main()