In [1]:
import magma as m
import mantle

class Combinational(m.Circuit):
    name = "Combinational"
    IO = ["x", m.In(m.UInt[16]), "y", m.In(m.UInt[16]), "z", m.Out(m.UInt[16])]
    
    @classmethod
    def definition(io):
        m.wire(io.x + io.y, io.z)

In [2]:
from magma.simulator.python_simulator import PythonSimulator
from bit_vector import BitVector

simulator = PythonSimulator(Combinational, clock=None)
simulator.set_value(Combinational.x, 76)
simulator.set_value(Combinational.y, 43)
simulator.evaluate()
assert simulator.get_value(Combinational.z) == 76 + 43
print("Success!")


Success!

In [3]:
m.compile("build/Combinational", Combinational, output="coreir")
%cat build/Combinational.json


{"top":"global.Combinational",
"namespaces":{
  "global":{
    "modules":{
      "Combinational":{
        "type":["Record",[
          ["x",["Array",16,"BitIn"]],
          ["y",["Array",16,"BitIn"]],
          ["z",["Array",16,"Bit"]]
        ]],
        "instances":{
          "coreir_add16_inst0":{
            "genref":"coreir.add",
            "genargs":{"width":["Int",16]}
          }
        },
        "connections":[
          ["self.x","coreir_add16_inst0.in0"],
          ["self.y","coreir_add16_inst0.in1"],
          ["self.z","coreir_add16_inst0.out"]
        ]
      }
    }
  }
}
}