diff --git a/icebreaker/perbitoe/.gitignore b/icebreaker/perbitoe/.gitignore new file mode 100644 index 0000000..86d98e8 --- /dev/null +++ b/icebreaker/perbitoe/.gitignore @@ -0,0 +1,4 @@ +branch/ +origin/ +perbitoe/ + diff --git a/icebreaker/perbitoe/Makefile b/icebreaker/perbitoe/Makefile new file mode 100644 index 0000000..988c116 --- /dev/null +++ b/icebreaker/perbitoe/Makefile @@ -0,0 +1,27 @@ +all: origin branch perbitoe diff + +origin: singlebitoe.py + python3 singlebitoe.py /home/tom/git/m-labs/migen origin + +branch: singlebitoe.py + python3 singlebitoe.py /home/tom/git/TomKeddie/migen branch + +perbitoe: perbitoe.py + python3 perbitoe.py /home/tom/git/TomKeddie/migen perbitoe + +clean: + rm -rf origin branch perbitoe diff-* + +diff: diff_origin_branch diff_origin_perbitoe + +diff_origin_branch: + diff origin/arty_a7_build/top.v branch/arty_a7_build/ + diff origin/icebreaker_build/top.v branch/icebreaker_build/ + diff origin/papilio_pro_build/top.v branch/papilio_pro_build/ + diff origin/versaecp55g_build/top.v branch/versaecp55g_build/ + +diff_origin_perbitoe: + -diff origin/arty_a7_build/top.v perbitoe/arty_a7_build/ + -diff origin/icebreaker_build/top.v perbitoe/icebreaker_build/ + -diff origin/papilio_pro_build/top.v perbitoe/papilio_pro_build/ + -diff origin/versaecp55g_build/top.v perbitoe/versaecp55g_build/ diff --git a/icebreaker/perbitoe/perbitoe.py b/icebreaker/perbitoe/perbitoe.py new file mode 100644 index 0000000..b74b3f1 --- /dev/null +++ b/icebreaker/perbitoe/perbitoe.py @@ -0,0 +1,60 @@ +import sys + +if len(sys.argv) != 3: + print("Usage: {} ".format(sys.argv[0])) + sys.exit(-1) + +sys.path.append(sys.argv[1]) +build_dir=sys.argv[2] + +from migen import * +from migen.build.generic_platform import Pins +from migen.build.platforms import icebreaker, arty_a7, papilio_pro, versaecp55g + +_icebreaker_connector = [ + ("io", 0, Pins("PMOD1A:0", "PMOD1A:1")), +] + +_papilio_pro_connector = [ + ("io", 0, Pins("A:0", "A:1")), +] + +_arty_a7_connector = [ + ("io", 0, Pins("pmoda:0", "pmoda:1")), +] + +_versaecp55g_connector = [ + ("io", 0, Pins("X3:4", "X3:5")), +] + +class module(Module): + def __init__(self, plat): + pads = plat.request("io") + counter = Signal(26) + t = TSTriple(len(pads), per_bit_oe=True) + self.comb += t.o.eq(counter[25:23:-1]) + self.comb += t.oe.eq(counter[25:23:-1]) + self.specials += t.get_tristate(pads) + self.sync += If(t.i[0] | t.i[1], counter.eq(0)).Else(counter.eq(counter + 1)) + +plat_icebreaker = icebreaker.Platform() +plat_icebreaker.add_extension(_icebreaker_connector) +plat_icebreaker.build(module(plat_icebreaker), run=False, build_dir=build_dir + "/icebreaker_build") + +plat_papilio_pro = papilio_pro.Platform() +plat_papilio_pro.add_extension(_papilio_pro_connector) +plat_papilio_pro.build(module(plat_papilio_pro), run=False, build_dir=build_dir + "/papilio_pro_build") + +plat_versaecp55g = versaecp55g.Platform() +plat_versaecp55g.add_extension(_versaecp55g_connector) +plat_versaecp55g.build(module(plat_versaecp55g), run=False, build_dir=build_dir + "/versaecp55g_build") + +plat_arty_a7 = arty_a7.Platform() +plat_arty_a7.add_extension(_arty_a7_connector) +plat_arty_a7.build(module(plat_arty_a7), run=False, build_dir=build_dir + "/arty_a7_build") + + + + + + diff --git a/icebreaker/perbitoe/singlebitoe.py b/icebreaker/perbitoe/singlebitoe.py new file mode 100644 index 0000000..5d79608 --- /dev/null +++ b/icebreaker/perbitoe/singlebitoe.py @@ -0,0 +1,60 @@ +import sys + +if len(sys.argv) != 3: + print("Usage: {} ".format(sys.argv[0])) + sys.exit(-1) + +sys.path.append(sys.argv[1]) +build_dir=sys.argv[2] + +from migen import * +from migen.build.generic_platform import Pins +from migen.build.platforms import icebreaker, arty_a7, papilio_pro, versaecp55g + +_icebreaker_connector = [ + ("io", 0, Pins("PMOD1A:0", "PMOD1A:1")), +] + +_papilio_pro_connector = [ + ("io", 0, Pins("A:0", "A:1")), +] + +_arty_a7_connector = [ + ("io", 0, Pins("pmoda:0", "pmoda:1")), +] + +_versaecp55g_connector = [ + ("io", 0, Pins("X3:4", "X3:5")), +] + +class module(Module): + def __init__(self, plat): + pads = plat.request("io") + counter = Signal(26) + t = TSTriple(len(pads)) + self.comb += t.o.eq(counter[25:23:-1]) + self.comb += t.oe.eq(counter[25:23:-1]) + self.specials += t.get_tristate(pads) + self.sync += If(t.i[0] | t.i[1], counter.eq(0)).Else(counter.eq(counter + 1)) + +plat_icebreaker = icebreaker.Platform() +plat_icebreaker.add_extension(_icebreaker_connector) +plat_icebreaker.build(module(plat_icebreaker), run=False, build_dir=build_dir + "/icebreaker_build") + +plat_papilio_pro = papilio_pro.Platform() +plat_papilio_pro.add_extension(_papilio_pro_connector) +plat_papilio_pro.build(module(plat_papilio_pro), run=False, build_dir=build_dir + "/papilio_pro_build") + +plat_versaecp55g = versaecp55g.Platform() +plat_versaecp55g.add_extension(_versaecp55g_connector) +plat_versaecp55g.build(module(plat_versaecp55g), run=False, build_dir=build_dir + "/versaecp55g_build") + +plat_arty_a7 = arty_a7.Platform() +plat_arty_a7.add_extension(_arty_a7_connector) +plat_arty_a7.build(module(plat_arty_a7), run=False, build_dir=build_dir + "/arty_a7_build") + + + + + +