def mapToIR(self, ctx: EmitterContext): name = ctx.getName(self) mtyp = self.typ.mapToIR(ctx) defm = low_ir.DefMemory(name, mtyp) ctx.appendFinalStatement(defm, self.scopeId) ref = low_ir.Reference(name, mtyp) ctx.updateRef(self, ref) return ref
def mapToIR(self, ctx: EmitterContext): ref = get_attr(self, "ref") name = get_attr(self, "name") n = ctx.getRef(ref) typ = next(f.typ for f in n.typ.fields if f.name == name) f = low_ir.SubField(n, name, typ) ctx.updateRef(self, f) return f
def mapToIR(self, ctx: EmitterContext): typ = self.typ.mapToIR(ctx) name = ctx.getName(self) w = low_ir.DefRegister(name, typ, ctx.getClock()) ctx.appendFinalStatement(w, self.scopeId) ref = low_ir.Reference(name, typ) ctx.updateRef(self, ref) return ref
def mapToIR(self, ctx: EmitterContext): typ = ctx.getRef(self.typ) name = ctx.getName(self) w = low_ir.DefWire(name, typ) ctx.appendFinalStatement(w, self.scopeId) ref = low_ir.Reference(name, typ) ctx.updateRef(self, ref) return ref
def mapToIR(self, ctx: EmitterContext): val = ctx.getRef(self.initValue) name = ctx.getName(self) w = low_ir.DefRegister(name, val.typ, ctx.getClock(), ctx.getReset(), val) ctx.appendFinalStatement(w, self.scopeId) ref = low_ir.Reference(name, val.typ) ctx.updateRef(self, ref) return ref
def mapToIR(self, ctx: EmitterContext): name = ctx.getName(self) fs = [] for k, v in self._ios.items(): f = v.mapToIOFieldIR(k, ctx) fs.append(f) typ = low_ir.BundleType(fs) port = low_ir.Port(name, low_ir.Output(), low_ir.BundleType(fs)) ref = low_ir.Reference(name, typ) ctx.updateRef(self, ref) ctx.appendFinalPort(port) return ref
def mapToIR(self, ctx: EmitterContext): name = ctx.getName(self) cond = ctx.getRef(self.cond) conseq = ctx.getRef(self.conseq) alt = ctx.getRef(self.alt) m = low_ir.Mux(cond, conseq, alt, conseq.typ) n = low_ir.DefNode(name, m) ctx.appendFinalStatement(n, self.scopeId) ref = low_ir.Reference(name, conseq.typ) ctx.updateRef(self, ref) return ref
def _primMap(ctx: EmitterContext, obj, op, args, consts, tranFormFunc): if consts is None: consts = [] # get items' reference and do checking ars = [ctx.getRef(a) for a in args] newArgs, typ = tranFormFunc(*ars) e = low_ir.DoPrim(op, newArgs, consts, typ) name = ctx.getName(obj) node = low_ir.DefNode(name, e) ctx.appendFinalStatement(node, obj.scopeId) ref = low_ir.Reference(name, typ) ctx.updateRef(obj, ref) return ref
def mapToIR(self, ctx: EmitterContext): # Define Wire name = ctx.getName(self) typ = self.typ.mapToIR(ctx) wire = low_ir.DefWire(name, typ) ctx.appendFinalStatement(wire, self.scopeId) ref = low_ir.Reference(name, typ) ctx.updateRef(self, ref) # Connect Elements for i, node in enumerate(self.lst): for idx, elem in self.subIdxs(low_ir.SubIndex(ref, i, typ.typ), node, ctx): con = low_ir.Connect(idx, elem) ctx.appendFinalStatement(con, self.scopeId) return ref