def main(ninputs, noutputs, input_isbits=True, output_isbits=True, has_clock=False): assert 0 <= ninputs <= 8 assert 0 <= noutputs <= 8 print(m.mantle_target) if m.mantle_target == 'ice40': from loam.boards.icestick import IceStick icestick = IceStick() if has_clock: icestick.Clock.on() for i in range(ninputs): icestick.J1[i].input().on() for i in range(noutputs): icestick.J3[i].output().on() top = icestick.main() if ninputs: top.I = top.J1 if noutputs: top.O = top.J3 elif m.mantle_target == 'spartan3' or m.mantle_target == 'spartan6': from loam.boards.papilioone import PapilioOne from loam.boards.papiliopro import PapilioPro from loam.shields.megawing import MegaWing Papilio = PapilioOne if m.mantle_target == 'spartan3' else PapilioPro megawing = MegaWing(Papilio) if has_clock: megawing.Clock.on() megawing.Switch.on(ninputs) megawing.LED.on(noutputs) top = megawing.main() if ninputs: top.I = top.SWITCH if noutputs: top.O = top.LED else: raise ValueError(m.mantle_target) if ninputs == 1 and input_isbits: top.I = m.bits([top.I]) if noutputs == 1 and output_isbits: top.O = m.bits([top.O]) return top
def main(n): import magma as m m.set_mantle_target('spartan3') from loam.boards.papilioone import PapilioOne from loam.shields.megawing import MegaWing from mantle import LUTN megawing = MegaWing(PapilioOne) megawing.Switch.on(n) megawing.LED.on(1) top = megawing.main() pown = 1 << n lut = LUTN(pown // 2 * [0, 1], pown) I = [top.SWITCH[i] for i in range(n)] if n != 1 else [top.SWITCH] m.wire(lut(*I), top.LED) m.EndCircuit() return top
import sys from magma import * from mantle import * from loam.shields.megawing import MegaWing megawing = MegaWing() megawing.Switch.on(2) megawing.LED.on(1) main = megawing.main() A = main.SWITCH[0] B = main.SWITCH[1] O = main.LED[0] xor2 = Xor2() xor2(A, B) wire(xor2.O, O) compile(sys.argv[1], main)