From 9853c3732f3fb98084cade313f01efbf4e84ed83 Mon Sep 17 00:00:00 2001 From: Cosku Acay Date: Tue, 16 Mar 2021 16:23:26 -0400 Subject: [PATCH 01/12] Add Kiama as a dependency --- build.sbt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.sbt b/build.sbt index e4b1fcf7..6c46c303 100644 --- a/build.sbt +++ b/build.sbt @@ -9,6 +9,9 @@ libraryDependencies ++= Seq( "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.2", "com.lihaoyi" %% "pprint" % "0.5.6", + // Language Processing + "org.bitbucket.inkytonik.kiama" %% "kiama" % "2.4.0", + // SMT Solving "io.github.tudo-aqua" % "z3-turnkey" % "4.8.7.1", From 1bd5b8df6997b2050ae81ecda23d04e4707d1846 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Tue, 6 Apr 2021 12:08:34 -0400 Subject: [PATCH 02/12] first couple of attributes --- .../pipedsl/analysis/TimingAnalysis.scala | 181 ++++++++ .../scala/pipedsl/analysis/TypeAnalysis.scala | 429 ++++++++++++++++++ 2 files changed, 610 insertions(+) create mode 100644 src/main/scala/pipedsl/analysis/TimingAnalysis.scala create mode 100644 src/main/scala/pipedsl/analysis/TypeAnalysis.scala diff --git a/src/main/scala/pipedsl/analysis/TimingAnalysis.scala b/src/main/scala/pipedsl/analysis/TimingAnalysis.scala new file mode 100644 index 00000000..d2464f44 --- /dev/null +++ b/src/main/scala/pipedsl/analysis/TimingAnalysis.scala @@ -0,0 +1,181 @@ +package pipedsl.analysis + +import org.bitbucket.inkytonik.kiama.attribution.Attribution +import org.bitbucket.inkytonik.kiama.relation.Tree +import pipedsl.common.Errors.{UnavailableArgUse, UnexpectedAsyncReference, UnexpectedType} +import pipedsl.common.Syntax.Latency.{Asynchronous, Combinational, Latency} +import pipedsl.common.Syntax.{CAssign, CCheck, CEmpty, CExpr, CIf, CLockEnd, CLockOp, CLockStart, COutput, CPrint, CRecv, CReturn, CSeq, CSpeculate, CSplit, CTBar, Command, EApp, EBinop, EBitExtract, ECall, ECast, EMemAccess, ERecAccess, ETernary, EUop, EVar, Id, Latency, ModuleDef, Prog, ProgramNode, TMemType} + +class TimingAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysis) extends Attribution{ + + type Available = Set[Id] + val NoneAvailable: Available = Set[Id]() + + def checkCommand(c: Command): Unit = c match { + case CSeq(c1, c2) => checkCommand(c1); checkCommand(c2) + case CTBar(c1, c2) => checkCommand(c2); checkCommand(c2) + case CIf(cond, cons, alt) => + if (latency(cond) == Latency.Combinational) { + throw UnexpectedAsyncReference(cond.pos, cond.toString) + } + checkCommand(cons) + checkCommand(alt) + case CAssign(lhs, rhs, typ) => + if (latency(rhs) != Latency.Combinational) { + throw UnexpectedAsyncReference(rhs.pos, rhs.toString) + } + case CRecv(lhs, rhs, typ) => + latency(lhs) + latency(rhs) + case CPrint(evar) => latency(evar) + case COutput(exp) => + if (latency(exp) != Combinational) { + throw UnexpectedAsyncReference(exp.pos, exp.toString) + } + case CReturn(exp) => + if (latency(exp) != Combinational) { + throw UnexpectedAsyncReference(exp.pos, exp.toString) + } + case CExpr(exp) => latency(exp) + case CSpeculate(predVar, predVal, verify, body) => + case CCheck(predVar) => + case CSplit(cases, default) => + checkCommand(default) + for (c <- cases) { + if(latency(c.cond) != Latency.Combinational) { + throw UnexpectedAsyncReference(c.cond.pos, c.cond.toString) + } + checkCommand(c.body) + } + case CLockOp(mem, op) => + if (mem.evar.isDefined) { + latency(mem.evar.get) + } + case CLockStart(mod) => + case CLockEnd(mod) => + case CEmpty => + case _ => + } + + val availableNow: ProgramNode => Available = { + attr { + case program.prev(program.parent(c@CSeq(c1, c2))) => availableNow(c1) + case program.prev(program.parent(c@CTBar(c1, c2))) => availableNow(c1) ++ availableNext(c1) + case program.prev(c@CAssign(lhs@EVar(id), rhs, typ)) => + availableNow(c) + id + case program.prev(c@CIf(cond, cons, alt)) => + availableNowAfterNode(typeAnalysis.rightMostLeaf(cons)) + .intersect(availableNowAfterNode(typeAnalysis.rightMostLeaf(alt))) + case program.prev(c@CSplit(cases, default)) => + cases.foldLeft[Available](availableNowAfterNode(typeAnalysis.rightMostLeaf(default)))( + (s,c) => s.intersect(availableNow(typeAnalysis.rightMostLeaf(c.body))) + ) + case program.parent(m@ModuleDef(name, inputs, modules, ret, body)) => + val inputs = m.inputs.foldLeft[Available](NoneAvailable)((av,p) => { + av + p.name + }) + val allAvailable = m.modules.foldLeft[Available](inputs)((av, m) => { + av + m.name + }) + allAvailable + case program.parent(p) => availableNow(p) + } + } + + /** + * Attribute that gives the available variable after we are are at a node; note that "after" + * is in terms of the sequential view of the program, rather than the recursive AST view + */ + val availableNowAfterNode:ProgramNode => Available = { + attr { + case c@CAssign(lhs@EVar(id), rhs, typ) => availableNow(c) + id + case p => availableNow(p) + } + } + + val availableNext: ProgramNode => Available = + attr { + case program.prev(program.parent(c@CSeq(c1, c2))) => availableNext(c1) + case program.prev(program.parent(c@CTBar(c1, c2))) => NoneAvailable + case program.prev(c@CRecv(lhs, rhs, typ)) => + (lhs, rhs) match { + case (EVar(id), _) => availableNext(c) + id + case (EMemAccess(_,_), EMemAccess(_,_)) => throw UnexpectedAsyncReference(lhs.pos, "Both sides of <- cannot be memory or modules references") + case _ => availableNext(c) + } + case program.prev(c@CIf(cond, cons, alt)) => + availableNext(typeAnalysis.rightMostLeaf(cons)).intersect(availableNext(typeAnalysis.rightMostLeaf(alt))) + case program.prev(c@CSplit(cases, default)) => + cases.foldLeft[Available](availableNext(typeAnalysis.rightMostLeaf(default)))( + (s,c) => s.intersect(availableNext(typeAnalysis.rightMostLeaf(c.body))) + ) + case program.parent(m@ModuleDef(name, inputs, modules, ret, body)) => NoneAvailable + case program.parent(p) => availableNext(p) + } + + val availableNextAfterNode: ProgramNode => Available = { + attr { + case c@CRecv(lhs@EVar(id), rhs, typ) => availableNext(c) + id + case p => availableNext(p) + } + } + + val latency: ProgramNode => Latency = { + case EUop(_, e) => latency(e) match { + case Combinational => Combinational + case _ => throw UnexpectedAsyncReference(e.pos, e.toString) + } + case EBinop(_, e1, e2) => + (latency(e1), latency(e2)) match { + case (Combinational, Combinational) => Combinational + case (Combinational, _) => throw UnexpectedAsyncReference(e2.pos, e2.toString) + case (_, Combinational) => throw UnexpectedAsyncReference(e1.pos, e1.toString) + } + case ERecAccess(rec, _) => latency(rec) match { + case Combinational => Combinational + case _ => throw UnexpectedAsyncReference(rec.pos, rec.toString) + } + case e@EMemAccess(m, index) => typeAnalysis.typeCheck(m) match { + case TMemType(_, _, rLat, wLat) => + val memLat = if (isRhs(e)) { rLat } else { wLat } + val indexExpr = latency(index) + indexExpr match { + case Combinational => memLat + case _ => throw UnexpectedAsyncReference(index.pos, index.toString) + } + case _ => throw UnexpectedType(m.pos, m.v, "Mem Type",typeAnalysis.typeCheck(m)) + } + case EBitExtract(num, _, _) => latency(num) match { + case Combinational => Combinational + case _ => throw UnexpectedAsyncReference(num.pos, num.toString) + } + case ETernary(cond, tval, fval) => + (latency(cond), latency(tval), latency(fval)) match { + case (Combinational, Combinational, Combinational) => Combinational + case (_, Combinational, Combinational) => throw UnexpectedAsyncReference(cond.pos, cond.toString) + case (_, _, Combinational) => throw UnexpectedAsyncReference(tval.pos, tval.toString) + case _ => throw UnexpectedAsyncReference(fval.pos, fval.toString) + } + case EApp(_, args) => + args.foreach(a => if(latency(a) != Combinational) { + throw UnexpectedAsyncReference(a.pos, a.toString) + }) + Combinational + case ECall(_, args) => + args.foreach(a => if(latency(a) != Combinational) { + throw UnexpectedAsyncReference(a.pos, a.toString) + }) + Asynchronous + case e@EVar(id) => if(!availableNow(e)(id) && isRhs(e)) { throw UnavailableArgUse(e.pos, id.toString)} else { Combinational } + case ECast(_, exp) => latency(exp) + case _ => Combinational + } + + val isRhs: ProgramNode => Boolean = { + attr { + case program.prev(program.parent(_:CAssign)) => true + case program.prev(program.parent(_:CRecv)) => true + case _ => false + } + } +} diff --git a/src/main/scala/pipedsl/analysis/TypeAnalysis.scala b/src/main/scala/pipedsl/analysis/TypeAnalysis.scala new file mode 100644 index 00000000..4ff19009 --- /dev/null +++ b/src/main/scala/pipedsl/analysis/TypeAnalysis.scala @@ -0,0 +1,429 @@ +package pipedsl.analysis + +import org.bitbucket.inkytonik.kiama.attribution.Attribution +import org.bitbucket.inkytonik.kiama.relation.Tree +import pipedsl.common.Errors.{ArgLengthMismatch, IllegalCast, MalformedFunction, MissingType, UnexpectedAssignment, UnexpectedCase, UnexpectedCommand, UnexpectedReturn, UnexpectedSubtype, UnexpectedType} +import pipedsl.common.Syntax +import pipedsl.common.Syntax.Latency.{Asynchronous, Combinational, Sequential} +import pipedsl.common.Syntax.{BitOp, BitUOp, BoolOp, BoolUOp, CAssign, CCheck, CDefine, CIf, CLockEnd, CLockOp, CLockStart, COutput, CRecv, CReturn, CSeq, CSpeculate, CSplit, CTBar, CirCall, CirConnect, CirExpr, CirExprStmt, CirMem, CirNew, CirRegFile, CirSeq, Circuit, CmpOp, Command, EVar, EqOp, Expr, FuncDef, Id, ModuleDef, NumOp, NumUOp, Prog, ProgramNode, TBool, TFun, TMemType, TModType, TNamedType, TRecType, TSizedInt, TString, TVoid, Type} +import pipedsl.typechecker.Environments.{Environment, TypeEnv} +import pipedsl.typechecker.Subtypes.{areEqual, isSubtype} + +class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { + + def checkProg(): Unit = { + val prog = program.root + prog.fdefs.foreach(f => { + checkCommand(f.body) + val rt = checkFuncWellFormed(f.body) + if (rt.isEmpty) { + throw MalformedFunction(f.pos, "Missing return statement") + } else if (!areEqual(f.ret, rt.get)) { + throw UnexpectedType(f.pos, s"${f.name} return type", f.ret.toString(), rt.get) + } + }) + prog.moddefs.foreach(m => { + checkCommand(m.body) + checkModuleBodyWellFormed(m.body, Set()) + }) + checkCircuit(prog.circ) + } + + val rightMostLeaf: Command => Command = { + case program.lastChild(p:Command) => rightMostLeaf(p) + case p => p + } + + /** + * This checks that the function doesn't include any disallowed expressions + * or commands (such as Calls) and checks that it does not have code following + * its return statement. This function is recursively defined and should be + * called on the function's body (which is a single command) + * @param c The command to check for well-formedness + * @return Some(return type) if the analyzed command returns a value or None other wise + */ + private def checkFuncWellFormed(c: Command): Option[Type] = c match { + case CSeq(c1, c2) => { + val r1 = checkFuncWellFormed(c1) + val r2 = checkFuncWellFormed(c2) + (r1, r2) match { + case (Some(_), Some(_)) => throw MalformedFunction(c.pos, "Multiple return statements in execution") + case (Some(_), _) => r1 + case (_, Some(_)) => r2 + case (None, None) => None + } + } + case _: CTBar | _: CSplit | _: CSpeculate | _: CCheck | _:COutput => + throw MalformedFunction(c.pos, "Command not supported in combinational functions") + case CIf(_, cons, alt) => + val rt = checkFuncWellFormed(cons) + val rf = checkFuncWellFormed(alt) + (rt, rf) match { + case (Some(t1), Some(t2)) if areEqual(t1, t2) => rt + case (Some(t1), Some(t2)) => throw MalformedFunction(c.pos, s"Mismatched return types ${t1.toString()}, and ${t2.toString()}") + case (None, None) => None + case _ => throw MalformedFunction(c.pos, "Missing return in branch of if") + } + case CReturn(exp) => Some(typeCheck(exp)) + case _ => None + } + + /** + * Checks that no variable is assigned multiple times in the command. + * @param c The command to check. + * @return The set of variables that get assigned in this command. + */ + private def checkModuleBodyWellFormed(c: Command, assignees: Set[Id]): Set[Id] = c match { + case CSeq(c1, c2) => + val a2 = checkModuleBodyWellFormed(c1, assignees) + checkModuleBodyWellFormed(c2,a2) + case CTBar(c1, c2) => + val a2 = checkModuleBodyWellFormed(c1, assignees) + checkModuleBodyWellFormed(c2, a2) + case CSplit(cs, d) => + val branches = cs.map(c => c.body) :+ d + //check all branches in same context + branches.foldLeft(assignees)((res, c) => { + val cassgns = checkModuleBodyWellFormed(c, assignees) + res ++ cassgns + }) + case CIf(_, cons, alt) => + val ast = checkModuleBodyWellFormed(cons, assignees) + val asf = checkModuleBodyWellFormed(alt, assignees) + ast ++ asf + case CRecv(lhs@EVar(id), _, _) => + if (assignees(id)) { throw UnexpectedAssignment(lhs.pos, id) } else { + assignees + id + } + case CAssign(lhs@EVar(id), _, _) => + if (assignees(id)) { throw UnexpectedAssignment(lhs.pos, id) } else { + assignees + id + } + //returns are only for function calls + case CReturn(_) => throw UnexpectedReturn(c.pos) + case _ => assignees + } + + val contextAfterNode: ProgramNode => Environment[Id, Type] = { + attr { + case c@CAssign(lhs@EVar(id), rhs, typ) => context(c).add(id, typ.get) + case c@CRecv(lhs@EVar(id), rhs, typ) => context(c).add(id, typ.get) + case p => context(p) + } + } + + val context: ProgramNode => Environment[Id, Type] = { + attr { + //Context is prev OR parent + //Need to match prev with CAssign, CIf,or CSplit, or CRecV + case program.prev(p@CAssign(lhs@EVar(id), rhs, Some(typ))) => context(p).add(id, typ) + case program.prev(p@CRecv(lhs@EVar(id), rhs, Some(typ))) => context(p).add(id, typ) + case program.prev(p@CIf(cond, tbranch, fbranch)) => + contextAfterNode(rightMostLeaf(tbranch)).intersect(contextAfterNode(rightMostLeaf(fbranch))) + case program.prev(p@CSplit(cases, default)) => + cases.foldLeft[Environment[Id, Type]](contextAfterNode(rightMostLeaf(default)))( + (env, v) => env.intersect(contextAfterNode(rightMostLeaf(v.body))) + ) + case program.parent(m@ModuleDef(name,inputs,modules,ret,body)) => + val tenv = context(m) + val inEnv = inputs.foldLeft[Environment[Id, Type]](tenv)((env, p) => { env.add(p.name, p.typ) }) + val pipeEnv = modules.foldLeft[Environment[Id, Type]](inEnv)((env, p) => + { env.add(p.name, replaceNamedType(p.typ, m)) }) + pipeEnv.add(m.name, typeCheck(m)) + case program.parent(f@FuncDef(name, args, ret, body)) => + val tenv = context(f) + f.args.foldLeft[Environment[Id, Type]](tenv)((env, p) => { env.add(p.name, p.typ)}) + case program.prev(f@FuncDef(name, args, ret, body))=> + context(f).add(f.name, typeCheck(f)) + case program.prev(m@ModuleDef(name, inputs, modules, ret, body)) => + context(m).add(m.name, typeCheck(m)) + case program.prev(cc@CirConnect(name, c)) => context(cc).add(name, checkCirExpr(c)) + case program.parent(p) => context(p) + case program.root => TypeEnv() + } + } + + + //Module parameters can't be given a proper type during parsing if they refer to another module + //This uses module names in the type environment to lookup their already checked types + private def replaceNamedType(t: Type, mod: ModuleDef): Type = t match { + case TNamedType(name) => context(mod)(name) + case _ => t + } + + def checkCommand(c: Command): Unit = { + val tenv = context(c) + c match { + case CSeq(c1, c2) => checkCommand(c1); checkCommand(c2); + case CTBar(c1, c2) => checkCommand(c1); checkCommand(c2); + case CIf(cond, cons, alt) => + typeCheck(cond).matchOrError(cond.pos, "if condition", "boolean") { case _: TBool => () } + checkCommand(cons) + checkCommand(alt) + case CAssign(lhs, rhs, typ) => + val lTyp = typeCheck(lhs) + val rTyp = typeCheck(rhs) + if (isSubtype(rTyp, lTyp)) TVoid() else throw UnexpectedSubtype(rhs.pos, "assignment", lTyp, rTyp) + case CRecv(lhs, rhs, typ) => + val lTyp = typeCheck(lhs) + val rTyp = typeCheck(rhs) + if (isSubtype(rTyp, lTyp)) TVoid() else throw UnexpectedSubtype(rhs.pos, "assignment", lTyp, rTyp) + case Syntax.CPrint(evar) => + val t = typeCheck(evar) + t match { + case _ => throw UnexpectedType(evar.pos, evar.toString, "Need a printable type", t) + } + case Syntax.COutput(exp) => typeCheck(exp) + case Syntax.CReturn(exp) => typeCheck(exp) + case Syntax.CExpr(exp) => typeCheck(exp) + case CLockStart(mod) => tenv(mod).matchOrError(mod.pos, "lock reservation start", "Memory or Module Type") + { + case _: TModType => () + case _: TMemType => () + } + case CLockEnd(mod) => tenv(mod).matchOrError(mod.pos, "lock reservation start", "Memory or Module Type") + { + case _: TModType => () + case _: TMemType => () + } + case CLockOp(mem, _) => { + tenv(mem.id).matchOrError(mem.pos, "lock operation", "Memory or Module Type") + { + case t: TModType => + if (mem.evar.isDefined) throw UnexpectedType(t.pos, "address lock operation", "Memory Type", t) + case memt: TMemType => { + if(!mem.evar.isEmpty) { + val idxt = typeCheck(mem.evar.get) + idxt match { + case TSizedInt(l, true) if l == memt.addrSize => () + case _ => throw UnexpectedType(mem.pos, "lock operation", "ubit<" + memt.addrSize + ">", idxt) + } + } + } + } + } + case CSplit(cases, default) => + for (c <- cases) { + val condTyp = typeCheck(c.cond) + condTyp.matchOrError(c.cond.pos, "case condition", "boolean") { case _: TBool => () } + checkCommand(c.body) + } + checkCommand(default) + case Syntax.CSpeculate(predVar, predVal, verify, body) => + case Syntax.CCheck(predVar) => + case Syntax.CEmpty => + case _ => throw UnexpectedCommand(c) + } + } + + def checkCircuit(c: Circuit): Unit = { + c match { + case CirSeq(c1, c2) => { + checkCircuit(c1) + checkCircuit(c2) + } + case CirConnect(name, c) => + val t = typeCheck(c) + case CirExprStmt(ce) => typeCheck(ce) + } + } + + val typeCheck: ProgramNode => Type = { + attr { + //used to get the defined type of a node + case program.next(program.parent(p@CAssign(lhs@EVar(id), rhs, typ))) => typ.get + case program.next(program.parent(p@CRecv(lhs@EVar(id), rhs, typ))) => typ.get + case program.parent.pair(id: Id, evar: EVar) => typeCheck(evar) + case program.parent.pair(id: Id, mod: ModuleDef) => typeCheck(mod) + case program.parent.pair(id: Id, func: FuncDef) => typeCheck(func) + case i:Id => context(i)(i) + case e: Syntax.Expr => checkExpr(e) + case ce: CirExpr => checkCirExpr(ce) + case m: ModuleDef => //TODO disallow memories + val inputTyps = m.inputs.foldLeft[List[Type]](List())((l, p) => { l :+ p.typ }) + //TODO require memory or module types + val modTyps = m.modules.foldLeft[List[Type]](List())((l, p) => { l :+ replaceNamedType(p.typ, m) }) + TModType(inputTyps, modTyps, m.ret, Some(m.name)) + case f: FuncDef => + val typList = f.args.foldLeft[List[Type]](List())((l, p) => { l :+ p.typ }) //TODO disallow memories as params + TFun(typList, f.ret) + + } + } + + def checkExpr(e: Expr): Type = { + val tenv = context(e) + e match { + case Syntax.EInt(v, base, bits) => TSizedInt(bits, unsigned = true) + case Syntax.EString(v) =>TString() + case Syntax.EBool(v) =>TBool() + case Syntax.EUop(op, ex) => + val t1= typeCheck(ex) + op match { + case BoolUOp(op) => t1.matchOrError(e.pos, "boolean op", "boolean") { case _: TBool => TBool() } + case NumUOp(op) => t1.matchOrError(e.pos, "number op", "number") { case t: TSizedInt => t } + case BitUOp(op) => t1.matchOrError(e.pos, "bit op", "sized integer") { case t: TSizedInt => t } + } + case Syntax.EBinop(op, e1, e2) => + val t1 = typeCheck(e1) + val t2 = typeCheck(e2) + op match { + case BitOp("++", _) => (t1, t2) match { + case (TSizedInt(l1, u1), TSizedInt(l2, u2)) if u1 == u2 => TSizedInt(l1 + l2, u1) + case (_, _) => throw UnexpectedType(e.pos, "concat", "sized number", t1) + } + case BitOp("<<", _) => (t1, t2) match { + case (TSizedInt(l1, u1), TSizedInt(_, _)) => TSizedInt(l1, u1) + } + case BitOp(">>", _) => (t1, t2) match { + case (TSizedInt(l1, u1), TSizedInt(_, _)) => TSizedInt(l1, u1) + } + case NumOp("*", _) => (t1, t2) match { + case (TSizedInt(l1, u1), TSizedInt(l2, u2)) if u1 == u2 => TSizedInt(l1 + l2, u1) + case (_, _) => throw UnexpectedType(e.pos, "concat", "sized number", t1) + } + case _ => if (!areEqual(t1, t2)) { throw UnexpectedType(e2.pos, e2.toString, t1.toString(), t2) } else { + op match { + case EqOp(_) => TBool() + case CmpOp(_) => TBool() + case BoolOp(_, _) => t1.matchOrError(e1.pos, "boolean op", "boolean") { case _: TBool => TBool() } + case NumOp(_, _) => t1.matchOrError(e1.pos, "number op", "number") { case t: TSizedInt => t} + case BitOp(_, _) => t1.matchOrError(e1.pos, "bit op", "sized integer") { case t: TSizedInt => t } + } + } + } + case Syntax.ERecAccess(rec, fieldName) => + val rt = typeCheck(rec) + rt match { + case TRecType(n, fs) => fs.get(fieldName) match { + case Some(t) => t + case _ => throw MissingType(fieldName.pos, s"Field $n. ${fieldName.v}") + } + case _ => throw UnexpectedType(e.pos, "record access", "record type", rt) + } + case Syntax.ERecLiteral(fields) => + val ftyps = fields map { case (n, e) => (n, typeCheck(e)) } + TRecType(Id("anon"), ftyps)//TODO these are wrong, maybe just remove these + case Syntax.EMemAccess(mem, index) => + val memt = tenv(mem) + val idxt= typeCheck(index) + (memt, idxt) match { + case (TMemType(e, s, _, _), TSizedInt(l, true)) if l == s => e + case _ => throw UnexpectedType(e.pos, "memory access", "mismatched types", memt) + } + case Syntax.EBitExtract(num, start, end) => + val ntyp = typeCheck(num) + val bitsLeft = math.abs(end - start) + 1 + ntyp.matchOrError(e.pos, "bit extract", "sized number") { + case TSizedInt(l, u) if l >= bitsLeft => TSizedInt(bitsLeft, u) + case _ => throw UnexpectedType(e.pos, "bit extract", "sized number larger than extract range", ntyp) + } + case Syntax.ETernary(cond, tval, fval) => + val ctyp = typeCheck(cond) + ctyp.matchOrError(cond.pos, "ternary condition", "boolean") { case _: TBool => () } + val ttyp = typeCheck(tval) + val ftyp = typeCheck(fval) + if (areEqual(ttyp, ftyp)) ttyp + else throw UnexpectedType(e.pos, "ternary", s"false condition must match ${ttyp.toString}", ftyp) + case Syntax.EApp(func, args) => + val ftyp = tenv(func) + ftyp match { + case TFun(targs, tret) => { + if (targs.length != args.length) { + throw ArgLengthMismatch(e.pos, targs.length, args.length) + } + targs.zip(args).foreach { + case (expectedT, a) => + val atyp = typeCheck(a) + if (!isSubtype(atyp, expectedT)) { + throw UnexpectedSubtype(e.pos, a.toString, expectedT, atyp) + } + } + tret + } + case _ => throw UnexpectedType(func.pos, "function call", "function type", ftyp) + } + case Syntax.ECall(mod, args) => + val mtyp = tenv(mod) + mtyp match { + case TModType(inputs, _, retType, _) => { + if (inputs.length != args.length) { + throw ArgLengthMismatch(e.pos, inputs.length, args.length) + } + inputs.zip(args).foreach { + case (expectedT, a) => + val atyp = typeCheck(a) + if (!isSubtype(atyp, expectedT)) { + throw UnexpectedSubtype(e.pos, a.toString, expectedT, atyp) + } + } + if (retType.isDefined) retType.get else TVoid() + } + case _ => throw UnexpectedType(mod.pos, "module name", "module type", mtyp) + } + case EVar(id) => tenv(id) + case Syntax.ECast(ctyp, exp) => + val etyp = typeCheck(exp) + (ctyp, etyp) match { + case (t1, t2) if !areEqual(t1, t2) => throw IllegalCast(e.pos, t1, t2) + case _ => () + } + ctyp + case _ => throw UnexpectedCase(e.pos) + } + } + + def checkCirExpr(c: CirExpr): Type = { + val tenv = context(c) + c match { + case CirMem(elemTyp, addrSize) => { + val mtyp = TMemType(elemTyp, addrSize, Asynchronous, Asynchronous) + mtyp + } + case CirRegFile(elemTyp, addrSize) => { + val mtyp = TMemType(elemTyp, addrSize, Combinational, Sequential) + mtyp + } + case CirNew(mod, mods) => { + val mtyp = context(c)(mod) + mtyp match { + case TModType(_, refs, _, _) => { + if(refs.length != mods.length) { + throw ArgLengthMismatch(c.pos, mods.length, refs.length) + } + refs.zip(mods).foreach { + case (reftyp, mname) => { + if (!(isSubtype(tenv(mname), reftyp))) { + throw UnexpectedSubtype(mname.pos, mname.toString, reftyp, tenv(mname)) + } + } + } + mtyp + } + case x => throw UnexpectedType(c.pos, c.toString, "Module Type", x) + } + } + case CirCall(mod, inits) => { + val mtyp = tenv(mod) + mtyp match { + case TModType(ityps, _, _, _) => { + if(ityps.length != inits.length) { + throw ArgLengthMismatch(c.pos, inits.length, ityps.length) + } + ityps.zip(inits).foreach { + case (expectedT, arg) => { + val atyp = typeCheck(arg) + if (!isSubtype(atyp, expectedT)) { + throw UnexpectedSubtype(arg.pos, arg.toString, expectedT, atyp) + } + } + } + mtyp + } + case x => throw UnexpectedType(c.pos, c.toString, "Module Type", x) + } + } + } + + } +} From b74f733abe6af89492ee0e8be056fe4d4e062db8 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Thu, 15 Apr 2021 22:22:27 -0400 Subject: [PATCH 03/12] broken --- src/main/scala/pipedsl/Interpreter.scala | 4 +- src/main/scala/pipedsl/Main.scala | 18 ++- src/main/scala/pipedsl/Parser.scala | 28 ++-- .../pipedsl/analysis/AnalysisProvider.scala | 9 ++ .../pipedsl/analysis/PredicateAnalysis.scala | 109 +++++++++++++ .../pipedsl/analysis/TimingAnalysis.scala | 12 +- .../scala/pipedsl/analysis/TypeAnalysis.scala | 20 ++- .../scala/pipedsl/codegen/bsv/BSVSyntax.scala | 17 +- .../codegen/bsv/BluespecGeneration.scala | 33 ++-- src/main/scala/pipedsl/common/DAGSyntax.scala | 15 +- .../scala/pipedsl/common/PrettyPrinter.scala | 14 +- src/main/scala/pipedsl/common/Syntax.scala | 43 ++--- src/main/scala/pipedsl/common/Utilities.scala | 31 ++-- .../pipedsl/passes/CanonicalizePass.scala | 6 +- .../pipedsl/passes/ConvertAsyncPass.scala | 13 +- .../passes/LockOpTranslationPass.scala | 6 +- .../passes/MarkNonRecursiveModulePass.scala | 4 +- .../pipedsl/passes/RemoveReentrantPass.scala | 4 +- .../pipedsl/passes/RemoveTimingPass.scala | 13 +- .../pipedsl/passes/SimplifyRecvPass.scala | 43 +++-- .../pipedsl/passes/SplitStagesPass.scala | 2 +- .../pipedsl/typechecker/BaseTypeChecker.scala | 12 +- .../pipedsl/typechecker/Environments.scala | 5 +- .../typechecker/LockConstraintChecker.scala | 150 ++++++------------ .../typechecker/LockRegionChecker.scala | 2 +- .../typechecker/LockWellformedChecker.scala | 2 +- .../typechecker/PredicateGenerator.scala | 109 +++++-------- .../typechecker/SpeculationChecker.scala | 2 +- .../typechecker/TimingTypeChecker.scala | 9 +- src/test/tests/multiExec/multiexec.pdl | 12 -- 30 files changed, 413 insertions(+), 334 deletions(-) create mode 100644 src/main/scala/pipedsl/analysis/AnalysisProvider.scala create mode 100644 src/main/scala/pipedsl/analysis/PredicateAnalysis.scala diff --git a/src/main/scala/pipedsl/Interpreter.scala b/src/main/scala/pipedsl/Interpreter.scala index f456f143..a16e2f68 100644 --- a/src/main/scala/pipedsl/Interpreter.scala +++ b/src/main/scala/pipedsl/Interpreter.scala @@ -102,7 +102,7 @@ class Interpreter(val maxIterations: Int) { interp_command(fbr, env) } } - case CAssign(lhs, rhs) => { + case CAssign(lhs, rhs, typ) => { val rval = interp_expr(rhs, env) lhs match { case EVar(id) => { @@ -114,7 +114,7 @@ class Interpreter(val maxIterations: Int) { case _ => throw Errors.UnexpectedExpr(lhs) } } - case CRecv(lhs, rhs) => { + case CRecv(lhs, rhs, typ) => { val rval = interp_expr(rhs, env) lhs match { case EVar(id) => { diff --git a/src/main/scala/pipedsl/Main.scala b/src/main/scala/pipedsl/Main.scala index 370217b2..e89afa70 100644 --- a/src/main/scala/pipedsl/Main.scala +++ b/src/main/scala/pipedsl/Main.scala @@ -3,8 +3,10 @@ package pipedsl import java.io.{File, PrintWriter} import java.nio.file.{Files, Paths, StandardCopyOption} +import com.microsoft.z3.Context import com.typesafe.scalalogging.Logger import org.apache.commons.io.FilenameUtils +import pipedsl.analysis.{PredicateAnalysis, TimingAnalysis, TypeAnalysis} import pipedsl.codegen.bsv.{BSVPrettyPrinter, BluespecInterfaces} import pipedsl.codegen.bsv.BluespecGeneration.BluespecProgramGenerator import pipedsl.common.DAGSyntax.PStage @@ -66,18 +68,18 @@ object Main { val pinfo = new ProgInfo(prog) try { val canonProg = CanonicalizePass.run(prog) - val basetypes = BaseTypeChecker.check(canonProg, None) - val nprog = new BindModuleTypes(basetypes).run(canonProg) - TimingTypeChecker.check(nprog, Some(basetypes)) - MarkNonRecursiveModulePass.run(nprog) - val recvProg = SimplifyRecvPass.run(nprog) + TypeAnalysis.get(prog).checkProg() + TimingAnalysis.get(prog).checkProg() + MarkNonRecursiveModulePass.run(prog) + val recvProg = SimplifyRecvPass.run(prog) LockRegionChecker.check(recvProg, None) val lockWellformedChecker = new LockWellformedChecker() val locks = lockWellformedChecker.check(canonProg) pinfo.addLockInfo(lockWellformedChecker.getModLockTypeMap) - val lockChecker = new LockConstraintChecker(locks, lockWellformedChecker.getModLockTypeMap) + val ctx = new Context() + val lockChecker = new LockConstraintChecker(PredicateAnalysis.get(recvProg, ctx), locks, lockWellformedChecker.getModLockTypeMap, ctx) lockChecker.check(recvProg, None) - SpeculationChecker.check(recvProg, Some(basetypes)) + //SpeculationChecker.check(recvProg, Some(basetypes)) if (printOutput) { val writer = new PrintWriter(outputFile) writer.write("Passed") @@ -103,7 +105,7 @@ object Main { //Run the transformation passes on the stage representation stageInfo map { case (n, stgs) => //Change Recv statements into send + recv pairs - new ConvertAsyncPass(n).run(stgs) + new ConvertAsyncPass(n, TypeAnalysis.get(prog)).run(stgs) //Convert lock ops into ops that track explicit handles LockOpTranslationPass.run(stgs) //Add in extra conditionals to ensure address locks are not double acquired diff --git a/src/main/scala/pipedsl/Parser.scala b/src/main/scala/pipedsl/Parser.scala index dc9d6900..f5587a67 100644 --- a/src/main/scala/pipedsl/Parser.scala +++ b/src/main/scala/pipedsl/Parser.scala @@ -143,14 +143,13 @@ class Parser extends RegexParsers with PackratParsers { lazy val lhs: Parser[Expr] = memAccess | variable lazy val simpleCmd: P[Command] = positioned { - typ.? ~ variable ~ "=" ~ expr ^^ { case t ~ n ~ _ ~ r => n.typ = t; CAssign(n, r) } | - typ.? ~ lhs ~ "<-" ~ expr ^^ { case t ~ l ~ _ ~ r => l.typ = t - CRecv(l, r) + typ.? ~ variable ~ "=" ~ expr ^^ { case t ~ n ~ _ ~ r => CAssign(n, r, t) } | + typ.? ~ lhs ~ "<-" ~ expr ^^ { case t ~ l ~ _ ~ r => CRecv(l, r, t) } | check | "start" ~> parens(iden) ^^ { i => CLockStart(i) } | "end" ~> parens(iden) ^^ { i => CLockEnd(i) } | - "acquire" ~> parens(lockArg) ^^ { i => CSeq(CLockOp(i, Reserved), CLockOp(i, Acquired)) } | + "acquire" ~> parens(lockArg) ^^ { i => CSeq(CLockOp(i, Reserved), CLockOp(copyLockArg(i), Acquired)) } | "reserve" ~> parens(lockArg) ^^ { i => CLockOp(i, Reserved)} | "block" ~> parens(lockArg) ^^ { i => CLockOp(i, Acquired) } | "release" ~> parens(lockArg) ^^ { i => CLockOp(i, Released)} | @@ -160,6 +159,15 @@ class Parser extends RegexParsers with PackratParsers { expr ^^ (e => CExpr(e)) } + private def copyLockArg(l: LockArg): LockArg = { + val evar = l.evar match { + case Some(e) => Some(e.copy(id = e.id.copy())) + case None => None + } + LockArg(l.id.copy(), evar) + } + + lazy val lockArg: P[LockArg] = positioned { iden ~ brackets(variable).? ^^ {case i ~ v => LockArg(i, v)} } @@ -171,7 +179,6 @@ class Parser extends RegexParsers with PackratParsers { lazy val speculate: P[Command] = positioned { "speculate" ~> parens(typ ~ variable ~ "=" ~ expr ~ "," ~ block ~ "," ~ block) ^^ { case t ~ v ~ _ ~ ev ~ _ ~ cv ~ _ ~ cs => - v.typ = Some(t) CSpeculate(v, ev, cv, cs) } } @@ -186,23 +193,23 @@ class Parser extends RegexParsers with PackratParsers { "default:" ~> block } lazy val split: P[Command] = positioned { - "split" ~> braces(rep(casestmt) ~ defaultcase.?) ^^ { case cl ~ dc => CSplit(cl, if (dc.isDefined) dc.get else CEmpty) } + "split" ~> braces(rep(casestmt) ~ defaultcase.?) ^^ { case cl ~ dc => CSplit(cl, if (dc.isDefined) dc.get else CEmpty()) } } lazy val block: P[Command] = { - braces(cmd.?) ^^ (c => c.getOrElse(CEmpty)) + braces(cmd.?) ^^ (c => c.getOrElse(CEmpty())) } lazy val conditional: P[Command] = positioned { "if" ~> parens(expr) ~ block ~ ("else" ~> blockCmd).? ^^ { - case cond ~ cons ~ alt => CIf(cond, cons, if (alt.isDefined) alt.get else CEmpty) + case cond ~ cons ~ alt => CIf(cond, cons, if (alt.isDefined) alt.get else CEmpty()) } } - lazy val seqCmd: P[Command] = { + lazy val seqCmd: P[Command] = { simpleCmd ~ ";" ~ seqCmd ^^ { case c1 ~ _ ~ c2 => CSeq(c1, c2) } | blockCmd ~ seqCmd ^^ { case c1 ~ c2 => CSeq(c1, c2) } | - simpleCmd <~ ";" | blockCmd | "" ^^ { _ => CEmpty } + simpleCmd <~ ";" | blockCmd | "" ^^ { _ => CEmpty() } } lazy val cmd: P[Command] = positioned { @@ -234,7 +241,6 @@ class Parser extends RegexParsers with PackratParsers { lazy val typeName: P[Type] = iden ^^ { i => TNamedType(i) } lazy val param: P[Param] = iden ~ ":" ~ (typ | typeName) ^^ { case i ~ _ ~ t => - i.typ = Some(t) Param(i, t) } diff --git a/src/main/scala/pipedsl/analysis/AnalysisProvider.scala b/src/main/scala/pipedsl/analysis/AnalysisProvider.scala new file mode 100644 index 00000000..3e762a42 --- /dev/null +++ b/src/main/scala/pipedsl/analysis/AnalysisProvider.scala @@ -0,0 +1,9 @@ +package pipedsl.analysis + +import pipedsl.common.Syntax.Prog + +trait AnalysisProvider[Analysis] { + + def get(program: Prog): Analysis + +} diff --git a/src/main/scala/pipedsl/analysis/PredicateAnalysis.scala b/src/main/scala/pipedsl/analysis/PredicateAnalysis.scala new file mode 100644 index 00000000..b58bd44b --- /dev/null +++ b/src/main/scala/pipedsl/analysis/PredicateAnalysis.scala @@ -0,0 +1,109 @@ +package pipedsl.analysis + +import com.microsoft.z3.{AST => Z3AST, BoolExpr => Z3BoolExpr, Context => Z3Context, Expr => Z3Expr} +import org.bitbucket.inkytonik.kiama.attribution.Attribution +import org.bitbucket.inkytonik.kiama.relation.Tree +import pipedsl.common.Syntax +import pipedsl.common.Syntax.{BoolOp, BoolUOp, CIf, CSeq, CSplit, CaseObj, Command, EVar, EqOp, Expr, ModuleDef, Prog, ProgramNode} +import pipedsl.common.Utilities.{mkAnd, mkOr} + +class PredicateAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysis, ctx: Z3Context) extends Attribution{ + + private val intArray = ctx.mkArraySort(ctx.getIntSort, ctx.getIntSort) + private var incrementer = 0 + + val increment: Unit => Int = { + _ => + incrementer += 1 + incrementer + } + + private def addPredicate(cond: Expr): Z3Expr = abstractInterp(cond) match { + case Some(value) => value + case None => ctx.mkEq(ctx.mkBoolConst("__TOPCONSTANT__" + increment()), ctx.mkTrue()) + } + + // Gives the condition for a branch + val branchCond: ProgramNode => Z3BoolExpr = attr { + case program.prev.pair(p: Command, program.parent.pair(prev: Expr, c@CIf(cond, cons, alt))) => + addPredicate(cond).asInstanceOf[Z3BoolExpr] + case program.prev.pair(p: Command, program.parent.pair(prev: Command, c@CIf(cond, cons, alt))) => + ctx.mkNot(branchCond(prev)) + case program.prev.pair(c@CaseObj(_, _), prev@CaseObj(_, _)) => mkAnd(ctx, ctx.mkNot(runningConds(prev)), caseCond(c)) + case program.prev.pair(default: Command, prev@CaseObj(_, _)) => ctx.mkNot(runningConds(prev)) + case program.parent.pair(c@CaseObj(_, _), p@CSplit(_, _)) => caseCond(c) + } + + val caseCond: CaseObj => Z3BoolExpr = attr { + case c@CaseObj(cond, body) => addPredicate(cond).asInstanceOf[Z3BoolExpr] + } + + val runningConds: CaseObj => Z3BoolExpr = attr { + case program.prev.pair(c@CaseObj(_,_), cprev@CaseObj(_, _)) => mkOr(ctx, runningConds(cprev), caseCond(c)) + case c: CaseObj => caseCond(c) + } + + //TODO: Add error in case of unexpected case, this is only called in lock constraint checker though + val predicate: ProgramNode => Z3BoolExpr = { + attr { + case program.parent.pair(c: Command, cif@CIf(_, _, _)) => mkAnd(ctx, predicate(cif), branchCond(c)) + case program.parent.pair(p, c: CSplit) => mkAnd(ctx, predicate(c), branchCond(p)) + case program.parent(_:ModuleDef) => ctx.mkTrue() + case program.parent(p) => predicate(p) + } + } + + val abstractInterp: Expr => Option[Z3Expr] = + attr { + case evar: EVar => Some(declareConstant(evar)) + case Syntax.EInt(v, base, bits) => Some(ctx.mkInt(v)) + case Syntax.EBool(v) => if (v) Some(ctx.mkTrue()) else Some(ctx.mkFalse()) + case Syntax.EUop(op, ex) => + val absex = abstractInterp(ex) + (op, absex) match { + case (BoolUOp(o), Some(v)) if o == "!" => Some(ctx.mkNot(v.asInstanceOf[Z3BoolExpr])) + case _ => None + } + case Syntax.EBinop(op, e1, e2) => + val abse1 = abstractInterp(e1) + val abse2 = abstractInterp(e2) + (op, abse1, abse2) match { + case (EqOp(o), Some(v1), Some(v2)) if o == "==" => Some(ctx.mkEq(v1, v2)) + case (EqOp(o), Some(v1), Some(v2)) if o == "!=" => Some(ctx.mkNot(ctx.mkEq(v1, v2))) + case (BoolOp(o, _), Some(v1), Some(v2)) if o == "&&" => + Some(ctx.mkAnd(v1.asInstanceOf[Z3BoolExpr], v2.asInstanceOf[Z3BoolExpr])) + case (BoolOp(o, _), Some(v1), Some(v2)) if o == "||" => + Some(ctx.mkOr(v1.asInstanceOf[Z3BoolExpr], v2.asInstanceOf[Z3BoolExpr])) + case _ => None + } + case Syntax.ETernary(cond, tval, fval) => + val abscond = abstractInterp(cond) + val abstval = abstractInterp(tval) + val absfval = abstractInterp(fval) + (abscond, abstval, absfval) match { + case (Some(vcond), Some(vtval), Some(vfval)) => + Some(ctx.mkITE(vcond.asInstanceOf[Z3BoolExpr], vtval, vfval)) + case _ => + None + } + case _ => None + } + + def declareConstant(evar: EVar): Z3Expr = + typeAnalysis.typeCheck(evar) match { + case _: Syntax.TSizedInt => ctx.mkIntConst(evar.id.v); + case _: Syntax.TBool => ctx.mkBoolConst(evar.id.v) + case _: Syntax.TMemType => ctx.mkConst(evar.id.v, intArray) + case _ => throw new RuntimeException("Unexpected type") + } +} +object PredicateAnalysis extends Attribution { + val instance: Z3Context => Prog => PredicateAnalysis = + paramAttr { + ctx => { + case p => new PredicateAnalysis(new Tree[ProgramNode, Prog](p), TypeAnalysis.get(p), ctx) + } + } + def get(program: Prog, ctx: Z3Context): PredicateAnalysis = instance(ctx)(program) +} + diff --git a/src/main/scala/pipedsl/analysis/TimingAnalysis.scala b/src/main/scala/pipedsl/analysis/TimingAnalysis.scala index d2464f44..ba9bd8ce 100644 --- a/src/main/scala/pipedsl/analysis/TimingAnalysis.scala +++ b/src/main/scala/pipedsl/analysis/TimingAnalysis.scala @@ -11,6 +11,8 @@ class TimingAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysi type Available = Set[Id] val NoneAvailable: Available = Set[Id]() + def checkProg(): Unit = program.root.moddefs.foreach(checkModule(_)) + def checkModule(m: ModuleDef): Unit = checkCommand(m.body) def checkCommand(c: Command): Unit = c match { case CSeq(c1, c2) => checkCommand(c1); checkCommand(c2) case CTBar(c1, c2) => checkCommand(c2); checkCommand(c2) @@ -53,7 +55,7 @@ class TimingAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysi } case CLockStart(mod) => case CLockEnd(mod) => - case CEmpty => + case CEmpty() => case _ => } @@ -179,3 +181,11 @@ class TimingAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysi } } } + +object TimingAnalysis extends Attribution with AnalysisProvider[TimingAnalysis] { + val instance: Prog => TimingAnalysis = + attr { + case p => new TimingAnalysis(new Tree[ProgramNode, Prog](p), TypeAnalysis.get(p)) + } + override def get(program: Prog): TimingAnalysis = instance(program) +} diff --git a/src/main/scala/pipedsl/analysis/TypeAnalysis.scala b/src/main/scala/pipedsl/analysis/TypeAnalysis.scala index 4ff19009..4f0cc7b8 100644 --- a/src/main/scala/pipedsl/analysis/TypeAnalysis.scala +++ b/src/main/scala/pipedsl/analysis/TypeAnalysis.scala @@ -116,8 +116,8 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { attr { //Context is prev OR parent //Need to match prev with CAssign, CIf,or CSplit, or CRecV - case program.prev(p@CAssign(lhs@EVar(id), rhs, Some(typ))) => context(p).add(id, typ) - case program.prev(p@CRecv(lhs@EVar(id), rhs, Some(typ))) => context(p).add(id, typ) + case program.prev(p@CAssign(lhs@EVar(id), rhs, Some(typ))) => println(p); println(context(p)); context(p).add(id, typ) + case program.prev(p@CRecv(lhs@EVar(id), rhs, Some(typ))) => println(p); println(context(p)); context(p).add(id, typ) case program.prev(p@CIf(cond, tbranch, fbranch)) => contextAfterNode(rightMostLeaf(tbranch)).intersect(contextAfterNode(rightMostLeaf(fbranch))) case program.prev(p@CSplit(cases, default)) => @@ -138,8 +138,9 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { case program.prev(m@ModuleDef(name, inputs, modules, ret, body)) => context(m).add(m.name, typeCheck(m)) case program.prev(cc@CirConnect(name, c)) => context(cc).add(name, checkCirExpr(c)) - case program.parent(p) => context(p) + case program.parent.pair(m, p) => println(m); println(context(p)); context(p) case program.root => TypeEnv() + case p => println(p); println(program.parent(p)); program.parent(p).foreach(f => println(program.parent(f))); throw new RuntimeException() } } @@ -211,7 +212,7 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { checkCommand(default) case Syntax.CSpeculate(predVar, predVal, verify, body) => case Syntax.CCheck(predVar) => - case Syntax.CEmpty => + case Syntax.CEmpty() => case _ => throw UnexpectedCommand(c) } } @@ -423,7 +424,14 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { case x => throw UnexpectedType(c.pos, c.toString, "Module Type", x) } } + } } - - } +} + +object TypeAnalysis extends Attribution with AnalysisProvider[TypeAnalysis] { + val instance: Prog => TypeAnalysis = + attr { + case p => new TypeAnalysis(new Tree[ProgramNode, Prog](p)) + } + override def get(program: Prog): TypeAnalysis = instance(program) } diff --git a/src/main/scala/pipedsl/codegen/bsv/BSVSyntax.scala b/src/main/scala/pipedsl/codegen/bsv/BSVSyntax.scala index 3a9d1607..868b3b78 100644 --- a/src/main/scala/pipedsl/codegen/bsv/BSVSyntax.scala +++ b/src/main/scala/pipedsl/codegen/bsv/BSVSyntax.scala @@ -1,5 +1,6 @@ package pipedsl.codegen.bsv +import pipedsl.analysis.TypeAnalysis import pipedsl.common.Errors.{UnexpectedBSVType, UnexpectedCommand, UnexpectedExpr, UnexpectedType} import pipedsl.common.Syntax.Latency.Combinational import pipedsl.common.Syntax._ @@ -26,7 +27,7 @@ object BSVSyntax { case object BEmptyModule extends BSVType class BSVTranslator(val bsints: BluespecInterfaces, - val modmap: Map[Id, BSVType] = Map(), val handleMap: Map[BSVType, BSVType] = Map()) { + val modmap: Map[Id, BSVType] = Map(), val handleMap: Map[BSVType, BSVType] = Map(), val typeAnalysis: TypeAnalysis) { private var variablePrefix = "" @@ -46,15 +47,15 @@ object BSVSyntax { if (isLock) { BInterface("Maybe", List(BVar("basehandletyp", bsints.getDefaultLockHandleType))) } else { - val modtyp = toBSVType(n.typ.get) + val modtyp = toBSVType(typeAnalysis.typeCheck(n)) if (handleMap.contains(modtyp)) { handleMap(modtyp) } else { //if not in the handle map, use the appropriate default handle size. If the //handle is for a normal module then there is no default - n.typ.get match { + typeAnalysis.typeCheck(n) match { case _: TMemType => bsints.getDefaultMemHandleType - case _ => throw UnexpectedType(n.pos, "Module request handle", "A defined module req type", n.typ.get) + case _ => throw UnexpectedType(n.pos, "Module request handle", "A defined module req type", typeAnalysis.typeCheck(n)) } } } @@ -71,7 +72,7 @@ object BSVSyntax { } def toBSVVar(i: Id): BVar = { - BVar(variablePrefix + i.v, toBSVType(i.typ.get)) + BVar(variablePrefix + i.v, toBSVType(typeAnalysis.typeCheck(i))) } def toBSVVar(v: EVar): BVar = { @@ -105,7 +106,7 @@ object BSVSyntax { case EApp(func, args) => BFuncCall(func.v, args.map(a => toBSVExpr(a))) case ERecAccess(_, _) => throw UnexpectedExpr(e) case ERecLiteral(_) => throw UnexpectedExpr(e) - case EMemAccess(mem, index) => bsints.getCombRead(BVar(mem.v, toBSVType(mem.typ.get)), toBSVExpr(index)) + case EMemAccess(mem, index) => bsints.getCombRead(BVar(mem.v, toBSVType(typeAnalysis.typeCheck(mem))), toBSVExpr(index)) case ec@ECast(_, _) => translateCast(ec) case EIsValid(ex) => BIsValid(toBSVExpr(ex)) case EInvalid => BInvalid @@ -153,14 +154,14 @@ object BSVSyntax { translateFuncBody(c1) ++ translateFuncBody(c2) case CIf(cond, cons, alt) => List(BIf(toBSVExpr(cond), translateFuncBody(cons), translateFuncBody(alt))) - case CAssign(lhs, rhs) => + case CAssign(lhs, rhs, _) => List(BDecl(toBSVVar(lhs), Some(toBSVExpr(rhs)))) case CReturn(exp) => List(BReturnStmt(toBSVExpr(exp))) case CExpr(exp) => List(BExprStmt(toBSVExpr(exp))) //TODO case Syntax.CSplit(cases, default) => - case CEmpty => List() + case CEmpty() => List() case _ => throw UnexpectedCommand(c) } } diff --git a/src/main/scala/pipedsl/codegen/bsv/BluespecGeneration.scala b/src/main/scala/pipedsl/codegen/bsv/BluespecGeneration.scala index 19c52018..2231b514 100644 --- a/src/main/scala/pipedsl/codegen/bsv/BluespecGeneration.scala +++ b/src/main/scala/pipedsl/codegen/bsv/BluespecGeneration.scala @@ -1,6 +1,7 @@ package pipedsl.codegen.bsv import BSVSyntax._ +import pipedsl.analysis.TypeAnalysis import pipedsl.common.DAGSyntax.{PStage, PipelineEdge} import pipedsl.common.Errors.{UnexpectedCommand, UnexpectedExpr, UnexpectedType} import pipedsl.common.{Locks, ProgInfo} @@ -20,7 +21,7 @@ object BluespecGeneration { debug: Boolean = false, bsInts: BluespecInterfaces, funcmodname: String = "Functions", memInit:Map[String, String] = Map(), addSubInts: Boolean = false) { - + val typeAnalysis: TypeAnalysis = TypeAnalysis.get(prog) val funcModule: String = funcmodname private val funcImport = BImport(funcmodname) @@ -38,7 +39,7 @@ object BluespecGeneration { }) val newmod = new BluespecModuleGenerator( mod, stageInfo(mod.name).head, flattenStageList(stageInfo(mod.name).tail), modtyps, modHandles, - pinfo, bsInts, debug, funcImport + pinfo, bsInts, debug, funcImport, typeAnalysis ).getBSV mapping + ( mod.name -> newmod ) }) @@ -50,7 +51,7 @@ object BluespecGeneration { }) private val translator = new BSVTranslator(bsInts, - modMap map { case (i, p) => (i, p.topModule.typ.get) }, modToHandle) + modMap map { case (i, p) => (i, p.topModule.typ.get) }, modToHandle, typeAnalysis) private val funcMap: Map[Id, BFuncDef] = prog.fdefs.foldLeft(Map[Id, BFuncDef]())((fmap, fdef) => { fmap + (fdef.name -> translator.toBSVFunc(fdef)) @@ -179,10 +180,10 @@ object BluespecGeneration { private class BluespecModuleGenerator(val mod: ModuleDef, val firstStage: PStage, val otherStages: List[PStage], val bsvMods: Map[Id, BInterface], val bsvHandles: Map[BSVType, BSVType], val progInfo: ProgInfo, - val bsInts: BluespecInterfaces, val debug:Boolean = false, val funcImport: BImport) { + val bsInts: BluespecInterfaces, val debug:Boolean = false, val funcImport: BImport, val typeAnalysis: TypeAnalysis) { private val modInfo = progInfo.getModInfo(mod.name) - private val translator = new BSVTranslator(bsInts, bsvMods, bsvHandles) + private val translator = new BSVTranslator(bsInts, bsvMods, bsvHandles, typeAnalysis) private val threadIdName = "_threadID" @@ -312,7 +313,7 @@ object BluespecGeneration { stgs.foldLeft[Map[PipelineEdge, BStructDef]](Map())((m, s) => { s.inEdges.foldLeft[Map[PipelineEdge, BStructDef]](m)((ms, e) => { var sfields = e.values.foldLeft(List[BVar]())((l, id) => { - l :+ BVar(id.v, translator.toBSVType(id.typ.get)) + l :+ BVar(id.v, translator.toBSVType(typeAnalysis.typeCheck(id))) }) if (addTId) sfields = sfields :+ threadIdVar val styp = BStruct(genStructName(e), sfields) @@ -325,7 +326,7 @@ object BluespecGeneration { private def getFirstEdgeStructInfo(stg: PStage, fieldOrder: Iterable[Id]): BStructDef = { val inedge = stg.inEdges.head //must be only one for the first stage val sfields = fieldOrder.foldLeft(List[BVar]())((l, id) => { - l :+ BVar(id.v, translator.toBSVType(id.typ.get)) + l :+ BVar(id.v, translator.toBSVType(typeAnalysis.typeCheck(id))) }) :+ threadIdVar val styp = BStruct(genStructName(inedge), sfields) BStructDef(styp, List("Bits", "Eq")) @@ -513,7 +514,7 @@ object BluespecGeneration { val pvar = translator.toBSVVar(v) body = body :+ BDecl(pvar, Some(BStructAccess(paramExpr, //but don't rename the struct field names - BVar(v.v, translator.toBSVType(v.typ.get))))) + BVar(v.v, translator.toBSVType(typeAnalysis.typeCheck(v)))))) declaredVars = declaredVars + pvar }) //only read threadIDs from an unconditional edge @@ -531,7 +532,7 @@ object BluespecGeneration { val condEdgeExpr = condIn.foldLeft[BExpr](BDontCare)((expr, edge) => { val paramExpr = bsInts.getFifoPeek(edgeParams(edge)) BTernaryExpr(translator.toBSVExpr(edge.condRecv.get), - BStructAccess(paramExpr, BVar(v.v, translator.toBSVType(v.typ.get))), + BStructAccess(paramExpr, BVar(v.v, translator.toBSVType(typeAnalysis.typeCheck(v)))), expr) }) val bvar = translator.toBSVVar(v) @@ -662,7 +663,7 @@ object BluespecGeneration { } private def getCombinationalDeclaration(cmd: Command): Option[BDecl] = cmd match { - case CAssign(lhs, _) => Some(BDecl(translator.toBSVVar(lhs), None)) + case CAssign(lhs, _, _) => Some(BDecl(translator.toBSVVar(lhs), None)) case IMemRecv(_, _, data) => data match { case Some(v) => Some(BDecl(translator.toBSVVar(v), None)) case None => None @@ -689,7 +690,7 @@ object BluespecGeneration { * @return Some(translation) if cmd is combinational, otherwise None */ private def getCombinationalCommand(cmd: Command): Option[BStatement] = cmd match { - case CAssign(lhs, rhs) => + case CAssign(lhs, rhs, _) => Some(BAssign(translator.toBSVVar(lhs), translator.toBSVExpr(rhs))) case ICondCommand(cond: Expr, cs) => val stmtlist = cs.foldLeft(List[BStatement]())((l, c) => { @@ -713,7 +714,7 @@ object BluespecGeneration { case CLockEnd(_) => None case CLockOp(_, _) => None case CCheck(_) => None - case CEmpty => None + case CEmpty() => None case _: ISpeculate => None case _: IUpdate => None case _: ICheck => None @@ -722,7 +723,7 @@ object BluespecGeneration { case _: InternalCommand => None case COutput(_) => None case CPrint(_) => None - case CRecv(_, _) => throw UnexpectedCommand(cmd) + case CRecv(_, _, _) => throw UnexpectedCommand(cmd) case CIf(_, _, _) => throw UnexpectedCommand(cmd) case CSeq(_, _) => throw UnexpectedCommand(cmd) case CTBar(_, _) => throw UnexpectedCommand(cmd) @@ -877,12 +878,12 @@ object BluespecGeneration { case _: ICheckLockFree => None case _: ICheckLockOwned => None case _: ILockNoOp => None - case CAssign(_, _) => None + case CAssign(_, _, _) => None case CExpr(_) => None - case CEmpty => None + case CEmpty() => None case _: InternalCommand => throw UnexpectedCommand(cmd) case CCheck(_) => throw UnexpectedCommand(cmd) - case CRecv(_, _) => throw UnexpectedCommand(cmd) + case CRecv(_, _, _) => throw UnexpectedCommand(cmd) case CSeq(_, _) => throw UnexpectedCommand(cmd) case CTBar(_, _) => throw UnexpectedCommand(cmd) case CIf(_, _, _) => throw UnexpectedCommand(cmd) diff --git a/src/main/scala/pipedsl/common/DAGSyntax.scala b/src/main/scala/pipedsl/common/DAGSyntax.scala index b82c301a..6ecab255 100644 --- a/src/main/scala/pipedsl/common/DAGSyntax.scala +++ b/src/main/scala/pipedsl/common/DAGSyntax.scala @@ -272,9 +272,10 @@ object DAGSyntax { def specId = Id("__spec__" + specVar.id.v) val predVar = EVar(predId) - predVar.typ = specVar.typ + //TODO Uncomment + //predVar.typ = specVar.typ //extract prediction to variable - this.addCmd(CAssign(predVar, specVal)) + //this.addCmd(CAssign(predVar, specVal)) //set pred(specId) = prediction this.addCmd(ISpeculate(specId, specVar, predVar)) //At end of verification update the predction success @@ -290,9 +291,9 @@ object DAGSyntax { * Additionally, it will send data to the head of either the true or false stages based * on the result of the condition * @param n The unique identifier for this stage - * @param cond The conditional expression - * @param trueStages The list of stages to execute if cond is true - * @param falseStages The list of stages to execute if cond is false + * @param conds The conditional expressions + * @param condStages The list of stages to execute with cond + * @param defaultStages The list of stages to execute if all conds are false * @param joinStage The stage to execute after one of the branches. */ class IfStage(n: Id, val conds: List[Expr], var condStages: List[List[PStage]], @@ -304,13 +305,11 @@ object DAGSyntax { val defaultNum = conds.size val condVar = EVar(Id("__cond" + n.v)) val intSize = log2(defaultNum) - condVar.typ = Some(TSizedInt(intSize, true)) - condVar.id.typ = condVar.typ var eTernary = ETernary(conds(defaultNum - 1), EInt(defaultNum - 1, bits = intSize), EInt(defaultNum, bits = intSize)) for(i <- defaultNum-2 to 0 by -1 ) { eTernary = ETernary(conds(i), EInt(i, bits = intSize), eTernary.copy()) } - this.addCmd(CAssign(condVar, eTernary)) + this.addCmd(CAssign(condVar, eTernary, Some(TSizedInt(intSize, true)))) for (i <- 0 until defaultNum) { this.addEdgeTo(condStages(i).head, condSend = Some (EBinop(EqOp("=="), condVar, EInt(i, bits = intSize)))) condStages(i).last.addEdgeTo(joinStage, condRecv = Some (EBinop(EqOp("=="), condVar, EInt(i, bits = intSize)))) diff --git a/src/main/scala/pipedsl/common/PrettyPrinter.scala b/src/main/scala/pipedsl/common/PrettyPrinter.scala index 2de4cc30..a290ec3a 100644 --- a/src/main/scala/pipedsl/common/PrettyPrinter.scala +++ b/src/main/scala/pipedsl/common/PrettyPrinter.scala @@ -2,6 +2,7 @@ package pipedsl.common import java.io.{File, FileOutputStream, OutputStreamWriter} +import pipedsl.analysis.TypeAnalysis import pipedsl.common.DAGSyntax.{IfStage, PStage, PipelineEdge, SpecStage} import pipedsl.common.Errors.UnexpectedType import pipedsl.common.Syntax._ @@ -25,7 +26,10 @@ class PrettyPrinter(output: Option[File]) { def printHelper(s: String, i: Int): Unit = pline((" " * i) + s) + var typeAnalysis: TypeAnalysis = null + def printProgram(p: Prog): Unit = { + typeAnalysis = TypeAnalysis.get(p) p.fdefs.foreach(f => printFunction(f)) p.moddefs.foreach(m => printModule(m)) printCircuit(p.circ) @@ -85,9 +89,9 @@ class PrettyPrinter(output: Option[File]) { printCmdToString(cons, indent + 4) + "\n" + ins + "} else {\n" + printCmdToString(alt, indent + 4) + "\n" + ins + "}" - case Syntax.CAssign(lhs, rhs) => ins + (if (lhs.typ.isDefined) printTypeToString(lhs.typ.get) + " " else "") + + case Syntax.CAssign(lhs, rhs, typ) => ins + (if (typ.isDefined) printTypeToString(typeAnalysis.typeCheck(lhs)) + " " else "") + printExprToString(lhs) + " = " + printExprToString(rhs) + ";" - case Syntax.CRecv(lhs, rhs) => ins + (if (lhs.typ.isDefined) printTypeToString(lhs.typ.get) + " " else "") + + case Syntax.CRecv(lhs, rhs, typ) => ins + (if (typ.isDefined) printTypeToString(typeAnalysis.typeCheck(lhs)) + " " else "") + printExprToString(lhs) + " <- " + printExprToString(rhs) + ";" case Syntax.COutput(exp) => ins + "output " + printExprToString(exp) + ";" case Syntax.CReturn(exp) => ins + "return " + printExprToString(exp) + ";" @@ -97,16 +101,16 @@ class PrettyPrinter(output: Option[File]) { case Syntax.CLockStart(mod) => ins + "start(" + mod.v + ");" case Syntax.CLockEnd(mod) => ins + "end(" + mod.v + ");" case Syntax.CSpeculate(predVar, predVal, verify, body) => ins + "speculate (" + - printTypeToString(predVar.typ.get) + " " + printExprToString(predVar) + " = " + + printTypeToString(typeAnalysis.typeCheck(predVar)) + " " + printExprToString(predVar) + " = " + printExprToString(predVal) + ", {\n" + printCmdToString(verify, indent + 4) + "\n" + ins + "}, {\n" + printCmdToString(body, indent + 4) + "\n" + ins + "}" case Syntax.CCheck(predVar) => ins + "check(" + predVar.v + ");" case Syntax.CPrint(evar) => ins + "print(" + printExprToString(evar) + ");" - case Syntax.CEmpty => ins + case Syntax.CEmpty() => ins case Syntax.ICondCommand(cond, cmd) => ins + printExprToString(cond) + " ? " + cmd.foldLeft("")((s, c) => s + printCmdToString(c)) - case Syntax.IUpdate(specId, value, originalSpec) => ins + printTypeToString(originalSpec.typ.get) + " " + + case Syntax.IUpdate(specId, value, originalSpec) => ins + printTypeToString(typeAnalysis.typeCheck(originalSpec)) + " " + printExprToString(originalSpec) + " = update(" + specId + ", " + printExprToString(value) + ");" case Syntax.ISpeculate(specId, specVar, value) => ins + specId + "= speculate(" + printExprToString(specVar) + ", " + printExprToString(value) + ");" diff --git a/src/main/scala/pipedsl/common/Syntax.scala b/src/main/scala/pipedsl/common/Syntax.scala index 36757a91..26a9ad6e 100644 --- a/src/main/scala/pipedsl/common/Syntax.scala +++ b/src/main/scala/pipedsl/common/Syntax.scala @@ -10,9 +10,6 @@ object Syntax { * Annotations added by the various passes of the type checker. */ object Annotations { - sealed trait TypeAnnotation { - var typ: Option[Type] = None - } sealed trait LabelAnnotation { var lbl: Option[Label] = None } @@ -61,11 +58,11 @@ object Syntax { import Annotations._ - case class Id(v: String) extends Positional with TypeAnnotation { + case class Id(v: String) extends ProgramNode { override def toString = s"$v" } - sealed trait Type extends Positional with LabelAnnotation with SpeculativeAnnotation { + sealed trait Type extends ProgramNode with LabelAnnotation with SpeculativeAnnotation { override def toString: String = this match { case _: TVoid => "void" case _: TBool => "bool" @@ -107,7 +104,7 @@ object Syntax { } } - sealed trait UOp extends Positional { + sealed trait UOp extends ProgramNode { val op: String; override def toString: String = this.op def operate(v1: Any): Option[Any] = this match { @@ -129,7 +126,7 @@ object Syntax { def OrOp(e1: Expr, e2: Expr): EBinop = EBinop(BoolOp("||", OpConstructor.or), e1, e2) def EqOp(e1: Expr, e2: Expr): EBinop = EBinop(EqOp("=="), e1, e2) - sealed trait BOp extends Positional { + sealed trait BOp extends ProgramNode { val op: String; override def toString = this.op def operate(v1: Any, v2: Any): Option[Any] = this match { @@ -160,7 +157,7 @@ object Syntax { case class NumOp(op: String, fun: (Int, Int) => Int) extends BOp case class BitOp(op: String, fun: (Int, Int) => Int) extends BOp - sealed trait Expr extends Positional with TypeAnnotation { + sealed trait Expr extends ProgramNode{ def isLVal = this match { case _:EVar => true case _:EMemAccess => true @@ -168,12 +165,11 @@ object Syntax { } def copyMeta(from: Expr): Expr = { setPos(from.pos) - typ = from.typ this } } - case class LockArg(id: Id, evar: Option[EVar]) extends Positional + case class LockArg(id: Id, evar: Option[EVar]) extends ProgramNode case object EInvalid extends Expr case class EIsValid(ex: Expr) extends Expr @@ -196,14 +192,19 @@ object Syntax { def MemoryWrite(index: Expr, value: Expr): ERecLiteral = ERecLiteral(Map((Id("index"), index), (Id("value"),value))) def MemoryRead(index: Expr): ERecLiteral = ERecLiteral(Map((Id("index"), index))) - sealed trait Command extends Positional + sealed trait Command extends ProgramNode case class CSeq(c1: Command, c2: Command) extends Command case class CTBar(c1: Command, c2: Command) extends Command case class CIf(cond: Expr, cons: Command, alt: Command) extends Command - case class CAssign(lhs: EVar, rhs: Expr) extends Command { + abstract class CDefine extends Command { + def lhs: Expr + def rhs: Expr + def typ: Option[Type] + } + case class CAssign(lhs: EVar, rhs: Expr, typ: Option[Type]) extends CDefine { if (!lhs.isLVal) throw UnexpectedLVal(lhs, "assignment") } - case class CRecv(lhs: Expr, rhs: Expr) extends Command { + case class CRecv(lhs: Expr, rhs: Expr, typ: Option[Type]) extends CDefine { if (!lhs.isLVal) throw UnexpectedLVal(lhs, "assignment") } case class CPrint(evar: EVar) extends Command @@ -216,8 +217,8 @@ object Syntax { case class CSpeculate(predVar: EVar, predVal: Expr, verify: Command, body: Command) extends Command case class CCheck(predVar: Id) extends Command case class CSplit(cases: List[CaseObj], default: Command) extends Command - case object CEmpty extends Command - + case class CEmpty() extends Command + sealed trait InternalCommand extends Command case class ICondCommand(cond: Expr, cs: List[Command]) extends InternalCommand @@ -238,9 +239,9 @@ object Syntax { //needed for internal compiler passes to track branches with explicitly no lockstate change case class ILockNoOp(mem: LockArg) extends InternalCommand - case class CaseObj(cond: Expr, body: Command) extends Positional + case class CaseObj(cond: Expr, body: Command) extends ProgramNode - sealed trait Definition extends Positional + sealed trait Definition extends ProgramNode case class FuncDef( name: Id, @@ -255,14 +256,16 @@ object Syntax { ret: Option[Type], body: Command) extends Definition with RecursiveAnnotation - case class Param(name: Id, typ: Type) extends Positional + case class Param(name: Id, typ: Type) extends ProgramNode case class Prog( fdefs: List[FuncDef], moddefs: List[ModuleDef], - circ: Circuit) extends Positional + circ: Circuit) extends ProgramNode + + sealed abstract class ProgramNode extends Positional with Product - sealed trait Circuit extends Positional + sealed trait Circuit extends ProgramNode case class CirSeq(c1: Circuit, c2: Circuit) extends Circuit case class CirConnect(name: Id, c: CirExpr) extends Circuit case class CirExprStmt(ce: CirExpr) extends Circuit diff --git a/src/main/scala/pipedsl/common/Utilities.scala b/src/main/scala/pipedsl/common/Utilities.scala index 7618c148..5bf6fab3 100644 --- a/src/main/scala/pipedsl/common/Utilities.scala +++ b/src/main/scala/pipedsl/common/Utilities.scala @@ -3,6 +3,8 @@ package pipedsl.common import Syntax._ import pipedsl.common.DAGSyntax.PStage import pipedsl.common.Errors.UnexpectedCommand +import com.microsoft.z3.{AST => Z3AST, BoolExpr => Z3BoolExpr, Context => Z3Context} + object Utilities { @@ -44,8 +46,8 @@ object Utilities { v ++ getUsedVars(c.cond) ++ getAllVarNames(c.body) }) case CIf(cond, cons, alt) => getUsedVars(cond) ++ getAllVarNames(cons) ++ getAllVarNames(alt) - case CAssign(lhs, rhs) => getUsedVars(lhs) ++ getUsedVars(rhs) - case CRecv(lhs, rhs) => getUsedVars(lhs) ++ getUsedVars(rhs) + case CAssign(lhs, rhs, typ) => getUsedVars(lhs) ++ getUsedVars(rhs) + case CRecv(lhs, rhs, typ) => getUsedVars(lhs) ++ getUsedVars(rhs) case CLockStart(mod) => Set(mod) case CLockEnd(mod) => Set(mod) case CLockOp(mem, _) => if (mem.evar.isDefined) Set(mem.id, mem.evar.get.id) else Set(mem.id) @@ -59,7 +61,7 @@ object Utilities { case ICondCommand(cond, cs) => getUsedVars(cond) ++ cs.foldLeft(Set[Id]())((s, c) => getAllVarNames(c) ++ s) case ISpeculate(specId, specVar, value) => getUsedVars(value) + specId ++ getUsedVars(specVar) case IUpdate(specId,value,originalSpec) => getUsedVars(value) ++ getUsedVars(originalSpec) + specId - case Syntax.CEmpty => Set() + case Syntax.CEmpty() => Set() case _ => throw UnexpectedCommand(c) } @@ -71,8 +73,8 @@ object Utilities { v ++ getWrittenVars(c.body) }) case CIf(_, cons, alt) => getWrittenVars(cons) ++ getWrittenVars(alt) - case CAssign(lhs, _) => lhs match { case EVar(id) => Set(id) ; case _ => Set() } - case CRecv(lhs, _) => lhs match { case EVar(id) => Set(id) ; case _ => Set() } + case CAssign(lhs, _, _) => lhs match { case EVar(id) => Set(id) ; case _ => Set() } + case CRecv(lhs, _, _) => lhs match { case EVar(id) => Set(id) ; case _ => Set() } case CSpeculate(_, _, verify, body) => getWrittenVars(verify) ++ getWrittenVars(body) case ICondCommand(_, c2) => getWrittenVars(c2) case ISpeculate(s, svar, _) => Set(s, svar.id) @@ -105,8 +107,8 @@ object Utilities { }) case CPrint(evar) => Set(evar.id) case CIf(cond, cons, alt) => getUsedVars(cond) ++ getUsedVars(cons) ++ getUsedVars(alt) - case CAssign(_, rhs) => getUsedVars(rhs) - case CRecv(lhs, rhs) => getUsedVars(rhs) ++ (lhs match { + case CAssign(_, rhs, _) => getUsedVars(rhs) + case CRecv(lhs, rhs, _) => getUsedVars(rhs) ++ (lhs match { case e:EMemAccess => getUsedVars(e) case _ => Set() }) @@ -137,7 +139,7 @@ object Utilities { case ICheckLockFree(_) => Set() case CLockStart(_) => Set() case CLockEnd(_) => Set() - case CEmpty => Set() + case CEmpty() => Set() } /** @@ -157,7 +159,7 @@ object Utilities { case EApp(_, args) => args.foldLeft[Set[Id]](Set())((s, a) => { s ++ getUsedVars(a) }) //functions are also externally defined case ECall(id, args) => args.foldLeft[Set[Id]](Set(id))((s, a) => { s ++ getUsedVars(a) }) - case EVar(id) => id.typ = e.typ; Set(id) + case EVar(id) => Set(id) case ECast(_, exp) => getUsedVars(exp) case EFromMaybe(ex) => getUsedVars(ex) case EIsValid(ex) => getUsedVars(ex) @@ -285,6 +287,15 @@ object Utilities { case None => throw except } } + + /** Like [[Z3Context.mkAnd]], but automatically casts inputs to [[Z3BoolExpr]]s. */ + def mkAnd(ctx: Z3Context, expressions: Z3AST *): Z3BoolExpr = + ctx.mkAnd(expressions.map(ast => ast.asInstanceOf[Z3BoolExpr]):_*) - + /** Like [[Z3Context.mkImplies]], but automatically casts inputs to [[Z3BoolExpr]]s. */ + def mkImplies(ctx: Z3Context, t1: Z3AST, t2: Z3AST): Z3BoolExpr = + ctx.mkImplies(t1.asInstanceOf[Z3BoolExpr], t2.asInstanceOf[Z3BoolExpr]) + + def mkOr(ctx: Z3Context, expressions: Z3AST *): Z3BoolExpr = + ctx.mkOr(expressions.map(ast => ast.asInstanceOf[Z3BoolExpr]):_*) } diff --git a/src/main/scala/pipedsl/passes/CanonicalizePass.scala b/src/main/scala/pipedsl/passes/CanonicalizePass.scala index 1e45c1e2..2d989eaf 100644 --- a/src/main/scala/pipedsl/passes/CanonicalizePass.scala +++ b/src/main/scala/pipedsl/passes/CanonicalizePass.scala @@ -24,9 +24,9 @@ object CanonicalizePass extends CommandPass[Command] with ModulePass[ModuleDef] * @return The same command with no cseqs to/from empty commands */ def removeCEmpty(c: Command): Command = c match { - case CSeq(CEmpty, CEmpty) => CEmpty - case CSeq(c1, CEmpty) => removeCEmpty(c1) - case CSeq(CEmpty, c2) => removeCEmpty(c2) + case CSeq(CEmpty(), CEmpty()) => CEmpty() + case CSeq(c1, CEmpty()) => removeCEmpty(c1) + case CSeq(CEmpty(), c2) => removeCEmpty(c2) case CSeq(c1, c2) => CSeq(removeCEmpty(c1), removeCEmpty(c2)).setPos(c.pos) case CTBar(c1, c2) => CTBar(removeCEmpty(c1), removeCEmpty(c2)).setPos(c.pos) case CIf(cond, cons, alt) => CIf(cond, removeCEmpty(cons), removeCEmpty(alt)).setPos(c.pos) diff --git a/src/main/scala/pipedsl/passes/ConvertAsyncPass.scala b/src/main/scala/pipedsl/passes/ConvertAsyncPass.scala index dd4d42b8..54b6f2fb 100644 --- a/src/main/scala/pipedsl/passes/ConvertAsyncPass.scala +++ b/src/main/scala/pipedsl/passes/ConvertAsyncPass.scala @@ -1,5 +1,6 @@ package pipedsl.passes +import pipedsl.analysis.TypeAnalysis import pipedsl.common.Syntax._ import pipedsl.common.DAGSyntax.PStage import pipedsl.common.Errors.{UnexpectedExpr, UnexpectedType} @@ -11,7 +12,7 @@ import pipedsl.passes.Passes.StagePass * of Send and Recv pairs. The Send produces a reference * which the Recv uses to request the result. */ -class ConvertAsyncPass(modName: Id) extends StagePass[List[PStage]] { +class ConvertAsyncPass(modName: Id, typeAnalysis: TypeAnalysis) extends StagePass[List[PStage]] { private var msgCount = 0 override def run(stgs: List[PStage]): List[PStage] = { @@ -54,7 +55,7 @@ class ConvertAsyncPass(modName: Id) extends StagePass[List[PStage]] { val recv = IMemRecv(mem, handle, Some(lhs)) (send, recv) //Mem Write - case (EMemAccess(mem, index@EVar(_)), data@EVar(_)) => mem.typ.get match { + case (EMemAccess(mem, index@EVar(_)), data@EVar(_)) => typeAnalysis.typeCheck(mem) match { case TMemType(_, _, _, Latency.Asynchronous) => val handle = freshMessage(mem) val send = IMemSend(handle, isWrite = true, mem, Some(data), index) @@ -62,8 +63,8 @@ class ConvertAsyncPass(modName: Id) extends StagePass[List[PStage]] { (send, recv) //if the memory is sequential we don't use handle since it //is assumed to complete at the end of the cycle - case TMemType(_, _, _, _) => (IMemWrite(mem, index, data), CEmpty) - case _ => throw UnexpectedType(mem.pos, "Memory Write Statement", "Memory Type", mem.typ.get) + case TMemType(_, _, _, _) => (IMemWrite(mem, index, data), CEmpty()) + case _ => throw UnexpectedType(mem.pos, "Memory Write Statement", "Memory Type", typeAnalysis.typeCheck(mem)) } //module calls case (lhs@EVar(_), call@ECall(_, _)) => @@ -104,8 +105,8 @@ class ConvertAsyncPass(modName: Id) extends StagePass[List[PStage]] { private def freshMessage(m: Id): EVar = { val res = EVar(Id("_request_" + msgCount)) - res.typ = Some(TRequestHandle(m, isLock = false)) - res.id.typ = res.typ + //res.typ = Some(TRequestHandle(m, isLock = false)) + // res.id.typ = res.typ msgCount += 1 res } diff --git a/src/main/scala/pipedsl/passes/LockOpTranslationPass.scala b/src/main/scala/pipedsl/passes/LockOpTranslationPass.scala index c7a3b149..142febc7 100644 --- a/src/main/scala/pipedsl/passes/LockOpTranslationPass.scala +++ b/src/main/scala/pipedsl/passes/LockOpTranslationPass.scala @@ -9,12 +9,12 @@ import pipedsl.passes.Passes.StagePass object LockOpTranslationPass extends StagePass[List[PStage]] { - private def lockVar(l: LockArg): EVar = { val lockname = "_lock_id_" + l.id.v + (if (l.evar.isDefined) "_" + l.evar.get.id.v else "") val res = EVar(Id(lockname)) - res.typ = Some(TRequestHandle(l.id, isLock = true)) - res.id.typ = res.typ + //TODO: Need to figure this out + //res.typ = Some(TRequestHandle(l.id, isLock = true)) + //res.id.typ = res.typ res } diff --git a/src/main/scala/pipedsl/passes/MarkNonRecursiveModulePass.scala b/src/main/scala/pipedsl/passes/MarkNonRecursiveModulePass.scala index ecb869fe..c371f674 100644 --- a/src/main/scala/pipedsl/passes/MarkNonRecursiveModulePass.scala +++ b/src/main/scala/pipedsl/passes/MarkNonRecursiveModulePass.scala @@ -29,8 +29,8 @@ object MarkNonRecursiveModulePass extends ModulePass[ModuleDef] with ProgPass[Pr case CSeq(c1, c2) => hasRecursiveCall(c1, mod) || hasRecursiveCall(c2, mod) case CTBar(c1, c2) => hasRecursiveCall(c1, mod) || hasRecursiveCall(c2, mod) case CIf(_, cons, alt) => hasRecursiveCall(cons, mod) || hasRecursiveCall(alt, mod) - case CAssign(_, rhs) => hasRecCall(rhs, mod) - case CRecv(_, rhs) => hasRecCall(rhs, mod) + case CAssign(_, rhs, _) => hasRecCall(rhs, mod) + case CRecv(_, rhs, _) => hasRecCall(rhs, mod) case COutput(exp) => hasRecCall(exp, mod) case CExpr(exp) => hasRecCall(exp, mod) case _ => false diff --git a/src/main/scala/pipedsl/passes/RemoveReentrantPass.scala b/src/main/scala/pipedsl/passes/RemoveReentrantPass.scala index 7894b161..5119cc2a 100644 --- a/src/main/scala/pipedsl/passes/RemoveReentrantPass.scala +++ b/src/main/scala/pipedsl/passes/RemoveReentrantPass.scala @@ -120,9 +120,9 @@ object RemoveReentrantPass extends StagePass[List[PStage]] { private def getReassignedHandle(handle: EVar): EVar = { val newId = Id(handle.id.v + "_done") - newId.typ = handle.id.typ + //newId.typ = handle.id.typ val newVar = EVar(newId) - newVar.typ = handle.typ + //newVar.typ = handle.typ newVar } diff --git a/src/main/scala/pipedsl/passes/RemoveTimingPass.scala b/src/main/scala/pipedsl/passes/RemoveTimingPass.scala index 2e4241f3..7b72377f 100644 --- a/src/main/scala/pipedsl/passes/RemoveTimingPass.scala +++ b/src/main/scala/pipedsl/passes/RemoveTimingPass.scala @@ -1,5 +1,6 @@ package pipedsl.passes +import pipedsl.analysis.TypeAnalysis import pipedsl.common.Syntax._ import pipedsl.passes.Passes.{CommandPass, ModulePass, ProgPass} @@ -7,8 +8,10 @@ import scala.collection.mutable.ListBuffer object RemoveTimingPass extends CommandPass[Command] with ModulePass[ModuleDef] with ProgPass[Prog] { var calls: ListBuffer[Command] = new ListBuffer[Command]() + var typeAnalysis: TypeAnalysis = null override def run(p: Prog): Prog = { + typeAnalysis = TypeAnalysis.get(p) p.copy(moddefs = p.moddefs.map(m => run(m))).setPos(p.pos) } @@ -25,9 +28,9 @@ object RemoveTimingPass extends CommandPass[Command] with ModulePass[ModuleDef] case CSeq(c1, c2) => CSeq(removeTimingConstructs(c1), removeTimingConstructs(c2)) case CIf(cond, cons, alt) => CIf(cond, removeTimingConstructs(cons), removeTimingConstructs(alt)) case CTBar(c1, c2) => CSeq(removeTimingConstructs(c1), removeTimingConstructs(c2)); - case CLockOp(_,_) => CEmpty - case CSpeculate(_, _, _, _) => CEmpty - case CCheck(_) => CEmpty + case CLockOp(_,_) => CEmpty() + case CSpeculate(_, _, _, _) => CEmpty() + case CCheck(_) => CEmpty() case CSplit(cases, default) => val newCases = List[CaseObj]() val newDefault = removeTimingConstructs(default) @@ -41,7 +44,7 @@ object RemoveTimingPass extends CommandPass[Command] with ModulePass[ModuleDef] val newArgs: ListBuffer[Expr] = new ListBuffer[Expr]() for (index <- args.indices) { val arg = EVar(Id("__" + id.v + "__" + calls.length + index)) - assigns.addOne(CAssign(arg, args(index))) + assigns.addOne(CAssign(arg, args(index), Some(typeAnalysis.typeCheck(args(index))))) newArgs.addOne(arg) } calls.addOne(CExpr(ECall(id, newArgs.toList))) @@ -52,7 +55,7 @@ object RemoveTimingPass extends CommandPass[Command] with ModulePass[ModuleDef] def convertCListToCSeq(commands: ListBuffer[Command], i: Int): Command = { if (i > commands.length-1) { - CEmpty + CEmpty() } else { CSeq(commands(i), convertCListToCSeq(commands, i+1)) } diff --git a/src/main/scala/pipedsl/passes/SimplifyRecvPass.scala b/src/main/scala/pipedsl/passes/SimplifyRecvPass.scala index ae3f59f0..d73153a6 100644 --- a/src/main/scala/pipedsl/passes/SimplifyRecvPass.scala +++ b/src/main/scala/pipedsl/passes/SimplifyRecvPass.scala @@ -1,6 +1,7 @@ package pipedsl.passes import Passes.{CommandPass, ModulePass, ProgPass} +import pipedsl.analysis.TypeAnalysis import pipedsl.common.Errors.UnexpectedCase import pipedsl.common.Syntax._ import pipedsl.common.Utilities._ @@ -13,12 +14,14 @@ import scala.util.parsing.input.Position * This includes index expressions on the LHS of memory assignments, not just RHS expressions. */ object SimplifyRecvPass extends CommandPass[Command] with ModulePass[ModuleDef] with ProgPass[Prog] { - + var usedVars: Set[Id] = Set() var counter: Int = 0 + var typeAnalysis: TypeAnalysis = null override def run(p: Prog): Prog = { usedVars = p.fdefs.foldLeft[Set[Id]](usedVars)((s,f) => s + f.name) + typeAnalysis = TypeAnalysis.get(p) p.copy(moddefs = p.moddefs.map(m => run(m))).setPos(p.pos) } @@ -34,13 +37,11 @@ object SimplifyRecvPass extends CommandPass[Command] with ModulePass[ModuleDef] runHelper(c) } - private def newVar(s: String, p: Position, t: Option[Type]): EVar = { + private def newVar(s: String, p: Position): EVar = { val (nvar, nused, ncnt) = freshVar(s, usedVars, counter) - nvar.typ = t usedVars = nused counter = ncnt val v = EVar(nvar).setPos(p) - v.typ = t v } @@ -56,45 +57,43 @@ object SimplifyRecvPass extends CommandPass[Command] with ModulePass[ModuleDef] CSplit(newcases, runHelper(default).setPos(default.pos)).setPos(c.pos) case CIf(cond, cons, alt) => CIf(cond, runHelper(cons), runHelper(alt)).setPos(c.pos) case CSpeculate(predVar, predVal, verify, body) => CSpeculate(predVar, predVal, runHelper(verify), runHelper(body)).setPos(c.pos) - case CRecv(lhs, rhs) => (lhs, rhs) match { + case CRecv(lhs, rhs, typ) => (lhs, rhs) match { case (EVar(_), EMemAccess(_, EVar(_))) => c //leave it alone, already in the form we want case (EVar(_), EMemAccess(mem, idx)) => //separate out the index computation - val idxAssgn = CAssign(newVar("index", idx.pos, idx.typ), idx).setPos(idx.pos) - CSeq(idxAssgn, CRecv(lhs, EMemAccess(mem, idxAssgn.lhs).setPos(rhs.pos))).setPos(c.pos) + val idxAssgn = CAssign(newVar("index", idx.pos), idx, Some(typeAnalysis.typeCheck(idx))).setPos(idx.pos) + CSeq(idxAssgn, CRecv(lhs, EMemAccess(mem, idxAssgn.lhs).setPos(rhs.pos), typ)).setPos(c.pos) case (EMemAccess(_, EVar(_)), EVar(_)) => c //leave it alone, already in form we want case (EMemAccess(_,EVar(_)), _) => // separate out the RHS computation - val rhsAssgn = CAssign(newVar("msg", rhs.pos, rhs.typ), rhs).setPos(rhs.pos) - CSeq(rhsAssgn, CRecv(lhs, rhsAssgn.lhs).setPos(c.pos)).setPos(c.pos) + val rhsAssgn = CAssign(newVar("msg", rhs.pos), rhs, typ).setPos(rhs.pos) + CSeq(rhsAssgn, CRecv(lhs, rhsAssgn.lhs, typ).setPos(c.pos)).setPos(c.pos) case (EMemAccess(mem,idx), EVar(_)) => //separate out the index computation - val idxAssgn = CAssign(newVar("index", idx.pos, idx.typ), idx).setPos(idx.pos) + val idxAssgn = CAssign(newVar("index", idx.pos), idx, Some(typeAnalysis.typeCheck(idx))).setPos(idx.pos) val access = EMemAccess(mem, idxAssgn.lhs).setPos(lhs.pos) - access.typ = lhs.typ - CSeq(idxAssgn, CRecv(access, rhs).setPos(c.pos)).setPos(c.pos) + CSeq(idxAssgn, CRecv(access, rhs, typ).setPos(c.pos)).setPos(c.pos) case (EMemAccess(mem,idx), _) => //separate the index computation AND the rhs computation into new variables - val idxAssgn = CAssign(newVar("index", idx.pos, idx.typ), idx).setPos(idx.pos) - val rhsAssgn = CAssign(newVar("msg", rhs.pos, rhs.typ), rhs).setPos(rhs.pos) + val idxAssgn = CAssign(newVar("index", idx.pos), idx, Some(typeAnalysis.typeCheck(idx))).setPos(idx.pos) + val rhsAssgn = CAssign(newVar("msg", rhs.pos), rhs, typ).setPos(rhs.pos) val access = EMemAccess(mem, idxAssgn.lhs).setPos(lhs.pos) - access.typ = lhs.typ CSeq(idxAssgn, CSeq(rhsAssgn, - CRecv(access, rhsAssgn.lhs).setPos(c.pos)) + CRecv(access, rhsAssgn.lhs, typ).setPos(c.pos)) .setPos(c.pos)) .setPos(c.pos) case (EVar(_), ECall(id, args)) => //TODO cleanup and stop copying code - val argAssgns = args.foldLeft[(Command, List[Expr])]((CEmpty, List()))((cs, a) => { - val argAssn = CAssign(newVar("carg", a.pos, a.typ), a).setPos(a.pos) + val argAssgns = args.foldLeft[(Command, List[Expr])]((CEmpty(), List()))((cs, a) => { + val argAssn = CAssign(newVar("carg", a.pos), a, Some(typeAnalysis.typeCheck(a))).setPos(a.pos) (CSeq(cs._1, argAssn).setPos(a.pos), cs._2 :+ argAssn.lhs) }) - CSeq(argAssgns._1, CRecv(lhs, ECall(id, argAssgns._2).setPos(c.pos)).setPos(c.pos)).setPos(c.pos) + CSeq(argAssgns._1, CRecv(lhs, ECall(id, argAssgns._2).setPos(c.pos), typ).setPos(c.pos)).setPos(c.pos) case (l@EVar(_), _) => - CAssign(l, rhs).setPos(c.pos) + CAssign(l, rhs, typ).setPos(c.pos) case _ => throw UnexpectedCase(c.pos) } //calls also get translated to send statements later case CExpr(ECall(id, args)) => - val argAssgns = args.foldLeft[(Command, List[Expr])]((CEmpty, List()))((cs, a) => { - val argAssn = CAssign(newVar("carg", a.pos, a.typ), a).setPos(a.pos) + val argAssgns = args.foldLeft[(Command, List[Expr])]((CEmpty(), List()))((cs, a) => { + val argAssn = CAssign(newVar("carg", a.pos), a, Some(typeAnalysis.typeCheck(a))).setPos(a.pos) (CSeq(cs._1, argAssn).setPos(a.pos), cs._2 :+ argAssn.lhs) }) CSeq(argAssgns._1, CExpr(ECall(id, argAssgns._2).setPos(c.pos)).setPos(c.pos)).setPos(c.pos) diff --git a/src/main/scala/pipedsl/passes/SplitStagesPass.scala b/src/main/scala/pipedsl/passes/SplitStagesPass.scala index e4ec86ad..194e28c4 100644 --- a/src/main/scala/pipedsl/passes/SplitStagesPass.scala +++ b/src/main/scala/pipedsl/passes/SplitStagesPass.scala @@ -81,7 +81,7 @@ class SplitStagesPass extends CommandPass[List[PStage]] with ModulePass[List[PSt case CSeq(c1, c2) => val nstage = splitToStages(c1, curStage) nstage.init ++ splitToStages(c2, nstage.last) - case CEmpty => List(curStage) + case CEmpty() => List(curStage) case _ => curStage.addCmd(c); List(curStage) } diff --git a/src/main/scala/pipedsl/typechecker/BaseTypeChecker.scala b/src/main/scala/pipedsl/typechecker/BaseTypeChecker.scala index 4abbcc6c..85645a1d 100644 --- a/src/main/scala/pipedsl/typechecker/BaseTypeChecker.scala +++ b/src/main/scala/pipedsl/typechecker/BaseTypeChecker.scala @@ -1,3 +1,4 @@ +/** package pipedsl.typechecker import pipedsl.common.Errors._ @@ -118,11 +119,11 @@ object BaseTypeChecker extends TypeChecks[Id, Type] { val ast = checkModuleBodyWellFormed(cons, assignees) val asf = checkModuleBodyWellFormed(alt, assignees) ast ++ asf - case CRecv(lhs@EVar(id), _) => + case CRecv(lhs@EVar(id), _, _) => if (assignees(id)) { throw UnexpectedAssignment(lhs.pos, id) } else { assignees + id } - case CAssign(lhs@EVar(id), _) => + case CAssign(lhs@EVar(id), _, _) => if (assignees(id)) { throw UnexpectedAssignment(lhs.pos, id) } else { assignees + id } @@ -227,13 +228,13 @@ object BaseTypeChecker extends TypeChecks[Id, Type] { val efalse = checkCommand(alt, cenv) etrue.intersect(efalse) } - case CAssign(lhs, rhs) => { + case CAssign(lhs, rhs, _) => { val (rTyp, renv) = checkExpression(rhs, tenv) val (lTyp, lenv) = checkExpression(lhs, renv) if (isSubtype(rTyp, lTyp)) lenv else throw UnexpectedSubtype(rhs.pos, "assignment", lTyp, rTyp) } - case CRecv(lhs, rhs) => { + case CRecv(lhs, rhs, _) => { val (rTyp, renv) = checkExpression(rhs, tenv) val (lTyp, lenv) = checkExpression(lhs, renv) if (isSubtype(rTyp, lTyp)) lenv @@ -301,7 +302,7 @@ object BaseTypeChecker extends TypeChecks[Id, Type] { } } - case CEmpty => tenv + case CEmpty() => tenv case _ => throw UnexpectedCommand(c) } @@ -468,3 +469,4 @@ object BaseTypeChecker extends TypeChecks[Id, Type] { case _ => Set() } } + */ diff --git a/src/main/scala/pipedsl/typechecker/Environments.scala b/src/main/scala/pipedsl/typechecker/Environments.scala index e91769b6..903fb357 100644 --- a/src/main/scala/pipedsl/typechecker/Environments.scala +++ b/src/main/scala/pipedsl/typechecker/Environments.scala @@ -49,7 +49,10 @@ object Environments { case class TypeEnv( typeMap: Map[Id, Type] = Map()) extends Environment[Id, Type] { - override def apply(id: Id) = this.get(id).getOrThrow(MissingType(id.pos, id.v)) + override def apply(id: Id) = this.get(id) match { + case Some(value) => value + case None => println(typeMap); throw MissingType(id.pos, id.v) + } override def add(name: Id, typ: Type): Environment[Id, Type] = typeMap.get(name) match { case Some(t) => throw AlreadyBoundType(name.pos, name.v, t, typ) diff --git a/src/main/scala/pipedsl/typechecker/LockConstraintChecker.scala b/src/main/scala/pipedsl/typechecker/LockConstraintChecker.scala index 4618d59f..b2aa27d1 100644 --- a/src/main/scala/pipedsl/typechecker/LockConstraintChecker.scala +++ b/src/main/scala/pipedsl/typechecker/LockConstraintChecker.scala @@ -1,15 +1,15 @@ package pipedsl.typechecker import com.microsoft.z3.{AST => Z3AST, BoolExpr => Z3BoolExpr, Context => Z3Context, Solver => Z3Solver, Status => Z3Status} +import pipedsl.analysis.{PredicateAnalysis, TypeAnalysis} import pipedsl.common.Errors.UnexpectedCase import pipedsl.common.Locks import pipedsl.common.Locks._ import pipedsl.common.Syntax._ +import pipedsl.common.Utilities.{mkAnd, mkImplies} import pipedsl.typechecker.Environments._ import pipedsl.typechecker.TypeChecker.TypeChecks -import scala.collection.mutable - /** * This checks that all reads and writes to memories * only happen when appropriate. @@ -19,16 +19,9 @@ import scala.collection.mutable * possible, the type checking fails. */ //TODO: Make error case classes -class LockConstraintChecker(lockMap: Map[Id, Set[LockArg]], lockTypeMap: Map[Id, Map[Id, LockType]]) extends TypeChecks[LockArg, Z3AST] { - - private val ctx: Z3Context = new Z3Context() +class LockConstraintChecker(val predicateAnalysis: PredicateAnalysis, lockMap: Map[Id, Set[LockArg]], lockTypeMap: Map[Id, Map[Id, LockType]], val ctx: Z3Context) + extends TypeChecks[LockArg, Z3AST] { private val solver: Z3Solver = ctx.mkSolver() - - private val predicates: mutable.Stack[Z3AST] = mutable.Stack(ctx.mkTrue()) - private val predicateGenerator = new PredicateGenerator(ctx) - - private var incrementer = 0 - private var currentMod = Id("-invalid-") override def emptyEnv(): Environment[LockArg, Z3AST] = ConditionalLockEnv(ctx = ctx) @@ -38,19 +31,19 @@ class LockConstraintChecker(lockMap: Map[Id, Set[LockArg]], lockTypeMap: Map[Id, override def checkModule(m: ModuleDef, env: Environment[LockArg, Z3AST]): Environment[LockArg, Z3AST] = { currentMod = m.name - val nenv = lockMap(m.name).foldLeft[Environment[LockArg, Z3AST]](env)((e, mem) => e.add(mem, makeEquals(mem, Free))) + val nenv = lockMap(m.name).foldLeft[Environment[LockArg, Z3AST]](emptyEnv())((e, mem) => e.add(mem, makeEquals(mem, Free))) val finalenv = checkCommand(m.body, nenv) //At end of execution all locks must be free or released finalenv.getMappedKeys().foreach(id => { - checkState(id, finalenv, Released.order, Free.order) match { + checkState(id, finalenv, ctx.mkTrue(), Released.order, Free.order) match { case Z3Status.SATISFIABLE => throw new RuntimeException("We want everything at end to be free or released") - case _ => + case _ => } }) env //no change to lock map after checking module } - + def checkCommand(c: Command, env: Environment[LockArg, Z3AST]): Environment[LockArg, Z3AST] = { c match { case CSeq(c1, c2) => @@ -62,39 +55,16 @@ class LockConstraintChecker(lockMap: Map[Id, Set[LockArg]], lockTypeMap: Map[Id, checkCommand(c2, l1) case CSplit(cases, default) => - //This will keep track of the not predicates required for all previously seen cases - val runningPredicates = mutable.Stack[Z3AST]() //keeps track of the current environment as iterate through the cases var runningEnv = env //need some special handling for the first case statement var first = true for (caseObj <- cases) { - //get abstract interp of condition - var currentCond: Z3AST = null - predicateGenerator.abstractInterpExpr(caseObj.cond) match { - case Some(value) => currentCond = value - case None => currentCond = ctx.mkEq(ctx.mkBoolConst("__TOPCONSTANT__" + incrementer), ctx.mkTrue()) - } - //Get the not of the current condition - val notCurrentCond = ctx.mkNot(currentCond.asInstanceOf[Z3BoolExpr]) - if (runningPredicates.isEmpty) { - predicates.push(currentCond) - runningPredicates.push(notCurrentCond) - } else { - val runningNot = runningPredicates.pop() - //need to add the current condition and the running Not of the previous cases to the predicates - predicates.push(mkAnd(runningNot, currentCond)) - //add to the current running not - runningPredicates.push(mkAnd(runningNot, notCurrentCond)) - } val newEnv = checkCommand(caseObj.body, env) - //makes new environment with all locks implied by this case val tenv = ConditionalLockEnv(newEnv.getMappedKeys() - .foldLeft[Map[LockArg, Z3AST]](Map())((nenv, id) => nenv + (id -> mkImplies(mkAnd(predicates.toSeq: _*), newEnv(id)))), + .foldLeft[Map[LockArg, Z3AST]](Map())((nenv, id) => nenv + (id -> mkImplies(ctx, predicateAnalysis.predicate(caseObj.body), newEnv(id)))), ctx) - //remove the predicate used for this case statement to reset for the next case - predicates.pop() if (first) { runningEnv = tenv } else { @@ -102,121 +72,109 @@ class LockConstraintChecker(lockMap: Map[Id, Set[LockArg]], lockTypeMap: Map[Id, } first = false } - //For default, all the case statements must be false, so add this to the predicates - predicates.push(runningPredicates.pop()) val defEnv = checkCommand(default, env) val tenv = ConditionalLockEnv(defEnv.getMappedKeys() - .foldLeft[Map[LockArg, Z3AST]](Map())((nenv, id) => nenv + (id -> mkImplies(mkAnd(predicates.toSeq: _*), defEnv(id)))), + .foldLeft[Map[LockArg, Z3AST]](Map())((nenv, id) => nenv + (id -> mkImplies(ctx, mkAnd(ctx, predicateAnalysis.predicate(default)), defEnv(id)))), ctx) - predicates.pop() tenv.intersect(runningEnv) case CIf(expr, cons, alt) => - predicateGenerator.abstractInterpExpr(expr) match { - case Some(value) => predicates.push(value); - case None => predicates.push(ctx.mkEq(ctx.mkBoolConst("__TOPCONSTANT__" + incrementer), ctx.mkTrue())) - } - incrementer += 1 - val lt = checkCommand(cons, env) //makes new environment with all locks implied by true branch val tenv = ConditionalLockEnv(lt.getMappedKeys() - .foldLeft[Map[LockArg, Z3AST]](Map())((nenv, id) => nenv + (id -> mkImplies(mkAnd(predicates.toSeq: _*), lt(id)))), + .foldLeft[Map[LockArg, Z3AST]](Map())((nenv, id) => nenv + (id -> mkImplies(ctx, predicateAnalysis.predicate(cons), lt(id)))), ctx) - val trueBranch = predicates.pop() - predicates.push(ctx.mkNot(trueBranch.asInstanceOf[Z3BoolExpr])) val lf = checkCommand(alt, env) //makes new environment with all locks implied by false branch val fenv = ConditionalLockEnv(lf.getMappedKeys() - .foldLeft[Map[LockArg, Z3AST]](Map())((nenv, id) => nenv + (id -> mkImplies(mkAnd(predicates.toSeq: _*), lf(id)))), + .foldLeft[Map[LockArg, Z3AST]](Map())((nenv, id) => nenv + (id -> mkImplies(ctx, predicateAnalysis.predicate(alt), lf(id)))), ctx) - predicates.pop() - //Merge the two envs tenv.intersect(fenv) //real merge logic lives inside Envrionments.Z3AST case _: CSpeculate => //TODO env - case CAssign(_, rhs) => checkExpr(rhs, env) - case CRecv(lhs, rhs) => (lhs, rhs) match { + case CAssign(_, rhs, typ) => checkExpr(rhs, env, predicateAnalysis.predicate(c)) + case CRecv(lhs, rhs, typ) => (lhs, rhs) match { case (EMemAccess(mem, expr), _) => - checkAcquired(mem, expr, env) + checkAcquired(mem, expr, env, predicateAnalysis.predicate(c)) case (_, EMemAccess(mem, expr)) => - checkAcquired(mem, expr, env) + checkAcquired(mem, expr, env, predicateAnalysis.predicate(c)) case (_, ECall(mod, _)) => //TODO Maybe just from null - checkAcquired(mod, null, env) + checkAcquired(mod, null, env, predicateAnalysis.predicate(c)) case _ => throw UnexpectedCase(c.pos) } - case CLockOp(mem, op) => + case c@CLockOp(mem, op) => val expectedLockState = op match { case Locks.Free => throw new IllegalStateException() // TODO: is this right? case Locks.Reserved => Free case Locks.Acquired => Reserved case Locks.Released => Acquired } - checkState(mem, env, expectedLockState.order) match { - case Z3Status.UNSATISFIABLE => - env.add(mem, mkImplies(mkAnd(predicates.toSeq: _*), makeEquals(mem, op))) - case Z3Status.UNKNOWN => - throw new RuntimeException("An error occurred while attempting to solve the constraints") - case Z3Status.SATISFIABLE => - throw new RuntimeException("A possible thread of execution can cause this to fail: memories needs to be acquired before releasing") - } + checkState(mem, env, predicateAnalysis.predicate(c), expectedLockState.order) match { + case Z3Status.UNSATISFIABLE => + env.add(mem, mkImplies(ctx, predicateAnalysis.predicate(c), makeEquals(mem, op))) + case Z3Status.UNKNOWN => + throw new RuntimeException("An error occurred while attempting to solve the constraints") + case Z3Status.SATISFIABLE => + throw new RuntimeException(s"A possible thread of execution can cause this to fail: memories needs to be $expectedLockState before $op") + } case _ => env } } - private def checkExpr(e: Expr, env: Environment[LockArg, Z3AST]): Environment[LockArg, Z3AST] = e match { - case EUop(_, ex) => checkExpr(ex, env) + private def checkExpr(e: Expr, env: Environment[LockArg, Z3AST], predicates: Z3BoolExpr): Environment[LockArg, Z3AST] = e match { + case EUop(_, ex) => checkExpr(ex, env, predicates) case EBinop(_, e1, e2) => - val env1 = checkExpr(e1, env) - checkExpr(e2, env1) - case EMemAccess(mem, index) => checkAcquired(mem, index, env) + val env1 = checkExpr(e1, env, predicates) + checkExpr(e2, env1, predicates) + case EMemAccess(mem, index) => checkAcquired(mem, index, env, predicates) case ETernary(cond, tval, fval) => - val env1 = checkExpr(cond, env) - val env2 = checkExpr(tval, env1) - checkExpr(fval, env2) - case EApp(_, args) => args.foldLeft(env)((e, a) => checkExpr(a, e)) - case ECall(_, args) => args.foldLeft(env)((e, a) => checkExpr(a, e)) - case ECast(_, exp) => checkExpr(exp, env) + val env1 = checkExpr(cond, env, predicates) + val env2 = checkExpr(tval, env1, predicates) + checkExpr(fval, env2, predicates) + case EApp(_, args) => args.foldLeft(env)((e, a) => checkExpr(a, e, predicates)) + case ECall(_, args) => args.foldLeft(env)((e, a) => checkExpr(a, e, predicates)) + case ECast(_, exp) => checkExpr(exp, env, predicates) case _ => env } override def checkCircuit(c: Circuit, env: Environment[LockArg, Z3AST]): Environment[LockArg, Z3AST] = env - - private def checkState(mem: LockArg, env: Environment[LockArg, Z3AST], lockStateOrders: Int*): Z3Status = { - // Makes an OR of all given lock states + private def checkState(mem: LockArg, env: Environment[LockArg, Z3AST], predicates: Z3BoolExpr, lockStateOrders: Int*): Z3Status = { + + // Makes an OR of all given lock states val stateAST = lockStateOrders.foldLeft(ctx.mkFalse())((ast, order) => ctx.mkOr(ast, ctx.mkEq(ctx.mkIntConst(constructVarName(mem)), ctx.mkInt(order)))) - + // Makes all the current predicates true - solver.add(ctx.mkEq(mkAnd(predicates.toSeq: _*), ctx.mkTrue())) - + solver.add(ctx.mkEq(predicates, ctx.mkTrue())) + // Asserts the state of the lock currently, and checks if its possible for the mem to NOT be in the expected lock states - solver.add(mkAnd(env(mem), ctx.mkNot(stateAST))) + solver.add(mkAnd(ctx, env(mem), ctx.mkNot(stateAST))) val check = solver.check() solver.reset() check } - + private def makeEquals(mem: LockArg, lockState: LockState): Z3AST = { ctx.mkEq(ctx.mkIntConst(constructVarName(mem)), ctx.mkInt(lockState.order)) } - + private def constructVarName(mem: LockArg): String = { mem.id + (if (mem.evar.isDefined) "[" + mem.evar.get.id.v + "]" else "") } - - private def checkAcquired(mem: Id, expr: Expr, env: Environment[LockArg, Z3AST]): Environment[LockArg, Z3AST] = { + + private def checkAcquired(mem: Id, expr: Expr, env: Environment[LockArg, Z3AST], predicates: Z3BoolExpr): Environment[LockArg, Z3AST] = { if (lockTypeMap(currentMod)(mem).equals(Specific) && !expr.isInstanceOf[EVar]) { throw new RuntimeException("We expect the argument in the memory access to be a variable") } checkState(if (lockTypeMap(currentMod)(mem).equals(General)) LockArg(mem, None) else LockArg(mem, Some(expr.asInstanceOf[EVar])), - env, + env, + predicates, Acquired.order) match { case Z3Status.SATISFIABLE => @@ -227,12 +185,4 @@ class LockConstraintChecker(lockMap: Map[Id, Set[LockArg]], lockTypeMap: Map[Id, env } } - - /** Like [[Z3Context.mkAnd]], but automatically casts inputs to [[Z3BoolExpr]]s. */ - private def mkAnd(expressions: Z3AST *): Z3BoolExpr = - ctx.mkAnd(expressions.map(ast => ast.asInstanceOf[Z3BoolExpr]):_*) - - /** Like [[Z3Context.mkImplies]], but automatically casts inputs to [[Z3BoolExpr]]s. */ - private def mkImplies(t1: Z3AST, t2: Z3AST): Z3BoolExpr = - ctx.mkImplies(t1.asInstanceOf[Z3BoolExpr], t2.asInstanceOf[Z3BoolExpr]) } \ No newline at end of file diff --git a/src/main/scala/pipedsl/typechecker/LockRegionChecker.scala b/src/main/scala/pipedsl/typechecker/LockRegionChecker.scala index 3b8d38cd..dd9712d4 100644 --- a/src/main/scala/pipedsl/typechecker/LockRegionChecker.scala +++ b/src/main/scala/pipedsl/typechecker/LockRegionChecker.scala @@ -87,7 +87,7 @@ object LockRegionChecker extends TypeChecks[Id, LockState] { throw InvalidLockState(c.pos, mem.id.v, env(mem.id), Acquired) } env - case Syntax.CEmpty => env + case Syntax.CEmpty() => env case _ => env } diff --git a/src/main/scala/pipedsl/typechecker/LockWellformedChecker.scala b/src/main/scala/pipedsl/typechecker/LockWellformedChecker.scala index fe8fba8c..1efdfb2e 100644 --- a/src/main/scala/pipedsl/typechecker/LockWellformedChecker.scala +++ b/src/main/scala/pipedsl/typechecker/LockWellformedChecker.scala @@ -56,7 +56,7 @@ class LockWellformedChecker() { throw MalformedLockTypes("Memory modules can only have location specific locks or general locks, but not both") else updateLockTypeMap(mem.id, getLockType(mem)) lockArgs + mem - case _ => lockArgs + case _ => lockArgs } private def getLockType(lockArg: LockArg): LockType = lockArg.evar match { diff --git a/src/main/scala/pipedsl/typechecker/PredicateGenerator.scala b/src/main/scala/pipedsl/typechecker/PredicateGenerator.scala index cf723e45..249a908f 100644 --- a/src/main/scala/pipedsl/typechecker/PredicateGenerator.scala +++ b/src/main/scala/pipedsl/typechecker/PredicateGenerator.scala @@ -1,83 +1,49 @@ -package pipedsl.typechecker +/**package pipedsl.typechecker -import com.microsoft.z3.{AST => Z3AST, Expr => Z3Expr, BoolExpr => Z3BoolExpr, Context => Z3Context} +import com.microsoft.z3.{AST => Z3AST, BoolExpr => Z3BoolExpr, Context => Z3Context, Expr => Z3Expr} +import org.bitbucket.inkytonik.kiama.attribution.Attribution import pipedsl.common.Syntax -import pipedsl.common.Syntax.{BoolOp, BoolUOp, CSeq, Command, EVar, EqOp, Expr} +import pipedsl.common.Syntax.{BoolOp, BoolUOp, CSeq, Command, EVar, EqOp, Expr, ProgramNode} -class PredicateGenerator(ctx: Z3Context) { +class PredicateGenerator(ctx: Z3Context) extends Attribution { private val intArray = ctx.mkArraySort(ctx.getIntSort, ctx.getIntSort) - - def generatePostcondition(c: Command, preCondition: Set[Z3AST]): Set[Z3AST] = - c match { - case CSeq(c1, c2) => - val p1 = generatePostcondition(c1, preCondition) - generatePostcondition(c2, p1) - case Syntax.CTBar(c1, c2) => - val p1 = generatePostcondition(c1, preCondition) - generatePostcondition(c2, p1) - case Syntax.CIf(cond, cons, alt) => + def abstractInterpExpr(e: Expr): Option[Z3Expr] = e match { + case evar: EVar => Some(declareConstant(evar)) + case Syntax.EInt(v, base, bits) => Some(ctx.mkInt(v)) + case Syntax.EBool(v) => if (v) Some(ctx.mkTrue()) else Some(ctx.mkFalse()) + case Syntax.EUop(op, ex) => + val absex = abstractInterpExpr(ex) + (op, absex) match { + case (BoolUOp(o), Some(v)) if o == "!" => Some(ctx.mkNot(v.asInstanceOf[Z3BoolExpr])) + case _ => None + } + case Syntax.EBinop(op, e1, e2) => + val abse1 = abstractInterpExpr(e1) + val abse2 = abstractInterpExpr(e2) + (op, abse1, abse2) match { + case (EqOp(o), Some(v1), Some(v2)) if o == "==" => Some(ctx.mkEq(v1, v2)) + case (EqOp(o), Some(v1), Some(v2)) if o == "!=" => Some(ctx.mkNot(ctx.mkEq(v1, v2))) + case (BoolOp(o, _), Some(v1), Some(v2)) if o == "&&" => + Some(ctx.mkAnd(v1.asInstanceOf[Z3BoolExpr], v2.asInstanceOf[Z3BoolExpr])) + case (BoolOp(o, _), Some(v1), Some(v2)) if o == "||" => + Some(ctx.mkOr(v1.asInstanceOf[Z3BoolExpr], v2.asInstanceOf[Z3BoolExpr])) + case _ => None + } + case Syntax.ETernary(cond, tval, fval) => val abscond = abstractInterpExpr(cond) - abscond match { - case Some(value: Z3BoolExpr) => - generatePostcondition(cons, preCondition + value) - .intersect(generatePostcondition(alt, preCondition + ctx.mkNot(value))) - case None => - generatePostcondition(cons, preCondition) - .intersect(generatePostcondition(alt, preCondition)) + val abstval = abstractInterpExpr(tval) + val absfval = abstractInterpExpr(fval) + (abscond, abstval, absfval) match { + case (Some(vcond), Some(vtval), Some(vfval)) => + Some(ctx.mkITE(vcond.asInstanceOf[Z3BoolExpr], vtval, vfval)) + case _ => + None } - case Syntax.CAssign(lhs, rhs) => (lhs, abstractInterpExpr(rhs)) match { - case (evar: EVar, Some(value)) => - val declare = ctx.mkEq(declareConstant(evar), value) - preCondition + declare - case (evar: EVar, None) => preCondition - case _ => preCondition - } - case Syntax.CRecv(lhs, rhs) => (lhs, abstractInterpExpr(rhs)) match { - case (evar: EVar, Some(value)) => - val declare = ctx.mkEq(declareConstant(evar), value) - preCondition + declare - case (evar: EVar, None) => preCondition - case _ => preCondition - } - case _ => preCondition + case _ => None } - def abstractInterpExpr(e: Expr): Option[Z3Expr] = e match { - case evar: EVar => Some(declareConstant(evar)) - case Syntax.EInt(v, base, bits) => Some(ctx.mkInt(v)) - case Syntax.EBool(v) => if (v) Some(ctx.mkTrue()) else Some(ctx.mkFalse()) - case Syntax.EUop(op, ex) => - val absex = abstractInterpExpr(ex) - (op, absex) match { - case (BoolUOp(o), Some(v)) if o == "!" => Some(ctx.mkNot(v.asInstanceOf[Z3BoolExpr])) - case _ => None - } - case Syntax.EBinop(op, e1, e2) => - val abse1 = abstractInterpExpr(e1) - val abse2 = abstractInterpExpr(e2) - (op, abse1, abse2) match { - case (EqOp(o), Some(v1), Some(v2)) if o == "==" => Some(ctx.mkEq(v1, v2)) - case (EqOp(o), Some(v1), Some(v2)) if o == "!=" => Some(ctx.mkNot(ctx.mkEq(v1, v2))) - case (BoolOp(o, _), Some(v1), Some(v2)) if o == "&&" => - Some(ctx.mkAnd(v1.asInstanceOf[Z3BoolExpr], v2.asInstanceOf[Z3BoolExpr])) - case (BoolOp(o, _), Some(v1), Some(v2)) if o == "||" => - Some(ctx.mkOr(v1.asInstanceOf[Z3BoolExpr], v2.asInstanceOf[Z3BoolExpr])) - case _ => None - } - case Syntax.ETernary(cond, tval, fval) => - val abscond = abstractInterpExpr(cond) - val abstval = abstractInterpExpr(tval) - val absfval = abstractInterpExpr(fval) - (abscond, abstval, absfval) match { - case (Some(vcond), Some(vtval), Some(vfval)) => - Some(ctx.mkITE(vcond.asInstanceOf[Z3BoolExpr], vtval, vfval)) - case _ => - None - } - case _ => None - } - + def declareConstant(evar: EVar): Z3Expr = evar.typ match { case Some(value) => value match { @@ -89,3 +55,4 @@ class PredicateGenerator(ctx: Z3Context) { case None => throw new RuntimeException("Missing type") } } + */ diff --git a/src/main/scala/pipedsl/typechecker/SpeculationChecker.scala b/src/main/scala/pipedsl/typechecker/SpeculationChecker.scala index ceb34966..bd9e42d9 100644 --- a/src/main/scala/pipedsl/typechecker/SpeculationChecker.scala +++ b/src/main/scala/pipedsl/typechecker/SpeculationChecker.scala @@ -47,7 +47,7 @@ object SpeculationChecker extends TypeChecks[Id, Type] { } else { specVarsT } - case CRecv(lhs, _) => lhs match { + case CRecv(lhs, _, _) => lhs match { case EMemAccess(_, _) if specVars.nonEmpty => throw UnresolvedSpeculation(lhs.pos, "Memory Write") case _ => specVars diff --git a/src/main/scala/pipedsl/typechecker/TimingTypeChecker.scala b/src/main/scala/pipedsl/typechecker/TimingTypeChecker.scala index e1cb1efb..b62c4a1e 100644 --- a/src/main/scala/pipedsl/typechecker/TimingTypeChecker.scala +++ b/src/main/scala/pipedsl/typechecker/TimingTypeChecker.scala @@ -1,3 +1,5 @@ + +/** package pipedsl.typechecker import pipedsl.common.Syntax._ @@ -70,12 +72,12 @@ object TimingTypeChecker extends TypeChecks[Id, Type] { val (vt, nvt) = checkCommand(cons, vars, nextVars) val (vf, nvf) = checkCommand(alt, vars, nextVars) (vt.intersect(vf), nvt.intersect(nvf)) - case CAssign(lhs, rhs) => + case CAssign(lhs, rhs, _) => if (checkExpr(rhs, vars) != Latency.Combinational) { throw UnexpectedAsyncReference(rhs.pos, rhs.toString) } (vars + lhs.id, nextVars) - case CRecv(lhs, rhs) => + case CRecv(lhs, rhs, _) => val rhsLat = checkExpr(rhs, vars) val lhsLat = checkExpr(lhs, vars, isRhs = false) (lhs, rhs) match { @@ -115,7 +117,7 @@ object TimingTypeChecker extends TypeChecks[Id, Type] { case CExpr(exp) => checkExpr(exp, vars) (vars, nextVars) - case Syntax.CEmpty => (vars, nextVars) + case Syntax.CEmpty() => (vars, nextVars) case CPrint(evar) => checkExpr(evar, vars) (vars, nextVars) @@ -176,3 +178,4 @@ object TimingTypeChecker extends TypeChecks[Id, Type] { override def checkCircuit(c: Circuit, env: Environment[Id, Type]): Environment[Id, Type] = env } +*/ \ No newline at end of file diff --git a/src/test/tests/multiExec/multiexec.pdl b/src/test/tests/multiExec/multiexec.pdl index da2900ec..6fa9d57c 100644 --- a/src/test/tests/multiExec/multiexec.pdl +++ b/src/test/tests/multiExec/multiexec.pdl @@ -9,18 +9,6 @@ pipe multi_stg_mul(a1: int<32>, a2: int<32>)[]: int<32> { output(res); } -pipe multi_stg_div(num: int<32>, denom: int<32>, quot: int<32>, acc: int<32>, cnt: int<5>)[]: int<32> { - int<32> tmp = acc{30:0} ++ num{31:31}; - int<32> na = (tmp >= denom) ? (tmp - denom) : (tmp); - int<32> nq = (tmp >= denom) ? ((quot << 1){31:1} ++ 1<1>) : (quot << 1); - int<32> nnum = num << 1; - if (cnt == 31<5>) { - output(nq); - } else { - call multi_stg_div(nnum, denom, nq, na, cnt + 1<5>); - } -} - pipe cpu(pc: int<16>)[rf: int<32>[5], imem: int<32>[16], m: multi_stg_mul, f: multi_stg_div]: bool { if (pc < 14<16>) { call cpu(pc + 1<16>); From 12de269045730445ec6d8bf6193279e338765ac3 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 16 Apr 2021 23:04:53 -0400 Subject: [PATCH 04/12] fixed attribute problems, need to test some --- .../pipedsl/analysis/TimingAnalysis.scala | 86 ++++++++++--------- .../scala/pipedsl/analysis/TypeAnalysis.scala | 48 +++++++---- src/main/scala/pipedsl/common/Syntax.scala | 9 +- .../pipedsl/typechecker/Environments.scala | 2 +- 4 files changed, 82 insertions(+), 63 deletions(-) diff --git a/src/main/scala/pipedsl/analysis/TimingAnalysis.scala b/src/main/scala/pipedsl/analysis/TimingAnalysis.scala index ba9bd8ce..1397a643 100644 --- a/src/main/scala/pipedsl/analysis/TimingAnalysis.scala +++ b/src/main/scala/pipedsl/analysis/TimingAnalysis.scala @@ -58,20 +58,12 @@ class TimingAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysi case CEmpty() => case _ => } - + //If previous, just take availableNow of previous + the after + //If previous is part of CTBar, we want the previous + the available made f val availableNow: ProgramNode => Available = { attr { - case program.prev(program.parent(c@CSeq(c1, c2))) => availableNow(c1) - case program.prev(program.parent(c@CTBar(c1, c2))) => availableNow(c1) ++ availableNext(c1) - case program.prev(c@CAssign(lhs@EVar(id), rhs, typ)) => - availableNow(c) + id - case program.prev(c@CIf(cond, cons, alt)) => - availableNowAfterNode(typeAnalysis.rightMostLeaf(cons)) - .intersect(availableNowAfterNode(typeAnalysis.rightMostLeaf(alt))) - case program.prev(c@CSplit(cases, default)) => - cases.foldLeft[Available](availableNowAfterNode(typeAnalysis.rightMostLeaf(default)))( - (s,c) => s.intersect(availableNow(typeAnalysis.rightMostLeaf(c.body))) - ) + case program.prev(program.parent(c@CSeq(c1, c2))) => availableNow(c1) ++ availableNowAfterNode(NoneAvailable)(c1) + case program.prev(program.parent(c@CTBar(c1, c2))) => availableNow(c1) ++ availableNextAfterNode(NoneAvailable)(c1) case program.parent(m@ModuleDef(name, inputs, modules, ret, body)) => val inputs = m.inputs.foldLeft[Available](NoneAvailable)((av,p) => { av + p.name @@ -85,43 +77,59 @@ class TimingAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysi } /** - * Attribute that gives the available variable after we are are at a node; note that "after" - * is in terms of the sequential view of the program, rather than the recursive AST view + * Attribute that gives the available variable generated by a node */ - val availableNowAfterNode:ProgramNode => Available = { - attr { - case c@CAssign(lhs@EVar(id), rhs, typ) => availableNow(c) + id - case p => availableNow(p) + val availableNowAfterNode: Available => ProgramNode => Available = { + paramAttr { + avail => { + case CSeq(c1, c2) => val a1 = availableNowAfterNode(avail)(c1); availableNowAfterNode(a1)(c2) + case CTBar(c1, c2) => val a1 = availableNowAfterNode(avail)(c1); availableNowAfterNode(a1 ++ availableNextAfterNode(NoneAvailable)(c1))(c2) + case CAssign(lhs@EVar(id), rhs, typ) => avail + id + case CIf(cond, cons, alt) => availableNowAfterNode(avail)(cons).intersect(availableNowAfterNode(avail)(alt)) + case CSplit(cases, default) => + var runningAvail: Available = availableNowAfterNode(avail)(default) + for (c <- cases) { + runningAvail = runningAvail.intersect(availableNowAfterNode(avail)(c)) + } + runningAvail + case _ => avail + } + } + } + + val availableNextAfterNode: Available => ProgramNode => Available = { + paramAttr { + avail => { + case CSeq(c1, c2) => val a1 = availableNextAfterNode(avail)(c1); availableNextAfterNode(a1)(c2) + case CTBar(c1, c2) => availableNextAfterNode(NoneAvailable)(c2) + case CRecv(lhs, rhs, typ) => + (lhs, rhs) match { + case (EVar(id), EMemAccess(_, _)) => avail + id + case (EVar(id), ECall(_, _)) => avail + id + case (EVar(id), _) => avail + id + case (EMemAccess(_, _), EMemAccess(_, _)) => throw UnexpectedAsyncReference(lhs.pos, "Both sides of <- cannot be memory or modules references") + case _ => avail + } + case CIf(cond, cons, alt) => availableNextAfterNode(avail)(cons).intersect(availableNextAfterNode(avail)(alt)) + case CSplit(cases, default) => + var runningAvail: Available = availableNextAfterNode(avail)(default) + for (c <- cases) { + runningAvail = runningAvail.intersect(availableNextAfterNode(avail)(c)) + } + runningAvail + case _ => avail + } } } val availableNext: ProgramNode => Available = attr { - case program.prev(program.parent(c@CSeq(c1, c2))) => availableNext(c1) + case program.prev(program.parent(c@CSeq(c1, c2))) => availableNext(c1) ++ availableNextAfterNode(NoneAvailable)(c1) case program.prev(program.parent(c@CTBar(c1, c2))) => NoneAvailable - case program.prev(c@CRecv(lhs, rhs, typ)) => - (lhs, rhs) match { - case (EVar(id), _) => availableNext(c) + id - case (EMemAccess(_,_), EMemAccess(_,_)) => throw UnexpectedAsyncReference(lhs.pos, "Both sides of <- cannot be memory or modules references") - case _ => availableNext(c) - } - case program.prev(c@CIf(cond, cons, alt)) => - availableNext(typeAnalysis.rightMostLeaf(cons)).intersect(availableNext(typeAnalysis.rightMostLeaf(alt))) - case program.prev(c@CSplit(cases, default)) => - cases.foldLeft[Available](availableNext(typeAnalysis.rightMostLeaf(default)))( - (s,c) => s.intersect(availableNext(typeAnalysis.rightMostLeaf(c.body))) - ) case program.parent(m@ModuleDef(name, inputs, modules, ret, body)) => NoneAvailable case program.parent(p) => availableNext(p) } - - val availableNextAfterNode: ProgramNode => Available = { - attr { - case c@CRecv(lhs@EVar(id), rhs, typ) => availableNext(c) + id - case p => availableNext(p) - } - } - + val latency: ProgramNode => Latency = { case EUop(_, e) => latency(e) match { case Combinational => Combinational diff --git a/src/main/scala/pipedsl/analysis/TypeAnalysis.scala b/src/main/scala/pipedsl/analysis/TypeAnalysis.scala index 4f0cc7b8..4c43cedd 100644 --- a/src/main/scala/pipedsl/analysis/TypeAnalysis.scala +++ b/src/main/scala/pipedsl/analysis/TypeAnalysis.scala @@ -5,8 +5,8 @@ import org.bitbucket.inkytonik.kiama.relation.Tree import pipedsl.common.Errors.{ArgLengthMismatch, IllegalCast, MalformedFunction, MissingType, UnexpectedAssignment, UnexpectedCase, UnexpectedCommand, UnexpectedReturn, UnexpectedSubtype, UnexpectedType} import pipedsl.common.Syntax import pipedsl.common.Syntax.Latency.{Asynchronous, Combinational, Sequential} -import pipedsl.common.Syntax.{BitOp, BitUOp, BoolOp, BoolUOp, CAssign, CCheck, CDefine, CIf, CLockEnd, CLockOp, CLockStart, COutput, CRecv, CReturn, CSeq, CSpeculate, CSplit, CTBar, CirCall, CirConnect, CirExpr, CirExprStmt, CirMem, CirNew, CirRegFile, CirSeq, Circuit, CmpOp, Command, EVar, EqOp, Expr, FuncDef, Id, ModuleDef, NumOp, NumUOp, Prog, ProgramNode, TBool, TFun, TMemType, TModType, TNamedType, TRecType, TSizedInt, TString, TVoid, Type} -import pipedsl.typechecker.Environments.{Environment, TypeEnv} +import pipedsl.common.Syntax.{BitOp, BitUOp, BoolOp, BoolUOp, CAssign, CCheck, CIf, CLockEnd, CLockOp, CLockStart, COutput, CRecv, CReturn, CSeq, CSpeculate, CSplit, CTBar, CirCall, CirConnect, CirExpr, CirExprStmt, CirMem, CirNew, CirRegFile, CirSeq, Circuit, CmpOp, Command, EVar, EqOp, Expr, FuncDef, Id, ModuleDef, NumOp, NumUOp, Prog, ProgramNode, TBool, TFun, TMemType, TModType, TNamedType, TRecType, TSizedInt, TString, TVoid, Type} +import pipedsl.typechecker.Environments.{EmptyTypeEnv, Environment, TypeEnv} import pipedsl.typechecker.Subtypes.{areEqual, isSubtype} class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { @@ -28,11 +28,14 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { }) checkCircuit(prog.circ) } - - val rightMostLeaf: Command => Command = { - case program.lastChild(p:Command) => rightMostLeaf(p) - case p => p - } + //Make this only a TOP LEVEL COMMAND (i.e. not the commands inside if statements or otherwise) Essentially, only + //traverse CSEQ or CTBAR + val rightMostLeaf: Command => Command = + attr { + case c@CSeq(c1, c2) => rightMostLeaf(c2) + case c@CTBar(c1, c2) => rightMostLeaf(c2) + case c => c + } /** * This checks that the function doesn't include any disallowed expressions @@ -112,18 +115,32 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { } } + val contextAfterCommand: Environment[Id, Type] => Command => Environment[Id, Type] = { + paramAttr { + env => { + case c@CSeq(c1, c2) => val e1 = contextAfterCommand(env)(c1); contextAfterCommand(e1)(c2) + case c@CTBar(c1, c2) => val e1 = contextAfterCommand(env)(c1); contextAfterCommand(e1)(c2) + case c@CIf(cond, cons, alt) => contextAfterCommand(env)(cons).intersect(contextAfterCommand(env)(alt)) + case c@CSplit(cases, default) => + var runningEnv = contextAfterCommand(env)(default) + for (c <- cases) { + runningEnv = runningEnv.intersect(contextAfterCommand(env)(c.body)) + } + runningEnv + case c@CAssign(lhs@EVar(id), rhs, typ) => env.add(id, typ.get) + case c@CRecv(lhs@EVar(id), rhs, typ) => env.add(id, typ.get) + case _ => env + } + } + } + //Need some thing that gives the context after a thingy + val context: ProgramNode => Environment[Id, Type] = { attr { //Context is prev OR parent //Need to match prev with CAssign, CIf,or CSplit, or CRecV - case program.prev(p@CAssign(lhs@EVar(id), rhs, Some(typ))) => println(p); println(context(p)); context(p).add(id, typ) - case program.prev(p@CRecv(lhs@EVar(id), rhs, Some(typ))) => println(p); println(context(p)); context(p).add(id, typ) - case program.prev(p@CIf(cond, tbranch, fbranch)) => - contextAfterNode(rightMostLeaf(tbranch)).intersect(contextAfterNode(rightMostLeaf(fbranch))) - case program.prev(p@CSplit(cases, default)) => - cases.foldLeft[Environment[Id, Type]](contextAfterNode(rightMostLeaf(default)))( - (env, v) => env.intersect(contextAfterNode(rightMostLeaf(v.body))) - ) + case program.prev(program.parent(c@CSeq(c1, c2))) => context(c1).union(contextAfterCommand(EmptyTypeEnv)(c1)) + case program.prev(program.parent(c@CTBar(c1, c2))) => context(c1).union(contextAfterCommand(EmptyTypeEnv)(c1)) case program.parent(m@ModuleDef(name,inputs,modules,ret,body)) => val tenv = context(m) val inEnv = inputs.foldLeft[Environment[Id, Type]](tenv)((env, p) => { env.add(p.name, p.typ) }) @@ -143,7 +160,6 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { case p => println(p); println(program.parent(p)); program.parent(p).foreach(f => println(program.parent(f))); throw new RuntimeException() } } - //Module parameters can't be given a proper type during parsing if they refer to another module //This uses module names in the type environment to lookup their already checked types diff --git a/src/main/scala/pipedsl/common/Syntax.scala b/src/main/scala/pipedsl/common/Syntax.scala index 26a9ad6e..670f74a1 100644 --- a/src/main/scala/pipedsl/common/Syntax.scala +++ b/src/main/scala/pipedsl/common/Syntax.scala @@ -196,15 +196,10 @@ object Syntax { case class CSeq(c1: Command, c2: Command) extends Command case class CTBar(c1: Command, c2: Command) extends Command case class CIf(cond: Expr, cons: Command, alt: Command) extends Command - abstract class CDefine extends Command { - def lhs: Expr - def rhs: Expr - def typ: Option[Type] - } - case class CAssign(lhs: EVar, rhs: Expr, typ: Option[Type]) extends CDefine { + case class CAssign(lhs: EVar, rhs: Expr, typ: Option[Type]) extends Command { if (!lhs.isLVal) throw UnexpectedLVal(lhs, "assignment") } - case class CRecv(lhs: Expr, rhs: Expr, typ: Option[Type]) extends CDefine { + case class CRecv(lhs: Expr, rhs: Expr, typ: Option[Type]) extends Command { if (!lhs.isLVal) throw UnexpectedLVal(lhs, "assignment") } case class CPrint(evar: EVar) extends Command diff --git a/src/main/scala/pipedsl/typechecker/Environments.scala b/src/main/scala/pipedsl/typechecker/Environments.scala index 903fb357..645056a5 100644 --- a/src/main/scala/pipedsl/typechecker/Environments.scala +++ b/src/main/scala/pipedsl/typechecker/Environments.scala @@ -182,6 +182,6 @@ object Environments { //This is filler code, I don't think we ever actually need this override def union(other: Environment[LockArg, Z3AST]): Environment[LockArg, Z3AST] = other - + } } From 1caeaeb30f7aa559b7301b0a71297c47c49e2851 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 17 Apr 2021 05:05:06 -0400 Subject: [PATCH 05/12] attributes seem to be working, need to fix wherever code assumes types are there' --- src/main/scala/pipedsl/analysis/TimingAnalysis.scala | 6 +++--- src/main/scala/pipedsl/analysis/TypeAnalysis.scala | 11 +++++------ .../scala/pipedsl/typechecker/Environments.scala | 2 +- src/test/tests/multiExec/multiexec.pdl | 12 ++++++++++++ 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/main/scala/pipedsl/analysis/TimingAnalysis.scala b/src/main/scala/pipedsl/analysis/TimingAnalysis.scala index 1397a643..584539d1 100644 --- a/src/main/scala/pipedsl/analysis/TimingAnalysis.scala +++ b/src/main/scala/pipedsl/analysis/TimingAnalysis.scala @@ -17,7 +17,7 @@ class TimingAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysi case CSeq(c1, c2) => checkCommand(c1); checkCommand(c2) case CTBar(c1, c2) => checkCommand(c2); checkCommand(c2) case CIf(cond, cons, alt) => - if (latency(cond) == Latency.Combinational) { + if (latency(cond) != Latency.Combinational) { throw UnexpectedAsyncReference(cond.pos, cond.toString) } checkCommand(cons) @@ -63,7 +63,7 @@ class TimingAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysi val availableNow: ProgramNode => Available = { attr { case program.prev(program.parent(c@CSeq(c1, c2))) => availableNow(c1) ++ availableNowAfterNode(NoneAvailable)(c1) - case program.prev(program.parent(c@CTBar(c1, c2))) => availableNow(c1) ++ availableNextAfterNode(NoneAvailable)(c1) + case program.prev(program.parent(c@CTBar(c1, c2))) => availableNow(c1) ++ availableNowAfterNode(NoneAvailable)(c1) ++ availableNextAfterNode(NoneAvailable)(c1) case program.parent(m@ModuleDef(name, inputs, modules, ret, body)) => val inputs = m.inputs.foldLeft[Available](NoneAvailable)((av,p) => { av + p.name @@ -176,7 +176,7 @@ class TimingAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysi throw UnexpectedAsyncReference(a.pos, a.toString) }) Asynchronous - case e@EVar(id) => if(!availableNow(e)(id) && isRhs(e)) { throw UnavailableArgUse(e.pos, id.toString)} else { Combinational } + case e@EVar(id) => if(!availableNow(e)(id) && isRhs(e)) { println(availableNow(e)); println(availableNext(e)); println(availableNextAfterNode(NoneAvailable)(e)); println(availableNowAfterNode(NoneAvailable)(e)); throw UnavailableArgUse(e.pos, id.toString)} else { Combinational } case ECast(_, exp) => latency(exp) case _ => Combinational } diff --git a/src/main/scala/pipedsl/analysis/TypeAnalysis.scala b/src/main/scala/pipedsl/analysis/TypeAnalysis.scala index 4c43cedd..4316a493 100644 --- a/src/main/scala/pipedsl/analysis/TypeAnalysis.scala +++ b/src/main/scala/pipedsl/analysis/TypeAnalysis.scala @@ -155,9 +155,8 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { case program.prev(m@ModuleDef(name, inputs, modules, ret, body)) => context(m).add(m.name, typeCheck(m)) case program.prev(cc@CirConnect(name, c)) => context(cc).add(name, checkCirExpr(c)) - case program.parent.pair(m, p) => println(m); println(context(p)); context(p) + case program.parent(p) => context(p) case program.root => TypeEnv() - case p => println(p); println(program.parent(p)); program.parent(p).foreach(f => println(program.parent(f))); throw new RuntimeException() } } @@ -187,8 +186,8 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { if (isSubtype(rTyp, lTyp)) TVoid() else throw UnexpectedSubtype(rhs.pos, "assignment", lTyp, rTyp) case Syntax.CPrint(evar) => val t = typeCheck(evar) - t match { - case _ => throw UnexpectedType(evar.pos, evar.toString, "Need a printable type", t) + if (! (t.isInstanceOf[TSizedInt] || t.isInstanceOf[TString] || t.isInstanceOf[TBool])) { + throw UnexpectedType(evar.pos, evar.toString, "Need a printable type", t) } case Syntax.COutput(exp) => typeCheck(exp) case Syntax.CReturn(exp) => typeCheck(exp) @@ -254,8 +253,8 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { case program.parent.pair(id: Id, mod: ModuleDef) => typeCheck(mod) case program.parent.pair(id: Id, func: FuncDef) => typeCheck(func) case i:Id => context(i)(i) - case e: Syntax.Expr => checkExpr(e) case ce: CirExpr => checkCirExpr(ce) + case e: Syntax.Expr => checkExpr(e) case m: ModuleDef => //TODO disallow memories val inputTyps = m.inputs.foldLeft[List[Type]](List())((l, p) => { l :+ p.typ }) //TODO require memory or module types @@ -386,7 +385,7 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { case _ => () } ctyp - case _ => throw UnexpectedCase(e.pos) + case _ => print(e); throw UnexpectedCase(e.pos) } } diff --git a/src/main/scala/pipedsl/typechecker/Environments.scala b/src/main/scala/pipedsl/typechecker/Environments.scala index 645056a5..ee761740 100644 --- a/src/main/scala/pipedsl/typechecker/Environments.scala +++ b/src/main/scala/pipedsl/typechecker/Environments.scala @@ -51,7 +51,7 @@ object Environments { override def apply(id: Id) = this.get(id) match { case Some(value) => value - case None => println(typeMap); throw MissingType(id.pos, id.v) + case None => throw MissingType(id.pos, id.v) } override def add(name: Id, typ: Type): Environment[Id, Type] = typeMap.get(name) match { diff --git a/src/test/tests/multiExec/multiexec.pdl b/src/test/tests/multiExec/multiexec.pdl index 6fa9d57c..da2900ec 100644 --- a/src/test/tests/multiExec/multiexec.pdl +++ b/src/test/tests/multiExec/multiexec.pdl @@ -9,6 +9,18 @@ pipe multi_stg_mul(a1: int<32>, a2: int<32>)[]: int<32> { output(res); } +pipe multi_stg_div(num: int<32>, denom: int<32>, quot: int<32>, acc: int<32>, cnt: int<5>)[]: int<32> { + int<32> tmp = acc{30:0} ++ num{31:31}; + int<32> na = (tmp >= denom) ? (tmp - denom) : (tmp); + int<32> nq = (tmp >= denom) ? ((quot << 1){31:1} ++ 1<1>) : (quot << 1); + int<32> nnum = num << 1; + if (cnt == 31<5>) { + output(nq); + } else { + call multi_stg_div(nnum, denom, nq, na, cnt + 1<5>); + } +} + pipe cpu(pc: int<16>)[rf: int<32>[5], imem: int<32>[16], m: multi_stg_mul, f: multi_stg_div]: bool { if (pc < 14<16>) { call cpu(pc + 1<16>); From 955daca0d8a4b1cb86c94ff728f107c9b4f5c20c Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 17 Apr 2021 14:32:12 -0400 Subject: [PATCH 06/12] all relevant tests pass --- src/main/scala/pipedsl/Main.scala | 2 +- .../pipedsl/analysis/TimingAnalysis.scala | 70 +- .../scala/pipedsl/analysis/TypeAnalysis.scala | 123 +- .../pipedsl/passes/SimplifyRecvPass.scala | 4 +- .../scala/pipedsl/testOutputs/Circuit.bsv | 34 - .../testOutputs/Circuit_sim/mkCircuit.cxx | 2205 ----------------- .../testOutputs/Circuit_sim/mkCircuit.h | 260 -- .../testOutputs/Circuit_sim/mkCircuit.o | Bin 104596 -> 0 bytes .../pipedsl/testOutputs/Circuit_sim/mkTB.cxx | 156 -- .../pipedsl/testOutputs/Circuit_sim/mkTB.h | 96 - .../pipedsl/testOutputs/Circuit_sim/mkTB.o | Bin 16760 -> 0 bytes .../testOutputs/Circuit_sim/model_mkTB.cxx | 565 ----- .../testOutputs/Circuit_sim/model_mkTB.h | 54 - .../testOutputs/Circuit_sim/model_mkTB.o | Bin 28360 -> 0 bytes .../testOutputs/Circuit_verilog/mkCircuit.v | 2047 --------------- .../testOutputs/Circuit_verilog/mkTB.v | 118 - src/main/scala/pipedsl/testOutputs/Cpu.bsv | 258 -- .../scala/pipedsl/testOutputs/Functions.bsv | 0 src/main/scala/pipedsl/testOutputs/Hist.bsv | 107 - .../pipedsl/testOutputs/Multi_stg_div.bsv | 84 - .../pipedsl/testOutputs/Multi_stg_mul.bsv | 68 - src/main/scala/pipedsl/testOutputs/clean.sh | 9 - src/main/scala/pipedsl/testOutputs/f | 1024 -------- src/main/scala/pipedsl/testOutputs/h | 1024 -------- .../scala/pipedsl/testOutputs/imemMultiExec | 16 - .../scala/pipedsl/testOutputs/mkCircuit.ba | Bin 122803 -> 0 bytes src/main/scala/pipedsl/testOutputs/mkTB.ba | Bin 7646 -> 0 bytes src/main/scala/pipedsl/testOutputs/mkTB.bexe | 12 - .../scala/pipedsl/testOutputs/mkTB.bexe.so | Bin 224624 -> 0 bytes .../scala/pipedsl/testOutputs/rfMultiExec | 40 - src/main/scala/pipedsl/testOutputs/runbsc.sh | 18 - .../scala/pipedsl/testOutputs/top.sim.out | 998 -------- src/main/scala/pipedsl/testOutputs/w | 1024 -------- .../typechecker/LockRegionChecker.scala | 7 +- 34 files changed, 103 insertions(+), 10320 deletions(-) delete mode 100644 src/main/scala/pipedsl/testOutputs/Circuit.bsv delete mode 100644 src/main/scala/pipedsl/testOutputs/Circuit_sim/mkCircuit.cxx delete mode 100644 src/main/scala/pipedsl/testOutputs/Circuit_sim/mkCircuit.h delete mode 100644 src/main/scala/pipedsl/testOutputs/Circuit_sim/mkCircuit.o delete mode 100644 src/main/scala/pipedsl/testOutputs/Circuit_sim/mkTB.cxx delete mode 100644 src/main/scala/pipedsl/testOutputs/Circuit_sim/mkTB.h delete mode 100644 src/main/scala/pipedsl/testOutputs/Circuit_sim/mkTB.o delete mode 100644 src/main/scala/pipedsl/testOutputs/Circuit_sim/model_mkTB.cxx delete mode 100644 src/main/scala/pipedsl/testOutputs/Circuit_sim/model_mkTB.h delete mode 100644 src/main/scala/pipedsl/testOutputs/Circuit_sim/model_mkTB.o delete mode 100644 src/main/scala/pipedsl/testOutputs/Circuit_verilog/mkCircuit.v delete mode 100644 src/main/scala/pipedsl/testOutputs/Circuit_verilog/mkTB.v delete mode 100644 src/main/scala/pipedsl/testOutputs/Cpu.bsv delete mode 100644 src/main/scala/pipedsl/testOutputs/Functions.bsv delete mode 100644 src/main/scala/pipedsl/testOutputs/Hist.bsv delete mode 100644 src/main/scala/pipedsl/testOutputs/Multi_stg_div.bsv delete mode 100644 src/main/scala/pipedsl/testOutputs/Multi_stg_mul.bsv delete mode 100644 src/main/scala/pipedsl/testOutputs/clean.sh delete mode 100644 src/main/scala/pipedsl/testOutputs/f delete mode 100644 src/main/scala/pipedsl/testOutputs/h delete mode 100644 src/main/scala/pipedsl/testOutputs/imemMultiExec delete mode 100644 src/main/scala/pipedsl/testOutputs/mkCircuit.ba delete mode 100644 src/main/scala/pipedsl/testOutputs/mkTB.ba delete mode 100755 src/main/scala/pipedsl/testOutputs/mkTB.bexe delete mode 100755 src/main/scala/pipedsl/testOutputs/mkTB.bexe.so delete mode 100644 src/main/scala/pipedsl/testOutputs/rfMultiExec delete mode 100644 src/main/scala/pipedsl/testOutputs/runbsc.sh delete mode 100644 src/main/scala/pipedsl/testOutputs/top.sim.out delete mode 100644 src/main/scala/pipedsl/testOutputs/w diff --git a/src/main/scala/pipedsl/Main.scala b/src/main/scala/pipedsl/Main.scala index e89afa70..cc5db04b 100644 --- a/src/main/scala/pipedsl/Main.scala +++ b/src/main/scala/pipedsl/Main.scala @@ -72,7 +72,7 @@ object Main { TimingAnalysis.get(prog).checkProg() MarkNonRecursiveModulePass.run(prog) val recvProg = SimplifyRecvPass.run(prog) - LockRegionChecker.check(recvProg, None) + new LockRegionChecker(recvProg).check(recvProg, None) val lockWellformedChecker = new LockWellformedChecker() val locks = lockWellformedChecker.check(canonProg) pinfo.addLockInfo(lockWellformedChecker.getModLockTypeMap) diff --git a/src/main/scala/pipedsl/analysis/TimingAnalysis.scala b/src/main/scala/pipedsl/analysis/TimingAnalysis.scala index 584539d1..33cb11f4 100644 --- a/src/main/scala/pipedsl/analysis/TimingAnalysis.scala +++ b/src/main/scala/pipedsl/analysis/TimingAnalysis.scala @@ -4,7 +4,7 @@ import org.bitbucket.inkytonik.kiama.attribution.Attribution import org.bitbucket.inkytonik.kiama.relation.Tree import pipedsl.common.Errors.{UnavailableArgUse, UnexpectedAsyncReference, UnexpectedType} import pipedsl.common.Syntax.Latency.{Asynchronous, Combinational, Latency} -import pipedsl.common.Syntax.{CAssign, CCheck, CEmpty, CExpr, CIf, CLockEnd, CLockOp, CLockStart, COutput, CPrint, CRecv, CReturn, CSeq, CSpeculate, CSplit, CTBar, Command, EApp, EBinop, EBitExtract, ECall, ECast, EMemAccess, ERecAccess, ETernary, EUop, EVar, Id, Latency, ModuleDef, Prog, ProgramNode, TMemType} +import pipedsl.common.Syntax.{CAssign, CCheck, CEmpty, CExpr, CIf, CLockEnd, CLockOp, CLockStart, COutput, CPrint, CRecv, CReturn, CSeq, CSpeculate, CSplit, CTBar, Command, EApp, EBinop, EBitExtract, ECall, ECast, EMemAccess, ERecAccess, ETernary, EUop, EVar, Id, Latency, ModuleDef, Prog, ProgramNode, TMemType, Expr} class TimingAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysis) extends Attribution{ @@ -58,12 +58,14 @@ class TimingAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysi case CEmpty() => case _ => } - //If previous, just take availableNow of previous + the after - //If previous is part of CTBar, we want the previous + the available made f + + /** + * Gives the variables available this cycle at a program node + */ val availableNow: ProgramNode => Available = { attr { - case program.prev(program.parent(c@CSeq(c1, c2))) => availableNow(c1) ++ availableNowAfterNode(NoneAvailable)(c1) - case program.prev(program.parent(c@CTBar(c1, c2))) => availableNow(c1) ++ availableNowAfterNode(NoneAvailable)(c1) ++ availableNextAfterNode(NoneAvailable)(c1) + case program.prev(program.parent(c@CSeq(c1, c2))) => availableNow(c1) ++ generatedAvailableNow(NoneAvailable)(c1) + case program.prev(program.parent(c@CTBar(c1, c2))) => availableNow(c1) ++ generatedAvailableNow(NoneAvailable)(c1) ++ generatedAvailableNext(NoneAvailable)(c1) case program.parent(m@ModuleDef(name, inputs, modules, ret, body)) => val inputs = m.inputs.foldLeft[Available](NoneAvailable)((av,p) => { av + p.name @@ -76,20 +78,31 @@ class TimingAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysi } } + /** + * Gives the variables available the next cycle at this program node + */ + val availableNext: ProgramNode => Available = + attr { + case program.prev(program.parent(c@CSeq(c1, c2))) => availableNext(c1) ++ generatedAvailableNext(NoneAvailable)(c1) + case program.prev(program.parent(c@CTBar(c1, c2))) => NoneAvailable + case program.parent(m@ModuleDef(name, inputs, modules, ret, body)) => NoneAvailable + case program.parent(p) => availableNext(p) + } + /** - * Attribute that gives the available variable generated by a node + * Gives the variables made available this cycle generated by a node */ - val availableNowAfterNode: Available => ProgramNode => Available = { + val generatedAvailableNow: Available => ProgramNode => Available = { paramAttr { avail => { - case CSeq(c1, c2) => val a1 = availableNowAfterNode(avail)(c1); availableNowAfterNode(a1)(c2) - case CTBar(c1, c2) => val a1 = availableNowAfterNode(avail)(c1); availableNowAfterNode(a1 ++ availableNextAfterNode(NoneAvailable)(c1))(c2) + case CSeq(c1, c2) => val a1 = generatedAvailableNow(avail)(c1); generatedAvailableNow(a1)(c2) + case CTBar(c1, c2) => val a1 = generatedAvailableNow(avail)(c1); generatedAvailableNow(a1 ++ generatedAvailableNext(NoneAvailable)(c1))(c2) case CAssign(lhs@EVar(id), rhs, typ) => avail + id - case CIf(cond, cons, alt) => availableNowAfterNode(avail)(cons).intersect(availableNowAfterNode(avail)(alt)) + case CIf(cond, cons, alt) => generatedAvailableNow(avail)(cons).intersect(generatedAvailableNow(avail)(alt)) case CSplit(cases, default) => - var runningAvail: Available = availableNowAfterNode(avail)(default) + var runningAvail: Available = generatedAvailableNow(avail)(default) for (c <- cases) { - runningAvail = runningAvail.intersect(availableNowAfterNode(avail)(c)) + runningAvail = runningAvail.intersect(generatedAvailableNow(avail)(c)) } runningAvail case _ => avail @@ -97,11 +110,14 @@ class TimingAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysi } } - val availableNextAfterNode: Available => ProgramNode => Available = { + /** + * Gives the variables made available next cycle generated by a node + */ + val generatedAvailableNext: Available => ProgramNode => Available = { paramAttr { avail => { - case CSeq(c1, c2) => val a1 = availableNextAfterNode(avail)(c1); availableNextAfterNode(a1)(c2) - case CTBar(c1, c2) => availableNextAfterNode(NoneAvailable)(c2) + case CSeq(c1, c2) => val a1 = generatedAvailableNext(avail)(c1); generatedAvailableNext(a1)(c2) + case CTBar(c1, c2) => generatedAvailableNext(NoneAvailable)(c2) case CRecv(lhs, rhs, typ) => (lhs, rhs) match { case (EVar(id), EMemAccess(_, _)) => avail + id @@ -110,27 +126,22 @@ class TimingAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysi case (EMemAccess(_, _), EMemAccess(_, _)) => throw UnexpectedAsyncReference(lhs.pos, "Both sides of <- cannot be memory or modules references") case _ => avail } - case CIf(cond, cons, alt) => availableNextAfterNode(avail)(cons).intersect(availableNextAfterNode(avail)(alt)) + case CIf(cond, cons, alt) => generatedAvailableNext(avail)(cons).intersect(generatedAvailableNext(avail)(alt)) case CSplit(cases, default) => - var runningAvail: Available = availableNextAfterNode(avail)(default) + var runningAvail: Available = generatedAvailableNext(avail)(default) for (c <- cases) { - runningAvail = runningAvail.intersect(availableNextAfterNode(avail)(c)) + runningAvail = runningAvail.intersect(generatedAvailableNext(avail)(c)) } runningAvail case _ => avail } } } - - val availableNext: ProgramNode => Available = - attr { - case program.prev(program.parent(c@CSeq(c1, c2))) => availableNext(c1) ++ availableNextAfterNode(NoneAvailable)(c1) - case program.prev(program.parent(c@CTBar(c1, c2))) => NoneAvailable - case program.parent(m@ModuleDef(name, inputs, modules, ret, body)) => NoneAvailable - case program.parent(p) => availableNext(p) - } - val latency: ProgramNode => Latency = { + /** + * Gives the latency of an expression + */ + val latency: Expr => Latency = { case EUop(_, e) => latency(e) match { case Combinational => Combinational case _ => throw UnexpectedAsyncReference(e.pos, e.toString) @@ -176,11 +187,14 @@ class TimingAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysi throw UnexpectedAsyncReference(a.pos, a.toString) }) Asynchronous - case e@EVar(id) => if(!availableNow(e)(id) && isRhs(e)) { println(availableNow(e)); println(availableNext(e)); println(availableNextAfterNode(NoneAvailable)(e)); println(availableNowAfterNode(NoneAvailable)(e)); throw UnavailableArgUse(e.pos, id.toString)} else { Combinational } + case e@EVar(id) => if(!availableNow(e)(id) && isRhs(e)) { println(availableNow(e)); println(availableNext(e)); println(generatedAvailableNext(NoneAvailable)(e)); println(generatedAvailableNow(NoneAvailable)(e)); throw UnavailableArgUse(e.pos, id.toString)} else { Combinational } case ECast(_, exp) => latency(exp) case _ => Combinational } + /** + * Returns whether or a node is the RHS of a declaration statement + */ val isRhs: ProgramNode => Boolean = { attr { case program.prev(program.parent(_:CAssign)) => true diff --git a/src/main/scala/pipedsl/analysis/TypeAnalysis.scala b/src/main/scala/pipedsl/analysis/TypeAnalysis.scala index 4316a493..e2b37328 100644 --- a/src/main/scala/pipedsl/analysis/TypeAnalysis.scala +++ b/src/main/scala/pipedsl/analysis/TypeAnalysis.scala @@ -28,14 +28,6 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { }) checkCircuit(prog.circ) } - //Make this only a TOP LEVEL COMMAND (i.e. not the commands inside if statements or otherwise) Essentially, only - //traverse CSEQ or CTBAR - val rightMostLeaf: Command => Command = - attr { - case c@CSeq(c1, c2) => rightMostLeaf(c2) - case c@CTBar(c1, c2) => rightMostLeaf(c2) - case c => c - } /** * This checks that the function doesn't include any disallowed expressions @@ -107,66 +99,6 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { case _ => assignees } - val contextAfterNode: ProgramNode => Environment[Id, Type] = { - attr { - case c@CAssign(lhs@EVar(id), rhs, typ) => context(c).add(id, typ.get) - case c@CRecv(lhs@EVar(id), rhs, typ) => context(c).add(id, typ.get) - case p => context(p) - } - } - - val contextAfterCommand: Environment[Id, Type] => Command => Environment[Id, Type] = { - paramAttr { - env => { - case c@CSeq(c1, c2) => val e1 = contextAfterCommand(env)(c1); contextAfterCommand(e1)(c2) - case c@CTBar(c1, c2) => val e1 = contextAfterCommand(env)(c1); contextAfterCommand(e1)(c2) - case c@CIf(cond, cons, alt) => contextAfterCommand(env)(cons).intersect(contextAfterCommand(env)(alt)) - case c@CSplit(cases, default) => - var runningEnv = contextAfterCommand(env)(default) - for (c <- cases) { - runningEnv = runningEnv.intersect(contextAfterCommand(env)(c.body)) - } - runningEnv - case c@CAssign(lhs@EVar(id), rhs, typ) => env.add(id, typ.get) - case c@CRecv(lhs@EVar(id), rhs, typ) => env.add(id, typ.get) - case _ => env - } - } - } - //Need some thing that gives the context after a thingy - - val context: ProgramNode => Environment[Id, Type] = { - attr { - //Context is prev OR parent - //Need to match prev with CAssign, CIf,or CSplit, or CRecV - case program.prev(program.parent(c@CSeq(c1, c2))) => context(c1).union(contextAfterCommand(EmptyTypeEnv)(c1)) - case program.prev(program.parent(c@CTBar(c1, c2))) => context(c1).union(contextAfterCommand(EmptyTypeEnv)(c1)) - case program.parent(m@ModuleDef(name,inputs,modules,ret,body)) => - val tenv = context(m) - val inEnv = inputs.foldLeft[Environment[Id, Type]](tenv)((env, p) => { env.add(p.name, p.typ) }) - val pipeEnv = modules.foldLeft[Environment[Id, Type]](inEnv)((env, p) => - { env.add(p.name, replaceNamedType(p.typ, m)) }) - pipeEnv.add(m.name, typeCheck(m)) - case program.parent(f@FuncDef(name, args, ret, body)) => - val tenv = context(f) - f.args.foldLeft[Environment[Id, Type]](tenv)((env, p) => { env.add(p.name, p.typ)}) - case program.prev(f@FuncDef(name, args, ret, body))=> - context(f).add(f.name, typeCheck(f)) - case program.prev(m@ModuleDef(name, inputs, modules, ret, body)) => - context(m).add(m.name, typeCheck(m)) - case program.prev(cc@CirConnect(name, c)) => context(cc).add(name, checkCirExpr(c)) - case program.parent(p) => context(p) - case program.root => TypeEnv() - } - } - - //Module parameters can't be given a proper type during parsing if they refer to another module - //This uses module names in the type environment to lookup their already checked types - private def replaceNamedType(t: Type, mod: ModuleDef): Type = t match { - case TNamedType(name) => context(mod)(name) - case _ => t - } - def checkCommand(c: Command): Unit = { val tenv = context(c) c match { @@ -244,6 +176,57 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { } } + val contextAfterCommand: Environment[Id, Type] => Command => Environment[Id, Type] = { + paramAttr { + env => { + case c@CSeq(c1, c2) => val e1 = contextAfterCommand(env)(c1); contextAfterCommand(e1)(c2) + case c@CTBar(c1, c2) => val e1 = contextAfterCommand(env)(c1); contextAfterCommand(e1)(c2) + case c@CIf(cond, cons, alt) => contextAfterCommand(env)(cons).intersect(contextAfterCommand(env)(alt)) + case c@CSplit(cases, default) => + var runningEnv = contextAfterCommand(env)(default) + for (c <- cases) { + runningEnv = runningEnv.intersect(contextAfterCommand(env)(c.body)) + } + runningEnv + case c@CAssign(lhs@EVar(id), rhs, typ) => env.add(id, typ.get) + case c@CRecv(lhs@EVar(id), rhs, typ) => env.add(id, typ.get) + case _ => env + } + } + } + + val context: ProgramNode => Environment[Id, Type] = { + attr { + //Context is prev OR parent + //Need to match prev with CAssign, CIf,or CSplit, or CRecV + case program.prev(program.parent(c@CSeq(c1, c2))) => context(c1).union(contextAfterCommand(EmptyTypeEnv)(c1)) + case program.prev(program.parent(c@CTBar(c1, c2))) => context(c1).union(contextAfterCommand(EmptyTypeEnv)(c1)) + case program.parent(m@ModuleDef(name,inputs,modules,ret,body)) => + val tenv = context(m) + val inEnv = inputs.foldLeft[Environment[Id, Type]](tenv)((env, p) => { env.add(p.name, p.typ) }) + val pipeEnv = modules.foldLeft[Environment[Id, Type]](inEnv)((env, p) => + { env.add(p.name, replaceNamedType(p.typ, m)) }) + pipeEnv.add(m.name, typeCheck(m)) + case program.parent(f@FuncDef(name, args, ret, body)) => + val tenv = context(f) + f.args.foldLeft[Environment[Id, Type]](tenv)((env, p) => { env.add(p.name, p.typ)}) + case program.prev(f@FuncDef(name, args, ret, body))=> + context(f).add(f.name, typeCheck(f)) + case program.prev(m@ModuleDef(name, inputs, modules, ret, body)) => + context(m).add(m.name, typeCheck(m)) + case program.prev(cc@CirConnect(name, c)) => context(cc).add(name, checkCirExpr(c)) + case program.parent(p) => context(p) + case program.root => TypeEnv() + } + } + + //Module parameters can't be given a proper type during parsing if they refer to another module + //This uses module names in the type environment to lookup their already checked types + private def replaceNamedType(t: Type, mod: ModuleDef): Type = t match { + case TNamedType(name) => context(mod)(name) + case _ => t + } + val typeCheck: ProgramNode => Type = { attr { //used to get the defined type of a node @@ -267,7 +250,7 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { } } - def checkExpr(e: Expr): Type = { + private def checkExpr(e: Expr): Type = { val tenv = context(e) e match { case Syntax.EInt(v, base, bits) => TSizedInt(bits, unsigned = true) @@ -389,7 +372,7 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { } } - def checkCirExpr(c: CirExpr): Type = { + private def checkCirExpr(c: CirExpr): Type = { val tenv = context(c) c match { case CirMem(elemTyp, addrSize) => { diff --git a/src/main/scala/pipedsl/passes/SimplifyRecvPass.scala b/src/main/scala/pipedsl/passes/SimplifyRecvPass.scala index d73153a6..7b153d98 100644 --- a/src/main/scala/pipedsl/passes/SimplifyRecvPass.scala +++ b/src/main/scala/pipedsl/passes/SimplifyRecvPass.scala @@ -64,7 +64,7 @@ object SimplifyRecvPass extends CommandPass[Command] with ModulePass[ModuleDef] CSeq(idxAssgn, CRecv(lhs, EMemAccess(mem, idxAssgn.lhs).setPos(rhs.pos), typ)).setPos(c.pos) case (EMemAccess(_, EVar(_)), EVar(_)) => c //leave it alone, already in form we want case (EMemAccess(_,EVar(_)), _) => // separate out the RHS computation - val rhsAssgn = CAssign(newVar("msg", rhs.pos), rhs, typ).setPos(rhs.pos) + val rhsAssgn = CAssign(newVar("msg", rhs.pos), rhs, Some(typeAnalysis.typeCheck(rhs))).setPos(rhs.pos) CSeq(rhsAssgn, CRecv(lhs, rhsAssgn.lhs, typ).setPos(c.pos)).setPos(c.pos) case (EMemAccess(mem,idx), EVar(_)) => //separate out the index computation val idxAssgn = CAssign(newVar("index", idx.pos), idx, Some(typeAnalysis.typeCheck(idx))).setPos(idx.pos) @@ -72,7 +72,7 @@ object SimplifyRecvPass extends CommandPass[Command] with ModulePass[ModuleDef] CSeq(idxAssgn, CRecv(access, rhs, typ).setPos(c.pos)).setPos(c.pos) case (EMemAccess(mem,idx), _) => //separate the index computation AND the rhs computation into new variables val idxAssgn = CAssign(newVar("index", idx.pos), idx, Some(typeAnalysis.typeCheck(idx))).setPos(idx.pos) - val rhsAssgn = CAssign(newVar("msg", rhs.pos), rhs, typ).setPos(rhs.pos) + val rhsAssgn = CAssign(newVar("msg", rhs.pos), rhs, Some(typeAnalysis.typeCheck(rhs))).setPos(rhs.pos) val access = EMemAccess(mem, idxAssgn.lhs).setPos(lhs.pos) CSeq(idxAssgn, CSeq(rhsAssgn, diff --git a/src/main/scala/pipedsl/testOutputs/Circuit.bsv b/src/main/scala/pipedsl/testOutputs/Circuit.bsv deleted file mode 100644 index 891c1ba0..00000000 --- a/src/main/scala/pipedsl/testOutputs/Circuit.bsv +++ /dev/null @@ -1,34 +0,0 @@ -import Memories :: *; -import Hist :: *; -import Functions :: *; - - - -interface TopMod; - interface Hist _inthg; -endinterface - -(* synthesize *) -module mkTB ( Empty _unused_ ); - Reg#( UInt#(3) ) reg_unused_0 <- mkReg ( 0 ); - Reg#( Bool ) started <- mkReg ( False ); - TopMod m <- mkCircuit ( ); - rule initTB (( ! started )); - UInt#(3) _unused_0 = ?; - _unused_0 <- m._inthg.req(10'd0); - reg_unused_0 <= _unused_0; - started <= True; - endrule - rule stopTB (m._inthg.checkHandle(reg_unused_0)); - $finish(); - endrule -endmodule - -(* synthesize *) -module mkCircuit ( TopMod _unused_ ); - CombMem#( UInt#(10), UInt#(10) ) f <- mkCombMem ( True, "f" ); - CombMem#( UInt#(32), UInt#(10) ) w <- mkCombMem ( True, "w" ); - CombMem#( UInt#(32), UInt#(10) ) h <- mkCombMem ( True, "h" ); - Hist hg <- mkHist ( f, w, h ); - interface Hist _inthg = hg; -endmodule diff --git a/src/main/scala/pipedsl/testOutputs/Circuit_sim/mkCircuit.cxx b/src/main/scala/pipedsl/testOutputs/Circuit_sim/mkCircuit.cxx deleted file mode 100644 index e25f7215..00000000 --- a/src/main/scala/pipedsl/testOutputs/Circuit_sim/mkCircuit.cxx +++ /dev/null @@ -1,2205 +0,0 @@ -/* - * Generated by Bluespec Compiler - * - */ -#include "bluesim_primitives.h" -#include "mkCircuit.h" - - -/* String declarations */ -static std::string const __str_literal_1("f", 1u); -static std::string const __str_literal_2("h", 1u); -static std::string const __str_literal_3("w", 1u); - - -/* Constructor */ -MOD_mkCircuit::MOD_mkCircuit(tSimStateHdl simHdl, char const *name, Module *parent) - : Module(simHdl, name, parent), - __clk_handle_0(BAD_CLOCK_HANDLE), - INST_f_rf(simHdl, "f_rf", this, __str_literal_1, 10u, 10u, 0u, 1023u, (tUInt8)0u), - INST_h_rf(simHdl, "h_rf", this, __str_literal_2, 10u, 32u, 0u, 1023u, (tUInt8)0u), - INST_hg(simHdl, "hg", this, 3u, (tUInt8)0u, (tUInt8)0u), - INST_hg_busyReg(simHdl, "hg_busyReg", this, 1u, (tUInt8)0u, (tUInt8)0u), - INST_hg_feature_lock_entryVec_0(simHdl, "hg_feature_lock_entryVec_0", this, 11u, 682u, (tUInt8)0u), - INST_hg_feature_lock_entryVec_1(simHdl, "hg_feature_lock_entryVec_1", this, 11u, 682u, (tUInt8)0u), - INST_hg_feature_lock_entryVec_2(simHdl, "hg_feature_lock_entryVec_2", this, 11u, 682u, (tUInt8)0u), - INST_hg_feature_lock_entryVec_3(simHdl, "hg_feature_lock_entryVec_3", this, 11u, 682u, (tUInt8)0u), - INST_hg_feature_lock_lockVec_0_cnt(simHdl, - "hg_feature_lock_lockVec_0_cnt", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_feature_lock_lockVec_0_held(simHdl, "hg_feature_lock_lockVec_0_held", this, 2u, 4u, 1u, 0u), - INST_hg_feature_lock_lockVec_0_nextId(simHdl, - "hg_feature_lock_lockVec_0_nextId", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_feature_lock_lockVec_1_cnt(simHdl, - "hg_feature_lock_lockVec_1_cnt", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_feature_lock_lockVec_1_held(simHdl, "hg_feature_lock_lockVec_1_held", this, 2u, 4u, 1u, 0u), - INST_hg_feature_lock_lockVec_1_nextId(simHdl, - "hg_feature_lock_lockVec_1_nextId", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_feature_lock_lockVec_2_cnt(simHdl, - "hg_feature_lock_lockVec_2_cnt", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_feature_lock_lockVec_2_held(simHdl, "hg_feature_lock_lockVec_2_held", this, 2u, 4u, 1u, 0u), - INST_hg_feature_lock_lockVec_2_nextId(simHdl, - "hg_feature_lock_lockVec_2_nextId", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_feature_lock_lockVec_3_cnt(simHdl, - "hg_feature_lock_lockVec_3_cnt", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_feature_lock_lockVec_3_held(simHdl, "hg_feature_lock_lockVec_3_held", this, 2u, 4u, 1u, 0u), - INST_hg_feature_lock_lockVec_3_nextId(simHdl, - "hg_feature_lock_lockVec_3_nextId", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_feature_lock_region(simHdl, "hg_feature_lock_region", this, 1u, (tUInt8)1u, (tUInt8)0u), - INST_hg_fifo_Stage__1_TO_Stage__2(simHdl, "hg_fifo_Stage__1_TO_Stage__2", this, 48u, 2u, 1u, 0u), - INST_hg_fifo_Stage__2_TO_Stage__3(simHdl, "hg_fifo_Stage__2_TO_Stage__3", this, 3u, 2u, 1u, 0u), - INST_hg_fifo_Start_TO_Stage__1(simHdl, "hg_fifo_Start_TO_Stage__1", this, 45u, 2u, 1u, 0u), - INST_hg_fifo__input__TO_Start(simHdl, "hg_fifo__input__TO_Start", this, 13u, 2u, 1u, 0u), - INST_hg_h_lock_entryVec_0(simHdl, "hg_h_lock_entryVec_0", this, 11u, 682u, (tUInt8)0u), - INST_hg_h_lock_entryVec_1(simHdl, "hg_h_lock_entryVec_1", this, 11u, 682u, (tUInt8)0u), - INST_hg_h_lock_entryVec_2(simHdl, "hg_h_lock_entryVec_2", this, 11u, 682u, (tUInt8)0u), - INST_hg_h_lock_entryVec_3(simHdl, "hg_h_lock_entryVec_3", this, 11u, 682u, (tUInt8)0u), - INST_hg_h_lock_lockVec_0_cnt(simHdl, "hg_h_lock_lockVec_0_cnt", this, 2u, (tUInt8)0u, (tUInt8)0u), - INST_hg_h_lock_lockVec_0_held(simHdl, "hg_h_lock_lockVec_0_held", this, 2u, 4u, 1u, 0u), - INST_hg_h_lock_lockVec_0_nextId(simHdl, - "hg_h_lock_lockVec_0_nextId", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_h_lock_lockVec_1_cnt(simHdl, "hg_h_lock_lockVec_1_cnt", this, 2u, (tUInt8)0u, (tUInt8)0u), - INST_hg_h_lock_lockVec_1_held(simHdl, "hg_h_lock_lockVec_1_held", this, 2u, 4u, 1u, 0u), - INST_hg_h_lock_lockVec_1_nextId(simHdl, - "hg_h_lock_lockVec_1_nextId", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_h_lock_lockVec_2_cnt(simHdl, "hg_h_lock_lockVec_2_cnt", this, 2u, (tUInt8)0u, (tUInt8)0u), - INST_hg_h_lock_lockVec_2_held(simHdl, "hg_h_lock_lockVec_2_held", this, 2u, 4u, 1u, 0u), - INST_hg_h_lock_lockVec_2_nextId(simHdl, - "hg_h_lock_lockVec_2_nextId", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_h_lock_lockVec_3_cnt(simHdl, "hg_h_lock_lockVec_3_cnt", this, 2u, (tUInt8)0u, (tUInt8)0u), - INST_hg_h_lock_lockVec_3_held(simHdl, "hg_h_lock_lockVec_3_held", this, 2u, 4u, 1u, 0u), - INST_hg_h_lock_lockVec_3_nextId(simHdl, - "hg_h_lock_lockVec_3_nextId", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_h_lock_region(simHdl, "hg_h_lock_region", this, 1u, (tUInt8)1u, (tUInt8)0u), - INST_hg_outputQueue(simHdl, "hg_outputQueue", this, 4u, 2u, 1u, 0u), - INST_hg_weight_lock_entryVec_0(simHdl, "hg_weight_lock_entryVec_0", this, 11u, 682u, (tUInt8)0u), - INST_hg_weight_lock_entryVec_1(simHdl, "hg_weight_lock_entryVec_1", this, 11u, 682u, (tUInt8)0u), - INST_hg_weight_lock_entryVec_2(simHdl, "hg_weight_lock_entryVec_2", this, 11u, 682u, (tUInt8)0u), - INST_hg_weight_lock_entryVec_3(simHdl, "hg_weight_lock_entryVec_3", this, 11u, 682u, (tUInt8)0u), - INST_hg_weight_lock_lockVec_0_cnt(simHdl, - "hg_weight_lock_lockVec_0_cnt", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_weight_lock_lockVec_0_held(simHdl, "hg_weight_lock_lockVec_0_held", this, 2u, 4u, 1u, 0u), - INST_hg_weight_lock_lockVec_0_nextId(simHdl, - "hg_weight_lock_lockVec_0_nextId", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_weight_lock_lockVec_1_cnt(simHdl, - "hg_weight_lock_lockVec_1_cnt", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_weight_lock_lockVec_1_held(simHdl, "hg_weight_lock_lockVec_1_held", this, 2u, 4u, 1u, 0u), - INST_hg_weight_lock_lockVec_1_nextId(simHdl, - "hg_weight_lock_lockVec_1_nextId", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_weight_lock_lockVec_2_cnt(simHdl, - "hg_weight_lock_lockVec_2_cnt", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_weight_lock_lockVec_2_held(simHdl, "hg_weight_lock_lockVec_2_held", this, 2u, 4u, 1u, 0u), - INST_hg_weight_lock_lockVec_2_nextId(simHdl, - "hg_weight_lock_lockVec_2_nextId", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_weight_lock_lockVec_3_cnt(simHdl, - "hg_weight_lock_lockVec_3_cnt", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_weight_lock_lockVec_3_held(simHdl, "hg_weight_lock_lockVec_3_held", this, 2u, 4u, 1u, 0u), - INST_hg_weight_lock_lockVec_3_nextId(simHdl, - "hg_weight_lock_lockVec_3_nextId", - this, - 2u, - (tUInt8)0u, - (tUInt8)0u), - INST_hg_weight_lock_region(simHdl, "hg_weight_lock_region", this, 1u, (tUInt8)1u, (tUInt8)0u), - INST_w_rf(simHdl, "w_rf", this, __str_literal_3, 10u, 32u, 0u, 1023u, (tUInt8)0u), - PORT_RST_N((tUInt8)1u) -{ - PORT_EN__inthg_req = false; - symbol_count = 87u; - symbols = new tSym[symbol_count]; - init_symbols_0(); -} - - -/* Symbol init fns */ - -void MOD_mkCircuit::init_symbols_0() -{ - init_symbol(&symbols[0u], "b__h8408", SYM_DEF, &DEF_b__h8408, 10u); - init_symbol(&symbols[1u], "b__h8449", SYM_DEF, &DEF_b__h8449, 10u); - init_symbol(&symbols[2u], "b__h8480", SYM_DEF, &DEF_b__h8480, 10u); - init_symbol(&symbols[3u], "b__h8511", SYM_DEF, &DEF_b__h8511, 10u); - init_symbol(&symbols[4u], "EN__inthg_req", SYM_PORT, &PORT_EN__inthg_req, 1u); - init_symbol(&symbols[5u], "f_rf", SYM_MODULE, &INST_f_rf); - init_symbol(&symbols[6u], "h_rf", SYM_MODULE, &INST_h_rf); - init_symbol(&symbols[7u], "hg", SYM_MODULE, &INST_hg); - init_symbol(&symbols[8u], "hg_busyReg", SYM_MODULE, &INST_hg_busyReg); - init_symbol(&symbols[9u], "hg_busyReg__h7113", SYM_DEF, &DEF_hg_busyReg__h7113, 1u); - init_symbol(&symbols[10u], - "hg_feature_lock_entryVec_0", - SYM_MODULE, - &INST_hg_feature_lock_entryVec_0); - init_symbol(&symbols[11u], - "hg_feature_lock_entryVec_1", - SYM_MODULE, - &INST_hg_feature_lock_entryVec_1); - init_symbol(&symbols[12u], - "hg_feature_lock_entryVec_2", - SYM_MODULE, - &INST_hg_feature_lock_entryVec_2); - init_symbol(&symbols[13u], - "hg_feature_lock_entryVec_3", - SYM_MODULE, - &INST_hg_feature_lock_entryVec_3); - init_symbol(&symbols[14u], - "hg_feature_lock_lockVec_0_cnt", - SYM_MODULE, - &INST_hg_feature_lock_lockVec_0_cnt); - init_symbol(&symbols[15u], - "hg_feature_lock_lockVec_0_held", - SYM_MODULE, - &INST_hg_feature_lock_lockVec_0_held); - init_symbol(&symbols[16u], - "hg_feature_lock_lockVec_0_nextId", - SYM_MODULE, - &INST_hg_feature_lock_lockVec_0_nextId); - init_symbol(&symbols[17u], - "hg_feature_lock_lockVec_1_cnt", - SYM_MODULE, - &INST_hg_feature_lock_lockVec_1_cnt); - init_symbol(&symbols[18u], - "hg_feature_lock_lockVec_1_held", - SYM_MODULE, - &INST_hg_feature_lock_lockVec_1_held); - init_symbol(&symbols[19u], - "hg_feature_lock_lockVec_1_nextId", - SYM_MODULE, - &INST_hg_feature_lock_lockVec_1_nextId); - init_symbol(&symbols[20u], - "hg_feature_lock_lockVec_2_cnt", - SYM_MODULE, - &INST_hg_feature_lock_lockVec_2_cnt); - init_symbol(&symbols[21u], - "hg_feature_lock_lockVec_2_held", - SYM_MODULE, - &INST_hg_feature_lock_lockVec_2_held); - init_symbol(&symbols[22u], - "hg_feature_lock_lockVec_2_nextId", - SYM_MODULE, - &INST_hg_feature_lock_lockVec_2_nextId); - init_symbol(&symbols[23u], - "hg_feature_lock_lockVec_3_cnt", - SYM_MODULE, - &INST_hg_feature_lock_lockVec_3_cnt); - init_symbol(&symbols[24u], - "hg_feature_lock_lockVec_3_held", - SYM_MODULE, - &INST_hg_feature_lock_lockVec_3_held); - init_symbol(&symbols[25u], - "hg_feature_lock_lockVec_3_nextId", - SYM_MODULE, - &INST_hg_feature_lock_lockVec_3_nextId); - init_symbol(&symbols[26u], "hg_feature_lock_region", SYM_MODULE, &INST_hg_feature_lock_region); - init_symbol(&symbols[27u], "hg_fifo__input__TO_Start", SYM_MODULE, &INST_hg_fifo__input__TO_Start); - init_symbol(&symbols[28u], - "hg_fifo_Stage__1_TO_Stage__2", - SYM_MODULE, - &INST_hg_fifo_Stage__1_TO_Stage__2); - init_symbol(&symbols[29u], - "hg_fifo_Stage__2_TO_Stage__3", - SYM_MODULE, - &INST_hg_fifo_Stage__2_TO_Stage__3); - init_symbol(&symbols[30u], - "hg_fifo_Start_TO_Stage__1", - SYM_MODULE, - &INST_hg_fifo_Start_TO_Stage__1); - init_symbol(&symbols[31u], "hg_h_lock_entryVec_0", SYM_MODULE, &INST_hg_h_lock_entryVec_0); - init_symbol(&symbols[32u], "hg_h_lock_entryVec_1", SYM_MODULE, &INST_hg_h_lock_entryVec_1); - init_symbol(&symbols[33u], "hg_h_lock_entryVec_2", SYM_MODULE, &INST_hg_h_lock_entryVec_2); - init_symbol(&symbols[34u], "hg_h_lock_entryVec_3", SYM_MODULE, &INST_hg_h_lock_entryVec_3); - init_symbol(&symbols[35u], "hg_h_lock_lockVec_0_cnt", SYM_MODULE, &INST_hg_h_lock_lockVec_0_cnt); - init_symbol(&symbols[36u], "hg_h_lock_lockVec_0_held", SYM_MODULE, &INST_hg_h_lock_lockVec_0_held); - init_symbol(&symbols[37u], - "hg_h_lock_lockVec_0_nextId", - SYM_MODULE, - &INST_hg_h_lock_lockVec_0_nextId); - init_symbol(&symbols[38u], "hg_h_lock_lockVec_1_cnt", SYM_MODULE, &INST_hg_h_lock_lockVec_1_cnt); - init_symbol(&symbols[39u], "hg_h_lock_lockVec_1_held", SYM_MODULE, &INST_hg_h_lock_lockVec_1_held); - init_symbol(&symbols[40u], - "hg_h_lock_lockVec_1_nextId", - SYM_MODULE, - &INST_hg_h_lock_lockVec_1_nextId); - init_symbol(&symbols[41u], "hg_h_lock_lockVec_2_cnt", SYM_MODULE, &INST_hg_h_lock_lockVec_2_cnt); - init_symbol(&symbols[42u], "hg_h_lock_lockVec_2_held", SYM_MODULE, &INST_hg_h_lock_lockVec_2_held); - init_symbol(&symbols[43u], - "hg_h_lock_lockVec_2_nextId", - SYM_MODULE, - &INST_hg_h_lock_lockVec_2_nextId); - init_symbol(&symbols[44u], "hg_h_lock_lockVec_3_cnt", SYM_MODULE, &INST_hg_h_lock_lockVec_3_cnt); - init_symbol(&symbols[45u], "hg_h_lock_lockVec_3_held", SYM_MODULE, &INST_hg_h_lock_lockVec_3_held); - init_symbol(&symbols[46u], - "hg_h_lock_lockVec_3_nextId", - SYM_MODULE, - &INST_hg_h_lock_lockVec_3_nextId); - init_symbol(&symbols[47u], "hg_h_lock_region", SYM_MODULE, &INST_hg_h_lock_region); - init_symbol(&symbols[48u], "hg_outputQueue", SYM_MODULE, &INST_hg_outputQueue); - init_symbol(&symbols[49u], - "hg_weight_lock_entryVec_0", - SYM_MODULE, - &INST_hg_weight_lock_entryVec_0); - init_symbol(&symbols[50u], - "hg_weight_lock_entryVec_1", - SYM_MODULE, - &INST_hg_weight_lock_entryVec_1); - init_symbol(&symbols[51u], - "hg_weight_lock_entryVec_2", - SYM_MODULE, - &INST_hg_weight_lock_entryVec_2); - init_symbol(&symbols[52u], - "hg_weight_lock_entryVec_3", - SYM_MODULE, - &INST_hg_weight_lock_entryVec_3); - init_symbol(&symbols[53u], - "hg_weight_lock_lockVec_0_cnt", - SYM_MODULE, - &INST_hg_weight_lock_lockVec_0_cnt); - init_symbol(&symbols[54u], - "hg_weight_lock_lockVec_0_held", - SYM_MODULE, - &INST_hg_weight_lock_lockVec_0_held); - init_symbol(&symbols[55u], - "hg_weight_lock_lockVec_0_nextId", - SYM_MODULE, - &INST_hg_weight_lock_lockVec_0_nextId); - init_symbol(&symbols[56u], - "hg_weight_lock_lockVec_1_cnt", - SYM_MODULE, - &INST_hg_weight_lock_lockVec_1_cnt); - init_symbol(&symbols[57u], - "hg_weight_lock_lockVec_1_held", - SYM_MODULE, - &INST_hg_weight_lock_lockVec_1_held); - init_symbol(&symbols[58u], - "hg_weight_lock_lockVec_1_nextId", - SYM_MODULE, - &INST_hg_weight_lock_lockVec_1_nextId); - init_symbol(&symbols[59u], - "hg_weight_lock_lockVec_2_cnt", - SYM_MODULE, - &INST_hg_weight_lock_lockVec_2_cnt); - init_symbol(&symbols[60u], - "hg_weight_lock_lockVec_2_held", - SYM_MODULE, - &INST_hg_weight_lock_lockVec_2_held); - init_symbol(&symbols[61u], - "hg_weight_lock_lockVec_2_nextId", - SYM_MODULE, - &INST_hg_weight_lock_lockVec_2_nextId); - init_symbol(&symbols[62u], - "hg_weight_lock_lockVec_3_cnt", - SYM_MODULE, - &INST_hg_weight_lock_lockVec_3_cnt); - init_symbol(&symbols[63u], - "hg_weight_lock_lockVec_3_held", - SYM_MODULE, - &INST_hg_weight_lock_lockVec_3_held); - init_symbol(&symbols[64u], - "hg_weight_lock_lockVec_3_nextId", - SYM_MODULE, - &INST_hg_weight_lock_lockVec_3_nextId); - init_symbol(&symbols[65u], "hg_weight_lock_region", SYM_MODULE, &INST_hg_weight_lock_region); - init_symbol(&symbols[66u], "RL_hg_feature_lock_freelock", SYM_RULE); - init_symbol(&symbols[67u], "RL_hg_feature_lock_freelock_1", SYM_RULE); - init_symbol(&symbols[68u], "RL_hg_feature_lock_freelock_2", SYM_RULE); - init_symbol(&symbols[69u], "RL_hg_feature_lock_freelock_3", SYM_RULE); - init_symbol(&symbols[70u], "RL_hg_h_lock_freelock", SYM_RULE); - init_symbol(&symbols[71u], "RL_hg_h_lock_freelock_1", SYM_RULE); - init_symbol(&symbols[72u], "RL_hg_h_lock_freelock_2", SYM_RULE); - init_symbol(&symbols[73u], "RL_hg_h_lock_freelock_3", SYM_RULE); - init_symbol(&symbols[74u], "RL_hg_s_Stage__1_execute", SYM_RULE); - init_symbol(&symbols[75u], "RL_hg_s_Stage__2_execute", SYM_RULE); - init_symbol(&symbols[76u], "RL_hg_s_Stage__3_execute", SYM_RULE); - init_symbol(&symbols[77u], "RL_hg_s_Start_execute", SYM_RULE); - init_symbol(&symbols[78u], "RL_hg_weight_lock_freelock", SYM_RULE); - init_symbol(&symbols[79u], "RL_hg_weight_lock_freelock_1", SYM_RULE); - init_symbol(&symbols[80u], "RL_hg_weight_lock_freelock_2", SYM_RULE); - init_symbol(&symbols[81u], "RL_hg_weight_lock_freelock_3", SYM_RULE); - init_symbol(&symbols[82u], "WILL_FIRE__inthg_req", SYM_DEF, &DEF_WILL_FIRE__inthg_req, 1u); - init_symbol(&symbols[83u], "w_rf", SYM_MODULE, &INST_w_rf); - init_symbol(&symbols[84u], "x__h10519", SYM_DEF, &DEF_x__h10519, 2u); - init_symbol(&symbols[85u], "x__h8976", SYM_DEF, &DEF_x__h8976, 2u); - init_symbol(&symbols[86u], "x__h9842", SYM_DEF, &DEF_x__h9842, 2u); -} - - -/* Rule actions */ - -void MOD_mkCircuit::RL_hg_feature_lock_freelock() -{ - tUInt8 DEF_NOT_hg_feature_lock_lockVec_0_held_notEmpty_AN_ETC___d5; - DEF_hg_feature_lock_entryVec_0___d3 = INST_hg_feature_lock_entryVec_0.METH_read(); - DEF_hg_feature_lock_entryVec_0_BIT_10___d4 = (tUInt8)(DEF_hg_feature_lock_entryVec_0___d3 >> 10u); - DEF_NOT_hg_feature_lock_lockVec_0_held_notEmpty___d2 = !INST_hg_feature_lock_lockVec_0_held.METH_notEmpty(); - DEF__0_CONCAT_DONTCARE___d6 = 682u; - DEF_NOT_hg_feature_lock_lockVec_0_held_notEmpty_AN_ETC___d5 = DEF_NOT_hg_feature_lock_lockVec_0_held_notEmpty___d2 && DEF_hg_feature_lock_entryVec_0_BIT_10___d4; - if (DEF_NOT_hg_feature_lock_lockVec_0_held_notEmpty_AN_ETC___d5) - INST_hg_feature_lock_entryVec_0.METH_write(DEF__0_CONCAT_DONTCARE___d6); -} - -void MOD_mkCircuit::RL_hg_feature_lock_freelock_1() -{ - tUInt8 DEF_NOT_hg_feature_lock_lockVec_1_held_notEmpty_AN_ETC___d11; - DEF_hg_feature_lock_entryVec_1___d9 = INST_hg_feature_lock_entryVec_1.METH_read(); - DEF_hg_feature_lock_entryVec_1_BIT_10___d10 = (tUInt8)(DEF_hg_feature_lock_entryVec_1___d9 >> 10u); - DEF_NOT_hg_feature_lock_lockVec_1_held_notEmpty___d8 = !INST_hg_feature_lock_lockVec_1_held.METH_notEmpty(); - DEF__0_CONCAT_DONTCARE___d6 = 682u; - DEF_NOT_hg_feature_lock_lockVec_1_held_notEmpty_AN_ETC___d11 = DEF_NOT_hg_feature_lock_lockVec_1_held_notEmpty___d8 && DEF_hg_feature_lock_entryVec_1_BIT_10___d10; - if (DEF_NOT_hg_feature_lock_lockVec_1_held_notEmpty_AN_ETC___d11) - INST_hg_feature_lock_entryVec_1.METH_write(DEF__0_CONCAT_DONTCARE___d6); -} - -void MOD_mkCircuit::RL_hg_feature_lock_freelock_2() -{ - tUInt8 DEF_NOT_hg_feature_lock_lockVec_2_held_notEmpty__2_ETC___d16; - DEF_hg_feature_lock_entryVec_2___d14 = INST_hg_feature_lock_entryVec_2.METH_read(); - DEF_hg_feature_lock_entryVec_2_4_BIT_10___d15 = (tUInt8)(DEF_hg_feature_lock_entryVec_2___d14 >> 10u); - DEF_NOT_hg_feature_lock_lockVec_2_held_notEmpty__2___d13 = !INST_hg_feature_lock_lockVec_2_held.METH_notEmpty(); - DEF__0_CONCAT_DONTCARE___d6 = 682u; - DEF_NOT_hg_feature_lock_lockVec_2_held_notEmpty__2_ETC___d16 = DEF_NOT_hg_feature_lock_lockVec_2_held_notEmpty__2___d13 && DEF_hg_feature_lock_entryVec_2_4_BIT_10___d15; - if (DEF_NOT_hg_feature_lock_lockVec_2_held_notEmpty__2_ETC___d16) - INST_hg_feature_lock_entryVec_2.METH_write(DEF__0_CONCAT_DONTCARE___d6); -} - -void MOD_mkCircuit::RL_hg_feature_lock_freelock_3() -{ - tUInt8 DEF_NOT_hg_feature_lock_lockVec_3_held_notEmpty__7_ETC___d21; - DEF_hg_feature_lock_entryVec_3___d19 = INST_hg_feature_lock_entryVec_3.METH_read(); - DEF_hg_feature_lock_entryVec_3_9_BIT_10___d20 = (tUInt8)(DEF_hg_feature_lock_entryVec_3___d19 >> 10u); - DEF_NOT_hg_feature_lock_lockVec_3_held_notEmpty__7___d18 = !INST_hg_feature_lock_lockVec_3_held.METH_notEmpty(); - DEF__0_CONCAT_DONTCARE___d6 = 682u; - DEF_NOT_hg_feature_lock_lockVec_3_held_notEmpty__7_ETC___d21 = DEF_NOT_hg_feature_lock_lockVec_3_held_notEmpty__7___d18 && DEF_hg_feature_lock_entryVec_3_9_BIT_10___d20; - if (DEF_NOT_hg_feature_lock_lockVec_3_held_notEmpty__7_ETC___d21) - INST_hg_feature_lock_entryVec_3.METH_write(DEF__0_CONCAT_DONTCARE___d6); -} - -void MOD_mkCircuit::RL_hg_weight_lock_freelock() -{ - tUInt8 DEF_NOT_hg_weight_lock_lockVec_0_held_notEmpty__2__ETC___d26; - DEF_hg_weight_lock_entryVec_0___d24 = INST_hg_weight_lock_entryVec_0.METH_read(); - DEF_hg_weight_lock_entryVec_0_4_BIT_10___d25 = (tUInt8)(DEF_hg_weight_lock_entryVec_0___d24 >> 10u); - DEF_NOT_hg_weight_lock_lockVec_0_held_notEmpty__2___d23 = !INST_hg_weight_lock_lockVec_0_held.METH_notEmpty(); - DEF__0_CONCAT_DONTCARE___d6 = 682u; - DEF_NOT_hg_weight_lock_lockVec_0_held_notEmpty__2__ETC___d26 = DEF_NOT_hg_weight_lock_lockVec_0_held_notEmpty__2___d23 && DEF_hg_weight_lock_entryVec_0_4_BIT_10___d25; - if (DEF_NOT_hg_weight_lock_lockVec_0_held_notEmpty__2__ETC___d26) - INST_hg_weight_lock_entryVec_0.METH_write(DEF__0_CONCAT_DONTCARE___d6); -} - -void MOD_mkCircuit::RL_hg_weight_lock_freelock_1() -{ - tUInt8 DEF_NOT_hg_weight_lock_lockVec_1_held_notEmpty__7__ETC___d31; - DEF_hg_weight_lock_entryVec_1___d29 = INST_hg_weight_lock_entryVec_1.METH_read(); - DEF_hg_weight_lock_entryVec_1_9_BIT_10___d30 = (tUInt8)(DEF_hg_weight_lock_entryVec_1___d29 >> 10u); - DEF_NOT_hg_weight_lock_lockVec_1_held_notEmpty__7___d28 = !INST_hg_weight_lock_lockVec_1_held.METH_notEmpty(); - DEF__0_CONCAT_DONTCARE___d6 = 682u; - DEF_NOT_hg_weight_lock_lockVec_1_held_notEmpty__7__ETC___d31 = DEF_NOT_hg_weight_lock_lockVec_1_held_notEmpty__7___d28 && DEF_hg_weight_lock_entryVec_1_9_BIT_10___d30; - if (DEF_NOT_hg_weight_lock_lockVec_1_held_notEmpty__7__ETC___d31) - INST_hg_weight_lock_entryVec_1.METH_write(DEF__0_CONCAT_DONTCARE___d6); -} - -void MOD_mkCircuit::RL_hg_weight_lock_freelock_2() -{ - tUInt8 DEF_NOT_hg_weight_lock_lockVec_2_held_notEmpty__2__ETC___d36; - DEF_hg_weight_lock_entryVec_2___d34 = INST_hg_weight_lock_entryVec_2.METH_read(); - DEF_hg_weight_lock_entryVec_2_4_BIT_10___d35 = (tUInt8)(DEF_hg_weight_lock_entryVec_2___d34 >> 10u); - DEF_NOT_hg_weight_lock_lockVec_2_held_notEmpty__2___d33 = !INST_hg_weight_lock_lockVec_2_held.METH_notEmpty(); - DEF__0_CONCAT_DONTCARE___d6 = 682u; - DEF_NOT_hg_weight_lock_lockVec_2_held_notEmpty__2__ETC___d36 = DEF_NOT_hg_weight_lock_lockVec_2_held_notEmpty__2___d33 && DEF_hg_weight_lock_entryVec_2_4_BIT_10___d35; - if (DEF_NOT_hg_weight_lock_lockVec_2_held_notEmpty__2__ETC___d36) - INST_hg_weight_lock_entryVec_2.METH_write(DEF__0_CONCAT_DONTCARE___d6); -} - -void MOD_mkCircuit::RL_hg_weight_lock_freelock_3() -{ - tUInt8 DEF_NOT_hg_weight_lock_lockVec_3_held_notEmpty__7__ETC___d41; - DEF_hg_weight_lock_entryVec_3___d39 = INST_hg_weight_lock_entryVec_3.METH_read(); - DEF_hg_weight_lock_entryVec_3_9_BIT_10___d40 = (tUInt8)(DEF_hg_weight_lock_entryVec_3___d39 >> 10u); - DEF_NOT_hg_weight_lock_lockVec_3_held_notEmpty__7___d38 = !INST_hg_weight_lock_lockVec_3_held.METH_notEmpty(); - DEF__0_CONCAT_DONTCARE___d6 = 682u; - DEF_NOT_hg_weight_lock_lockVec_3_held_notEmpty__7__ETC___d41 = DEF_NOT_hg_weight_lock_lockVec_3_held_notEmpty__7___d38 && DEF_hg_weight_lock_entryVec_3_9_BIT_10___d40; - if (DEF_NOT_hg_weight_lock_lockVec_3_held_notEmpty__7__ETC___d41) - INST_hg_weight_lock_entryVec_3.METH_write(DEF__0_CONCAT_DONTCARE___d6); -} - -void MOD_mkCircuit::RL_hg_h_lock_freelock() -{ - tUInt8 DEF_NOT_hg_h_lock_lockVec_0_held_notEmpty__2_3_AND_ETC___d46; - DEF_hg_h_lock_entryVec_0___d44 = INST_hg_h_lock_entryVec_0.METH_read(); - DEF_hg_h_lock_entryVec_0_4_BIT_10___d45 = (tUInt8)(DEF_hg_h_lock_entryVec_0___d44 >> 10u); - DEF_NOT_hg_h_lock_lockVec_0_held_notEmpty__2___d43 = !INST_hg_h_lock_lockVec_0_held.METH_notEmpty(); - DEF__0_CONCAT_DONTCARE___d6 = 682u; - DEF_NOT_hg_h_lock_lockVec_0_held_notEmpty__2_3_AND_ETC___d46 = DEF_NOT_hg_h_lock_lockVec_0_held_notEmpty__2___d43 && DEF_hg_h_lock_entryVec_0_4_BIT_10___d45; - if (DEF_NOT_hg_h_lock_lockVec_0_held_notEmpty__2_3_AND_ETC___d46) - INST_hg_h_lock_entryVec_0.METH_write(DEF__0_CONCAT_DONTCARE___d6); -} - -void MOD_mkCircuit::RL_hg_h_lock_freelock_1() -{ - tUInt8 DEF_NOT_hg_h_lock_lockVec_1_held_notEmpty__7_8_AND_ETC___d51; - DEF_hg_h_lock_entryVec_1___d49 = INST_hg_h_lock_entryVec_1.METH_read(); - DEF_hg_h_lock_entryVec_1_9_BIT_10___d50 = (tUInt8)(DEF_hg_h_lock_entryVec_1___d49 >> 10u); - DEF_NOT_hg_h_lock_lockVec_1_held_notEmpty__7___d48 = !INST_hg_h_lock_lockVec_1_held.METH_notEmpty(); - DEF__0_CONCAT_DONTCARE___d6 = 682u; - DEF_NOT_hg_h_lock_lockVec_1_held_notEmpty__7_8_AND_ETC___d51 = DEF_NOT_hg_h_lock_lockVec_1_held_notEmpty__7___d48 && DEF_hg_h_lock_entryVec_1_9_BIT_10___d50; - if (DEF_NOT_hg_h_lock_lockVec_1_held_notEmpty__7_8_AND_ETC___d51) - INST_hg_h_lock_entryVec_1.METH_write(DEF__0_CONCAT_DONTCARE___d6); -} - -void MOD_mkCircuit::RL_hg_h_lock_freelock_2() -{ - tUInt8 DEF_NOT_hg_h_lock_lockVec_2_held_notEmpty__2_3_AND_ETC___d56; - DEF_hg_h_lock_entryVec_2___d54 = INST_hg_h_lock_entryVec_2.METH_read(); - DEF_hg_h_lock_entryVec_2_4_BIT_10___d55 = (tUInt8)(DEF_hg_h_lock_entryVec_2___d54 >> 10u); - DEF_NOT_hg_h_lock_lockVec_2_held_notEmpty__2___d53 = !INST_hg_h_lock_lockVec_2_held.METH_notEmpty(); - DEF__0_CONCAT_DONTCARE___d6 = 682u; - DEF_NOT_hg_h_lock_lockVec_2_held_notEmpty__2_3_AND_ETC___d56 = DEF_NOT_hg_h_lock_lockVec_2_held_notEmpty__2___d53 && DEF_hg_h_lock_entryVec_2_4_BIT_10___d55; - if (DEF_NOT_hg_h_lock_lockVec_2_held_notEmpty__2_3_AND_ETC___d56) - INST_hg_h_lock_entryVec_2.METH_write(DEF__0_CONCAT_DONTCARE___d6); -} - -void MOD_mkCircuit::RL_hg_h_lock_freelock_3() -{ - tUInt8 DEF_NOT_hg_h_lock_lockVec_3_held_notEmpty__7_8_AND_ETC___d61; - DEF_hg_h_lock_entryVec_3___d59 = INST_hg_h_lock_entryVec_3.METH_read(); - DEF_hg_h_lock_entryVec_3_9_BIT_10___d60 = (tUInt8)(DEF_hg_h_lock_entryVec_3___d59 >> 10u); - DEF_NOT_hg_h_lock_lockVec_3_held_notEmpty__7___d58 = !INST_hg_h_lock_lockVec_3_held.METH_notEmpty(); - DEF__0_CONCAT_DONTCARE___d6 = 682u; - DEF_NOT_hg_h_lock_lockVec_3_held_notEmpty__7_8_AND_ETC___d61 = DEF_NOT_hg_h_lock_lockVec_3_held_notEmpty__7___d58 && DEF_hg_h_lock_entryVec_3_9_BIT_10___d60; - if (DEF_NOT_hg_h_lock_lockVec_3_held_notEmpty__7_8_AND_ETC___d61) - INST_hg_h_lock_entryVec_3.METH_write(DEF__0_CONCAT_DONTCARE___d6); -} - -void MOD_mkCircuit::RL_hg_s_Start_execute() -{ - tUInt8 DEF_hg_fifo__input__TO_Start_first__3_BITS_2_TO_0__ETC___d161; - tUInt32 DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d160; - tUInt64 DEF_f_rf_sub_hg_fifo__input__TO_Start_first__3_BIT_ETC___d164; - tUInt8 DEF_hg_fifo__input__TO_Start_first__3_BITS_2_TO_0___d159; - tUInt32 DEF_b__h8314; - tUInt32 DEF_b__h8326; - DEF_hg_fifo__input__TO_Start_first____d63 = INST_hg_fifo__input__TO_Start.METH_first(); - DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64 = (tUInt32)(DEF_hg_fifo__input__TO_Start_first____d63 >> 3u); - DEF_b__h8326 = INST_w_rf.METH_sub(DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64); - DEF_b__h8314 = INST_f_rf.METH_sub(DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64); - DEF_hg_fifo__input__TO_Start_first__3_BITS_2_TO_0___d159 = (tUInt8)((tUInt8)7u & DEF_hg_fifo__input__TO_Start_first____d63); - DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65 = DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64 < 1000u; - DEF_f_rf_sub_hg_fifo__input__TO_Start_first__3_BIT_ETC___d164 = 35184372088831llu & (((((tUInt64)(DEF_b__h8314)) << 35u) | (((tUInt64)(DEF_b__h8326)) << 3u)) | (tUInt64)(DEF_hg_fifo__input__TO_Start_first__3_BITS_2_TO_0___d159)); - DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d160 = 8191u & (((1023u & (DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64 + 1u)) << 3u) | (tUInt32)(DEF_hg_fifo__input__TO_Start_first__3_BITS_2_TO_0___d159)); - DEF_hg_fifo__input__TO_Start_first__3_BITS_2_TO_0__ETC___d161 = (tUInt8)15u & ((DEF_hg_fifo__input__TO_Start_first__3_BITS_2_TO_0___d159 << 1u) | (tUInt8)1u); - DEF_NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d74 = !DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65; - if (DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65) - INST_hg_fifo__input__TO_Start.METH_enq(DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d160); - if (DEF_NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d74) - INST_hg_busyReg.METH_write((tUInt8)0u); - if (DEF_NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d74) - INST_hg_outputQueue.METH_enq(DEF_hg_fifo__input__TO_Start_first__3_BITS_2_TO_0__ETC___d161); - if (DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65) - INST_hg_fifo_Start_TO_Stage__1.METH_enq(DEF_f_rf_sub_hg_fifo__input__TO_Start_first__3_BIT_ETC___d164); - INST_hg_fifo__input__TO_Start.METH_deq(); -} - -void MOD_mkCircuit::RL_hg_s_Stage__1_execute() -{ - tUInt8 DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265; - tUInt32 DEF__1_CONCAT_hg_fifo_Start_TO_Stage__1_first__68_B_ETC___d267; - tUInt64 DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_ETC___d280; - tUInt8 DEF_SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d276; - tUInt8 DEF_SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d275; - tUInt8 DEF_b__h9577; - tUInt8 DEF_b__h9653; - tUInt8 DEF_b__h9729; - tUInt8 DEF_b__h9805; - tUInt32 DEF_b__h9009; - tUInt32 DEF_h_rf_sub_hg_fifo_Start_TO_Stage__1_first__68_B_ETC___d235; - tUInt32 DEF_unsigned_h_rf_sub_hg_fifo_Start_TO_Stage__1_f_ETC___d236; - tUInt8 DEF__dfoo1; - tUInt8 DEF_hg_h_lock_lockVec_3_cnt_59_PLUS_1___d260; - tUInt8 DEF__dfoo2; - tUInt8 DEF_hg_h_lock_lockVec_3_nextId_57_PLUS_1___d258; - tUInt8 DEF__dfoo4; - tUInt8 DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d273; - tUInt8 DEF_b__h9504; - tUInt8 DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d256; - tUInt8 DEF__dfoo6; - tUInt8 DEF__dfoo7; - tUInt8 DEF_hg_h_lock_lockVec_2_cnt_53_PLUS_1___d254; - tUInt8 DEF__dfoo8; - tUInt8 DEF_hg_h_lock_lockVec_2_nextId_51_PLUS_1___d252; - tUInt8 DEF__dfoo10; - tUInt8 DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d271; - tUInt8 DEF_b__h9483; - tUInt8 DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d250; - tUInt8 DEF__dfoo12; - tUInt8 DEF__dfoo13; - tUInt8 DEF_hg_h_lock_lockVec_1_cnt_47_PLUS_1___d248; - tUInt8 DEF__dfoo14; - tUInt8 DEF_hg_h_lock_lockVec_1_nextId_45_PLUS_1___d246; - tUInt8 DEF__dfoo16; - tUInt8 DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d269; - tUInt8 DEF_b__h9462; - tUInt8 DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d244; - tUInt8 DEF__dfoo18; - tUInt8 DEF__dfoo19; - tUInt8 DEF_hg_h_lock_lockVec_0_cnt_41_PLUS_1___d242; - tUInt8 DEF__dfoo20; - tUInt8 DEF_hg_h_lock_lockVec_0_nextId_39_PLUS_1___d240; - tUInt8 DEF__dfoo22; - tUInt8 DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d266; - tUInt8 DEF_b__h9441; - tUInt8 DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d238; - tUInt8 DEF__dfoo24; - tUInt8 DEF__dfoo23; - tUInt8 DEF__dfoo21; - tUInt8 DEF__dfoo17; - tUInt8 DEF__dfoo15; - tUInt8 DEF__dfoo11; - tUInt8 DEF__dfoo9; - tUInt8 DEF__dfoo5; - tUInt8 DEF__dfoo3; - DEF_b__h9441 = INST_hg_h_lock_lockVec_0_nextId.METH_read(); - DEF_hg_h_lock_lockVec_0_nextId_39_PLUS_1___d240 = (tUInt8)3u & (DEF_b__h9441 + (tUInt8)1u); - DEF_b__h9462 = INST_hg_h_lock_lockVec_1_nextId.METH_read(); - DEF_hg_h_lock_lockVec_1_nextId_45_PLUS_1___d246 = (tUInt8)3u & (DEF_b__h9462 + (tUInt8)1u); - DEF_b__h9483 = INST_hg_h_lock_lockVec_2_nextId.METH_read(); - DEF_hg_h_lock_lockVec_2_nextId_51_PLUS_1___d252 = (tUInt8)3u & (DEF_b__h9483 + (tUInt8)1u); - DEF_b__h9504 = INST_hg_h_lock_lockVec_3_nextId.METH_read(); - DEF_hg_h_lock_lockVec_3_nextId_57_PLUS_1___d258 = (tUInt8)3u & (DEF_b__h9504 + (tUInt8)1u); - DEF_hg_fifo_Start_TO_Stage__1_first____d168 = INST_hg_fifo_Start_TO_Stage__1.METH_first(); - DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169 = (tUInt32)(DEF_hg_fifo_Start_TO_Stage__1_first____d168 >> 35u); - DEF_b__h9009 = INST_h_rf.METH_sub(DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169); - DEF_h_rf_sub_hg_fifo_Start_TO_Stage__1_first__68_B_ETC___d235 = DEF_b__h9009 + ((tUInt32)(DEF_hg_fifo_Start_TO_Stage__1_first____d168 >> 3u)); - DEF_unsigned_h_rf_sub_hg_fifo_Start_TO_Stage__1_f_ETC___d236 = DEF_h_rf_sub_hg_fifo_Start_TO_Stage__1_first__68_B_ETC___d235; - DEF_hg_h_lock_entryVec_3___d59 = INST_hg_h_lock_entryVec_3.METH_read(); - DEF_hg_h_lock_entryVec_3_9_BIT_10___d60 = (tUInt8)(DEF_hg_h_lock_entryVec_3___d59 >> 10u); - DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209 = !DEF_hg_h_lock_entryVec_3_9_BIT_10___d60; - DEF_hg_h_lock_entryVec_1___d49 = INST_hg_h_lock_entryVec_1.METH_read(); - DEF_hg_h_lock_entryVec_1_9_BIT_10___d50 = (tUInt8)(DEF_hg_h_lock_entryVec_1___d49 >> 10u); - DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187 = !DEF_hg_h_lock_entryVec_1_9_BIT_10___d50; - DEF_hg_h_lock_entryVec_2___d54 = INST_hg_h_lock_entryVec_2.METH_read(); - DEF_hg_h_lock_entryVec_2_4_BIT_10___d55 = (tUInt8)(DEF_hg_h_lock_entryVec_2___d54 >> 10u); - DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184 = !DEF_hg_h_lock_entryVec_2_4_BIT_10___d55; - DEF_hg_h_lock_entryVec_0___d44 = INST_hg_h_lock_entryVec_0.METH_read(); - DEF_hg_h_lock_entryVec_0_4_BIT_10___d45 = (tUInt8)(DEF_hg_h_lock_entryVec_0___d44 >> 10u); - DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190 = !DEF_hg_h_lock_entryVec_0_4_BIT_10___d45; - DEF_b__h9805 = INST_hg_h_lock_lockVec_3_cnt.METH_read(); - DEF_hg_h_lock_lockVec_3_cnt_59_PLUS_1___d260 = (tUInt8)3u & (DEF_b__h9805 + (tUInt8)1u); - DEF_b__h9729 = INST_hg_h_lock_lockVec_2_cnt.METH_read(); - DEF_hg_h_lock_lockVec_2_cnt_53_PLUS_1___d254 = (tUInt8)3u & (DEF_b__h9729 + (tUInt8)1u); - DEF_b__h9653 = INST_hg_h_lock_lockVec_1_cnt.METH_read(); - DEF_hg_h_lock_lockVec_1_cnt_47_PLUS_1___d248 = (tUInt8)3u & (DEF_b__h9653 + (tUInt8)1u); - DEF_b__h9577 = INST_hg_h_lock_lockVec_0_cnt.METH_read(); - DEF_hg_h_lock_lockVec_0_cnt_41_PLUS_1___d242 = (tUInt8)3u & (DEF_b__h9577 + (tUInt8)1u); - DEF_b__h8511 = (tUInt32)(1023u & DEF_hg_h_lock_entryVec_3___d59); - DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170 = DEF_b__h8511 == DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169; - DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d171 = DEF_hg_h_lock_entryVec_3_9_BIT_10___d60 && DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170; - DEF_b__h8408 = (tUInt32)(1023u & DEF_hg_h_lock_entryVec_0___d44); - DEF_b__h8480 = (tUInt32)(1023u & DEF_hg_h_lock_entryVec_2___d54); - DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173 = DEF_b__h8480 == DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169; - DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d174 = DEF_hg_h_lock_entryVec_2_4_BIT_10___d55 && DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173; - DEF_b__h8449 = (tUInt32)(1023u & DEF_hg_h_lock_entryVec_1___d49); - DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176 = DEF_b__h8449 == DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169; - DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d177 = DEF_hg_h_lock_entryVec_1_9_BIT_10___d50 && DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176; - DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226 = DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209 || (DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184 || (DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187 || DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190)); - DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179 = DEF_b__h8408 == DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169; - DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183 = DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d171 || (DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d174 || (DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d177 || (DEF_hg_h_lock_entryVec_0_4_BIT_10___d45 && DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179))); - DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d192 = DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190 || !DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179; - DEF__1_CONCAT_hg_fifo_Start_TO_Stage__1_first__68_B_ETC___d267 = 2047u & ((((tUInt32)((tUInt8)1u)) << 10u) | DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169); - DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d206 = DEF_hg_h_lock_entryVec_1_9_BIT_10___d50 && DEF_hg_h_lock_entryVec_0_4_BIT_10___d45; - DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d207 = DEF_hg_h_lock_entryVec_2_4_BIT_10___d55 && DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d206; - DEF_x__h9842 = DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d207 && DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209 ? (tUInt8)3u : (DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d206 && DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184 ? (tUInt8)2u : (DEF_hg_h_lock_entryVec_0_4_BIT_10___d45 && DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187 ? (tUInt8)1u : (tUInt8)0u)); - switch (DEF_x__h9842) { - case (tUInt8)0u: - DEF_SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d276 = DEF_b__h9441; - break; - case (tUInt8)1u: - DEF_SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d276 = DEF_b__h9462; - break; - case (tUInt8)2u: - DEF_SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d276 = DEF_b__h9483; - break; - case (tUInt8)3u: - DEF_SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d276 = DEF_b__h9504; - break; - default: - DEF_SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d276 = (tUInt8)2u; - } - DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d193 = (DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187 || !DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176) && DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d192; - DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194 = (DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184 || !DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173) && DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d193; - DEF_x__h8976 = DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194 && DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d171 ? (tUInt8)3u : (DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d193 && DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d174 ? (tUInt8)2u : (DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d192 && DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d177 ? (tUInt8)1u : (tUInt8)0u)); - DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d238 = DEF_x__h8976 == (tUInt8)0u && DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183; - DEF__dfoo24 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d238 ? DEF_b__h9441 : DEF_b__h9441; - DEF__dfoo22 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d238 ? DEF_hg_h_lock_lockVec_0_nextId_39_PLUS_1___d240 : DEF_hg_h_lock_lockVec_0_nextId_39_PLUS_1___d240; - DEF__dfoo20 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d238 ? DEF_hg_h_lock_lockVec_0_cnt_41_PLUS_1___d242 : DEF_hg_h_lock_lockVec_0_cnt_41_PLUS_1___d242; - DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d244 = DEF_x__h8976 == (tUInt8)1u && DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183; - DEF__dfoo18 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d244 ? DEF_b__h9462 : DEF_b__h9462; - DEF__dfoo16 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d244 ? DEF_hg_h_lock_lockVec_1_nextId_45_PLUS_1___d246 : DEF_hg_h_lock_lockVec_1_nextId_45_PLUS_1___d246; - DEF__dfoo14 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d244 ? DEF_hg_h_lock_lockVec_1_cnt_47_PLUS_1___d248 : DEF_hg_h_lock_lockVec_1_cnt_47_PLUS_1___d248; - DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d250 = DEF_x__h8976 == (tUInt8)2u && DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183; - DEF__dfoo12 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d250 ? DEF_b__h9483 : DEF_b__h9483; - DEF__dfoo10 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d250 ? DEF_hg_h_lock_lockVec_2_nextId_51_PLUS_1___d252 : DEF_hg_h_lock_lockVec_2_nextId_51_PLUS_1___d252; - DEF__dfoo8 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d250 ? DEF_hg_h_lock_lockVec_2_cnt_53_PLUS_1___d254 : DEF_hg_h_lock_lockVec_2_cnt_53_PLUS_1___d254; - DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d256 = DEF_x__h8976 == (tUInt8)3u && DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183; - DEF__dfoo6 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d256 ? DEF_b__h9504 : DEF_b__h9504; - DEF__dfoo4 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d256 ? DEF_hg_h_lock_lockVec_3_nextId_57_PLUS_1___d258 : DEF_hg_h_lock_lockVec_3_nextId_57_PLUS_1___d258; - DEF__dfoo2 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d256 ? DEF_hg_h_lock_lockVec_3_cnt_59_PLUS_1___d260 : DEF_hg_h_lock_lockVec_3_cnt_59_PLUS_1___d260; - switch (DEF_x__h8976) { - case (tUInt8)0u: - DEF_SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d275 = DEF_b__h9441; - break; - case (tUInt8)1u: - DEF_SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d275 = DEF_b__h9462; - break; - case (tUInt8)2u: - DEF_SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d275 = DEF_b__h9483; - break; - case (tUInt8)3u: - DEF_SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d275 = DEF_b__h9504; - break; - default: - DEF_SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d275 = (tUInt8)2u; - } - DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_ETC___d280 = 281474976710655llu & (((((((tUInt64)(DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169)) << 38u) | (((tUInt64)(DEF_h_rf_sub_hg_fifo_Start_TO_Stage__1_first__68_B_ETC___d235)) << 6u)) | (((tUInt64)((tUInt8)1u)) << 5u)) | (((tUInt64)(DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183 ? DEF_SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d275 : DEF_SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d276)) << 3u)) | (tUInt64)((tUInt8)((tUInt8)7u & DEF_hg_fifo_Start_TO_Stage__1_first____d168))); - DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265 = ((DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209 || !DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170) && DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194) && DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226; - DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d266 = DEF_x__h9842 == (tUInt8)0u && DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265; - DEF__dfoo21 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d238 || DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d266; - DEF__dfoo23 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d238 || DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d266; - DEF__dfoo19 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d238 || DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d266; - DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d269 = DEF_x__h9842 == (tUInt8)1u && DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265; - DEF__dfoo15 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d244 || DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d269; - DEF__dfoo17 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d244 || DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d269; - DEF__dfoo13 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d244 || DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d269; - DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d271 = DEF_x__h9842 == (tUInt8)2u && DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265; - DEF__dfoo9 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d250 || DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d271; - DEF__dfoo11 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d250 || DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d271; - DEF__dfoo7 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d250 || DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d271; - DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d273 = DEF_x__h9842 == (tUInt8)3u && DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265; - DEF__dfoo3 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d256 || DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d273; - DEF__dfoo5 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d256 || DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d273; - DEF__dfoo1 = DEF_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d256 || DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d273; - if (!(PORT_RST_N == (tUInt8)0u)) - dollar_display(sim_hdl, this, "32", DEF_unsigned_h_rf_sub_hg_fifo_Start_TO_Stage__1_f_ETC___d236); - if (DEF__dfoo23) - INST_hg_h_lock_lockVec_0_held.METH_enq(DEF__dfoo24); - if (DEF__dfoo21) - INST_hg_h_lock_lockVec_0_nextId.METH_write(DEF__dfoo22); - if (DEF__dfoo19) - INST_hg_h_lock_lockVec_0_cnt.METH_write(DEF__dfoo20); - if (DEF__dfoo15) - INST_hg_h_lock_lockVec_1_nextId.METH_write(DEF__dfoo16); - if (DEF__dfoo17) - INST_hg_h_lock_lockVec_1_held.METH_enq(DEF__dfoo18); - if (DEF__dfoo13) - INST_hg_h_lock_lockVec_1_cnt.METH_write(DEF__dfoo14); - if (DEF__dfoo11) - INST_hg_h_lock_lockVec_2_held.METH_enq(DEF__dfoo12); - if (DEF__dfoo9) - INST_hg_h_lock_lockVec_2_nextId.METH_write(DEF__dfoo10); - if (DEF__dfoo7) - INST_hg_h_lock_lockVec_2_cnt.METH_write(DEF__dfoo8); - if (DEF__dfoo5) - INST_hg_h_lock_lockVec_3_held.METH_enq(DEF__dfoo6); - if (DEF__dfoo1) - INST_hg_h_lock_lockVec_3_cnt.METH_write(DEF__dfoo2); - if (DEF__dfoo3) - INST_hg_h_lock_lockVec_3_nextId.METH_write(DEF__dfoo4); - if (DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d266) - INST_hg_h_lock_entryVec_0.METH_write(DEF__1_CONCAT_hg_fifo_Start_TO_Stage__1_first__68_B_ETC___d267); - if (DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d269) - INST_hg_h_lock_entryVec_1.METH_write(DEF__1_CONCAT_hg_fifo_Start_TO_Stage__1_first__68_B_ETC___d267); - if (DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d271) - INST_hg_h_lock_entryVec_2.METH_write(DEF__1_CONCAT_hg_fifo_Start_TO_Stage__1_first__68_B_ETC___d267); - if (DEF_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lo_ETC___d273) - INST_hg_h_lock_entryVec_3.METH_write(DEF__1_CONCAT_hg_fifo_Start_TO_Stage__1_first__68_B_ETC___d267); - INST_hg_fifo_Start_TO_Stage__1.METH_deq(); - INST_hg_fifo_Stage__1_TO_Stage__2.METH_enq(DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_ETC___d280); -} - -void MOD_mkCircuit::RL_hg_s_Stage__2_execute() -{ - tUInt8 DEF_hg_h_lock_lockVec_0_held_first__18_EQ_IF_hg_fi_ETC___d329; - tUInt8 DEF_hg_h_lock_lockVec_1_held_first__30_EQ_IF_hg_fi_ETC___d334; - tUInt8 DEF_hg_h_lock_lockVec_2_held_first__35_EQ_IF_hg_fi_ETC___d339; - tUInt8 DEF_hg_h_lock_lockVec_3_held_first__40_EQ_IF_hg_fi_ETC___d344; - tUInt8 DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d327; - tUInt8 DEF_IF_hg_fifo_Stage__1_TO_Stage__2_first__83_BIT__ETC___d321; - tUInt8 DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_2__ETC___d345; - tUInt32 DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_37_ETC___d317; - DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283 = INST_hg_fifo_Stage__1_TO_Stage__2.METH_first(); - DEF_hg_h_lock_entryVec_3___d59 = INST_hg_h_lock_entryVec_3.METH_read(); - DEF_hg_h_lock_entryVec_3_9_BIT_10___d60 = (tUInt8)(DEF_hg_h_lock_entryVec_3___d59 >> 10u); - DEF_hg_h_lock_entryVec_2___d54 = INST_hg_h_lock_entryVec_2.METH_read(); - DEF_hg_h_lock_entryVec_2_4_BIT_10___d55 = (tUInt8)(DEF_hg_h_lock_entryVec_2___d54 >> 10u); - DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184 = !DEF_hg_h_lock_entryVec_2_4_BIT_10___d55; - DEF_hg_h_lock_entryVec_1___d49 = INST_hg_h_lock_entryVec_1.METH_read(); - DEF_hg_h_lock_entryVec_1_9_BIT_10___d50 = (tUInt8)(DEF_hg_h_lock_entryVec_1___d49 >> 10u); - DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187 = !DEF_hg_h_lock_entryVec_1_9_BIT_10___d50; - DEF_hg_h_lock_entryVec_0___d44 = INST_hg_h_lock_entryVec_0.METH_read(); - DEF_hg_h_lock_entryVec_0_4_BIT_10___d45 = (tUInt8)(DEF_hg_h_lock_entryVec_0___d44 >> 10u); - DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190 = !DEF_hg_h_lock_entryVec_0_4_BIT_10___d45; - DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_37_ETC___d317 = (tUInt32)(DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283 >> 6u); - DEF_b__h8480 = (tUInt32)(1023u & DEF_hg_h_lock_entryVec_2___d54); - DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284 = (tUInt32)(DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283 >> 38u); - DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288 = DEF_b__h8480 == DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284; - DEF_b__h8511 = (tUInt32)(1023u & DEF_hg_h_lock_entryVec_3___d59); - DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285 = DEF_b__h8511 == DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284; - DEF_b__h8449 = (tUInt32)(1023u & DEF_hg_h_lock_entryVec_1___d49); - DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291 = DEF_b__h8449 == DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284; - DEF_b__h8408 = (tUInt32)(1023u & DEF_hg_h_lock_entryVec_0___d44); - DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_2__ETC___d345 = (tUInt8)((tUInt8)7u & DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283); - DEF_IF_hg_fifo_Stage__1_TO_Stage__2_first__83_BIT__ETC___d321 = (tUInt8)((tUInt8)1u & (DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283 >> 5u)) ? (tUInt8)((tUInt8)3u & (DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283 >> 3u)) : (tUInt8)0u; - DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294 = DEF_b__h8408 == DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284; - DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d300 = DEF_hg_h_lock_entryVec_3_9_BIT_10___d60 && DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285; - DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d302 = DEF_hg_h_lock_entryVec_2_4_BIT_10___d55 && DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288; - DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d304 = DEF_hg_h_lock_entryVec_1_9_BIT_10___d50 && DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291; - DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d327 = DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d300 || (DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d302 || (DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d304 || (DEF_hg_h_lock_entryVec_0_4_BIT_10___d45 && DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294))); - DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d296 = DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190 || !DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294; - DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d297 = (DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187 || !DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291) && DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d296; - DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298 = (DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184 || !DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288) && DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d297; - DEF_x__h10519 = DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298 && DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d300 ? (tUInt8)3u : (DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d297 && DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d302 ? (tUInt8)2u : (DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d296 && DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d304 ? (tUInt8)1u : (tUInt8)0u)); - DEF_hg_h_lock_lockVec_3_held_first__40_EQ_IF_hg_fi_ETC___d344 = INST_hg_h_lock_lockVec_3_held.METH_first() == DEF_IF_hg_fifo_Stage__1_TO_Stage__2_first__83_BIT__ETC___d321 && (DEF_x__h10519 == (tUInt8)3u && DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d327); - DEF_hg_h_lock_lockVec_2_held_first__35_EQ_IF_hg_fi_ETC___d339 = INST_hg_h_lock_lockVec_2_held.METH_first() == DEF_IF_hg_fifo_Stage__1_TO_Stage__2_first__83_BIT__ETC___d321 && (DEF_x__h10519 == (tUInt8)2u && DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d327); - DEF_hg_h_lock_lockVec_1_held_first__30_EQ_IF_hg_fi_ETC___d334 = INST_hg_h_lock_lockVec_1_held.METH_first() == DEF_IF_hg_fifo_Stage__1_TO_Stage__2_first__83_BIT__ETC___d321 && (DEF_x__h10519 == (tUInt8)1u && DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d327); - DEF_hg_h_lock_lockVec_0_held_first__18_EQ_IF_hg_fi_ETC___d329 = INST_hg_h_lock_lockVec_0_held.METH_first() == DEF_IF_hg_fifo_Stage__1_TO_Stage__2_first__83_BIT__ETC___d321 && (DEF_x__h10519 == (tUInt8)0u && DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d327); - INST_h_rf.METH_upd(DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284, - DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_37_ETC___d317); - if (DEF_hg_h_lock_lockVec_0_held_first__18_EQ_IF_hg_fi_ETC___d329) - INST_hg_h_lock_lockVec_0_held.METH_deq(); - if (DEF_hg_h_lock_lockVec_1_held_first__30_EQ_IF_hg_fi_ETC___d334) - INST_hg_h_lock_lockVec_1_held.METH_deq(); - if (DEF_hg_h_lock_lockVec_2_held_first__35_EQ_IF_hg_fi_ETC___d339) - INST_hg_h_lock_lockVec_2_held.METH_deq(); - if (DEF_hg_h_lock_lockVec_3_held_first__40_EQ_IF_hg_fi_ETC___d344) - INST_hg_h_lock_lockVec_3_held.METH_deq(); - INST_hg_fifo_Stage__1_TO_Stage__2.METH_deq(); - INST_hg_fifo_Stage__2_TO_Stage__3.METH_enq(DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_2__ETC___d345); -} - -void MOD_mkCircuit::RL_hg_s_Stage__3_execute() -{ - INST_hg_fifo_Stage__2_TO_Stage__3.METH_deq(); -} - - -/* Methods */ - -tUInt8 MOD_mkCircuit::METH__inthg_req(tUInt32 ARG__inthg_req_counter) -{ - tUInt8 DEF_hg_47_PLUS_1___d349; - tUInt32 DEF_inthg_req_counter_CONCAT_hg_47___d348; - tUInt8 DEF_b__h10847; - tUInt8 PORT__inthg_req; - PORT_EN__inthg_req = (tUInt8)1u; - DEF_WILL_FIRE__inthg_req = (tUInt8)1u; - DEF_b__h10847 = INST_hg.METH_read(); - PORT__inthg_req = DEF_b__h10847; - DEF_inthg_req_counter_CONCAT_hg_47___d348 = 8191u & ((ARG__inthg_req_counter << 3u) | (tUInt32)(DEF_b__h10847)); - DEF_hg_47_PLUS_1___d349 = (tUInt8)7u & (DEF_b__h10847 + (tUInt8)1u); - INST_hg_fifo__input__TO_Start.METH_enq(DEF_inthg_req_counter_CONCAT_hg_47___d348); - INST_hg_busyReg.METH_write((tUInt8)1u); - INST_hg.METH_write(DEF_hg_47_PLUS_1___d349); - return PORT__inthg_req; -} - -tUInt8 MOD_mkCircuit::METH_RDY__inthg_req() -{ - tUInt8 DEF_CAN_FIRE__inthg_req; - tUInt8 PORT_RDY__inthg_req; - DEF_hg_fifo__input__TO_Start_i_notFull____d66 = INST_hg_fifo__input__TO_Start.METH_i_notFull(); - DEF_hg_busyReg__h7113 = INST_hg_busyReg.METH_read(); - DEF_CAN_FIRE__inthg_req = !DEF_hg_busyReg__h7113 && DEF_hg_fifo__input__TO_Start_i_notFull____d66; - PORT_RDY__inthg_req = DEF_CAN_FIRE__inthg_req; - return PORT_RDY__inthg_req; -} - -void MOD_mkCircuit::METH__inthg_resp() -{ - INST_hg_outputQueue.METH_deq(); -} - -tUInt8 MOD_mkCircuit::METH_RDY__inthg_resp() -{ - tUInt8 DEF_CAN_FIRE__inthg_resp; - tUInt8 PORT_RDY__inthg_resp; - DEF_hg_outputQueue_i_notEmpty____d351 = INST_hg_outputQueue.METH_i_notEmpty(); - DEF_CAN_FIRE__inthg_resp = DEF_hg_outputQueue_i_notEmpty____d351; - PORT_RDY__inthg_resp = DEF_CAN_FIRE__inthg_resp; - return PORT_RDY__inthg_resp; -} - -tUInt8 MOD_mkCircuit::METH__inthg_checkHandle(tUInt8 ARG__inthg_checkHandle_handle) -{ - tUInt8 DEF_hg_outputQueue_first__52_BITS_3_TO_1___d353; - tUInt8 PORT__inthg_checkHandle; - DEF_hg_outputQueue_first____d352 = INST_hg_outputQueue.METH_first(); - DEF_hg_outputQueue_first__52_BITS_3_TO_1___d353 = (tUInt8)(DEF_hg_outputQueue_first____d352 >> 1u); - PORT__inthg_checkHandle = ARG__inthg_checkHandle_handle == DEF_hg_outputQueue_first__52_BITS_3_TO_1___d353; - return PORT__inthg_checkHandle; -} - -tUInt8 MOD_mkCircuit::METH_RDY__inthg_checkHandle() -{ - tUInt8 DEF_CAN_FIRE__inthg_checkHandle; - tUInt8 PORT_RDY__inthg_checkHandle; - DEF_hg_outputQueue_i_notEmpty____d351 = INST_hg_outputQueue.METH_i_notEmpty(); - DEF_CAN_FIRE__inthg_checkHandle = DEF_hg_outputQueue_i_notEmpty____d351; - PORT_RDY__inthg_checkHandle = DEF_CAN_FIRE__inthg_checkHandle; - return PORT_RDY__inthg_checkHandle; -} - -tUInt8 MOD_mkCircuit::METH__inthg_peek() -{ - tUInt8 PORT__inthg_peek; - DEF_hg_outputQueue_first____d352 = INST_hg_outputQueue.METH_first(); - PORT__inthg_peek = (tUInt8)((tUInt8)1u & DEF_hg_outputQueue_first____d352); - return PORT__inthg_peek; -} - -tUInt8 MOD_mkCircuit::METH_RDY__inthg_peek() -{ - tUInt8 DEF_CAN_FIRE__inthg_peek; - tUInt8 PORT_RDY__inthg_peek; - DEF_hg_outputQueue_i_notEmpty____d351 = INST_hg_outputQueue.METH_i_notEmpty(); - DEF_CAN_FIRE__inthg_peek = DEF_hg_outputQueue_i_notEmpty____d351; - PORT_RDY__inthg_peek = DEF_CAN_FIRE__inthg_peek; - return PORT_RDY__inthg_peek; -} - - -/* Reset routines */ - -void MOD_mkCircuit::reset_RST_N(tUInt8 ARG_rst_in) -{ - PORT_RST_N = ARG_rst_in; - INST_hg_weight_lock_region.reset_RST(ARG_rst_in); - INST_hg_weight_lock_lockVec_3_nextId.reset_RST(ARG_rst_in); - INST_hg_weight_lock_lockVec_3_held.reset_RST(ARG_rst_in); - INST_hg_weight_lock_lockVec_3_cnt.reset_RST(ARG_rst_in); - INST_hg_weight_lock_lockVec_2_nextId.reset_RST(ARG_rst_in); - INST_hg_weight_lock_lockVec_2_held.reset_RST(ARG_rst_in); - INST_hg_weight_lock_lockVec_2_cnt.reset_RST(ARG_rst_in); - INST_hg_weight_lock_lockVec_1_nextId.reset_RST(ARG_rst_in); - INST_hg_weight_lock_lockVec_1_held.reset_RST(ARG_rst_in); - INST_hg_weight_lock_lockVec_1_cnt.reset_RST(ARG_rst_in); - INST_hg_weight_lock_lockVec_0_nextId.reset_RST(ARG_rst_in); - INST_hg_weight_lock_lockVec_0_held.reset_RST(ARG_rst_in); - INST_hg_weight_lock_lockVec_0_cnt.reset_RST(ARG_rst_in); - INST_hg_weight_lock_entryVec_3.reset_RST(ARG_rst_in); - INST_hg_weight_lock_entryVec_2.reset_RST(ARG_rst_in); - INST_hg_weight_lock_entryVec_1.reset_RST(ARG_rst_in); - INST_hg_weight_lock_entryVec_0.reset_RST(ARG_rst_in); - INST_hg_outputQueue.reset_RST(ARG_rst_in); - INST_hg_h_lock_region.reset_RST(ARG_rst_in); - INST_hg_h_lock_lockVec_3_nextId.reset_RST(ARG_rst_in); - INST_hg_h_lock_lockVec_3_held.reset_RST(ARG_rst_in); - INST_hg_h_lock_lockVec_3_cnt.reset_RST(ARG_rst_in); - INST_hg_h_lock_lockVec_2_nextId.reset_RST(ARG_rst_in); - INST_hg_h_lock_lockVec_2_held.reset_RST(ARG_rst_in); - INST_hg_h_lock_lockVec_2_cnt.reset_RST(ARG_rst_in); - INST_hg_h_lock_lockVec_1_nextId.reset_RST(ARG_rst_in); - INST_hg_h_lock_lockVec_1_held.reset_RST(ARG_rst_in); - INST_hg_h_lock_lockVec_1_cnt.reset_RST(ARG_rst_in); - INST_hg_h_lock_lockVec_0_nextId.reset_RST(ARG_rst_in); - INST_hg_h_lock_lockVec_0_held.reset_RST(ARG_rst_in); - INST_hg_h_lock_lockVec_0_cnt.reset_RST(ARG_rst_in); - INST_hg_h_lock_entryVec_3.reset_RST(ARG_rst_in); - INST_hg_h_lock_entryVec_2.reset_RST(ARG_rst_in); - INST_hg_h_lock_entryVec_1.reset_RST(ARG_rst_in); - INST_hg_h_lock_entryVec_0.reset_RST(ARG_rst_in); - INST_hg_fifo__input__TO_Start.reset_RST(ARG_rst_in); - INST_hg_fifo_Start_TO_Stage__1.reset_RST(ARG_rst_in); - INST_hg_fifo_Stage__2_TO_Stage__3.reset_RST(ARG_rst_in); - INST_hg_fifo_Stage__1_TO_Stage__2.reset_RST(ARG_rst_in); - INST_hg_feature_lock_region.reset_RST(ARG_rst_in); - INST_hg_feature_lock_lockVec_3_nextId.reset_RST(ARG_rst_in); - INST_hg_feature_lock_lockVec_3_held.reset_RST(ARG_rst_in); - INST_hg_feature_lock_lockVec_3_cnt.reset_RST(ARG_rst_in); - INST_hg_feature_lock_lockVec_2_nextId.reset_RST(ARG_rst_in); - INST_hg_feature_lock_lockVec_2_held.reset_RST(ARG_rst_in); - INST_hg_feature_lock_lockVec_2_cnt.reset_RST(ARG_rst_in); - INST_hg_feature_lock_lockVec_1_nextId.reset_RST(ARG_rst_in); - INST_hg_feature_lock_lockVec_1_held.reset_RST(ARG_rst_in); - INST_hg_feature_lock_lockVec_1_cnt.reset_RST(ARG_rst_in); - INST_hg_feature_lock_lockVec_0_nextId.reset_RST(ARG_rst_in); - INST_hg_feature_lock_lockVec_0_held.reset_RST(ARG_rst_in); - INST_hg_feature_lock_lockVec_0_cnt.reset_RST(ARG_rst_in); - INST_hg_feature_lock_entryVec_3.reset_RST(ARG_rst_in); - INST_hg_feature_lock_entryVec_2.reset_RST(ARG_rst_in); - INST_hg_feature_lock_entryVec_1.reset_RST(ARG_rst_in); - INST_hg_feature_lock_entryVec_0.reset_RST(ARG_rst_in); - INST_hg_busyReg.reset_RST(ARG_rst_in); - INST_hg.reset_RST(ARG_rst_in); -} - - -/* Static handles to reset routines */ - - -/* Functions for the parent module to register its reset fns */ - - -/* Functions to set the elaborated clock id */ - -void MOD_mkCircuit::set_clk_0(char const *s) -{ - __clk_handle_0 = bk_get_or_define_clock(sim_hdl, s); -} - - -/* State dumping routine */ -void MOD_mkCircuit::dump_state(unsigned int indent) -{ - printf("%*s%s:\n", indent, "", inst_name); - INST_f_rf.dump_state(indent + 2u); - INST_h_rf.dump_state(indent + 2u); - INST_hg.dump_state(indent + 2u); - INST_hg_busyReg.dump_state(indent + 2u); - INST_hg_feature_lock_entryVec_0.dump_state(indent + 2u); - INST_hg_feature_lock_entryVec_1.dump_state(indent + 2u); - INST_hg_feature_lock_entryVec_2.dump_state(indent + 2u); - INST_hg_feature_lock_entryVec_3.dump_state(indent + 2u); - INST_hg_feature_lock_lockVec_0_cnt.dump_state(indent + 2u); - INST_hg_feature_lock_lockVec_0_held.dump_state(indent + 2u); - INST_hg_feature_lock_lockVec_0_nextId.dump_state(indent + 2u); - INST_hg_feature_lock_lockVec_1_cnt.dump_state(indent + 2u); - INST_hg_feature_lock_lockVec_1_held.dump_state(indent + 2u); - INST_hg_feature_lock_lockVec_1_nextId.dump_state(indent + 2u); - INST_hg_feature_lock_lockVec_2_cnt.dump_state(indent + 2u); - INST_hg_feature_lock_lockVec_2_held.dump_state(indent + 2u); - INST_hg_feature_lock_lockVec_2_nextId.dump_state(indent + 2u); - INST_hg_feature_lock_lockVec_3_cnt.dump_state(indent + 2u); - INST_hg_feature_lock_lockVec_3_held.dump_state(indent + 2u); - INST_hg_feature_lock_lockVec_3_nextId.dump_state(indent + 2u); - INST_hg_feature_lock_region.dump_state(indent + 2u); - INST_hg_fifo_Stage__1_TO_Stage__2.dump_state(indent + 2u); - INST_hg_fifo_Stage__2_TO_Stage__3.dump_state(indent + 2u); - INST_hg_fifo_Start_TO_Stage__1.dump_state(indent + 2u); - INST_hg_fifo__input__TO_Start.dump_state(indent + 2u); - INST_hg_h_lock_entryVec_0.dump_state(indent + 2u); - INST_hg_h_lock_entryVec_1.dump_state(indent + 2u); - INST_hg_h_lock_entryVec_2.dump_state(indent + 2u); - INST_hg_h_lock_entryVec_3.dump_state(indent + 2u); - INST_hg_h_lock_lockVec_0_cnt.dump_state(indent + 2u); - INST_hg_h_lock_lockVec_0_held.dump_state(indent + 2u); - INST_hg_h_lock_lockVec_0_nextId.dump_state(indent + 2u); - INST_hg_h_lock_lockVec_1_cnt.dump_state(indent + 2u); - INST_hg_h_lock_lockVec_1_held.dump_state(indent + 2u); - INST_hg_h_lock_lockVec_1_nextId.dump_state(indent + 2u); - INST_hg_h_lock_lockVec_2_cnt.dump_state(indent + 2u); - INST_hg_h_lock_lockVec_2_held.dump_state(indent + 2u); - INST_hg_h_lock_lockVec_2_nextId.dump_state(indent + 2u); - INST_hg_h_lock_lockVec_3_cnt.dump_state(indent + 2u); - INST_hg_h_lock_lockVec_3_held.dump_state(indent + 2u); - INST_hg_h_lock_lockVec_3_nextId.dump_state(indent + 2u); - INST_hg_h_lock_region.dump_state(indent + 2u); - INST_hg_outputQueue.dump_state(indent + 2u); - INST_hg_weight_lock_entryVec_0.dump_state(indent + 2u); - INST_hg_weight_lock_entryVec_1.dump_state(indent + 2u); - INST_hg_weight_lock_entryVec_2.dump_state(indent + 2u); - INST_hg_weight_lock_entryVec_3.dump_state(indent + 2u); - INST_hg_weight_lock_lockVec_0_cnt.dump_state(indent + 2u); - INST_hg_weight_lock_lockVec_0_held.dump_state(indent + 2u); - INST_hg_weight_lock_lockVec_0_nextId.dump_state(indent + 2u); - INST_hg_weight_lock_lockVec_1_cnt.dump_state(indent + 2u); - INST_hg_weight_lock_lockVec_1_held.dump_state(indent + 2u); - INST_hg_weight_lock_lockVec_1_nextId.dump_state(indent + 2u); - INST_hg_weight_lock_lockVec_2_cnt.dump_state(indent + 2u); - INST_hg_weight_lock_lockVec_2_held.dump_state(indent + 2u); - INST_hg_weight_lock_lockVec_2_nextId.dump_state(indent + 2u); - INST_hg_weight_lock_lockVec_3_cnt.dump_state(indent + 2u); - INST_hg_weight_lock_lockVec_3_held.dump_state(indent + 2u); - INST_hg_weight_lock_lockVec_3_nextId.dump_state(indent + 2u); - INST_hg_weight_lock_region.dump_state(indent + 2u); - INST_w_rf.dump_state(indent + 2u); -} - - -/* VCD dumping routines */ - -unsigned int MOD_mkCircuit::dump_VCD_defs(unsigned int levels) -{ - vcd_write_scope_start(sim_hdl, inst_name); - vcd_num = vcd_reserve_ids(sim_hdl, 148u); - unsigned int num = vcd_num; - for (unsigned int clk = 0u; clk < bk_num_clocks(sim_hdl); ++clk) - vcd_add_clock_def(sim_hdl, this, bk_clock_name(sim_hdl, clk), bk_clock_vcd_num(sim_hdl, clk)); - vcd_write_def(sim_hdl, bk_clock_vcd_num(sim_hdl, __clk_handle_0), "CLK", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_feature_lock_lockVec_0_held_notEmpty___d2", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_feature_lock_lockVec_1_held_notEmpty___d8", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_feature_lock_lockVec_2_held_notEmpty__2___d13", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_feature_lock_lockVec_3_held_notEmpty__7___d18", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d74", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d192", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d296", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d193", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d297", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_h_lock_lockVec_0_held_notEmpty__2___d43", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_h_lock_lockVec_1_held_notEmpty__7___d48", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_h_lock_lockVec_2_held_notEmpty__2___d53", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_h_lock_lockVec_3_held_notEmpty__7___d58", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_weight_lock_lockVec_0_held_notEmpty__2___d23", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_weight_lock_lockVec_1_held_notEmpty__7___d28", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_weight_lock_lockVec_2_held_notEmpty__2___d33", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "NOT_hg_weight_lock_lockVec_3_held_notEmpty__7___d38", 1u); - vcd_write_def(sim_hdl, num++, "RST_N", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "WILL_FIRE__inthg_req", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "_0_CONCAT_DONTCARE___d6", 11u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "b__h8408", 10u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "b__h8449", 10u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "b__h8480", 10u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "b__h8511", 10u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_busyReg__h7113", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_feature_lock_entryVec_0_BIT_10___d4", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_feature_lock_entryVec_0___d3", 11u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_feature_lock_entryVec_1_BIT_10___d10", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_feature_lock_entryVec_1___d9", 11u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_feature_lock_entryVec_2_4_BIT_10___d15", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_feature_lock_entryVec_2___d14", 11u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_feature_lock_entryVec_3_9_BIT_10___d20", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_feature_lock_entryVec_3___d19", 11u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284", 10u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_fifo_Stage__1_TO_Stage__2_first____d283", 48u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169", 10u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_fifo_Start_TO_Stage__1_first____d168", 45u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64", 10u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_fifo__input__TO_Start_first____d63", 13u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_fifo__input__TO_Start_i_notFull____d66", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_0_4_BIT_10___d45", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_0___d44", 11u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d177", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d206", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d304", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_1_9_BIT_10___d50", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_1___d49", 11u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d174", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d207", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d302", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_2_4_BIT_10___d55", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_2___d54", 11u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d171", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d300", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_3_9_BIT_10___d60", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_h_lock_entryVec_3___d59", 11u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_outputQueue_first____d352", 4u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_outputQueue_i_notEmpty____d351", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_weight_lock_entryVec_0_4_BIT_10___d25", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_weight_lock_entryVec_0___d24", 11u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_weight_lock_entryVec_1_9_BIT_10___d30", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_weight_lock_entryVec_1___d29", 11u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_weight_lock_entryVec_2_4_BIT_10___d35", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_weight_lock_entryVec_2___d34", 11u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_weight_lock_entryVec_3_9_BIT_10___d40", 1u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "hg_weight_lock_entryVec_3___d39", 11u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "x__h10519", 2u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "x__h8976", 2u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "x__h9842", 2u); - vcd_set_clock(sim_hdl, num, __clk_handle_0); - vcd_write_def(sim_hdl, num++, "EN__inthg_req", 1u); - num = INST_f_rf.dump_VCD_defs(num); - num = INST_h_rf.dump_VCD_defs(num); - num = INST_hg.dump_VCD_defs(num); - num = INST_hg_busyReg.dump_VCD_defs(num); - num = INST_hg_feature_lock_entryVec_0.dump_VCD_defs(num); - num = INST_hg_feature_lock_entryVec_1.dump_VCD_defs(num); - num = INST_hg_feature_lock_entryVec_2.dump_VCD_defs(num); - num = INST_hg_feature_lock_entryVec_3.dump_VCD_defs(num); - num = INST_hg_feature_lock_lockVec_0_cnt.dump_VCD_defs(num); - num = INST_hg_feature_lock_lockVec_0_held.dump_VCD_defs(num); - num = INST_hg_feature_lock_lockVec_0_nextId.dump_VCD_defs(num); - num = INST_hg_feature_lock_lockVec_1_cnt.dump_VCD_defs(num); - num = INST_hg_feature_lock_lockVec_1_held.dump_VCD_defs(num); - num = INST_hg_feature_lock_lockVec_1_nextId.dump_VCD_defs(num); - num = INST_hg_feature_lock_lockVec_2_cnt.dump_VCD_defs(num); - num = INST_hg_feature_lock_lockVec_2_held.dump_VCD_defs(num); - num = INST_hg_feature_lock_lockVec_2_nextId.dump_VCD_defs(num); - num = INST_hg_feature_lock_lockVec_3_cnt.dump_VCD_defs(num); - num = INST_hg_feature_lock_lockVec_3_held.dump_VCD_defs(num); - num = INST_hg_feature_lock_lockVec_3_nextId.dump_VCD_defs(num); - num = INST_hg_feature_lock_region.dump_VCD_defs(num); - num = INST_hg_fifo_Stage__1_TO_Stage__2.dump_VCD_defs(num); - num = INST_hg_fifo_Stage__2_TO_Stage__3.dump_VCD_defs(num); - num = INST_hg_fifo_Start_TO_Stage__1.dump_VCD_defs(num); - num = INST_hg_fifo__input__TO_Start.dump_VCD_defs(num); - num = INST_hg_h_lock_entryVec_0.dump_VCD_defs(num); - num = INST_hg_h_lock_entryVec_1.dump_VCD_defs(num); - num = INST_hg_h_lock_entryVec_2.dump_VCD_defs(num); - num = INST_hg_h_lock_entryVec_3.dump_VCD_defs(num); - num = INST_hg_h_lock_lockVec_0_cnt.dump_VCD_defs(num); - num = INST_hg_h_lock_lockVec_0_held.dump_VCD_defs(num); - num = INST_hg_h_lock_lockVec_0_nextId.dump_VCD_defs(num); - num = INST_hg_h_lock_lockVec_1_cnt.dump_VCD_defs(num); - num = INST_hg_h_lock_lockVec_1_held.dump_VCD_defs(num); - num = INST_hg_h_lock_lockVec_1_nextId.dump_VCD_defs(num); - num = INST_hg_h_lock_lockVec_2_cnt.dump_VCD_defs(num); - num = INST_hg_h_lock_lockVec_2_held.dump_VCD_defs(num); - num = INST_hg_h_lock_lockVec_2_nextId.dump_VCD_defs(num); - num = INST_hg_h_lock_lockVec_3_cnt.dump_VCD_defs(num); - num = INST_hg_h_lock_lockVec_3_held.dump_VCD_defs(num); - num = INST_hg_h_lock_lockVec_3_nextId.dump_VCD_defs(num); - num = INST_hg_h_lock_region.dump_VCD_defs(num); - num = INST_hg_outputQueue.dump_VCD_defs(num); - num = INST_hg_weight_lock_entryVec_0.dump_VCD_defs(num); - num = INST_hg_weight_lock_entryVec_1.dump_VCD_defs(num); - num = INST_hg_weight_lock_entryVec_2.dump_VCD_defs(num); - num = INST_hg_weight_lock_entryVec_3.dump_VCD_defs(num); - num = INST_hg_weight_lock_lockVec_0_cnt.dump_VCD_defs(num); - num = INST_hg_weight_lock_lockVec_0_held.dump_VCD_defs(num); - num = INST_hg_weight_lock_lockVec_0_nextId.dump_VCD_defs(num); - num = INST_hg_weight_lock_lockVec_1_cnt.dump_VCD_defs(num); - num = INST_hg_weight_lock_lockVec_1_held.dump_VCD_defs(num); - num = INST_hg_weight_lock_lockVec_1_nextId.dump_VCD_defs(num); - num = INST_hg_weight_lock_lockVec_2_cnt.dump_VCD_defs(num); - num = INST_hg_weight_lock_lockVec_2_held.dump_VCD_defs(num); - num = INST_hg_weight_lock_lockVec_2_nextId.dump_VCD_defs(num); - num = INST_hg_weight_lock_lockVec_3_cnt.dump_VCD_defs(num); - num = INST_hg_weight_lock_lockVec_3_held.dump_VCD_defs(num); - num = INST_hg_weight_lock_lockVec_3_nextId.dump_VCD_defs(num); - num = INST_hg_weight_lock_region.dump_VCD_defs(num); - num = INST_w_rf.dump_VCD_defs(num); - vcd_write_scope_end(sim_hdl); - return num; -} - -void MOD_mkCircuit::dump_VCD(tVCDDumpType dt, unsigned int levels, MOD_mkCircuit &backing) -{ - vcd_defs(dt, backing); - vcd_prims(dt, backing); -} - -void MOD_mkCircuit::vcd_defs(tVCDDumpType dt, MOD_mkCircuit &backing) -{ - unsigned int num = vcd_num; - if (dt == VCD_DUMP_XS) - { - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 11u); - vcd_write_x(sim_hdl, num++, 10u); - vcd_write_x(sim_hdl, num++, 10u); - vcd_write_x(sim_hdl, num++, 10u); - vcd_write_x(sim_hdl, num++, 10u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 11u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 11u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 11u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 11u); - vcd_write_x(sim_hdl, num++, 10u); - vcd_write_x(sim_hdl, num++, 48u); - vcd_write_x(sim_hdl, num++, 10u); - vcd_write_x(sim_hdl, num++, 45u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 10u); - vcd_write_x(sim_hdl, num++, 13u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 11u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 11u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 11u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 11u); - vcd_write_x(sim_hdl, num++, 4u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 11u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 11u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 11u); - vcd_write_x(sim_hdl, num++, 1u); - vcd_write_x(sim_hdl, num++, 11u); - vcd_write_x(sim_hdl, num++, 2u); - vcd_write_x(sim_hdl, num++, 2u); - vcd_write_x(sim_hdl, num++, 2u); - vcd_write_x(sim_hdl, num++, 1u); - } - else - if (dt == VCD_DUMP_CHANGES) - { - if ((backing.DEF_NOT_hg_feature_lock_lockVec_0_held_notEmpty___d2) != DEF_NOT_hg_feature_lock_lockVec_0_held_notEmpty___d2) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_feature_lock_lockVec_0_held_notEmpty___d2, 1u); - backing.DEF_NOT_hg_feature_lock_lockVec_0_held_notEmpty___d2 = DEF_NOT_hg_feature_lock_lockVec_0_held_notEmpty___d2; - } - ++num; - if ((backing.DEF_NOT_hg_feature_lock_lockVec_1_held_notEmpty___d8) != DEF_NOT_hg_feature_lock_lockVec_1_held_notEmpty___d8) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_feature_lock_lockVec_1_held_notEmpty___d8, 1u); - backing.DEF_NOT_hg_feature_lock_lockVec_1_held_notEmpty___d8 = DEF_NOT_hg_feature_lock_lockVec_1_held_notEmpty___d8; - } - ++num; - if ((backing.DEF_NOT_hg_feature_lock_lockVec_2_held_notEmpty__2___d13) != DEF_NOT_hg_feature_lock_lockVec_2_held_notEmpty__2___d13) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_feature_lock_lockVec_2_held_notEmpty__2___d13, 1u); - backing.DEF_NOT_hg_feature_lock_lockVec_2_held_notEmpty__2___d13 = DEF_NOT_hg_feature_lock_lockVec_2_held_notEmpty__2___d13; - } - ++num; - if ((backing.DEF_NOT_hg_feature_lock_lockVec_3_held_notEmpty__7___d18) != DEF_NOT_hg_feature_lock_lockVec_3_held_notEmpty__7___d18) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_feature_lock_lockVec_3_held_notEmpty__7___d18, 1u); - backing.DEF_NOT_hg_feature_lock_lockVec_3_held_notEmpty__7___d18 = DEF_NOT_hg_feature_lock_lockVec_3_held_notEmpty__7___d18; - } - ++num; - if ((backing.DEF_NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d74) != DEF_NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d74) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d74, 1u); - backing.DEF_NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d74 = DEF_NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d74; - } - ++num; - if ((backing.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d192) != DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d192) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d192, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d192 = DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d192; - } - ++num; - if ((backing.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d296) != DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d296) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d296, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d296 = DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d296; - } - ++num; - if ((backing.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190) != DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190 = DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190; - } - ++num; - if ((backing.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d193) != DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d193) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d193, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d193 = DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d193; - } - ++num; - if ((backing.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d297) != DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d297) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d297, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d297 = DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d297; - } - ++num; - if ((backing.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187) != DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187 = DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187; - } - ++num; - if ((backing.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194) != DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194 = DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194; - } - ++num; - if ((backing.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298) != DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298 = DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298; - } - ++num; - if ((backing.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184) != DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184 = DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184; - } - ++num; - if ((backing.DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226) != DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226 = DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226; - } - ++num; - if ((backing.DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209) != DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209 = DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209; - } - ++num; - if ((backing.DEF_NOT_hg_h_lock_lockVec_0_held_notEmpty__2___d43) != DEF_NOT_hg_h_lock_lockVec_0_held_notEmpty__2___d43) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_h_lock_lockVec_0_held_notEmpty__2___d43, 1u); - backing.DEF_NOT_hg_h_lock_lockVec_0_held_notEmpty__2___d43 = DEF_NOT_hg_h_lock_lockVec_0_held_notEmpty__2___d43; - } - ++num; - if ((backing.DEF_NOT_hg_h_lock_lockVec_1_held_notEmpty__7___d48) != DEF_NOT_hg_h_lock_lockVec_1_held_notEmpty__7___d48) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_h_lock_lockVec_1_held_notEmpty__7___d48, 1u); - backing.DEF_NOT_hg_h_lock_lockVec_1_held_notEmpty__7___d48 = DEF_NOT_hg_h_lock_lockVec_1_held_notEmpty__7___d48; - } - ++num; - if ((backing.DEF_NOT_hg_h_lock_lockVec_2_held_notEmpty__2___d53) != DEF_NOT_hg_h_lock_lockVec_2_held_notEmpty__2___d53) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_h_lock_lockVec_2_held_notEmpty__2___d53, 1u); - backing.DEF_NOT_hg_h_lock_lockVec_2_held_notEmpty__2___d53 = DEF_NOT_hg_h_lock_lockVec_2_held_notEmpty__2___d53; - } - ++num; - if ((backing.DEF_NOT_hg_h_lock_lockVec_3_held_notEmpty__7___d58) != DEF_NOT_hg_h_lock_lockVec_3_held_notEmpty__7___d58) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_h_lock_lockVec_3_held_notEmpty__7___d58, 1u); - backing.DEF_NOT_hg_h_lock_lockVec_3_held_notEmpty__7___d58 = DEF_NOT_hg_h_lock_lockVec_3_held_notEmpty__7___d58; - } - ++num; - if ((backing.DEF_NOT_hg_weight_lock_lockVec_0_held_notEmpty__2___d23) != DEF_NOT_hg_weight_lock_lockVec_0_held_notEmpty__2___d23) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_weight_lock_lockVec_0_held_notEmpty__2___d23, 1u); - backing.DEF_NOT_hg_weight_lock_lockVec_0_held_notEmpty__2___d23 = DEF_NOT_hg_weight_lock_lockVec_0_held_notEmpty__2___d23; - } - ++num; - if ((backing.DEF_NOT_hg_weight_lock_lockVec_1_held_notEmpty__7___d28) != DEF_NOT_hg_weight_lock_lockVec_1_held_notEmpty__7___d28) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_weight_lock_lockVec_1_held_notEmpty__7___d28, 1u); - backing.DEF_NOT_hg_weight_lock_lockVec_1_held_notEmpty__7___d28 = DEF_NOT_hg_weight_lock_lockVec_1_held_notEmpty__7___d28; - } - ++num; - if ((backing.DEF_NOT_hg_weight_lock_lockVec_2_held_notEmpty__2___d33) != DEF_NOT_hg_weight_lock_lockVec_2_held_notEmpty__2___d33) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_weight_lock_lockVec_2_held_notEmpty__2___d33, 1u); - backing.DEF_NOT_hg_weight_lock_lockVec_2_held_notEmpty__2___d33 = DEF_NOT_hg_weight_lock_lockVec_2_held_notEmpty__2___d33; - } - ++num; - if ((backing.DEF_NOT_hg_weight_lock_lockVec_3_held_notEmpty__7___d38) != DEF_NOT_hg_weight_lock_lockVec_3_held_notEmpty__7___d38) - { - vcd_write_val(sim_hdl, num, DEF_NOT_hg_weight_lock_lockVec_3_held_notEmpty__7___d38, 1u); - backing.DEF_NOT_hg_weight_lock_lockVec_3_held_notEmpty__7___d38 = DEF_NOT_hg_weight_lock_lockVec_3_held_notEmpty__7___d38; - } - ++num; - if ((backing.PORT_RST_N) != PORT_RST_N) - { - vcd_write_val(sim_hdl, num, PORT_RST_N, 1u); - backing.PORT_RST_N = PORT_RST_N; - } - ++num; - if ((backing.DEF_WILL_FIRE__inthg_req) != DEF_WILL_FIRE__inthg_req) - { - vcd_write_val(sim_hdl, num, DEF_WILL_FIRE__inthg_req, 1u); - backing.DEF_WILL_FIRE__inthg_req = DEF_WILL_FIRE__inthg_req; - } - ++num; - if ((backing.DEF__0_CONCAT_DONTCARE___d6) != DEF__0_CONCAT_DONTCARE___d6) - { - vcd_write_val(sim_hdl, num, DEF__0_CONCAT_DONTCARE___d6, 11u); - backing.DEF__0_CONCAT_DONTCARE___d6 = DEF__0_CONCAT_DONTCARE___d6; - } - ++num; - if ((backing.DEF_b__h8408) != DEF_b__h8408) - { - vcd_write_val(sim_hdl, num, DEF_b__h8408, 10u); - backing.DEF_b__h8408 = DEF_b__h8408; - } - ++num; - if ((backing.DEF_b__h8449) != DEF_b__h8449) - { - vcd_write_val(sim_hdl, num, DEF_b__h8449, 10u); - backing.DEF_b__h8449 = DEF_b__h8449; - } - ++num; - if ((backing.DEF_b__h8480) != DEF_b__h8480) - { - vcd_write_val(sim_hdl, num, DEF_b__h8480, 10u); - backing.DEF_b__h8480 = DEF_b__h8480; - } - ++num; - if ((backing.DEF_b__h8511) != DEF_b__h8511) - { - vcd_write_val(sim_hdl, num, DEF_b__h8511, 10u); - backing.DEF_b__h8511 = DEF_b__h8511; - } - ++num; - if ((backing.DEF_hg_busyReg__h7113) != DEF_hg_busyReg__h7113) - { - vcd_write_val(sim_hdl, num, DEF_hg_busyReg__h7113, 1u); - backing.DEF_hg_busyReg__h7113 = DEF_hg_busyReg__h7113; - } - ++num; - if ((backing.DEF_hg_feature_lock_entryVec_0_BIT_10___d4) != DEF_hg_feature_lock_entryVec_0_BIT_10___d4) - { - vcd_write_val(sim_hdl, num, DEF_hg_feature_lock_entryVec_0_BIT_10___d4, 1u); - backing.DEF_hg_feature_lock_entryVec_0_BIT_10___d4 = DEF_hg_feature_lock_entryVec_0_BIT_10___d4; - } - ++num; - if ((backing.DEF_hg_feature_lock_entryVec_0___d3) != DEF_hg_feature_lock_entryVec_0___d3) - { - vcd_write_val(sim_hdl, num, DEF_hg_feature_lock_entryVec_0___d3, 11u); - backing.DEF_hg_feature_lock_entryVec_0___d3 = DEF_hg_feature_lock_entryVec_0___d3; - } - ++num; - if ((backing.DEF_hg_feature_lock_entryVec_1_BIT_10___d10) != DEF_hg_feature_lock_entryVec_1_BIT_10___d10) - { - vcd_write_val(sim_hdl, num, DEF_hg_feature_lock_entryVec_1_BIT_10___d10, 1u); - backing.DEF_hg_feature_lock_entryVec_1_BIT_10___d10 = DEF_hg_feature_lock_entryVec_1_BIT_10___d10; - } - ++num; - if ((backing.DEF_hg_feature_lock_entryVec_1___d9) != DEF_hg_feature_lock_entryVec_1___d9) - { - vcd_write_val(sim_hdl, num, DEF_hg_feature_lock_entryVec_1___d9, 11u); - backing.DEF_hg_feature_lock_entryVec_1___d9 = DEF_hg_feature_lock_entryVec_1___d9; - } - ++num; - if ((backing.DEF_hg_feature_lock_entryVec_2_4_BIT_10___d15) != DEF_hg_feature_lock_entryVec_2_4_BIT_10___d15) - { - vcd_write_val(sim_hdl, num, DEF_hg_feature_lock_entryVec_2_4_BIT_10___d15, 1u); - backing.DEF_hg_feature_lock_entryVec_2_4_BIT_10___d15 = DEF_hg_feature_lock_entryVec_2_4_BIT_10___d15; - } - ++num; - if ((backing.DEF_hg_feature_lock_entryVec_2___d14) != DEF_hg_feature_lock_entryVec_2___d14) - { - vcd_write_val(sim_hdl, num, DEF_hg_feature_lock_entryVec_2___d14, 11u); - backing.DEF_hg_feature_lock_entryVec_2___d14 = DEF_hg_feature_lock_entryVec_2___d14; - } - ++num; - if ((backing.DEF_hg_feature_lock_entryVec_3_9_BIT_10___d20) != DEF_hg_feature_lock_entryVec_3_9_BIT_10___d20) - { - vcd_write_val(sim_hdl, num, DEF_hg_feature_lock_entryVec_3_9_BIT_10___d20, 1u); - backing.DEF_hg_feature_lock_entryVec_3_9_BIT_10___d20 = DEF_hg_feature_lock_entryVec_3_9_BIT_10___d20; - } - ++num; - if ((backing.DEF_hg_feature_lock_entryVec_3___d19) != DEF_hg_feature_lock_entryVec_3___d19) - { - vcd_write_val(sim_hdl, num, DEF_hg_feature_lock_entryVec_3___d19, 11u); - backing.DEF_hg_feature_lock_entryVec_3___d19 = DEF_hg_feature_lock_entryVec_3___d19; - } - ++num; - if ((backing.DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284) != DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284) - { - vcd_write_val(sim_hdl, num, DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284, 10u); - backing.DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284 = DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284; - } - ++num; - if ((backing.DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283) != DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283) - { - vcd_write_val(sim_hdl, num, DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283, 48u); - backing.DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283 = DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283; - } - ++num; - if ((backing.DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169) != DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169) - { - vcd_write_val(sim_hdl, num, DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169, 10u); - backing.DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169 = DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169; - } - ++num; - if ((backing.DEF_hg_fifo_Start_TO_Stage__1_first____d168) != DEF_hg_fifo_Start_TO_Stage__1_first____d168) - { - vcd_write_val(sim_hdl, num, DEF_hg_fifo_Start_TO_Stage__1_first____d168, 45u); - backing.DEF_hg_fifo_Start_TO_Stage__1_first____d168 = DEF_hg_fifo_Start_TO_Stage__1_first____d168; - } - ++num; - if ((backing.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65) != DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65) - { - vcd_write_val(sim_hdl, num, DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65, 1u); - backing.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65 = DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65; - } - ++num; - if ((backing.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64) != DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64) - { - vcd_write_val(sim_hdl, num, DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64, 10u); - backing.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64 = DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64; - } - ++num; - if ((backing.DEF_hg_fifo__input__TO_Start_first____d63) != DEF_hg_fifo__input__TO_Start_first____d63) - { - vcd_write_val(sim_hdl, num, DEF_hg_fifo__input__TO_Start_first____d63, 13u); - backing.DEF_hg_fifo__input__TO_Start_first____d63 = DEF_hg_fifo__input__TO_Start_first____d63; - } - ++num; - if ((backing.DEF_hg_fifo__input__TO_Start_i_notFull____d66) != DEF_hg_fifo__input__TO_Start_i_notFull____d66) - { - vcd_write_val(sim_hdl, num, DEF_hg_fifo__input__TO_Start_i_notFull____d66, 1u); - backing.DEF_hg_fifo__input__TO_Start_i_notFull____d66 = DEF_hg_fifo__input__TO_Start_i_notFull____d66; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179) != DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179, 1u); - backing.DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179 = DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294) != DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294, 1u); - backing.DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294 = DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_0_4_BIT_10___d45) != DEF_hg_h_lock_entryVec_0_4_BIT_10___d45) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_0_4_BIT_10___d45, 1u); - backing.DEF_hg_h_lock_entryVec_0_4_BIT_10___d45 = DEF_hg_h_lock_entryVec_0_4_BIT_10___d45; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_0___d44) != DEF_hg_h_lock_entryVec_0___d44) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_0___d44, 11u); - backing.DEF_hg_h_lock_entryVec_0___d44 = DEF_hg_h_lock_entryVec_0___d44; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176) != DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176, 1u); - backing.DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176 = DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291) != DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291, 1u); - backing.DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291 = DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d177) != DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d177) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d177, 1u); - backing.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d177 = DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d177; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d206) != DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d206) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d206, 1u); - backing.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d206 = DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d206; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d304) != DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d304) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d304, 1u); - backing.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d304 = DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d304; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_1_9_BIT_10___d50) != DEF_hg_h_lock_entryVec_1_9_BIT_10___d50) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_1_9_BIT_10___d50, 1u); - backing.DEF_hg_h_lock_entryVec_1_9_BIT_10___d50 = DEF_hg_h_lock_entryVec_1_9_BIT_10___d50; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_1___d49) != DEF_hg_h_lock_entryVec_1___d49) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_1___d49, 11u); - backing.DEF_hg_h_lock_entryVec_1___d49 = DEF_hg_h_lock_entryVec_1___d49; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173) != DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173, 1u); - backing.DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173 = DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288) != DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288, 1u); - backing.DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288 = DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d174) != DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d174) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d174, 1u); - backing.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d174 = DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d174; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d207) != DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d207) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d207, 1u); - backing.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d207 = DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d207; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d302) != DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d302) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d302, 1u); - backing.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d302 = DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d302; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_2_4_BIT_10___d55) != DEF_hg_h_lock_entryVec_2_4_BIT_10___d55) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_2_4_BIT_10___d55, 1u); - backing.DEF_hg_h_lock_entryVec_2_4_BIT_10___d55 = DEF_hg_h_lock_entryVec_2_4_BIT_10___d55; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_2___d54) != DEF_hg_h_lock_entryVec_2___d54) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_2___d54, 11u); - backing.DEF_hg_h_lock_entryVec_2___d54 = DEF_hg_h_lock_entryVec_2___d54; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170) != DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170, 1u); - backing.DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170 = DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285) != DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285, 1u); - backing.DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285 = DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d171) != DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d171) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d171, 1u); - backing.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d171 = DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d171; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183) != DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183, 1u); - backing.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183 = DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d300) != DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d300) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d300, 1u); - backing.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d300 = DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d300; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_3_9_BIT_10___d60) != DEF_hg_h_lock_entryVec_3_9_BIT_10___d60) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_3_9_BIT_10___d60, 1u); - backing.DEF_hg_h_lock_entryVec_3_9_BIT_10___d60 = DEF_hg_h_lock_entryVec_3_9_BIT_10___d60; - } - ++num; - if ((backing.DEF_hg_h_lock_entryVec_3___d59) != DEF_hg_h_lock_entryVec_3___d59) - { - vcd_write_val(sim_hdl, num, DEF_hg_h_lock_entryVec_3___d59, 11u); - backing.DEF_hg_h_lock_entryVec_3___d59 = DEF_hg_h_lock_entryVec_3___d59; - } - ++num; - if ((backing.DEF_hg_outputQueue_first____d352) != DEF_hg_outputQueue_first____d352) - { - vcd_write_val(sim_hdl, num, DEF_hg_outputQueue_first____d352, 4u); - backing.DEF_hg_outputQueue_first____d352 = DEF_hg_outputQueue_first____d352; - } - ++num; - if ((backing.DEF_hg_outputQueue_i_notEmpty____d351) != DEF_hg_outputQueue_i_notEmpty____d351) - { - vcd_write_val(sim_hdl, num, DEF_hg_outputQueue_i_notEmpty____d351, 1u); - backing.DEF_hg_outputQueue_i_notEmpty____d351 = DEF_hg_outputQueue_i_notEmpty____d351; - } - ++num; - if ((backing.DEF_hg_weight_lock_entryVec_0_4_BIT_10___d25) != DEF_hg_weight_lock_entryVec_0_4_BIT_10___d25) - { - vcd_write_val(sim_hdl, num, DEF_hg_weight_lock_entryVec_0_4_BIT_10___d25, 1u); - backing.DEF_hg_weight_lock_entryVec_0_4_BIT_10___d25 = DEF_hg_weight_lock_entryVec_0_4_BIT_10___d25; - } - ++num; - if ((backing.DEF_hg_weight_lock_entryVec_0___d24) != DEF_hg_weight_lock_entryVec_0___d24) - { - vcd_write_val(sim_hdl, num, DEF_hg_weight_lock_entryVec_0___d24, 11u); - backing.DEF_hg_weight_lock_entryVec_0___d24 = DEF_hg_weight_lock_entryVec_0___d24; - } - ++num; - if ((backing.DEF_hg_weight_lock_entryVec_1_9_BIT_10___d30) != DEF_hg_weight_lock_entryVec_1_9_BIT_10___d30) - { - vcd_write_val(sim_hdl, num, DEF_hg_weight_lock_entryVec_1_9_BIT_10___d30, 1u); - backing.DEF_hg_weight_lock_entryVec_1_9_BIT_10___d30 = DEF_hg_weight_lock_entryVec_1_9_BIT_10___d30; - } - ++num; - if ((backing.DEF_hg_weight_lock_entryVec_1___d29) != DEF_hg_weight_lock_entryVec_1___d29) - { - vcd_write_val(sim_hdl, num, DEF_hg_weight_lock_entryVec_1___d29, 11u); - backing.DEF_hg_weight_lock_entryVec_1___d29 = DEF_hg_weight_lock_entryVec_1___d29; - } - ++num; - if ((backing.DEF_hg_weight_lock_entryVec_2_4_BIT_10___d35) != DEF_hg_weight_lock_entryVec_2_4_BIT_10___d35) - { - vcd_write_val(sim_hdl, num, DEF_hg_weight_lock_entryVec_2_4_BIT_10___d35, 1u); - backing.DEF_hg_weight_lock_entryVec_2_4_BIT_10___d35 = DEF_hg_weight_lock_entryVec_2_4_BIT_10___d35; - } - ++num; - if ((backing.DEF_hg_weight_lock_entryVec_2___d34) != DEF_hg_weight_lock_entryVec_2___d34) - { - vcd_write_val(sim_hdl, num, DEF_hg_weight_lock_entryVec_2___d34, 11u); - backing.DEF_hg_weight_lock_entryVec_2___d34 = DEF_hg_weight_lock_entryVec_2___d34; - } - ++num; - if ((backing.DEF_hg_weight_lock_entryVec_3_9_BIT_10___d40) != DEF_hg_weight_lock_entryVec_3_9_BIT_10___d40) - { - vcd_write_val(sim_hdl, num, DEF_hg_weight_lock_entryVec_3_9_BIT_10___d40, 1u); - backing.DEF_hg_weight_lock_entryVec_3_9_BIT_10___d40 = DEF_hg_weight_lock_entryVec_3_9_BIT_10___d40; - } - ++num; - if ((backing.DEF_hg_weight_lock_entryVec_3___d39) != DEF_hg_weight_lock_entryVec_3___d39) - { - vcd_write_val(sim_hdl, num, DEF_hg_weight_lock_entryVec_3___d39, 11u); - backing.DEF_hg_weight_lock_entryVec_3___d39 = DEF_hg_weight_lock_entryVec_3___d39; - } - ++num; - if ((backing.DEF_x__h10519) != DEF_x__h10519) - { - vcd_write_val(sim_hdl, num, DEF_x__h10519, 2u); - backing.DEF_x__h10519 = DEF_x__h10519; - } - ++num; - if ((backing.DEF_x__h8976) != DEF_x__h8976) - { - vcd_write_val(sim_hdl, num, DEF_x__h8976, 2u); - backing.DEF_x__h8976 = DEF_x__h8976; - } - ++num; - if ((backing.DEF_x__h9842) != DEF_x__h9842) - { - vcd_write_val(sim_hdl, num, DEF_x__h9842, 2u); - backing.DEF_x__h9842 = DEF_x__h9842; - } - ++num; - if ((backing.PORT_EN__inthg_req) != PORT_EN__inthg_req) - { - vcd_write_val(sim_hdl, num, PORT_EN__inthg_req, 1u); - backing.PORT_EN__inthg_req = PORT_EN__inthg_req; - } - ++num; - } - else - { - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_feature_lock_lockVec_0_held_notEmpty___d2, 1u); - backing.DEF_NOT_hg_feature_lock_lockVec_0_held_notEmpty___d2 = DEF_NOT_hg_feature_lock_lockVec_0_held_notEmpty___d2; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_feature_lock_lockVec_1_held_notEmpty___d8, 1u); - backing.DEF_NOT_hg_feature_lock_lockVec_1_held_notEmpty___d8 = DEF_NOT_hg_feature_lock_lockVec_1_held_notEmpty___d8; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_feature_lock_lockVec_2_held_notEmpty__2___d13, 1u); - backing.DEF_NOT_hg_feature_lock_lockVec_2_held_notEmpty__2___d13 = DEF_NOT_hg_feature_lock_lockVec_2_held_notEmpty__2___d13; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_feature_lock_lockVec_3_held_notEmpty__7___d18, 1u); - backing.DEF_NOT_hg_feature_lock_lockVec_3_held_notEmpty__7___d18 = DEF_NOT_hg_feature_lock_lockVec_3_held_notEmpty__7___d18; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d74, 1u); - backing.DEF_NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d74 = DEF_NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d74; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d192, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d192 = DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d192; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d296, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d296 = DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d296; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190 = DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d193, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d193 = DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d193; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d297, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d297 = DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d297; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187 = DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194 = DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298 = DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184 = DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226 = DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209, 1u); - backing.DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209 = DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_h_lock_lockVec_0_held_notEmpty__2___d43, 1u); - backing.DEF_NOT_hg_h_lock_lockVec_0_held_notEmpty__2___d43 = DEF_NOT_hg_h_lock_lockVec_0_held_notEmpty__2___d43; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_h_lock_lockVec_1_held_notEmpty__7___d48, 1u); - backing.DEF_NOT_hg_h_lock_lockVec_1_held_notEmpty__7___d48 = DEF_NOT_hg_h_lock_lockVec_1_held_notEmpty__7___d48; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_h_lock_lockVec_2_held_notEmpty__2___d53, 1u); - backing.DEF_NOT_hg_h_lock_lockVec_2_held_notEmpty__2___d53 = DEF_NOT_hg_h_lock_lockVec_2_held_notEmpty__2___d53; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_h_lock_lockVec_3_held_notEmpty__7___d58, 1u); - backing.DEF_NOT_hg_h_lock_lockVec_3_held_notEmpty__7___d58 = DEF_NOT_hg_h_lock_lockVec_3_held_notEmpty__7___d58; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_weight_lock_lockVec_0_held_notEmpty__2___d23, 1u); - backing.DEF_NOT_hg_weight_lock_lockVec_0_held_notEmpty__2___d23 = DEF_NOT_hg_weight_lock_lockVec_0_held_notEmpty__2___d23; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_weight_lock_lockVec_1_held_notEmpty__7___d28, 1u); - backing.DEF_NOT_hg_weight_lock_lockVec_1_held_notEmpty__7___d28 = DEF_NOT_hg_weight_lock_lockVec_1_held_notEmpty__7___d28; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_weight_lock_lockVec_2_held_notEmpty__2___d33, 1u); - backing.DEF_NOT_hg_weight_lock_lockVec_2_held_notEmpty__2___d33 = DEF_NOT_hg_weight_lock_lockVec_2_held_notEmpty__2___d33; - vcd_write_val(sim_hdl, num++, DEF_NOT_hg_weight_lock_lockVec_3_held_notEmpty__7___d38, 1u); - backing.DEF_NOT_hg_weight_lock_lockVec_3_held_notEmpty__7___d38 = DEF_NOT_hg_weight_lock_lockVec_3_held_notEmpty__7___d38; - vcd_write_val(sim_hdl, num++, PORT_RST_N, 1u); - backing.PORT_RST_N = PORT_RST_N; - vcd_write_val(sim_hdl, num++, DEF_WILL_FIRE__inthg_req, 1u); - backing.DEF_WILL_FIRE__inthg_req = DEF_WILL_FIRE__inthg_req; - vcd_write_val(sim_hdl, num++, DEF__0_CONCAT_DONTCARE___d6, 11u); - backing.DEF__0_CONCAT_DONTCARE___d6 = DEF__0_CONCAT_DONTCARE___d6; - vcd_write_val(sim_hdl, num++, DEF_b__h8408, 10u); - backing.DEF_b__h8408 = DEF_b__h8408; - vcd_write_val(sim_hdl, num++, DEF_b__h8449, 10u); - backing.DEF_b__h8449 = DEF_b__h8449; - vcd_write_val(sim_hdl, num++, DEF_b__h8480, 10u); - backing.DEF_b__h8480 = DEF_b__h8480; - vcd_write_val(sim_hdl, num++, DEF_b__h8511, 10u); - backing.DEF_b__h8511 = DEF_b__h8511; - vcd_write_val(sim_hdl, num++, DEF_hg_busyReg__h7113, 1u); - backing.DEF_hg_busyReg__h7113 = DEF_hg_busyReg__h7113; - vcd_write_val(sim_hdl, num++, DEF_hg_feature_lock_entryVec_0_BIT_10___d4, 1u); - backing.DEF_hg_feature_lock_entryVec_0_BIT_10___d4 = DEF_hg_feature_lock_entryVec_0_BIT_10___d4; - vcd_write_val(sim_hdl, num++, DEF_hg_feature_lock_entryVec_0___d3, 11u); - backing.DEF_hg_feature_lock_entryVec_0___d3 = DEF_hg_feature_lock_entryVec_0___d3; - vcd_write_val(sim_hdl, num++, DEF_hg_feature_lock_entryVec_1_BIT_10___d10, 1u); - backing.DEF_hg_feature_lock_entryVec_1_BIT_10___d10 = DEF_hg_feature_lock_entryVec_1_BIT_10___d10; - vcd_write_val(sim_hdl, num++, DEF_hg_feature_lock_entryVec_1___d9, 11u); - backing.DEF_hg_feature_lock_entryVec_1___d9 = DEF_hg_feature_lock_entryVec_1___d9; - vcd_write_val(sim_hdl, num++, DEF_hg_feature_lock_entryVec_2_4_BIT_10___d15, 1u); - backing.DEF_hg_feature_lock_entryVec_2_4_BIT_10___d15 = DEF_hg_feature_lock_entryVec_2_4_BIT_10___d15; - vcd_write_val(sim_hdl, num++, DEF_hg_feature_lock_entryVec_2___d14, 11u); - backing.DEF_hg_feature_lock_entryVec_2___d14 = DEF_hg_feature_lock_entryVec_2___d14; - vcd_write_val(sim_hdl, num++, DEF_hg_feature_lock_entryVec_3_9_BIT_10___d20, 1u); - backing.DEF_hg_feature_lock_entryVec_3_9_BIT_10___d20 = DEF_hg_feature_lock_entryVec_3_9_BIT_10___d20; - vcd_write_val(sim_hdl, num++, DEF_hg_feature_lock_entryVec_3___d19, 11u); - backing.DEF_hg_feature_lock_entryVec_3___d19 = DEF_hg_feature_lock_entryVec_3___d19; - vcd_write_val(sim_hdl, num++, DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284, 10u); - backing.DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284 = DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284; - vcd_write_val(sim_hdl, num++, DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283, 48u); - backing.DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283 = DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283; - vcd_write_val(sim_hdl, num++, DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169, 10u); - backing.DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169 = DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169; - vcd_write_val(sim_hdl, num++, DEF_hg_fifo_Start_TO_Stage__1_first____d168, 45u); - backing.DEF_hg_fifo_Start_TO_Stage__1_first____d168 = DEF_hg_fifo_Start_TO_Stage__1_first____d168; - vcd_write_val(sim_hdl, num++, DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65, 1u); - backing.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65 = DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65; - vcd_write_val(sim_hdl, num++, DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64, 10u); - backing.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64 = DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64; - vcd_write_val(sim_hdl, num++, DEF_hg_fifo__input__TO_Start_first____d63, 13u); - backing.DEF_hg_fifo__input__TO_Start_first____d63 = DEF_hg_fifo__input__TO_Start_first____d63; - vcd_write_val(sim_hdl, num++, DEF_hg_fifo__input__TO_Start_i_notFull____d66, 1u); - backing.DEF_hg_fifo__input__TO_Start_i_notFull____d66 = DEF_hg_fifo__input__TO_Start_i_notFull____d66; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179, 1u); - backing.DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179 = DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294, 1u); - backing.DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294 = DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_0_4_BIT_10___d45, 1u); - backing.DEF_hg_h_lock_entryVec_0_4_BIT_10___d45 = DEF_hg_h_lock_entryVec_0_4_BIT_10___d45; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_0___d44, 11u); - backing.DEF_hg_h_lock_entryVec_0___d44 = DEF_hg_h_lock_entryVec_0___d44; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176, 1u); - backing.DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176 = DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291, 1u); - backing.DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291 = DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d177, 1u); - backing.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d177 = DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d177; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d206, 1u); - backing.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d206 = DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d206; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d304, 1u); - backing.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d304 = DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d304; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_1_9_BIT_10___d50, 1u); - backing.DEF_hg_h_lock_entryVec_1_9_BIT_10___d50 = DEF_hg_h_lock_entryVec_1_9_BIT_10___d50; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_1___d49, 11u); - backing.DEF_hg_h_lock_entryVec_1___d49 = DEF_hg_h_lock_entryVec_1___d49; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173, 1u); - backing.DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173 = DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288, 1u); - backing.DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288 = DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d174, 1u); - backing.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d174 = DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d174; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d207, 1u); - backing.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d207 = DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d207; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d302, 1u); - backing.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d302 = DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d302; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_2_4_BIT_10___d55, 1u); - backing.DEF_hg_h_lock_entryVec_2_4_BIT_10___d55 = DEF_hg_h_lock_entryVec_2_4_BIT_10___d55; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_2___d54, 11u); - backing.DEF_hg_h_lock_entryVec_2___d54 = DEF_hg_h_lock_entryVec_2___d54; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170, 1u); - backing.DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170 = DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285, 1u); - backing.DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285 = DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d171, 1u); - backing.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d171 = DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d171; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183, 1u); - backing.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183 = DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d300, 1u); - backing.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d300 = DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d300; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_3_9_BIT_10___d60, 1u); - backing.DEF_hg_h_lock_entryVec_3_9_BIT_10___d60 = DEF_hg_h_lock_entryVec_3_9_BIT_10___d60; - vcd_write_val(sim_hdl, num++, DEF_hg_h_lock_entryVec_3___d59, 11u); - backing.DEF_hg_h_lock_entryVec_3___d59 = DEF_hg_h_lock_entryVec_3___d59; - vcd_write_val(sim_hdl, num++, DEF_hg_outputQueue_first____d352, 4u); - backing.DEF_hg_outputQueue_first____d352 = DEF_hg_outputQueue_first____d352; - vcd_write_val(sim_hdl, num++, DEF_hg_outputQueue_i_notEmpty____d351, 1u); - backing.DEF_hg_outputQueue_i_notEmpty____d351 = DEF_hg_outputQueue_i_notEmpty____d351; - vcd_write_val(sim_hdl, num++, DEF_hg_weight_lock_entryVec_0_4_BIT_10___d25, 1u); - backing.DEF_hg_weight_lock_entryVec_0_4_BIT_10___d25 = DEF_hg_weight_lock_entryVec_0_4_BIT_10___d25; - vcd_write_val(sim_hdl, num++, DEF_hg_weight_lock_entryVec_0___d24, 11u); - backing.DEF_hg_weight_lock_entryVec_0___d24 = DEF_hg_weight_lock_entryVec_0___d24; - vcd_write_val(sim_hdl, num++, DEF_hg_weight_lock_entryVec_1_9_BIT_10___d30, 1u); - backing.DEF_hg_weight_lock_entryVec_1_9_BIT_10___d30 = DEF_hg_weight_lock_entryVec_1_9_BIT_10___d30; - vcd_write_val(sim_hdl, num++, DEF_hg_weight_lock_entryVec_1___d29, 11u); - backing.DEF_hg_weight_lock_entryVec_1___d29 = DEF_hg_weight_lock_entryVec_1___d29; - vcd_write_val(sim_hdl, num++, DEF_hg_weight_lock_entryVec_2_4_BIT_10___d35, 1u); - backing.DEF_hg_weight_lock_entryVec_2_4_BIT_10___d35 = DEF_hg_weight_lock_entryVec_2_4_BIT_10___d35; - vcd_write_val(sim_hdl, num++, DEF_hg_weight_lock_entryVec_2___d34, 11u); - backing.DEF_hg_weight_lock_entryVec_2___d34 = DEF_hg_weight_lock_entryVec_2___d34; - vcd_write_val(sim_hdl, num++, DEF_hg_weight_lock_entryVec_3_9_BIT_10___d40, 1u); - backing.DEF_hg_weight_lock_entryVec_3_9_BIT_10___d40 = DEF_hg_weight_lock_entryVec_3_9_BIT_10___d40; - vcd_write_val(sim_hdl, num++, DEF_hg_weight_lock_entryVec_3___d39, 11u); - backing.DEF_hg_weight_lock_entryVec_3___d39 = DEF_hg_weight_lock_entryVec_3___d39; - vcd_write_val(sim_hdl, num++, DEF_x__h10519, 2u); - backing.DEF_x__h10519 = DEF_x__h10519; - vcd_write_val(sim_hdl, num++, DEF_x__h8976, 2u); - backing.DEF_x__h8976 = DEF_x__h8976; - vcd_write_val(sim_hdl, num++, DEF_x__h9842, 2u); - backing.DEF_x__h9842 = DEF_x__h9842; - vcd_write_val(sim_hdl, num++, PORT_EN__inthg_req, 1u); - backing.PORT_EN__inthg_req = PORT_EN__inthg_req; - } -} - -void MOD_mkCircuit::vcd_prims(tVCDDumpType dt, MOD_mkCircuit &backing) -{ - INST_f_rf.dump_VCD(dt, backing.INST_f_rf); - INST_h_rf.dump_VCD(dt, backing.INST_h_rf); - INST_hg.dump_VCD(dt, backing.INST_hg); - INST_hg_busyReg.dump_VCD(dt, backing.INST_hg_busyReg); - INST_hg_feature_lock_entryVec_0.dump_VCD(dt, backing.INST_hg_feature_lock_entryVec_0); - INST_hg_feature_lock_entryVec_1.dump_VCD(dt, backing.INST_hg_feature_lock_entryVec_1); - INST_hg_feature_lock_entryVec_2.dump_VCD(dt, backing.INST_hg_feature_lock_entryVec_2); - INST_hg_feature_lock_entryVec_3.dump_VCD(dt, backing.INST_hg_feature_lock_entryVec_3); - INST_hg_feature_lock_lockVec_0_cnt.dump_VCD(dt, backing.INST_hg_feature_lock_lockVec_0_cnt); - INST_hg_feature_lock_lockVec_0_held.dump_VCD(dt, backing.INST_hg_feature_lock_lockVec_0_held); - INST_hg_feature_lock_lockVec_0_nextId.dump_VCD(dt, backing.INST_hg_feature_lock_lockVec_0_nextId); - INST_hg_feature_lock_lockVec_1_cnt.dump_VCD(dt, backing.INST_hg_feature_lock_lockVec_1_cnt); - INST_hg_feature_lock_lockVec_1_held.dump_VCD(dt, backing.INST_hg_feature_lock_lockVec_1_held); - INST_hg_feature_lock_lockVec_1_nextId.dump_VCD(dt, backing.INST_hg_feature_lock_lockVec_1_nextId); - INST_hg_feature_lock_lockVec_2_cnt.dump_VCD(dt, backing.INST_hg_feature_lock_lockVec_2_cnt); - INST_hg_feature_lock_lockVec_2_held.dump_VCD(dt, backing.INST_hg_feature_lock_lockVec_2_held); - INST_hg_feature_lock_lockVec_2_nextId.dump_VCD(dt, backing.INST_hg_feature_lock_lockVec_2_nextId); - INST_hg_feature_lock_lockVec_3_cnt.dump_VCD(dt, backing.INST_hg_feature_lock_lockVec_3_cnt); - INST_hg_feature_lock_lockVec_3_held.dump_VCD(dt, backing.INST_hg_feature_lock_lockVec_3_held); - INST_hg_feature_lock_lockVec_3_nextId.dump_VCD(dt, backing.INST_hg_feature_lock_lockVec_3_nextId); - INST_hg_feature_lock_region.dump_VCD(dt, backing.INST_hg_feature_lock_region); - INST_hg_fifo_Stage__1_TO_Stage__2.dump_VCD(dt, backing.INST_hg_fifo_Stage__1_TO_Stage__2); - INST_hg_fifo_Stage__2_TO_Stage__3.dump_VCD(dt, backing.INST_hg_fifo_Stage__2_TO_Stage__3); - INST_hg_fifo_Start_TO_Stage__1.dump_VCD(dt, backing.INST_hg_fifo_Start_TO_Stage__1); - INST_hg_fifo__input__TO_Start.dump_VCD(dt, backing.INST_hg_fifo__input__TO_Start); - INST_hg_h_lock_entryVec_0.dump_VCD(dt, backing.INST_hg_h_lock_entryVec_0); - INST_hg_h_lock_entryVec_1.dump_VCD(dt, backing.INST_hg_h_lock_entryVec_1); - INST_hg_h_lock_entryVec_2.dump_VCD(dt, backing.INST_hg_h_lock_entryVec_2); - INST_hg_h_lock_entryVec_3.dump_VCD(dt, backing.INST_hg_h_lock_entryVec_3); - INST_hg_h_lock_lockVec_0_cnt.dump_VCD(dt, backing.INST_hg_h_lock_lockVec_0_cnt); - INST_hg_h_lock_lockVec_0_held.dump_VCD(dt, backing.INST_hg_h_lock_lockVec_0_held); - INST_hg_h_lock_lockVec_0_nextId.dump_VCD(dt, backing.INST_hg_h_lock_lockVec_0_nextId); - INST_hg_h_lock_lockVec_1_cnt.dump_VCD(dt, backing.INST_hg_h_lock_lockVec_1_cnt); - INST_hg_h_lock_lockVec_1_held.dump_VCD(dt, backing.INST_hg_h_lock_lockVec_1_held); - INST_hg_h_lock_lockVec_1_nextId.dump_VCD(dt, backing.INST_hg_h_lock_lockVec_1_nextId); - INST_hg_h_lock_lockVec_2_cnt.dump_VCD(dt, backing.INST_hg_h_lock_lockVec_2_cnt); - INST_hg_h_lock_lockVec_2_held.dump_VCD(dt, backing.INST_hg_h_lock_lockVec_2_held); - INST_hg_h_lock_lockVec_2_nextId.dump_VCD(dt, backing.INST_hg_h_lock_lockVec_2_nextId); - INST_hg_h_lock_lockVec_3_cnt.dump_VCD(dt, backing.INST_hg_h_lock_lockVec_3_cnt); - INST_hg_h_lock_lockVec_3_held.dump_VCD(dt, backing.INST_hg_h_lock_lockVec_3_held); - INST_hg_h_lock_lockVec_3_nextId.dump_VCD(dt, backing.INST_hg_h_lock_lockVec_3_nextId); - INST_hg_h_lock_region.dump_VCD(dt, backing.INST_hg_h_lock_region); - INST_hg_outputQueue.dump_VCD(dt, backing.INST_hg_outputQueue); - INST_hg_weight_lock_entryVec_0.dump_VCD(dt, backing.INST_hg_weight_lock_entryVec_0); - INST_hg_weight_lock_entryVec_1.dump_VCD(dt, backing.INST_hg_weight_lock_entryVec_1); - INST_hg_weight_lock_entryVec_2.dump_VCD(dt, backing.INST_hg_weight_lock_entryVec_2); - INST_hg_weight_lock_entryVec_3.dump_VCD(dt, backing.INST_hg_weight_lock_entryVec_3); - INST_hg_weight_lock_lockVec_0_cnt.dump_VCD(dt, backing.INST_hg_weight_lock_lockVec_0_cnt); - INST_hg_weight_lock_lockVec_0_held.dump_VCD(dt, backing.INST_hg_weight_lock_lockVec_0_held); - INST_hg_weight_lock_lockVec_0_nextId.dump_VCD(dt, backing.INST_hg_weight_lock_lockVec_0_nextId); - INST_hg_weight_lock_lockVec_1_cnt.dump_VCD(dt, backing.INST_hg_weight_lock_lockVec_1_cnt); - INST_hg_weight_lock_lockVec_1_held.dump_VCD(dt, backing.INST_hg_weight_lock_lockVec_1_held); - INST_hg_weight_lock_lockVec_1_nextId.dump_VCD(dt, backing.INST_hg_weight_lock_lockVec_1_nextId); - INST_hg_weight_lock_lockVec_2_cnt.dump_VCD(dt, backing.INST_hg_weight_lock_lockVec_2_cnt); - INST_hg_weight_lock_lockVec_2_held.dump_VCD(dt, backing.INST_hg_weight_lock_lockVec_2_held); - INST_hg_weight_lock_lockVec_2_nextId.dump_VCD(dt, backing.INST_hg_weight_lock_lockVec_2_nextId); - INST_hg_weight_lock_lockVec_3_cnt.dump_VCD(dt, backing.INST_hg_weight_lock_lockVec_3_cnt); - INST_hg_weight_lock_lockVec_3_held.dump_VCD(dt, backing.INST_hg_weight_lock_lockVec_3_held); - INST_hg_weight_lock_lockVec_3_nextId.dump_VCD(dt, backing.INST_hg_weight_lock_lockVec_3_nextId); - INST_hg_weight_lock_region.dump_VCD(dt, backing.INST_hg_weight_lock_region); - INST_w_rf.dump_VCD(dt, backing.INST_w_rf); -} diff --git a/src/main/scala/pipedsl/testOutputs/Circuit_sim/mkCircuit.h b/src/main/scala/pipedsl/testOutputs/Circuit_sim/mkCircuit.h deleted file mode 100644 index 3cd53273..00000000 --- a/src/main/scala/pipedsl/testOutputs/Circuit_sim/mkCircuit.h +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Generated by Bluespec Compiler - * - */ - -/* Generation options: */ -#ifndef __mkCircuit_h__ -#define __mkCircuit_h__ - -#include "bluesim_types.h" -#include "bs_module.h" -#include "bluesim_primitives.h" -#include "bs_vcd.h" - - -/* Class declaration for the mkCircuit module */ -class MOD_mkCircuit : public Module { - - /* Clock handles */ - private: - tClock __clk_handle_0; - - /* Clock gate handles */ - public: - tUInt8 *clk_gate[0]; - - /* Instantiation parameters */ - public: - - /* Module state */ - public: - MOD_RegFile INST_f_rf; - MOD_RegFile INST_h_rf; - MOD_Reg INST_hg; - MOD_Reg INST_hg_busyReg; - MOD_Reg INST_hg_feature_lock_entryVec_0; - MOD_Reg INST_hg_feature_lock_entryVec_1; - MOD_Reg INST_hg_feature_lock_entryVec_2; - MOD_Reg INST_hg_feature_lock_entryVec_3; - MOD_Reg INST_hg_feature_lock_lockVec_0_cnt; - MOD_Fifo INST_hg_feature_lock_lockVec_0_held; - MOD_Reg INST_hg_feature_lock_lockVec_0_nextId; - MOD_Reg INST_hg_feature_lock_lockVec_1_cnt; - MOD_Fifo INST_hg_feature_lock_lockVec_1_held; - MOD_Reg INST_hg_feature_lock_lockVec_1_nextId; - MOD_Reg INST_hg_feature_lock_lockVec_2_cnt; - MOD_Fifo INST_hg_feature_lock_lockVec_2_held; - MOD_Reg INST_hg_feature_lock_lockVec_2_nextId; - MOD_Reg INST_hg_feature_lock_lockVec_3_cnt; - MOD_Fifo INST_hg_feature_lock_lockVec_3_held; - MOD_Reg INST_hg_feature_lock_lockVec_3_nextId; - MOD_Reg INST_hg_feature_lock_region; - MOD_Fifo INST_hg_fifo_Stage__1_TO_Stage__2; - MOD_Fifo INST_hg_fifo_Stage__2_TO_Stage__3; - MOD_Fifo INST_hg_fifo_Start_TO_Stage__1; - MOD_Fifo INST_hg_fifo__input__TO_Start; - MOD_Reg INST_hg_h_lock_entryVec_0; - MOD_Reg INST_hg_h_lock_entryVec_1; - MOD_Reg INST_hg_h_lock_entryVec_2; - MOD_Reg INST_hg_h_lock_entryVec_3; - MOD_Reg INST_hg_h_lock_lockVec_0_cnt; - MOD_Fifo INST_hg_h_lock_lockVec_0_held; - MOD_Reg INST_hg_h_lock_lockVec_0_nextId; - MOD_Reg INST_hg_h_lock_lockVec_1_cnt; - MOD_Fifo INST_hg_h_lock_lockVec_1_held; - MOD_Reg INST_hg_h_lock_lockVec_1_nextId; - MOD_Reg INST_hg_h_lock_lockVec_2_cnt; - MOD_Fifo INST_hg_h_lock_lockVec_2_held; - MOD_Reg INST_hg_h_lock_lockVec_2_nextId; - MOD_Reg INST_hg_h_lock_lockVec_3_cnt; - MOD_Fifo INST_hg_h_lock_lockVec_3_held; - MOD_Reg INST_hg_h_lock_lockVec_3_nextId; - MOD_Reg INST_hg_h_lock_region; - MOD_Fifo INST_hg_outputQueue; - MOD_Reg INST_hg_weight_lock_entryVec_0; - MOD_Reg INST_hg_weight_lock_entryVec_1; - MOD_Reg INST_hg_weight_lock_entryVec_2; - MOD_Reg INST_hg_weight_lock_entryVec_3; - MOD_Reg INST_hg_weight_lock_lockVec_0_cnt; - MOD_Fifo INST_hg_weight_lock_lockVec_0_held; - MOD_Reg INST_hg_weight_lock_lockVec_0_nextId; - MOD_Reg INST_hg_weight_lock_lockVec_1_cnt; - MOD_Fifo INST_hg_weight_lock_lockVec_1_held; - MOD_Reg INST_hg_weight_lock_lockVec_1_nextId; - MOD_Reg INST_hg_weight_lock_lockVec_2_cnt; - MOD_Fifo INST_hg_weight_lock_lockVec_2_held; - MOD_Reg INST_hg_weight_lock_lockVec_2_nextId; - MOD_Reg INST_hg_weight_lock_lockVec_3_cnt; - MOD_Fifo INST_hg_weight_lock_lockVec_3_held; - MOD_Reg INST_hg_weight_lock_lockVec_3_nextId; - MOD_Reg INST_hg_weight_lock_region; - MOD_RegFile INST_w_rf; - - /* Constructor */ - public: - MOD_mkCircuit(tSimStateHdl simHdl, char const *name, Module *parent); - - /* Symbol init methods */ - private: - void init_symbols_0(); - - /* Reset signal definitions */ - private: - tUInt8 PORT_RST_N; - - /* Port definitions */ - public: - tUInt8 PORT_EN__inthg_req; - - /* Publicly accessible definitions */ - public: - tUInt8 DEF_hg_outputQueue_i_notEmpty____d351; - tUInt8 DEF_WILL_FIRE__inthg_req; - tUInt8 DEF_hg_fifo__input__TO_Start_i_notFull____d66; - tUInt8 DEF_hg_h_lock_entryVec_3_9_BIT_10___d60; - tUInt8 DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285; - tUInt8 DEF_hg_h_lock_entryVec_2_4_BIT_10___d55; - tUInt8 DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288; - tUInt8 DEF_hg_h_lock_entryVec_1_9_BIT_10___d50; - tUInt8 DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291; - tUInt8 DEF_x__h8976; - tUInt8 DEF_hg_h_lock_entryVec_0_4_BIT_10___d45; - tUInt8 DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183; - tUInt8 DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d192; - tUInt8 DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d174; - tUInt8 DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d177; - tUInt8 DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d171; - tUInt8 DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209; - tUInt8 DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170; - tUInt8 DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184; - tUInt8 DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173; - tUInt8 DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176; - tUInt8 DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187; - tUInt8 DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190; - tUInt8 DEF_hg_weight_lock_entryVec_3_9_BIT_10___d40; - tUInt8 DEF_hg_weight_lock_entryVec_2_4_BIT_10___d35; - tUInt8 DEF_hg_weight_lock_entryVec_1_9_BIT_10___d30; - tUInt8 DEF_hg_feature_lock_entryVec_3_9_BIT_10___d20; - tUInt8 DEF_hg_feature_lock_entryVec_2_4_BIT_10___d15; - tUInt8 DEF_hg_feature_lock_entryVec_1_BIT_10___d10; - tUInt64 DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283; - tUInt64 DEF_hg_fifo_Start_TO_Stage__1_first____d168; - tUInt32 DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169; - tUInt32 DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64; - tUInt32 DEF_hg_fifo__input__TO_Start_first____d63; - tUInt32 DEF_hg_h_lock_entryVec_3___d59; - tUInt32 DEF_hg_h_lock_entryVec_2___d54; - tUInt32 DEF_hg_h_lock_entryVec_1___d49; - tUInt32 DEF_hg_h_lock_entryVec_0___d44; - tUInt32 DEF_hg_weight_lock_entryVec_3___d39; - tUInt32 DEF_hg_weight_lock_entryVec_2___d34; - tUInt32 DEF_hg_weight_lock_entryVec_1___d29; - tUInt32 DEF_hg_weight_lock_entryVec_0___d24; - tUInt32 DEF_hg_feature_lock_entryVec_3___d19; - tUInt32 DEF_hg_feature_lock_entryVec_2___d14; - tUInt32 DEF_hg_feature_lock_entryVec_1___d9; - tUInt32 DEF_hg_feature_lock_entryVec_0___d3; - tUInt8 DEF_hg_busyReg__h7113; - tUInt8 DEF_x__h10519; - tUInt8 DEF_x__h9842; - tUInt32 DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284; - tUInt32 DEF_b__h8511; - tUInt32 DEF_b__h8480; - tUInt32 DEF_b__h8449; - tUInt32 DEF_b__h8408; - tUInt8 DEF_hg_weight_lock_entryVec_0_4_BIT_10___d25; - tUInt8 DEF_hg_feature_lock_entryVec_0_BIT_10___d4; - tUInt8 DEF_NOT_hg_h_lock_lockVec_0_held_notEmpty__2___d43; - tUInt8 DEF_NOT_hg_h_lock_lockVec_1_held_notEmpty__7___d48; - tUInt8 DEF_NOT_hg_h_lock_lockVec_2_held_notEmpty__2___d53; - tUInt8 DEF_NOT_hg_h_lock_lockVec_3_held_notEmpty__7___d58; - tUInt8 DEF_NOT_hg_weight_lock_lockVec_0_held_notEmpty__2___d23; - tUInt8 DEF_NOT_hg_weight_lock_lockVec_1_held_notEmpty__7___d28; - tUInt8 DEF_NOT_hg_weight_lock_lockVec_2_held_notEmpty__2___d33; - tUInt8 DEF_NOT_hg_weight_lock_lockVec_3_held_notEmpty__7___d38; - tUInt8 DEF_NOT_hg_feature_lock_lockVec_0_held_notEmpty___d2; - tUInt8 DEF_NOT_hg_feature_lock_lockVec_1_held_notEmpty___d8; - tUInt8 DEF_NOT_hg_feature_lock_lockVec_2_held_notEmpty__2___d13; - tUInt8 DEF_NOT_hg_feature_lock_lockVec_3_held_notEmpty__7___d18; - tUInt8 DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226; - tUInt8 DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65; - tUInt8 DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294; - tUInt8 DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179; - tUInt8 DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d300; - tUInt8 DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d302; - tUInt8 DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d304; - tUInt8 DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d296; - tUInt8 DEF_NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d74; - tUInt8 DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298; - tUInt8 DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d297; - tUInt8 DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194; - tUInt8 DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d207; - tUInt8 DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d206; - tUInt8 DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d193; - - /* Local definitions */ - private: - tUInt8 DEF_hg_outputQueue_first____d352; - tUInt32 DEF__0_CONCAT_DONTCARE___d6; - - /* Rules */ - public: - void RL_hg_feature_lock_freelock(); - void RL_hg_feature_lock_freelock_1(); - void RL_hg_feature_lock_freelock_2(); - void RL_hg_feature_lock_freelock_3(); - void RL_hg_weight_lock_freelock(); - void RL_hg_weight_lock_freelock_1(); - void RL_hg_weight_lock_freelock_2(); - void RL_hg_weight_lock_freelock_3(); - void RL_hg_h_lock_freelock(); - void RL_hg_h_lock_freelock_1(); - void RL_hg_h_lock_freelock_2(); - void RL_hg_h_lock_freelock_3(); - void RL_hg_s_Start_execute(); - void RL_hg_s_Stage__1_execute(); - void RL_hg_s_Stage__2_execute(); - void RL_hg_s_Stage__3_execute(); - - /* Methods */ - public: - tUInt8 METH__inthg_req(tUInt32 ARG__inthg_req_counter); - tUInt8 METH_RDY__inthg_req(); - void METH__inthg_resp(); - tUInt8 METH_RDY__inthg_resp(); - tUInt8 METH__inthg_checkHandle(tUInt8 ARG__inthg_checkHandle_handle); - tUInt8 METH_RDY__inthg_checkHandle(); - tUInt8 METH__inthg_peek(); - tUInt8 METH_RDY__inthg_peek(); - - /* Reset routines */ - public: - void reset_RST_N(tUInt8 ARG_rst_in); - - /* Static handles to reset routines */ - public: - - /* Pointers to reset fns in parent module for asserting output resets */ - private: - - /* Functions for the parent module to register its reset fns */ - public: - - /* Functions to set the elaborated clock id */ - public: - void set_clk_0(char const *s); - - /* State dumping routine */ - public: - void dump_state(unsigned int indent); - - /* VCD dumping routines */ - public: - unsigned int dump_VCD_defs(unsigned int levels); - void dump_VCD(tVCDDumpType dt, unsigned int levels, MOD_mkCircuit &backing); - void vcd_defs(tVCDDumpType dt, MOD_mkCircuit &backing); - void vcd_prims(tVCDDumpType dt, MOD_mkCircuit &backing); -}; - -#endif /* ifndef __mkCircuit_h__ */ diff --git a/src/main/scala/pipedsl/testOutputs/Circuit_sim/mkCircuit.o b/src/main/scala/pipedsl/testOutputs/Circuit_sim/mkCircuit.o deleted file mode 100644 index cbd5ee2a61323d0ec952082d06aa3a7f5f5d7454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104596 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 diff --git a/src/main/scala/pipedsl/testOutputs/Circuit_sim/mkTB.cxx b/src/main/scala/pipedsl/testOutputs/Circuit_sim/mkTB.cxx deleted file mode 100644 index a46ff9c0..00000000 --- a/src/main/scala/pipedsl/testOutputs/Circuit_sim/mkTB.cxx +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Generated by Bluespec Compiler - * - */ -#include "bluesim_primitives.h" -#include "mkTB.h" - - -/* Constructor */ -MOD_mkTB::MOD_mkTB(tSimStateHdl simHdl, char const *name, Module *parent) - : Module(simHdl, name, parent), - __clk_handle_0(BAD_CLOCK_HANDLE), - INST_m(simHdl, "m", this), - INST_reg_unused_0(simHdl, "reg_unused_0", this, 3u, (tUInt8)0u, (tUInt8)0u), - INST_started(simHdl, "started", this, 1u, (tUInt8)0u, (tUInt8)0u), - PORT_RST_N((tUInt8)1u) -{ - symbol_count = 5u; - symbols = new tSym[symbol_count]; - init_symbols_0(); -} - - -/* Symbol init fns */ - -void MOD_mkTB::init_symbols_0() -{ - init_symbol(&symbols[0u], "m", SYM_MODULE, &INST_m); - init_symbol(&symbols[1u], "RL_initTB", SYM_RULE); - init_symbol(&symbols[2u], "RL_stopTB", SYM_RULE); - init_symbol(&symbols[3u], "reg_unused_0", SYM_MODULE, &INST_reg_unused_0); - init_symbol(&symbols[4u], "started", SYM_MODULE, &INST_started); -} - - -/* Rule actions */ - -void MOD_mkTB::RL_initTB() -{ - tUInt8 DEF_m__inthg_req___d5; - tUInt8 DEF_AVMeth_m__inthg_req; - DEF_AVMeth_m__inthg_req = INST_m.METH__inthg_req(0u); - DEF_m__inthg_req___d5 = DEF_AVMeth_m__inthg_req; - INST_reg_unused_0.METH_write(DEF_m__inthg_req___d5); - INST_started.METH_write((tUInt8)1u); -} - -void MOD_mkTB::RL_stopTB() -{ - if (!(PORT_RST_N == (tUInt8)0u)) - dollar_finish(sim_hdl, "32", 1u); -} - - -/* Methods */ - - -/* Reset routines */ - -void MOD_mkTB::reset_RST_N(tUInt8 ARG_rst_in) -{ - PORT_RST_N = ARG_rst_in; - INST_started.reset_RST(ARG_rst_in); - INST_reg_unused_0.reset_RST(ARG_rst_in); - INST_m.reset_RST_N(ARG_rst_in); -} - - -/* Static handles to reset routines */ - - -/* Functions for the parent module to register its reset fns */ - - -/* Functions to set the elaborated clock id */ - -void MOD_mkTB::set_clk_0(char const *s) -{ - __clk_handle_0 = bk_get_or_define_clock(sim_hdl, s); -} - - -/* State dumping routine */ -void MOD_mkTB::dump_state(unsigned int indent) -{ - printf("%*s%s:\n", indent, "", inst_name); - INST_m.dump_state(indent + 2u); - INST_reg_unused_0.dump_state(indent + 2u); - INST_started.dump_state(indent + 2u); -} - - -/* VCD dumping routines */ - -unsigned int MOD_mkTB::dump_VCD_defs(unsigned int levels) -{ - vcd_write_scope_start(sim_hdl, inst_name); - vcd_num = vcd_reserve_ids(sim_hdl, 3u); - unsigned int num = vcd_num; - for (unsigned int clk = 0u; clk < bk_num_clocks(sim_hdl); ++clk) - vcd_add_clock_def(sim_hdl, this, bk_clock_name(sim_hdl, clk), bk_clock_vcd_num(sim_hdl, clk)); - vcd_write_def(sim_hdl, bk_clock_vcd_num(sim_hdl, __clk_handle_0), "CLK", 1u); - vcd_write_def(sim_hdl, num++, "RST_N", 1u); - num = INST_reg_unused_0.dump_VCD_defs(num); - num = INST_started.dump_VCD_defs(num); - if (levels != 1u) - { - unsigned int l = levels == 0u ? 0u : levels - 1u; - num = INST_m.dump_VCD_defs(l); - } - vcd_write_scope_end(sim_hdl); - return num; -} - -void MOD_mkTB::dump_VCD(tVCDDumpType dt, unsigned int levels, MOD_mkTB &backing) -{ - vcd_defs(dt, backing); - vcd_prims(dt, backing); - if (levels != 1u) - vcd_submodules(dt, levels - 1u, backing); -} - -void MOD_mkTB::vcd_defs(tVCDDumpType dt, MOD_mkTB &backing) -{ - unsigned int num = vcd_num; - if (dt == VCD_DUMP_XS) - { - vcd_write_x(sim_hdl, num++, 1u); - } - else - if (dt == VCD_DUMP_CHANGES) - { - if ((backing.PORT_RST_N) != PORT_RST_N) - { - vcd_write_val(sim_hdl, num, PORT_RST_N, 1u); - backing.PORT_RST_N = PORT_RST_N; - } - ++num; - } - else - { - vcd_write_val(sim_hdl, num++, PORT_RST_N, 1u); - backing.PORT_RST_N = PORT_RST_N; - } -} - -void MOD_mkTB::vcd_prims(tVCDDumpType dt, MOD_mkTB &backing) -{ - INST_reg_unused_0.dump_VCD(dt, backing.INST_reg_unused_0); - INST_started.dump_VCD(dt, backing.INST_started); -} - -void MOD_mkTB::vcd_submodules(tVCDDumpType dt, unsigned int levels, MOD_mkTB &backing) -{ - INST_m.dump_VCD(dt, levels, backing.INST_m); -} diff --git a/src/main/scala/pipedsl/testOutputs/Circuit_sim/mkTB.h b/src/main/scala/pipedsl/testOutputs/Circuit_sim/mkTB.h deleted file mode 100644 index 8857b671..00000000 --- a/src/main/scala/pipedsl/testOutputs/Circuit_sim/mkTB.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Generated by Bluespec Compiler - * - */ - -/* Generation options: */ -#ifndef __mkTB_h__ -#define __mkTB_h__ - -#include "bluesim_types.h" -#include "bs_module.h" -#include "bluesim_primitives.h" -#include "bs_vcd.h" -#include "mkCircuit.h" - - -/* Class declaration for the mkTB module */ -class MOD_mkTB : public Module { - - /* Clock handles */ - private: - tClock __clk_handle_0; - - /* Clock gate handles */ - public: - tUInt8 *clk_gate[0]; - - /* Instantiation parameters */ - public: - - /* Module state */ - public: - MOD_mkCircuit INST_m; - MOD_Reg INST_reg_unused_0; - MOD_Reg INST_started; - - /* Constructor */ - public: - MOD_mkTB(tSimStateHdl simHdl, char const *name, Module *parent); - - /* Symbol init methods */ - private: - void init_symbols_0(); - - /* Reset signal definitions */ - private: - tUInt8 PORT_RST_N; - - /* Port definitions */ - public: - - /* Publicly accessible definitions */ - public: - - /* Local definitions */ - private: - - /* Rules */ - public: - void RL_initTB(); - void RL_stopTB(); - - /* Methods */ - public: - - /* Reset routines */ - public: - void reset_RST_N(tUInt8 ARG_rst_in); - - /* Static handles to reset routines */ - public: - - /* Pointers to reset fns in parent module for asserting output resets */ - private: - - /* Functions for the parent module to register its reset fns */ - public: - - /* Functions to set the elaborated clock id */ - public: - void set_clk_0(char const *s); - - /* State dumping routine */ - public: - void dump_state(unsigned int indent); - - /* VCD dumping routines */ - public: - unsigned int dump_VCD_defs(unsigned int levels); - void dump_VCD(tVCDDumpType dt, unsigned int levels, MOD_mkTB &backing); - void vcd_defs(tVCDDumpType dt, MOD_mkTB &backing); - void vcd_prims(tVCDDumpType dt, MOD_mkTB &backing); - void vcd_submodules(tVCDDumpType dt, unsigned int levels, MOD_mkTB &backing); -}; - -#endif /* ifndef __mkTB_h__ */ diff --git a/src/main/scala/pipedsl/testOutputs/Circuit_sim/mkTB.o b/src/main/scala/pipedsl/testOutputs/Circuit_sim/mkTB.o deleted file mode 100644 index aaed6a337de2435a9031360c809d18a1c095b9e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16760 zcmeHPeRverxj&m^VELToJA71v4K$U+W)UP%xy_oSY$U;yAmvtZ3CWTKl8`357>d0{ z*MSVf3eSaBTlIprN^3u)r6nlH#v7YpdzDx%ptcfw+d>Qqwie>YHTU< z4-N|>rl5~PB#uBJ6l@B~bBUK1tXv+))>%)QJfnD&%dzW(*e(-mmKs?G0+r?EfnZa4 zus#$Bm8}T`662jqlXhvGSH)+A;8S~;f%8D1yfM^JU02DBGu}w}({YOw;{KU@!onFF z@ix@fmz9SC;kvu3>nZ|)qI|o@N{(kG)rEL;4Kn5nF;N;OgbW0NRe`k)Wwk-6bmq5` z^XX%+uFuJMrx1_2Z-fw4(o>dmAX4!$FReOUq~Jpbxf9 zM3H{UufJ8K_m~F7(dSyG2+>h+LUg8>wZrTXnMI3F6zToa)OU!IWQQkCnGPpy4!fnp z$s+xXIG^3=sZ81{d(uK?Qc{S8;#MN(GYJcQ~)Z2Y`_*VJu^aWP6 z`}Ouhl z-ZE$`z^IjssM8$b(PIW(eV9CEGeL*BZ(r2|dn7DM%r?j-O~;)|`Ag+m)xxqpkyF1n0TPFjB3OXWY z9F2i`ei7##5i@z&7?-MTMG7!`$TI8QWJIV{kv>-_Khl>J9=9#x z25vFiAS-ZjEF(faLY6sX`K4`9PaP+4+zbr469ppD|b^D`>j$T8v#G)7p{Ug3>{n5?YzDP$>zAi7U z-!OI}@1p3;$4$F4P{gg(gNNy28V7!X(yTg0bEkO*&u;S62f5G%Hx8trjJweNN_VT- zr1-_P#>2q;SfYntE7U*n8+W;BXqW*Cjl0u5M+as&pWf-y^V3sJ+B7IOYSKMgTPV-_ zCdPM>eqMh|I_e#!5kn}7^uHA8f7PEi)%}<^5IG)VL3_i0`ixL|1}se$bM3vKp*Eh^ zJD#EYO@<{esMbN1uYYP+97(6abacSfr{ABx7fhkCJDvKu(2y2BV|zOFsoud6kEGLJ zO?14#j?~TMNEYNsJR=q{kTs*;nP3x>mM6;rTQYDq=Y7-bcHi8MS09A$Bfv!a9f0KLSN2S z5~10oRu6Xdj*ut2h>dp)8@HIo7~=VK89p*2`6&Nk*6?We^}kHFLLsIeX_v46wMhTa z(hnLwJb(FCAommc1(|oGFC{byw`LeOAZLBM?@l@Pth~4UGkKfF6rvsD%bbsF^|jIk zrYZ|irK;_YPb$W)f%|5gIV<{Fw#fU5t`%;7x}wIefjgz=QTVduLenxd6;?E)41+?U zhs{n)h_=m~oqP+o(0vzLWgM^vHz+t=m|PB|9^7T7V8$C9EWsPL=DlnNVOt{53=(FC ztTo3E76RG+$n)9%=>9G(Da3jux+en*ZNJf4PeMQK{jC|e(1`tjh=H$Zs4PWVf}$`Q zJB4MNrR>6a+zZMUo6?i0G-Az(L^O7GQan^Q&J#jCWK-^RD*ZNP7uK;hPa~G=wEh7s ztd#dAT1R6mZORg-(rr`joZzU37SOheqp>PjSoN$T@Q!+Ap3CYw?uDveluB7qTv z1-;eSE}SQXYOyJsoyr`Wvdxp=X~eRf)(^qLs%K}Sbu{L;DRZ65J~i&yjB{ItM(jc& zfe~c0E^#W|Hl=VX4~>r3lZ*3&diEz07(q5`k5hSUR6JB0&TXNhu_l{RBr0)z5(!+N zk?~MnI8O-GVpBFdmDx6BhEsV8dqeATbm2T9Y_m<-_B)mIc*F|ThaI*pR5Z39gr&?$RN^}!k%-1THfy(2*@j(}73vVq6Y8nA zDf?0qlt!$|Y25`2E7Y+>YfND_Ws_5xZBx>=+?Iq9%WzungoRa4OQJQdk4>55RGv+W zdv@d8R!=mx)23{3DsybgY^SmtYga2FdK#7()~0N6Dsu;v(LIN-kSR1;>6uHycYIEQ z)4+FpG>~0r+|`s|x}VljgO&sI$b)vX@y$e`-qG_*%pZ_eyq+g$KH<$e>DM{*Uvuau zOFb4L+$vT3JLZlaD&P;EyF%64h^IpG+<&TO5Ko2Vxzkl`1@Tl!p0AXu%^;o%$@Aq^ zwR4zDdZ^$y^0KR1EAdoFo=29deVuqJB+tW9)ovo53d!>rR<)tTQz3c26IAVa%t}2} zaC~_~sM>bosgOM1bE@`L;;E24-?^$bhIlGCzPv|O?f00OdZ>^*&k?G&k9aC1&ohmx zl@U(`$9J2fLDe#er$X{Pr>WW{81zsfd7c?n?PtVOA$gu(Rc$@-R7jp@X;qs^JQb4X zxn9*yV-D+~Lh}3tp=wVNPle?9TSe8v#8V-8{wh+nT;i#aJb!#NYy%sr$X|)lu|XCTYISB_;N+1 zYDeuCS%nw(-XaO!wS_15P6J_0&6rBBZs*RT8}aoRySkmTdgAJKF22;kGmNX- zIXN(*v8&s;gn@B&J7*1ytJ^uNC;p#r=gel{rMD^L?^tbXhTb&WUd~!b;7vn(gE!!A zy}yjVPb$Q#o4>@KEL-3dev@jRIL{+J@ln- zf8SMFQmnsRpm*Y(h1vFeeRF2yn;w^M+mL6l?h}#MMN3|`zGSYyGtX~2AKaXQ_f4j; zKe{=?Xv~zIc5w6Ot@EO2Bb{3vLhnDM{iQCyo|m(>GcQ+&&b(>V!Wfopa<2~+-dvB` zjcWb6+gOtM{M#v!7n5|qyGXD1#5dgSwyR=Q5x-=J*8gypYo^G+k2@w@OcMTC?o+578cS6eb3$5H}h|6j?j_T;I<@0%uWbiY4UtWdhAibm!5RPmTg zX`PBUV#=PW;!T&bb*j*ll=D->lS#_SDWW||iA@pjCn@`;hzF9D9aF@Ql9fx7#p}t+ z>B-_^veG$O>`GCdo-FpKC=X5+FQq8`sp6d!B**ZbII$SwFUferE zIXPbZ#|R}hUK}2w>>H15pR!}T*fLVNG){bPq;h(kcx9y0IZnJcQh9ouFh(g4juX#} zQu@b=6Qh(fW5wS_DaXf($3`oyW5v}&C$x%v7&FZa(;~Xma3c_BYv(bu`%Mf zs_Yvh&Z)|tF`{1`zIBZFuE*W)5l?xBpYe!adEBQx;w2AWW4_~YU-G!Njd4FX#-&Yj z|1{I}#I%Ri?o8LqvxgtdboI=3} zT!Irc8CmS5n+yly)4|pfP`RJ=cbLk-{vK=!>6j_SAb)y#M@K(CWv=AGdTd(hn1;{g z@>|XNpF=-pM9LulG;Fr%xCa`ve~^AJHv4q^44=#Sug1d$I%@HmA(969cd>pnG?&wN zyG?i6anmu#U*I7P9qX}0Mf-gcp}jNYS^ab=AAz`B{+=|ce;vZ^f9_hzW5;bCu5T<8 zt|pJmGjgbVC$dNfOMP1Pd-`Qne?MJ+^YD%KY)Q%+HRR@qd1c5hpA>(Pc03O7dXw!; zCmF8>=Vv({jR*6v>}>INLy^YucwAgI-VxYkupNyL^RVK5Iifs}vLl)D`x7bNlKD}a z%)_$ddNVDXf1Ca7K14((DVEk*w&oKT8<3}LL&tU!@=Ia=*Vf+=w1&rrHlHX^UpTztS z=KqeLa!?*Ukd((MNV4x_{xI`TG5;Orqs-sUxSnxVE^0@_L#1=NQw^SICZjc0>Bzj3bcb*TDQ*=5J$M$T){_CgZ7){&^BUt#jH?*m!FUNI`7LDrdgedFcno9uK|0m{0hZ~M z&woP_KFPR)@w1G7$oNsl+aal*&CG9L{!Yfr82cE{W1J32e&d)Q%KSx4B2@o7G@0Pv z>x^Gwd<2sGe#HD9<{w~uALFkx4l-U2Nq%|E&u4xX<0*`XF@6}Y1ZaMG0Fv_A%(#y6 z?JNsf`XDJ^`f&!$L)S1rk$Hvrck#-C;=K(?_Far$V0?h_KE~f>yp8cD#l&t?8B-QgKB*pnP^GBKg3FF5Y?__*G<3`4nj8`zeh4BK$S&XMaQavM> z?;k1ae-D!SEp=@pl+U8Q%>_e(RYJFu#=X&5XT_XEGko*vVFrK{OD!# zb&&K68scM&4={e5@wXXkkmMI)zKZ#;GG4-XA>%oWXF$@t@*eg>pMyLGNnb6Gu)LM! zEJ!Q`vs^4&vA-g_ZIHwlLz4d#NSYG*v410d7bNMoLDG`y-ypHK$XW?WUlm?R`YN5y zxDWe6!heAz{p*mlE_{jcQO2#1bD)0=avtQjAZdxDF;6dfy});}z6g@yE`r2TF>5sB ze8^9*YMuf44&;rHuR;?4BJ-`x?}MZ~z61GL=ym4rVV-`vK>DSSH$eYI$aKgVkhFA4 zX89zHXbE!<%P&CES5!JA{!M7Z9$*&mlaSaeWIYHu8}i>FzW}L2;^9TsMo6+>&A62D zBF5J<7sIWk~uyqP+~QgYn?Q9CyEfM9Nt|X8e6f8i%_W8;pw~DW64< z6z_V**DzKY(+->T?+a=FM@Yi2GHzr1OUUaH?_o$>qO1t>>liO%yZ|x-di0GM2YqPn z1Nu-8nmFVFWVR5ayCLy!NE^#Tkfh%aN&3CaH?v&LGM8lNo-QorIz}*-2<<`M)6w3YtUm|L zshTFE0PJ|V1JgLR>n|XV9ba_l8yxs|4!pxrf2{*gcEsQB&~HKe?Dc<&R@m`*2mZMu z-b_cl#SXpUz%=jK9f2{*!?oZHnIq+CVzULkFed5p`b@-oj zV9M2=?~@K3bi|{1#%?bHYt{$qHr$0jfc;u&XhA60P+MJB77A`8qN1im$}%aJ<`mzW zAE;fw{N@D%4}S|xi$sll7|a^)4bmyEx}iK=9m=1>{EfvMD#A6v0Xz`fJC`0S2O2lk zuGvu27|14jN-|scgS(sw?mi)H!DKjb$~P)|s#(Tw5O)fL^by@{+ls(oMA`OUkQCHk!suy(&)`Z>R{?1Vh2V8Z)&5HuQQap}QKYp=l~v5Gt*%Ee)Yt*O_6wH^jB5*{-jW243kJ zuB!-!N+h>*K382>RggEQz~+PmOSm`JEnC77=1~<5!Ny?2#$cejqS0nQCf|b=(BKw*e{9QZW(g=Q={9Es3!NxHDP@8TNdH3L!0YobYnsCJt zW|}$rKhJxG;pm9@kId%S?ikrBv!iV7!az%mw}37{dChuE5rcHzxztIG;Wf49EYn!v zofE=P%*T*izNtRAZdqyIaxKZR#_W~s2Ri8gZfRaFjDT8a5>^iJn3S`5vm|C~8S+g& w_}ZW`i}Uhq|J^`M(0k)xYA%`_sBCHq)CU_HH`JBYREIVNHf9ep#KP=<0bDt;>i_@% diff --git a/src/main/scala/pipedsl/testOutputs/Circuit_sim/model_mkTB.cxx b/src/main/scala/pipedsl/testOutputs/Circuit_sim/model_mkTB.cxx deleted file mode 100644 index 194dea26..00000000 --- a/src/main/scala/pipedsl/testOutputs/Circuit_sim/model_mkTB.cxx +++ /dev/null @@ -1,565 +0,0 @@ -/* - * Generated by Bluespec Compiler - * - */ -#include "bluesim_primitives.h" -#include "model_mkTB.h" - -#include -#include -#include "bluesim_kernel_api.h" -#include "bs_vcd.h" -#include "bs_reset.h" - - -/* Constructor */ -MODEL_mkTB::MODEL_mkTB() -{ - mkTB_instance = NULL; -} - -/* Function for creating a new model */ -void * new_MODEL_mkTB() -{ - MODEL_mkTB *model = new MODEL_mkTB(); - return (void *)(model); -} - -/* Schedule functions */ - -static void schedule_posedge_CLK(tSimStateHdl simHdl, void *instance_ptr) - { - MOD_mkTB &INST_top = *((MOD_mkTB *)(instance_ptr)); - tUInt8 DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_1_BIT_10_0_4_OR_N_ETC___d100; - tUInt8 DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_1_9_BIT_10_0_35_OR_ETC___d141; - tUInt8 DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_0_BITS_9_TO_0_4_EQ_hg_ETC___d85; - tUInt8 DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_0_4_BITS_9_TO_0_25_EQ__ETC___d126; - tUInt8 DEF_INST_top_INST_m_DEF_x__h7932; - tUInt8 DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_weight_lock_lockVec_0_held_notE_ETC___d149; - tUInt8 DEF_INST_top_INST_m_DEF_x__h7468; - tUInt8 DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_feature_lock_lockVec_0_held_not_ETC___d108; - tUInt8 DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_h_lock_lockVec_0_held_notEmpty__ETC___d229; - tUInt32 DEF_INST_top_INST_m_DEF_b__h7212; - tUInt32 DEF_INST_top_INST_m_DEF_b__h7182; - tUInt32 DEF_INST_top_INST_m_DEF_b__h7243; - tUInt32 DEF_INST_top_INST_m_DEF_b__h7274; - tUInt32 DEF_INST_top_INST_m_DEF_b__h7646; - tUInt32 DEF_INST_top_INST_m_DEF_b__h7676; - tUInt32 DEF_INST_top_INST_m_DEF_b__h7707; - tUInt32 DEF_INST_top_INST_m_DEF_b__h7738; - tUInt8 DEF_INST_top_INST_m_DEF_CASE_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_ETC___d216; - tUInt8 DEF_INST_top_INST_m_DEF_CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d205; - tUInt8 DEF_INST_top_INST_m_DEF_CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d313; - tUInt8 DEF_INST_top_INST_m_DEF_hg_h_lock_lockVec_0_held_i_notFull____d201; - tUInt8 DEF_INST_top_INST_m_DEF_hg_h_lock_lockVec_1_held_i_notFull____d202; - tUInt8 DEF_INST_top_INST_m_DEF_hg_h_lock_lockVec_2_held_i_notFull____d203; - tUInt8 DEF_INST_top_INST_m_DEF_hg_h_lock_lockVec_3_held_i_notFull____d204; - tUInt8 DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_0_BIT_10___d97; - tUInt8 DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_1_BIT_10_0___d94; - tUInt8 DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_1_BITS_9_TO_0_1_EQ_hg_ETC___d82; - tUInt8 DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_2_4_BITS_9_TO_0_8_EQ__ETC___d79; - tUInt8 DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_2_4_BIT_10_5___d91; - tUInt8 DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_3_9_BIT_10_0_AND_hg_f_ETC___d77; - tUInt8 DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_1_BIT_10_0_AND_hg_fea_ETC___d83; - tUInt8 DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_2_4_BIT_10_5_AND_hg_f_ETC___d80; - tUInt8 DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_0_BIT_10_7_OR_NOT_ETC___d99; - tUInt8 DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_0_4_BIT_10_5___d138; - tUInt8 DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_1_9_BIT_10_0___d135; - tUInt8 DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_1_9_BITS_9_TO_0_22_EQ__ETC___d123; - tUInt8 DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_2_4_BITS_9_TO_0_19_EQ__ETC___d120; - tUInt8 DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_2_4_BIT_10_5___d132; - tUInt8 DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_3_9_BIT_10_0_AND_hg_we_ETC___d118; - tUInt8 DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_1_9_BIT_10_0_AND_hg_we_ETC___d124; - tUInt8 DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_2_4_BIT_10_5_AND_hg_we_ETC___d121; - tUInt8 DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_0_4_BIT_10_5_38_OR_ETC___d140; - tUInt8 DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_feature_lock_freelock; - tUInt8 DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_feature_lock_freelock; - tUInt8 DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_feature_lock_freelock_1; - tUInt8 DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_feature_lock_freelock_1; - tUInt8 DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_feature_lock_freelock_2; - tUInt8 DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_feature_lock_freelock_2; - tUInt8 DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_feature_lock_freelock_3; - tUInt8 DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_feature_lock_freelock_3; - tUInt8 DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_weight_lock_freelock; - tUInt8 DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_weight_lock_freelock; - tUInt8 DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_weight_lock_freelock_1; - tUInt8 DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_weight_lock_freelock_1; - tUInt8 DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_weight_lock_freelock_2; - tUInt8 DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_weight_lock_freelock_2; - tUInt8 DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_weight_lock_freelock_3; - tUInt8 DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_weight_lock_freelock_3; - tUInt8 DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_h_lock_freelock; - tUInt8 DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_h_lock_freelock; - tUInt8 DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_h_lock_freelock_1; - tUInt8 DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_h_lock_freelock_1; - tUInt8 DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_h_lock_freelock_2; - tUInt8 DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_h_lock_freelock_2; - tUInt8 DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_h_lock_freelock_3; - tUInt8 DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_h_lock_freelock_3; - tUInt8 DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_s_Start_execute; - tUInt8 DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Start_execute; - tUInt8 DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_s_Stage__1_execute; - tUInt8 DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__1_execute; - tUInt8 DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_s_Stage__2_execute; - tUInt8 DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__2_execute; - tUInt8 DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_s_Stage__3_execute; - tUInt8 DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__3_execute; - tUInt8 DEF_INST_top_DEF_started__h160; - tUInt8 DEF_INST_top_DEF_b__h231; - tUInt8 DEF_INST_top_DEF_CAN_FIRE_RL_initTB; - tUInt8 DEF_INST_top_DEF_WILL_FIRE_RL_initTB; - tUInt8 DEF_INST_top_DEF_CAN_FIRE_RL_stopTB; - tUInt8 DEF_INST_top_DEF_WILL_FIRE_RL_stopTB; - INST_top.INST_m.PORT_EN__inthg_req = (tUInt8)0u; - INST_top.INST_m.DEF_WILL_FIRE__inthg_req = (tUInt8)0u; - DEF_INST_top_DEF_started__h160 = INST_top.INST_started.METH_read(); - DEF_INST_top_DEF_CAN_FIRE_RL_initTB = INST_top.INST_m.METH_RDY__inthg_req() && !DEF_INST_top_DEF_started__h160; - DEF_INST_top_DEF_WILL_FIRE_RL_initTB = DEF_INST_top_DEF_CAN_FIRE_RL_initTB; - DEF_INST_top_DEF_b__h231 = INST_top.INST_reg_unused_0.METH_read(); - DEF_INST_top_DEF_CAN_FIRE_RL_stopTB = INST_top.INST_m.METH_RDY__inthg_checkHandle() && INST_top.INST_m.METH__inthg_checkHandle(DEF_INST_top_DEF_b__h231); - DEF_INST_top_DEF_WILL_FIRE_RL_stopTB = DEF_INST_top_DEF_CAN_FIRE_RL_stopTB; - DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_feature_lock_freelock = (tUInt8)1u; - DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_feature_lock_freelock = DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_feature_lock_freelock; - DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_feature_lock_freelock_1 = (tUInt8)1u; - DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_feature_lock_freelock_1 = DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_feature_lock_freelock_1; - DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_feature_lock_freelock_2 = (tUInt8)1u; - DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_feature_lock_freelock_2 = DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_feature_lock_freelock_2; - DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_feature_lock_freelock_3 = (tUInt8)1u; - DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_feature_lock_freelock_3 = DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_feature_lock_freelock_3; - INST_top.INST_m.DEF_hg_fifo_Start_TO_Stage__1_first____d168 = INST_top.INST_m.INST_hg_fifo_Start_TO_Stage__1.METH_first(); - INST_top.INST_m.DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169 = (tUInt32)((INST_top.INST_m.DEF_hg_fifo_Start_TO_Stage__1_first____d168) >> 35u); - INST_top.INST_m.DEF_hg_h_lock_entryVec_3___d59 = INST_top.INST_m.INST_hg_h_lock_entryVec_3.METH_read(); - INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BIT_10___d60 = (tUInt8)((INST_top.INST_m.DEF_hg_h_lock_entryVec_3___d59) >> 10u); - INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209 = !(INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BIT_10___d60); - INST_top.INST_m.DEF_hg_h_lock_entryVec_1___d49 = INST_top.INST_m.INST_hg_h_lock_entryVec_1.METH_read(); - INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BIT_10___d50 = (tUInt8)((INST_top.INST_m.DEF_hg_h_lock_entryVec_1___d49) >> 10u); - INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187 = !(INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BIT_10___d50); - INST_top.INST_m.DEF_hg_h_lock_entryVec_2___d54 = INST_top.INST_m.INST_hg_h_lock_entryVec_2.METH_read(); - INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BIT_10___d55 = (tUInt8)((INST_top.INST_m.DEF_hg_h_lock_entryVec_2___d54) >> 10u); - INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184 = !(INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BIT_10___d55); - INST_top.INST_m.DEF_hg_h_lock_entryVec_0___d44 = INST_top.INST_m.INST_hg_h_lock_entryVec_0.METH_read(); - INST_top.INST_m.DEF_hg_h_lock_entryVec_0_4_BIT_10___d45 = (tUInt8)((INST_top.INST_m.DEF_hg_h_lock_entryVec_0___d44) >> 10u); - INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190 = !(INST_top.INST_m.DEF_hg_h_lock_entryVec_0_4_BIT_10___d45); - DEF_INST_top_INST_m_DEF_hg_h_lock_lockVec_3_held_i_notFull____d204 = INST_top.INST_m.INST_hg_h_lock_lockVec_3_held.METH_i_notFull(); - DEF_INST_top_INST_m_DEF_hg_h_lock_lockVec_2_held_i_notFull____d203 = INST_top.INST_m.INST_hg_h_lock_lockVec_2_held.METH_i_notFull(); - DEF_INST_top_INST_m_DEF_hg_h_lock_lockVec_1_held_i_notFull____d202 = INST_top.INST_m.INST_hg_h_lock_lockVec_1_held.METH_i_notFull(); - DEF_INST_top_INST_m_DEF_hg_h_lock_lockVec_0_held_i_notFull____d201 = INST_top.INST_m.INST_hg_h_lock_lockVec_0_held.METH_i_notFull(); - INST_top.INST_m.DEF_b__h8511 = (tUInt32)(1023u & (INST_top.INST_m.DEF_hg_h_lock_entryVec_3___d59)); - INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170 = (INST_top.INST_m.DEF_b__h8511) == (INST_top.INST_m.DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169); - INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d171 = INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BIT_10___d60 && INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170; - INST_top.INST_m.DEF_b__h8480 = (tUInt32)(1023u & (INST_top.INST_m.DEF_hg_h_lock_entryVec_2___d54)); - INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173 = (INST_top.INST_m.DEF_b__h8480) == (INST_top.INST_m.DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169); - INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d174 = INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BIT_10___d55 && INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173; - INST_top.INST_m.DEF_b__h8449 = (tUInt32)(1023u & (INST_top.INST_m.DEF_hg_h_lock_entryVec_1___d49)); - INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176 = (INST_top.INST_m.DEF_b__h8449) == (INST_top.INST_m.DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169); - INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d177 = INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BIT_10___d50 && INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176; - INST_top.INST_m.DEF_b__h8408 = (tUInt32)(1023u & (INST_top.INST_m.DEF_hg_h_lock_entryVec_0___d44)); - INST_top.INST_m.DEF_NOT_hg_h_lock_lockVec_0_held_notEmpty__2___d43 = !INST_top.INST_m.INST_hg_h_lock_lockVec_0_held.METH_notEmpty(); - INST_top.INST_m.DEF_NOT_hg_h_lock_lockVec_1_held_notEmpty__7___d48 = !INST_top.INST_m.INST_hg_h_lock_lockVec_1_held.METH_notEmpty(); - INST_top.INST_m.DEF_NOT_hg_h_lock_lockVec_2_held_notEmpty__2___d53 = !INST_top.INST_m.INST_hg_h_lock_lockVec_2_held.METH_notEmpty(); - INST_top.INST_m.DEF_NOT_hg_h_lock_lockVec_3_held_notEmpty__7___d58 = !INST_top.INST_m.INST_hg_h_lock_lockVec_3_held.METH_notEmpty(); - INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226 = INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209 || (INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184 || (INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187 || INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190)); - INST_top.INST_m.DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179 = (INST_top.INST_m.DEF_b__h8408) == (INST_top.INST_m.DEF_hg_fifo_Start_TO_Stage__1_first__68_BITS_44_TO_35___d169); - INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183 = INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d171 || (INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d174 || (INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d177 || (INST_top.INST_m.DEF_hg_h_lock_entryVec_0_4_BIT_10___d45 && INST_top.INST_m.DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179))); - INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d192 = INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190 || !(INST_top.INST_m.DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179); - INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d206 = INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BIT_10___d50 && INST_top.INST_m.DEF_hg_h_lock_entryVec_0_4_BIT_10___d45; - INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d207 = INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BIT_10___d55 && INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d206; - INST_top.INST_m.DEF_x__h9842 = INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d207 && INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209 ? (tUInt8)3u : (INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d206 && INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184 ? (tUInt8)2u : (INST_top.INST_m.DEF_hg_h_lock_entryVec_0_4_BIT_10___d45 && INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187 ? (tUInt8)1u : (tUInt8)0u)); - switch (INST_top.INST_m.DEF_x__h9842) { - case (tUInt8)0u: - DEF_INST_top_INST_m_DEF_CASE_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_ETC___d216 = DEF_INST_top_INST_m_DEF_hg_h_lock_lockVec_0_held_i_notFull____d201; - break; - case (tUInt8)1u: - DEF_INST_top_INST_m_DEF_CASE_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_ETC___d216 = DEF_INST_top_INST_m_DEF_hg_h_lock_lockVec_1_held_i_notFull____d202; - break; - case (tUInt8)2u: - DEF_INST_top_INST_m_DEF_CASE_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_ETC___d216 = DEF_INST_top_INST_m_DEF_hg_h_lock_lockVec_2_held_i_notFull____d203; - break; - case (tUInt8)3u: - DEF_INST_top_INST_m_DEF_CASE_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_ETC___d216 = DEF_INST_top_INST_m_DEF_hg_h_lock_lockVec_3_held_i_notFull____d204; - break; - default: - DEF_INST_top_INST_m_DEF_CASE_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_ETC___d216 = (tUInt8)1u; - } - INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d193 = (INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187 || !(INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176)) && INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d192; - INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194 = (INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184 || !(INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173)) && INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d193; - INST_top.INST_m.DEF_x__h8976 = INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194 && INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d171 ? (tUInt8)3u : (INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d193 && INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d174 ? (tUInt8)2u : (INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d192 && INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d177 ? (tUInt8)1u : (tUInt8)0u)); - switch (INST_top.INST_m.DEF_x__h8976) { - case (tUInt8)0u: - DEF_INST_top_INST_m_DEF_CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d205 = DEF_INST_top_INST_m_DEF_hg_h_lock_lockVec_0_held_i_notFull____d201; - break; - case (tUInt8)1u: - DEF_INST_top_INST_m_DEF_CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d205 = DEF_INST_top_INST_m_DEF_hg_h_lock_lockVec_1_held_i_notFull____d202; - break; - case (tUInt8)2u: - DEF_INST_top_INST_m_DEF_CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d205 = DEF_INST_top_INST_m_DEF_hg_h_lock_lockVec_2_held_i_notFull____d203; - break; - case (tUInt8)3u: - DEF_INST_top_INST_m_DEF_CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d205 = DEF_INST_top_INST_m_DEF_hg_h_lock_lockVec_3_held_i_notFull____d204; - break; - default: - DEF_INST_top_INST_m_DEF_CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d205 = (tUInt8)1u; - } - switch (INST_top.INST_m.DEF_x__h8976) { - case (tUInt8)0u: - DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_h_lock_lockVec_0_held_notEmpty__ETC___d229 = INST_top.INST_m.DEF_NOT_hg_h_lock_lockVec_0_held_notEmpty__2___d43; - break; - case (tUInt8)1u: - DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_h_lock_lockVec_0_held_notEmpty__ETC___d229 = INST_top.INST_m.DEF_NOT_hg_h_lock_lockVec_1_held_notEmpty__7___d48; - break; - case (tUInt8)2u: - DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_h_lock_lockVec_0_held_notEmpty__ETC___d229 = INST_top.INST_m.DEF_NOT_hg_h_lock_lockVec_2_held_notEmpty__2___d53; - break; - case (tUInt8)3u: - DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_h_lock_lockVec_0_held_notEmpty__ETC___d229 = INST_top.INST_m.DEF_NOT_hg_h_lock_lockVec_3_held_notEmpty__7___d58; - break; - default: - DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_h_lock_lockVec_0_held_notEmpty__ETC___d229 = (tUInt8)0u; - } - DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_s_Stage__1_execute = (INST_top.INST_m.INST_hg_fifo_Start_TO_Stage__1.METH_i_notEmpty() && (INST_top.INST_m.INST_hg_fifo_Stage__1_TO_Stage__2.METH_i_notFull() && (INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183 ? DEF_INST_top_INST_m_DEF_CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d205 : (INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BIT_10___d60 && INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d207) || DEF_INST_top_INST_m_DEF_CASE_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_ETC___d216))) && (((INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170 || (INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173 || (INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176 || INST_top.INST_m.DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179))) || INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226) && (INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d183 ? DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_h_lock_lockVec_0_held_notEmpty__ETC___d229 : INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226)); - DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__1_execute = DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_s_Stage__1_execute; - INST_top.INST_m.DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283 = INST_top.INST_m.INST_hg_fifo_Stage__1_TO_Stage__2.METH_first(); - INST_top.INST_m.DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284 = (tUInt32)((INST_top.INST_m.DEF_hg_fifo_Stage__1_TO_Stage__2_first____d283) >> 38u); - INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285 = (INST_top.INST_m.DEF_b__h8511) == (INST_top.INST_m.DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284); - INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288 = (INST_top.INST_m.DEF_b__h8480) == (INST_top.INST_m.DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284); - INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291 = (INST_top.INST_m.DEF_b__h8449) == (INST_top.INST_m.DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284); - INST_top.INST_m.DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294 = (INST_top.INST_m.DEF_b__h8408) == (INST_top.INST_m.DEF_hg_fifo_Stage__1_TO_Stage__2_first__83_BITS_47_ETC___d284); - INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d302 = INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BIT_10___d55 && INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288; - INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d300 = INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BIT_10___d60 && INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285; - INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d304 = INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BIT_10___d50 && INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291; - INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d296 = INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5___d190 || !(INST_top.INST_m.DEF_hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294); - INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d297 = (INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0___d187 || !(INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291)) && INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d296; - INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298 = (INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5___d184 || !(INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288)) && INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d297; - INST_top.INST_m.DEF_x__h10519 = INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298 && INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lock__ETC___d300 ? (tUInt8)3u : (INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d297 && INST_top.INST_m.DEF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d302 ? (tUInt8)2u : (INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_NOT__ETC___d296 && INST_top.INST_m.DEF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lock__ETC___d304 ? (tUInt8)1u : (tUInt8)0u)); - switch (INST_top.INST_m.DEF_x__h10519) { - case (tUInt8)0u: - DEF_INST_top_INST_m_DEF_CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d313 = INST_top.INST_m.INST_hg_h_lock_lockVec_0_held.METH_i_notEmpty(); - break; - case (tUInt8)1u: - DEF_INST_top_INST_m_DEF_CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d313 = INST_top.INST_m.INST_hg_h_lock_lockVec_1_held.METH_i_notEmpty(); - break; - case (tUInt8)2u: - DEF_INST_top_INST_m_DEF_CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d313 = INST_top.INST_m.INST_hg_h_lock_lockVec_2_held.METH_i_notEmpty(); - break; - case (tUInt8)3u: - DEF_INST_top_INST_m_DEF_CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d313 = INST_top.INST_m.INST_hg_h_lock_lockVec_3_held.METH_i_notEmpty(); - break; - default: - DEF_INST_top_INST_m_DEF_CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d313 = (tUInt8)1u; - } - DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_s_Stage__2_execute = INST_top.INST_m.INST_hg_fifo_Stage__1_TO_Stage__2.METH_i_notEmpty() && (INST_top.INST_m.INST_hg_fifo_Stage__2_TO_Stage__3.METH_i_notFull() && (((INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_3_9_BIT_10_0___d209 || !(INST_top.INST_m.DEF_hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285)) && INST_top.INST_m.DEF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298) || DEF_INST_top_INST_m_DEF_CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d313)); - DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__2_execute = DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_s_Stage__2_execute && !DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__1_execute; - DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_h_lock_freelock = (tUInt8)1u; - DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_h_lock_freelock = (DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_h_lock_freelock && !DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__2_execute) && !DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__1_execute; - DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_h_lock_freelock_1 = (tUInt8)1u; - DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_h_lock_freelock_1 = (DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_h_lock_freelock_1 && !DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__2_execute) && !DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__1_execute; - DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_h_lock_freelock_2 = (tUInt8)1u; - DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_h_lock_freelock_2 = (DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_h_lock_freelock_2 && !DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__2_execute) && !DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__1_execute; - DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_h_lock_freelock_3 = (tUInt8)1u; - DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_h_lock_freelock_3 = (DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_h_lock_freelock_3 && !DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__2_execute) && !DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__1_execute; - DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_s_Stage__3_execute = INST_top.INST_m.INST_hg_fifo_Stage__2_TO_Stage__3.METH_i_notEmpty(); - DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__3_execute = DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_s_Stage__3_execute; - DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_weight_lock_freelock = (tUInt8)1u; - DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_weight_lock_freelock = DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_weight_lock_freelock; - DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_weight_lock_freelock_2 = (tUInt8)1u; - DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_weight_lock_freelock_2 = DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_weight_lock_freelock_2; - DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_weight_lock_freelock_1 = (tUInt8)1u; - DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_weight_lock_freelock_1 = DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_weight_lock_freelock_1; - DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_weight_lock_freelock_3 = (tUInt8)1u; - DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_weight_lock_freelock_3 = DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_weight_lock_freelock_3; - if (DEF_INST_top_DEF_WILL_FIRE_RL_stopTB) - INST_top.RL_stopTB(); - if (DEF_INST_top_DEF_WILL_FIRE_RL_initTB) - INST_top.RL_initTB(); - INST_top.INST_m.DEF_WILL_FIRE__inthg_req = INST_top.INST_m.PORT_EN__inthg_req; - INST_top.INST_m.DEF_hg_fifo__input__TO_Start_i_notFull____d66 = INST_top.INST_m.INST_hg_fifo__input__TO_Start.METH_i_notFull(); - INST_top.INST_m.DEF_hg_fifo__input__TO_Start_first____d63 = INST_top.INST_m.INST_hg_fifo__input__TO_Start.METH_first(); - INST_top.INST_m.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64 = (tUInt32)((INST_top.INST_m.DEF_hg_fifo__input__TO_Start_first____d63) >> 3u); - INST_top.INST_m.DEF_hg_weight_lock_entryVec_3___d39 = INST_top.INST_m.INST_hg_weight_lock_entryVec_3.METH_read(); - INST_top.INST_m.DEF_hg_weight_lock_entryVec_3_9_BIT_10___d40 = (tUInt8)((INST_top.INST_m.DEF_hg_weight_lock_entryVec_3___d39) >> 10u); - INST_top.INST_m.DEF_hg_weight_lock_entryVec_1___d29 = INST_top.INST_m.INST_hg_weight_lock_entryVec_1.METH_read(); - INST_top.INST_m.DEF_hg_weight_lock_entryVec_1_9_BIT_10___d30 = (tUInt8)((INST_top.INST_m.DEF_hg_weight_lock_entryVec_1___d29) >> 10u); - DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_1_9_BIT_10_0___d135 = !(INST_top.INST_m.DEF_hg_weight_lock_entryVec_1_9_BIT_10___d30); - INST_top.INST_m.DEF_hg_weight_lock_entryVec_2___d34 = INST_top.INST_m.INST_hg_weight_lock_entryVec_2.METH_read(); - INST_top.INST_m.DEF_hg_weight_lock_entryVec_2_4_BIT_10___d35 = (tUInt8)((INST_top.INST_m.DEF_hg_weight_lock_entryVec_2___d34) >> 10u); - DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_2_4_BIT_10_5___d132 = !(INST_top.INST_m.DEF_hg_weight_lock_entryVec_2_4_BIT_10___d35); - INST_top.INST_m.DEF_hg_weight_lock_entryVec_0___d24 = INST_top.INST_m.INST_hg_weight_lock_entryVec_0.METH_read(); - INST_top.INST_m.DEF_hg_feature_lock_entryVec_3___d19 = INST_top.INST_m.INST_hg_feature_lock_entryVec_3.METH_read(); - INST_top.INST_m.DEF_hg_feature_lock_entryVec_3_9_BIT_10___d20 = (tUInt8)((INST_top.INST_m.DEF_hg_feature_lock_entryVec_3___d19) >> 10u); - INST_top.INST_m.DEF_hg_feature_lock_entryVec_2___d14 = INST_top.INST_m.INST_hg_feature_lock_entryVec_2.METH_read(); - INST_top.INST_m.DEF_hg_feature_lock_entryVec_2_4_BIT_10___d15 = (tUInt8)((INST_top.INST_m.DEF_hg_feature_lock_entryVec_2___d14) >> 10u); - DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_2_4_BIT_10_5___d91 = !(INST_top.INST_m.DEF_hg_feature_lock_entryVec_2_4_BIT_10___d15); - INST_top.INST_m.DEF_hg_feature_lock_entryVec_1___d9 = INST_top.INST_m.INST_hg_feature_lock_entryVec_1.METH_read(); - INST_top.INST_m.DEF_hg_feature_lock_entryVec_1_BIT_10___d10 = (tUInt8)((INST_top.INST_m.DEF_hg_feature_lock_entryVec_1___d9) >> 10u); - DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_1_BIT_10_0___d94 = !(INST_top.INST_m.DEF_hg_feature_lock_entryVec_1_BIT_10___d10); - INST_top.INST_m.DEF_hg_feature_lock_entryVec_0___d3 = INST_top.INST_m.INST_hg_feature_lock_entryVec_0.METH_read(); - INST_top.INST_m.DEF_hg_busyReg__h7113 = INST_top.INST_m.INST_hg_busyReg.METH_read(); - DEF_INST_top_INST_m_DEF_b__h7738 = (tUInt32)(1023u & (INST_top.INST_m.DEF_hg_weight_lock_entryVec_3___d39)); - DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_3_9_BIT_10_0_AND_hg_we_ETC___d118 = INST_top.INST_m.DEF_hg_weight_lock_entryVec_3_9_BIT_10___d40 && DEF_INST_top_INST_m_DEF_b__h7738 == (INST_top.INST_m.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64); - DEF_INST_top_INST_m_DEF_b__h7707 = (tUInt32)(1023u & (INST_top.INST_m.DEF_hg_weight_lock_entryVec_2___d34)); - DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_2_4_BITS_9_TO_0_19_EQ__ETC___d120 = DEF_INST_top_INST_m_DEF_b__h7707 == (INST_top.INST_m.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64); - DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_2_4_BIT_10_5_AND_hg_we_ETC___d121 = INST_top.INST_m.DEF_hg_weight_lock_entryVec_2_4_BIT_10___d35 && DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_2_4_BITS_9_TO_0_19_EQ__ETC___d120; - DEF_INST_top_INST_m_DEF_b__h7676 = (tUInt32)(1023u & (INST_top.INST_m.DEF_hg_weight_lock_entryVec_1___d29)); - DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_1_9_BITS_9_TO_0_22_EQ__ETC___d123 = DEF_INST_top_INST_m_DEF_b__h7676 == (INST_top.INST_m.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64); - DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_1_9_BIT_10_0_AND_hg_we_ETC___d124 = INST_top.INST_m.DEF_hg_weight_lock_entryVec_1_9_BIT_10___d30 && DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_1_9_BITS_9_TO_0_22_EQ__ETC___d123; - DEF_INST_top_INST_m_DEF_b__h7646 = (tUInt32)(1023u & (INST_top.INST_m.DEF_hg_weight_lock_entryVec_0___d24)); - DEF_INST_top_INST_m_DEF_b__h7274 = (tUInt32)(1023u & (INST_top.INST_m.DEF_hg_feature_lock_entryVec_3___d19)); - DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_3_9_BIT_10_0_AND_hg_f_ETC___d77 = INST_top.INST_m.DEF_hg_feature_lock_entryVec_3_9_BIT_10___d20 && DEF_INST_top_INST_m_DEF_b__h7274 == (INST_top.INST_m.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64); - DEF_INST_top_INST_m_DEF_b__h7243 = (tUInt32)(1023u & (INST_top.INST_m.DEF_hg_feature_lock_entryVec_2___d14)); - DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_2_4_BITS_9_TO_0_8_EQ__ETC___d79 = DEF_INST_top_INST_m_DEF_b__h7243 == (INST_top.INST_m.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64); - DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_2_4_BIT_10_5_AND_hg_f_ETC___d80 = INST_top.INST_m.DEF_hg_feature_lock_entryVec_2_4_BIT_10___d15 && DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_2_4_BITS_9_TO_0_8_EQ__ETC___d79; - DEF_INST_top_INST_m_DEF_b__h7182 = (tUInt32)(1023u & (INST_top.INST_m.DEF_hg_feature_lock_entryVec_0___d3)); - DEF_INST_top_INST_m_DEF_b__h7212 = (tUInt32)(1023u & (INST_top.INST_m.DEF_hg_feature_lock_entryVec_1___d9)); - DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_1_BITS_9_TO_0_1_EQ_hg_ETC___d82 = DEF_INST_top_INST_m_DEF_b__h7212 == (INST_top.INST_m.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64); - DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_1_BIT_10_0_AND_hg_fea_ETC___d83 = INST_top.INST_m.DEF_hg_feature_lock_entryVec_1_BIT_10___d10 && DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_1_BITS_9_TO_0_1_EQ_hg_ETC___d82; - INST_top.INST_m.DEF_hg_weight_lock_entryVec_0_4_BIT_10___d25 = (tUInt8)((INST_top.INST_m.DEF_hg_weight_lock_entryVec_0___d24) >> 10u); - DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_0_4_BIT_10_5___d138 = !(INST_top.INST_m.DEF_hg_weight_lock_entryVec_0_4_BIT_10___d25); - INST_top.INST_m.DEF_hg_feature_lock_entryVec_0_BIT_10___d4 = (tUInt8)((INST_top.INST_m.DEF_hg_feature_lock_entryVec_0___d3) >> 10u); - DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_0_BIT_10___d97 = !(INST_top.INST_m.DEF_hg_feature_lock_entryVec_0_BIT_10___d4); - INST_top.INST_m.DEF_NOT_hg_weight_lock_lockVec_0_held_notEmpty__2___d23 = !INST_top.INST_m.INST_hg_weight_lock_lockVec_0_held.METH_notEmpty(); - INST_top.INST_m.DEF_NOT_hg_weight_lock_lockVec_1_held_notEmpty__7___d28 = !INST_top.INST_m.INST_hg_weight_lock_lockVec_1_held.METH_notEmpty(); - INST_top.INST_m.DEF_NOT_hg_weight_lock_lockVec_2_held_notEmpty__2___d33 = !INST_top.INST_m.INST_hg_weight_lock_lockVec_2_held.METH_notEmpty(); - INST_top.INST_m.DEF_NOT_hg_weight_lock_lockVec_3_held_notEmpty__7___d38 = !INST_top.INST_m.INST_hg_weight_lock_lockVec_3_held.METH_notEmpty(); - INST_top.INST_m.DEF_NOT_hg_feature_lock_lockVec_0_held_notEmpty___d2 = !INST_top.INST_m.INST_hg_feature_lock_lockVec_0_held.METH_notEmpty(); - INST_top.INST_m.DEF_NOT_hg_feature_lock_lockVec_1_held_notEmpty___d8 = !INST_top.INST_m.INST_hg_feature_lock_lockVec_1_held.METH_notEmpty(); - INST_top.INST_m.DEF_NOT_hg_feature_lock_lockVec_2_held_notEmpty__2___d13 = !INST_top.INST_m.INST_hg_feature_lock_lockVec_2_held.METH_notEmpty(); - INST_top.INST_m.DEF_NOT_hg_feature_lock_lockVec_3_held_notEmpty__7___d18 = !INST_top.INST_m.INST_hg_feature_lock_lockVec_3_held.METH_notEmpty(); - INST_top.INST_m.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65 = (INST_top.INST_m.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64) < 1000u; - DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_0_4_BITS_9_TO_0_25_EQ__ETC___d126 = DEF_INST_top_INST_m_DEF_b__h7646 == (INST_top.INST_m.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64); - DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_0_4_BIT_10_5_38_OR_ETC___d140 = DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_0_4_BIT_10_5___d138 || !DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_0_4_BITS_9_TO_0_25_EQ__ETC___d126; - DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_0_BITS_9_TO_0_4_EQ_hg_ETC___d85 = DEF_INST_top_INST_m_DEF_b__h7182 == (INST_top.INST_m.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3___d64); - DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_0_BIT_10_7_OR_NOT_ETC___d99 = DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_0_BIT_10___d97 || !DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_0_BITS_9_TO_0_4_EQ_hg_ETC___d85; - INST_top.INST_m.DEF_NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d74 = !(INST_top.INST_m.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65); - DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_1_9_BIT_10_0_35_OR_ETC___d141 = (DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_1_9_BIT_10_0___d135 || !DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_1_9_BITS_9_TO_0_22_EQ__ETC___d123) && DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_0_4_BIT_10_5_38_OR_ETC___d140; - DEF_INST_top_INST_m_DEF_x__h7932 = ((DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_2_4_BIT_10_5___d132 || !DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_2_4_BITS_9_TO_0_19_EQ__ETC___d120) && DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_1_9_BIT_10_0_35_OR_ETC___d141) && DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_3_9_BIT_10_0_AND_hg_we_ETC___d118 ? (tUInt8)3u : (DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_1_9_BIT_10_0_35_OR_ETC___d141 && DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_2_4_BIT_10_5_AND_hg_we_ETC___d121 ? (tUInt8)2u : (DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_0_4_BIT_10_5_38_OR_ETC___d140 && DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_1_9_BIT_10_0_AND_hg_we_ETC___d124 ? (tUInt8)1u : (tUInt8)0u)); - switch (DEF_INST_top_INST_m_DEF_x__h7932) { - case (tUInt8)0u: - DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_weight_lock_lockVec_0_held_notE_ETC___d149 = INST_top.INST_m.DEF_NOT_hg_weight_lock_lockVec_0_held_notEmpty__2___d23; - break; - case (tUInt8)1u: - DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_weight_lock_lockVec_0_held_notE_ETC___d149 = INST_top.INST_m.DEF_NOT_hg_weight_lock_lockVec_1_held_notEmpty__7___d28; - break; - case (tUInt8)2u: - DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_weight_lock_lockVec_0_held_notE_ETC___d149 = INST_top.INST_m.DEF_NOT_hg_weight_lock_lockVec_2_held_notEmpty__2___d33; - break; - case (tUInt8)3u: - DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_weight_lock_lockVec_0_held_notE_ETC___d149 = INST_top.INST_m.DEF_NOT_hg_weight_lock_lockVec_3_held_notEmpty__7___d38; - break; - default: - DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_weight_lock_lockVec_0_held_notE_ETC___d149 = (tUInt8)0u; - } - DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_1_BIT_10_0_4_OR_N_ETC___d100 = (DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_1_BIT_10_0___d94 || !DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_1_BITS_9_TO_0_1_EQ_hg_ETC___d82) && DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_0_BIT_10_7_OR_NOT_ETC___d99; - DEF_INST_top_INST_m_DEF_x__h7468 = ((DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_2_4_BIT_10_5___d91 || !DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_2_4_BITS_9_TO_0_8_EQ__ETC___d79) && DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_1_BIT_10_0_4_OR_N_ETC___d100) && DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_3_9_BIT_10_0_AND_hg_f_ETC___d77 ? (tUInt8)3u : (DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_1_BIT_10_0_4_OR_N_ETC___d100 && DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_2_4_BIT_10_5_AND_hg_f_ETC___d80 ? (tUInt8)2u : (DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_0_BIT_10_7_OR_NOT_ETC___d99 && DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_1_BIT_10_0_AND_hg_fea_ETC___d83 ? (tUInt8)1u : (tUInt8)0u)); - switch (DEF_INST_top_INST_m_DEF_x__h7468) { - case (tUInt8)0u: - DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_feature_lock_lockVec_0_held_not_ETC___d108 = INST_top.INST_m.DEF_NOT_hg_feature_lock_lockVec_0_held_notEmpty___d2; - break; - case (tUInt8)1u: - DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_feature_lock_lockVec_0_held_not_ETC___d108 = INST_top.INST_m.DEF_NOT_hg_feature_lock_lockVec_1_held_notEmpty___d8; - break; - case (tUInt8)2u: - DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_feature_lock_lockVec_0_held_not_ETC___d108 = INST_top.INST_m.DEF_NOT_hg_feature_lock_lockVec_2_held_notEmpty__2___d13; - break; - case (tUInt8)3u: - DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_feature_lock_lockVec_0_held_not_ETC___d108 = INST_top.INST_m.DEF_NOT_hg_feature_lock_lockVec_3_held_notEmpty__7___d18; - break; - default: - DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_feature_lock_lockVec_0_held_not_ETC___d108 = (tUInt8)0u; - } - DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_s_Start_execute = (INST_top.INST_m.INST_hg_fifo__input__TO_Start.METH_i_notEmpty() && (INST_top.INST_m.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65 ? INST_top.INST_m.DEF_hg_fifo__input__TO_Start_i_notFull____d66 && INST_top.INST_m.INST_hg_fifo_Start_TO_Stage__1.METH_i_notFull() : INST_top.INST_m.INST_hg_outputQueue.METH_i_notFull())) && (((INST_top.INST_m.DEF_hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65 || INST_top.INST_m.DEF_hg_busyReg__h7113) && (INST_top.INST_m.DEF_NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d74 || (DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_3_9_BIT_10_0_AND_hg_f_ETC___d77 || (DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_2_4_BIT_10_5_AND_hg_f_ETC___d80 || (DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_1_BIT_10_0_AND_hg_fea_ETC___d83 || (INST_top.INST_m.DEF_hg_feature_lock_entryVec_0_BIT_10___d4 && DEF_INST_top_INST_m_DEF_hg_feature_lock_entryVec_0_BITS_9_TO_0_4_EQ_hg_ETC___d85))) ? DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_feature_lock_lockVec_0_held_not_ETC___d108 : !(INST_top.INST_m.DEF_hg_feature_lock_entryVec_3_9_BIT_10___d20) || (DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_2_4_BIT_10_5___d91 || (DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_1_BIT_10_0___d94 || DEF_INST_top_INST_m_DEF_NOT_hg_feature_lock_entryVec_0_BIT_10___d97))))) && (INST_top.INST_m.DEF_NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d74 || (DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_3_9_BIT_10_0_AND_hg_we_ETC___d118 || (DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_2_4_BIT_10_5_AND_hg_we_ETC___d121 || (DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_1_9_BIT_10_0_AND_hg_we_ETC___d124 || (INST_top.INST_m.DEF_hg_weight_lock_entryVec_0_4_BIT_10___d25 && DEF_INST_top_INST_m_DEF_hg_weight_lock_entryVec_0_4_BITS_9_TO_0_25_EQ__ETC___d126))) ? DEF_INST_top_INST_m_DEF_SEL_ARR_NOT_hg_weight_lock_lockVec_0_held_notE_ETC___d149 : !(INST_top.INST_m.DEF_hg_weight_lock_entryVec_3_9_BIT_10___d40) || (DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_2_4_BIT_10_5___d132 || (DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_1_9_BIT_10_0___d135 || DEF_INST_top_INST_m_DEF_NOT_hg_weight_lock_entryVec_0_4_BIT_10_5___d138))))); - DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Start_execute = DEF_INST_top_INST_m_DEF_CAN_FIRE_RL_hg_s_Start_execute && !(INST_top.INST_m.DEF_WILL_FIRE__inthg_req); - if (DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_h_lock_freelock) - INST_top.INST_m.RL_hg_h_lock_freelock(); - if (DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_h_lock_freelock_1) - INST_top.INST_m.RL_hg_h_lock_freelock_1(); - if (DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_h_lock_freelock_2) - INST_top.INST_m.RL_hg_h_lock_freelock_2(); - if (DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_h_lock_freelock_3) - INST_top.INST_m.RL_hg_h_lock_freelock_3(); - if (DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__1_execute) - INST_top.INST_m.RL_hg_s_Stage__1_execute(); - if (DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__2_execute) - INST_top.INST_m.RL_hg_s_Stage__2_execute(); - if (DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Stage__3_execute) - INST_top.INST_m.RL_hg_s_Stage__3_execute(); - if (DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_s_Start_execute) - INST_top.INST_m.RL_hg_s_Start_execute(); - if (DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_feature_lock_freelock) - INST_top.INST_m.RL_hg_feature_lock_freelock(); - if (DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_feature_lock_freelock_1) - INST_top.INST_m.RL_hg_feature_lock_freelock_1(); - if (DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_feature_lock_freelock_2) - INST_top.INST_m.RL_hg_feature_lock_freelock_2(); - if (DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_feature_lock_freelock_3) - INST_top.INST_m.RL_hg_feature_lock_freelock_3(); - if (DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_weight_lock_freelock) - INST_top.INST_m.RL_hg_weight_lock_freelock(); - if (DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_weight_lock_freelock_1) - INST_top.INST_m.RL_hg_weight_lock_freelock_1(); - if (DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_weight_lock_freelock_2) - INST_top.INST_m.RL_hg_weight_lock_freelock_2(); - if (DEF_INST_top_INST_m_DEF_WILL_FIRE_RL_hg_weight_lock_freelock_3) - INST_top.INST_m.RL_hg_weight_lock_freelock_3(); - if (do_reset_ticks(simHdl)) - { - INST_top.INST_m.INST_hg_fifo__input__TO_Start.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg_fifo_Start_TO_Stage__1.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg_fifo_Stage__1_TO_Stage__2.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg_fifo_Stage__2_TO_Stage__3.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_lockVec_0_nextId.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_lockVec_0_held.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_lockVec_0_cnt.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_lockVec_1_nextId.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_lockVec_1_held.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_lockVec_1_cnt.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_lockVec_2_nextId.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_lockVec_2_held.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_lockVec_2_cnt.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_lockVec_3_nextId.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_lockVec_3_held.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_lockVec_3_cnt.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_entryVec_0.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_entryVec_1.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_entryVec_2.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_entryVec_3.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_lockVec_0_nextId.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_lockVec_0_held.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_lockVec_0_cnt.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_lockVec_1_nextId.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_lockVec_1_held.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_lockVec_1_cnt.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_lockVec_2_nextId.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_lockVec_2_held.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_lockVec_2_cnt.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_lockVec_3_nextId.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_lockVec_3_held.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_lockVec_3_cnt.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_entryVec_0.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_entryVec_1.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_entryVec_2.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_entryVec_3.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_lockVec_0_nextId.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_lockVec_0_held.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_lockVec_0_cnt.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_lockVec_1_nextId.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_lockVec_1_held.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_lockVec_1_cnt.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_lockVec_2_nextId.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_lockVec_2_held.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_lockVec_2_cnt.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_lockVec_3_nextId.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_lockVec_3_held.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_lockVec_3_cnt.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_entryVec_0.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_entryVec_1.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_entryVec_2.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_entryVec_3.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_feature_lock_region.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_weight_lock_region.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_h_lock_region.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_busyReg.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_m.INST_hg_outputQueue.rst_tick_clk((tUInt8)1u); - INST_top.INST_m.INST_hg.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_reg_unused_0.rst_tick__clk__1((tUInt8)1u); - INST_top.INST_started.rst_tick__clk__1((tUInt8)1u); - } - }; - -/* Model creation/destruction functions */ - -void MODEL_mkTB::create_model(tSimStateHdl simHdl, bool master) -{ - sim_hdl = simHdl; - init_reset_request_counters(sim_hdl); - mkTB_instance = new MOD_mkTB(sim_hdl, "top", NULL); - bk_get_or_define_clock(sim_hdl, "CLK"); - if (master) - { - bk_alter_clock(sim_hdl, bk_get_clock_by_name(sim_hdl, "CLK"), CLK_LOW, false, 0llu, 5llu, 5llu); - bk_use_default_reset(sim_hdl); - } - bk_set_clock_event_fn(sim_hdl, - bk_get_clock_by_name(sim_hdl, "CLK"), - schedule_posedge_CLK, - NULL, - (tEdgeDirection)(POSEDGE)); - (mkTB_instance->INST_m.INST_hg_fifo__input__TO_Start.set_clk_0)("CLK"); - (mkTB_instance->INST_m.INST_hg_fifo_Start_TO_Stage__1.set_clk_0)("CLK"); - (mkTB_instance->INST_m.INST_hg_fifo_Stage__1_TO_Stage__2.set_clk_0)("CLK"); - (mkTB_instance->INST_m.INST_hg_fifo_Stage__2_TO_Stage__3.set_clk_0)("CLK"); - (mkTB_instance->INST_m.INST_hg_feature_lock_lockVec_0_held.set_clk_0)("CLK"); - (mkTB_instance->INST_m.INST_hg_feature_lock_lockVec_1_held.set_clk_0)("CLK"); - (mkTB_instance->INST_m.INST_hg_feature_lock_lockVec_2_held.set_clk_0)("CLK"); - (mkTB_instance->INST_m.INST_hg_feature_lock_lockVec_3_held.set_clk_0)("CLK"); - (mkTB_instance->INST_m.INST_hg_weight_lock_lockVec_0_held.set_clk_0)("CLK"); - (mkTB_instance->INST_m.INST_hg_weight_lock_lockVec_1_held.set_clk_0)("CLK"); - (mkTB_instance->INST_m.INST_hg_weight_lock_lockVec_2_held.set_clk_0)("CLK"); - (mkTB_instance->INST_m.INST_hg_weight_lock_lockVec_3_held.set_clk_0)("CLK"); - (mkTB_instance->INST_m.INST_hg_h_lock_lockVec_0_held.set_clk_0)("CLK"); - (mkTB_instance->INST_m.INST_hg_h_lock_lockVec_1_held.set_clk_0)("CLK"); - (mkTB_instance->INST_m.INST_hg_h_lock_lockVec_2_held.set_clk_0)("CLK"); - (mkTB_instance->INST_m.INST_hg_h_lock_lockVec_3_held.set_clk_0)("CLK"); - (mkTB_instance->INST_m.INST_hg_outputQueue.set_clk_0)("CLK"); - (mkTB_instance->INST_m.set_clk_0)("CLK"); - (mkTB_instance->set_clk_0)("CLK"); -} -void MODEL_mkTB::destroy_model() -{ - delete mkTB_instance; - mkTB_instance = NULL; -} -void MODEL_mkTB::reset_model(bool asserted) -{ - (mkTB_instance->reset_RST_N)(asserted ? (tUInt8)0u : (tUInt8)1u); -} -void * MODEL_mkTB::get_instance() -{ - return mkTB_instance; -} - -/* Fill in version numbers */ -void MODEL_mkTB::get_version(unsigned int *year, - unsigned int *month, - char const **annotation, - char const **build) -{ - *year = 0u; - *month = 0u; - *annotation = NULL; - *build = NULL; -} - -/* Get the model creation time */ -time_t MODEL_mkTB::get_creation_time() -{ - - /* Thu Jan 1 00:00:00 UTC 1970 */ - return 0llu; -} - -/* State dumping function */ -void MODEL_mkTB::dump_state() -{ - (mkTB_instance->dump_state)(0u); -} - -/* VCD dumping functions */ -MOD_mkTB & mkTB_backing(tSimStateHdl simHdl) -{ - static MOD_mkTB *instance = NULL; - if (instance == NULL) - { - vcd_set_backing_instance(simHdl, true); - instance = new MOD_mkTB(simHdl, "top", NULL); - vcd_set_backing_instance(simHdl, false); - } - return *instance; -} -void MODEL_mkTB::dump_VCD_defs() -{ - (mkTB_instance->dump_VCD_defs)(vcd_depth(sim_hdl)); -} -void MODEL_mkTB::dump_VCD(tVCDDumpType dt) -{ - (mkTB_instance->dump_VCD)(dt, vcd_depth(sim_hdl), mkTB_backing(sim_hdl)); -} diff --git a/src/main/scala/pipedsl/testOutputs/Circuit_sim/model_mkTB.h b/src/main/scala/pipedsl/testOutputs/Circuit_sim/model_mkTB.h deleted file mode 100644 index e4b02ccf..00000000 --- a/src/main/scala/pipedsl/testOutputs/Circuit_sim/model_mkTB.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Generated by Bluespec Compiler - * - */ - -/* Generation options: */ -#ifndef __model_mkTB_h__ -#define __model_mkTB_h__ - -#include "bluesim_types.h" -#include "bs_module.h" -#include "bluesim_primitives.h" -#include "bs_vcd.h" - -#include "bs_model.h" -#include "mkTB.h" - -/* Class declaration for a model of mkTB */ -class MODEL_mkTB : public Model { - - /* Top-level module instance */ - private: - MOD_mkTB *mkTB_instance; - - /* Handle to the simulation kernel */ - private: - tSimStateHdl sim_hdl; - - /* Constructor */ - public: - MODEL_mkTB(); - - /* Functions required by the kernel */ - public: - void create_model(tSimStateHdl simHdl, bool master); - void destroy_model(); - void reset_model(bool asserted); - void get_version(unsigned int *year, - unsigned int *month, - char const **annotation, - char const **build); - time_t get_creation_time(); - void * get_instance(); - void dump_state(); - void dump_VCD_defs(); - void dump_VCD(tVCDDumpType dt); -}; - -/* Function for creating a new model */ -extern "C" { - void * new_MODEL_mkTB(); -} - -#endif /* ifndef __model_mkTB_h__ */ diff --git a/src/main/scala/pipedsl/testOutputs/Circuit_sim/model_mkTB.o b/src/main/scala/pipedsl/testOutputs/Circuit_sim/model_mkTB.o deleted file mode 100644 index 5775b340f1aaa3486218021dc3b2e997f37354ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28360 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 _inthg_checkHandle -// -// - -`ifdef BSV_ASSIGNMENT_DELAY -`else - `define BSV_ASSIGNMENT_DELAY -`endif - -`ifdef BSV_POSITIVE_RESET - `define BSV_RESET_VALUE 1'b1 - `define BSV_RESET_EDGE posedge -`else - `define BSV_RESET_VALUE 1'b0 - `define BSV_RESET_EDGE negedge -`endif - -module mkCircuit(CLK, - RST_N, - - _inthg_req_counter, - EN__inthg_req, - _inthg_req, - RDY__inthg_req, - - EN__inthg_resp, - RDY__inthg_resp, - - _inthg_checkHandle_handle, - _inthg_checkHandle, - RDY__inthg_checkHandle, - - _inthg_peek, - RDY__inthg_peek); - input CLK; - input RST_N; - - // actionvalue method _inthg_req - input [9 : 0] _inthg_req_counter; - input EN__inthg_req; - output [2 : 0] _inthg_req; - output RDY__inthg_req; - - // action method _inthg_resp - input EN__inthg_resp; - output RDY__inthg_resp; - - // value method _inthg_checkHandle - input [2 : 0] _inthg_checkHandle_handle; - output _inthg_checkHandle; - output RDY__inthg_checkHandle; - - // value method _inthg_peek - output _inthg_peek; - output RDY__inthg_peek; - - // signals for module outputs - wire [2 : 0] _inthg_req; - wire RDY__inthg_checkHandle, - RDY__inthg_peek, - RDY__inthg_req, - RDY__inthg_resp, - _inthg_checkHandle, - _inthg_peek; - - // register hg - reg [2 : 0] hg; - wire [2 : 0] hg$D_IN; - wire hg$EN; - - // register hg_busyReg - reg hg_busyReg; - wire hg_busyReg$D_IN, hg_busyReg$EN; - - // register hg_feature_lock_entryVec_0 - reg [10 : 0] hg_feature_lock_entryVec_0; - wire [10 : 0] hg_feature_lock_entryVec_0$D_IN; - wire hg_feature_lock_entryVec_0$EN; - - // register hg_feature_lock_entryVec_1 - reg [10 : 0] hg_feature_lock_entryVec_1; - wire [10 : 0] hg_feature_lock_entryVec_1$D_IN; - wire hg_feature_lock_entryVec_1$EN; - - // register hg_feature_lock_entryVec_2 - reg [10 : 0] hg_feature_lock_entryVec_2; - wire [10 : 0] hg_feature_lock_entryVec_2$D_IN; - wire hg_feature_lock_entryVec_2$EN; - - // register hg_feature_lock_entryVec_3 - reg [10 : 0] hg_feature_lock_entryVec_3; - wire [10 : 0] hg_feature_lock_entryVec_3$D_IN; - wire hg_feature_lock_entryVec_3$EN; - - // register hg_feature_lock_lockVec_0_cnt - reg [1 : 0] hg_feature_lock_lockVec_0_cnt; - wire [1 : 0] hg_feature_lock_lockVec_0_cnt$D_IN; - wire hg_feature_lock_lockVec_0_cnt$EN; - - // register hg_feature_lock_lockVec_0_nextId - reg [1 : 0] hg_feature_lock_lockVec_0_nextId; - wire [1 : 0] hg_feature_lock_lockVec_0_nextId$D_IN; - wire hg_feature_lock_lockVec_0_nextId$EN; - - // register hg_feature_lock_lockVec_1_cnt - reg [1 : 0] hg_feature_lock_lockVec_1_cnt; - wire [1 : 0] hg_feature_lock_lockVec_1_cnt$D_IN; - wire hg_feature_lock_lockVec_1_cnt$EN; - - // register hg_feature_lock_lockVec_1_nextId - reg [1 : 0] hg_feature_lock_lockVec_1_nextId; - wire [1 : 0] hg_feature_lock_lockVec_1_nextId$D_IN; - wire hg_feature_lock_lockVec_1_nextId$EN; - - // register hg_feature_lock_lockVec_2_cnt - reg [1 : 0] hg_feature_lock_lockVec_2_cnt; - wire [1 : 0] hg_feature_lock_lockVec_2_cnt$D_IN; - wire hg_feature_lock_lockVec_2_cnt$EN; - - // register hg_feature_lock_lockVec_2_nextId - reg [1 : 0] hg_feature_lock_lockVec_2_nextId; - wire [1 : 0] hg_feature_lock_lockVec_2_nextId$D_IN; - wire hg_feature_lock_lockVec_2_nextId$EN; - - // register hg_feature_lock_lockVec_3_cnt - reg [1 : 0] hg_feature_lock_lockVec_3_cnt; - wire [1 : 0] hg_feature_lock_lockVec_3_cnt$D_IN; - wire hg_feature_lock_lockVec_3_cnt$EN; - - // register hg_feature_lock_lockVec_3_nextId - reg [1 : 0] hg_feature_lock_lockVec_3_nextId; - wire [1 : 0] hg_feature_lock_lockVec_3_nextId$D_IN; - wire hg_feature_lock_lockVec_3_nextId$EN; - - // register hg_feature_lock_region - reg hg_feature_lock_region; - wire hg_feature_lock_region$D_IN, hg_feature_lock_region$EN; - - // register hg_h_lock_entryVec_0 - reg [10 : 0] hg_h_lock_entryVec_0; - wire [10 : 0] hg_h_lock_entryVec_0$D_IN; - wire hg_h_lock_entryVec_0$EN; - - // register hg_h_lock_entryVec_1 - reg [10 : 0] hg_h_lock_entryVec_1; - wire [10 : 0] hg_h_lock_entryVec_1$D_IN; - wire hg_h_lock_entryVec_1$EN; - - // register hg_h_lock_entryVec_2 - reg [10 : 0] hg_h_lock_entryVec_2; - wire [10 : 0] hg_h_lock_entryVec_2$D_IN; - wire hg_h_lock_entryVec_2$EN; - - // register hg_h_lock_entryVec_3 - reg [10 : 0] hg_h_lock_entryVec_3; - wire [10 : 0] hg_h_lock_entryVec_3$D_IN; - wire hg_h_lock_entryVec_3$EN; - - // register hg_h_lock_lockVec_0_cnt - reg [1 : 0] hg_h_lock_lockVec_0_cnt; - wire [1 : 0] hg_h_lock_lockVec_0_cnt$D_IN; - wire hg_h_lock_lockVec_0_cnt$EN; - - // register hg_h_lock_lockVec_0_nextId - reg [1 : 0] hg_h_lock_lockVec_0_nextId; - wire [1 : 0] hg_h_lock_lockVec_0_nextId$D_IN; - wire hg_h_lock_lockVec_0_nextId$EN; - - // register hg_h_lock_lockVec_1_cnt - reg [1 : 0] hg_h_lock_lockVec_1_cnt; - wire [1 : 0] hg_h_lock_lockVec_1_cnt$D_IN; - wire hg_h_lock_lockVec_1_cnt$EN; - - // register hg_h_lock_lockVec_1_nextId - reg [1 : 0] hg_h_lock_lockVec_1_nextId; - wire [1 : 0] hg_h_lock_lockVec_1_nextId$D_IN; - wire hg_h_lock_lockVec_1_nextId$EN; - - // register hg_h_lock_lockVec_2_cnt - reg [1 : 0] hg_h_lock_lockVec_2_cnt; - wire [1 : 0] hg_h_lock_lockVec_2_cnt$D_IN; - wire hg_h_lock_lockVec_2_cnt$EN; - - // register hg_h_lock_lockVec_2_nextId - reg [1 : 0] hg_h_lock_lockVec_2_nextId; - wire [1 : 0] hg_h_lock_lockVec_2_nextId$D_IN; - wire hg_h_lock_lockVec_2_nextId$EN; - - // register hg_h_lock_lockVec_3_cnt - reg [1 : 0] hg_h_lock_lockVec_3_cnt; - wire [1 : 0] hg_h_lock_lockVec_3_cnt$D_IN; - wire hg_h_lock_lockVec_3_cnt$EN; - - // register hg_h_lock_lockVec_3_nextId - reg [1 : 0] hg_h_lock_lockVec_3_nextId; - wire [1 : 0] hg_h_lock_lockVec_3_nextId$D_IN; - wire hg_h_lock_lockVec_3_nextId$EN; - - // register hg_h_lock_region - reg hg_h_lock_region; - wire hg_h_lock_region$D_IN, hg_h_lock_region$EN; - - // register hg_weight_lock_entryVec_0 - reg [10 : 0] hg_weight_lock_entryVec_0; - wire [10 : 0] hg_weight_lock_entryVec_0$D_IN; - wire hg_weight_lock_entryVec_0$EN; - - // register hg_weight_lock_entryVec_1 - reg [10 : 0] hg_weight_lock_entryVec_1; - wire [10 : 0] hg_weight_lock_entryVec_1$D_IN; - wire hg_weight_lock_entryVec_1$EN; - - // register hg_weight_lock_entryVec_2 - reg [10 : 0] hg_weight_lock_entryVec_2; - wire [10 : 0] hg_weight_lock_entryVec_2$D_IN; - wire hg_weight_lock_entryVec_2$EN; - - // register hg_weight_lock_entryVec_3 - reg [10 : 0] hg_weight_lock_entryVec_3; - wire [10 : 0] hg_weight_lock_entryVec_3$D_IN; - wire hg_weight_lock_entryVec_3$EN; - - // register hg_weight_lock_lockVec_0_cnt - reg [1 : 0] hg_weight_lock_lockVec_0_cnt; - wire [1 : 0] hg_weight_lock_lockVec_0_cnt$D_IN; - wire hg_weight_lock_lockVec_0_cnt$EN; - - // register hg_weight_lock_lockVec_0_nextId - reg [1 : 0] hg_weight_lock_lockVec_0_nextId; - wire [1 : 0] hg_weight_lock_lockVec_0_nextId$D_IN; - wire hg_weight_lock_lockVec_0_nextId$EN; - - // register hg_weight_lock_lockVec_1_cnt - reg [1 : 0] hg_weight_lock_lockVec_1_cnt; - wire [1 : 0] hg_weight_lock_lockVec_1_cnt$D_IN; - wire hg_weight_lock_lockVec_1_cnt$EN; - - // register hg_weight_lock_lockVec_1_nextId - reg [1 : 0] hg_weight_lock_lockVec_1_nextId; - wire [1 : 0] hg_weight_lock_lockVec_1_nextId$D_IN; - wire hg_weight_lock_lockVec_1_nextId$EN; - - // register hg_weight_lock_lockVec_2_cnt - reg [1 : 0] hg_weight_lock_lockVec_2_cnt; - wire [1 : 0] hg_weight_lock_lockVec_2_cnt$D_IN; - wire hg_weight_lock_lockVec_2_cnt$EN; - - // register hg_weight_lock_lockVec_2_nextId - reg [1 : 0] hg_weight_lock_lockVec_2_nextId; - wire [1 : 0] hg_weight_lock_lockVec_2_nextId$D_IN; - wire hg_weight_lock_lockVec_2_nextId$EN; - - // register hg_weight_lock_lockVec_3_cnt - reg [1 : 0] hg_weight_lock_lockVec_3_cnt; - wire [1 : 0] hg_weight_lock_lockVec_3_cnt$D_IN; - wire hg_weight_lock_lockVec_3_cnt$EN; - - // register hg_weight_lock_lockVec_3_nextId - reg [1 : 0] hg_weight_lock_lockVec_3_nextId; - wire [1 : 0] hg_weight_lock_lockVec_3_nextId$D_IN; - wire hg_weight_lock_lockVec_3_nextId$EN; - - // register hg_weight_lock_region - reg hg_weight_lock_region; - wire hg_weight_lock_region$D_IN, hg_weight_lock_region$EN; - - // ports of submodule f_rf - wire [9 : 0] f_rf$ADDR_1, - f_rf$ADDR_2, - f_rf$ADDR_3, - f_rf$ADDR_4, - f_rf$ADDR_5, - f_rf$ADDR_IN, - f_rf$D_IN, - f_rf$D_OUT_1; - wire f_rf$WE; - - // ports of submodule h_rf - wire [31 : 0] h_rf$D_IN, h_rf$D_OUT_1; - wire [9 : 0] h_rf$ADDR_1, - h_rf$ADDR_2, - h_rf$ADDR_3, - h_rf$ADDR_4, - h_rf$ADDR_5, - h_rf$ADDR_IN; - wire h_rf$WE; - - // ports of submodule hg_feature_lock_lockVec_0_held - wire [1 : 0] hg_feature_lock_lockVec_0_held$D_IN; - wire hg_feature_lock_lockVec_0_held$CLR, - hg_feature_lock_lockVec_0_held$DEQ, - hg_feature_lock_lockVec_0_held$EMPTY_N, - hg_feature_lock_lockVec_0_held$ENQ; - - // ports of submodule hg_feature_lock_lockVec_1_held - wire [1 : 0] hg_feature_lock_lockVec_1_held$D_IN; - wire hg_feature_lock_lockVec_1_held$CLR, - hg_feature_lock_lockVec_1_held$DEQ, - hg_feature_lock_lockVec_1_held$EMPTY_N, - hg_feature_lock_lockVec_1_held$ENQ; - - // ports of submodule hg_feature_lock_lockVec_2_held - wire [1 : 0] hg_feature_lock_lockVec_2_held$D_IN; - wire hg_feature_lock_lockVec_2_held$CLR, - hg_feature_lock_lockVec_2_held$DEQ, - hg_feature_lock_lockVec_2_held$EMPTY_N, - hg_feature_lock_lockVec_2_held$ENQ; - - // ports of submodule hg_feature_lock_lockVec_3_held - wire [1 : 0] hg_feature_lock_lockVec_3_held$D_IN; - wire hg_feature_lock_lockVec_3_held$CLR, - hg_feature_lock_lockVec_3_held$DEQ, - hg_feature_lock_lockVec_3_held$EMPTY_N, - hg_feature_lock_lockVec_3_held$ENQ; - - // ports of submodule hg_fifo_Stage__1_TO_Stage__2 - wire [47 : 0] hg_fifo_Stage__1_TO_Stage__2$D_IN, - hg_fifo_Stage__1_TO_Stage__2$D_OUT; - wire hg_fifo_Stage__1_TO_Stage__2$CLR, - hg_fifo_Stage__1_TO_Stage__2$DEQ, - hg_fifo_Stage__1_TO_Stage__2$EMPTY_N, - hg_fifo_Stage__1_TO_Stage__2$ENQ, - hg_fifo_Stage__1_TO_Stage__2$FULL_N; - - // ports of submodule hg_fifo_Stage__2_TO_Stage__3 - wire [2 : 0] hg_fifo_Stage__2_TO_Stage__3$D_IN; - wire hg_fifo_Stage__2_TO_Stage__3$CLR, - hg_fifo_Stage__2_TO_Stage__3$DEQ, - hg_fifo_Stage__2_TO_Stage__3$EMPTY_N, - hg_fifo_Stage__2_TO_Stage__3$ENQ, - hg_fifo_Stage__2_TO_Stage__3$FULL_N; - - // ports of submodule hg_fifo_Start_TO_Stage__1 - wire [44 : 0] hg_fifo_Start_TO_Stage__1$D_IN, - hg_fifo_Start_TO_Stage__1$D_OUT; - wire hg_fifo_Start_TO_Stage__1$CLR, - hg_fifo_Start_TO_Stage__1$DEQ, - hg_fifo_Start_TO_Stage__1$EMPTY_N, - hg_fifo_Start_TO_Stage__1$ENQ, - hg_fifo_Start_TO_Stage__1$FULL_N; - - // ports of submodule hg_fifo__input__TO_Start - wire [12 : 0] hg_fifo__input__TO_Start$D_IN, hg_fifo__input__TO_Start$D_OUT; - wire hg_fifo__input__TO_Start$CLR, - hg_fifo__input__TO_Start$DEQ, - hg_fifo__input__TO_Start$EMPTY_N, - hg_fifo__input__TO_Start$ENQ, - hg_fifo__input__TO_Start$FULL_N; - - // ports of submodule hg_h_lock_lockVec_0_held - wire [1 : 0] hg_h_lock_lockVec_0_held$D_IN, hg_h_lock_lockVec_0_held$D_OUT; - wire hg_h_lock_lockVec_0_held$CLR, - hg_h_lock_lockVec_0_held$DEQ, - hg_h_lock_lockVec_0_held$EMPTY_N, - hg_h_lock_lockVec_0_held$ENQ, - hg_h_lock_lockVec_0_held$FULL_N; - - // ports of submodule hg_h_lock_lockVec_1_held - wire [1 : 0] hg_h_lock_lockVec_1_held$D_IN, hg_h_lock_lockVec_1_held$D_OUT; - wire hg_h_lock_lockVec_1_held$CLR, - hg_h_lock_lockVec_1_held$DEQ, - hg_h_lock_lockVec_1_held$EMPTY_N, - hg_h_lock_lockVec_1_held$ENQ, - hg_h_lock_lockVec_1_held$FULL_N; - - // ports of submodule hg_h_lock_lockVec_2_held - wire [1 : 0] hg_h_lock_lockVec_2_held$D_IN, hg_h_lock_lockVec_2_held$D_OUT; - wire hg_h_lock_lockVec_2_held$CLR, - hg_h_lock_lockVec_2_held$DEQ, - hg_h_lock_lockVec_2_held$EMPTY_N, - hg_h_lock_lockVec_2_held$ENQ, - hg_h_lock_lockVec_2_held$FULL_N; - - // ports of submodule hg_h_lock_lockVec_3_held - wire [1 : 0] hg_h_lock_lockVec_3_held$D_IN, hg_h_lock_lockVec_3_held$D_OUT; - wire hg_h_lock_lockVec_3_held$CLR, - hg_h_lock_lockVec_3_held$DEQ, - hg_h_lock_lockVec_3_held$EMPTY_N, - hg_h_lock_lockVec_3_held$ENQ, - hg_h_lock_lockVec_3_held$FULL_N; - - // ports of submodule hg_outputQueue - wire [3 : 0] hg_outputQueue$D_IN, hg_outputQueue$D_OUT; - wire hg_outputQueue$CLR, - hg_outputQueue$DEQ, - hg_outputQueue$EMPTY_N, - hg_outputQueue$ENQ, - hg_outputQueue$FULL_N; - - // ports of submodule hg_weight_lock_lockVec_0_held - wire [1 : 0] hg_weight_lock_lockVec_0_held$D_IN; - wire hg_weight_lock_lockVec_0_held$CLR, - hg_weight_lock_lockVec_0_held$DEQ, - hg_weight_lock_lockVec_0_held$EMPTY_N, - hg_weight_lock_lockVec_0_held$ENQ; - - // ports of submodule hg_weight_lock_lockVec_1_held - wire [1 : 0] hg_weight_lock_lockVec_1_held$D_IN; - wire hg_weight_lock_lockVec_1_held$CLR, - hg_weight_lock_lockVec_1_held$DEQ, - hg_weight_lock_lockVec_1_held$EMPTY_N, - hg_weight_lock_lockVec_1_held$ENQ; - - // ports of submodule hg_weight_lock_lockVec_2_held - wire [1 : 0] hg_weight_lock_lockVec_2_held$D_IN; - wire hg_weight_lock_lockVec_2_held$CLR, - hg_weight_lock_lockVec_2_held$DEQ, - hg_weight_lock_lockVec_2_held$EMPTY_N, - hg_weight_lock_lockVec_2_held$ENQ; - - // ports of submodule hg_weight_lock_lockVec_3_held - wire [1 : 0] hg_weight_lock_lockVec_3_held$D_IN; - wire hg_weight_lock_lockVec_3_held$CLR, - hg_weight_lock_lockVec_3_held$DEQ, - hg_weight_lock_lockVec_3_held$EMPTY_N, - hg_weight_lock_lockVec_3_held$ENQ; - - // ports of submodule w_rf - wire [31 : 0] w_rf$D_IN, w_rf$D_OUT_1; - wire [9 : 0] w_rf$ADDR_1, - w_rf$ADDR_2, - w_rf$ADDR_3, - w_rf$ADDR_4, - w_rf$ADDR_5, - w_rf$ADDR_IN; - wire w_rf$WE; - - // rule scheduling signals - wire CAN_FIRE_RL_hg_s_Start_execute, - WILL_FIRE_RL_hg_h_lock_freelock, - WILL_FIRE_RL_hg_s_Stage__1_execute, - WILL_FIRE_RL_hg_s_Stage__2_execute, - WILL_FIRE_RL_hg_s_Start_execute; - - // inputs to muxes for submodule ports - wire [12 : 0] MUX_hg_fifo__input__TO_Start$enq_1__VAL_1, - MUX_hg_fifo__input__TO_Start$enq_1__VAL_2; - wire [10 : 0] MUX_hg_h_lock_entryVec_0$write_1__VAL_2; - wire MUX_hg_busyReg$write_1__SEL_1, - MUX_hg_fifo__input__TO_Start$enq_1__SEL_1, - MUX_hg_h_lock_entryVec_0$write_1__SEL_1, - MUX_hg_h_lock_entryVec_1$write_1__SEL_1, - MUX_hg_h_lock_entryVec_2$write_1__SEL_1, - MUX_hg_h_lock_entryVec_3$write_1__SEL_1; - - // remaining internal signals - reg [1 : 0] SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d275, - SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d276; - reg CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d205, - CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d313, - CASE_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_ETC___d216, - SEL_ARR_NOT_hg_feature_lock_lockVec_0_held_not_ETC___d108, - SEL_ARR_NOT_hg_h_lock_lockVec_0_held_notEmpty__ETC___d229, - SEL_ARR_NOT_hg_weight_lock_lockVec_0_held_notE_ETC___d149; - wire [31 : 0] h_rf_sub_hg_fifo_Start_TO_Stage__1_first__68_B_ETC___d235; - wire [1 : 0] IF_NOT_hg_feature_lock_entryVec_0_BIT_10_7_OR__ETC___d105, - IF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_N_ETC___d198, - IF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_N_ETC___d306, - IF_NOT_hg_weight_lock_entryVec_0_4_BIT_10_5_38_ETC___d146, - IF_hg_fifo_Stage__1_TO_Stage__2_first__83_BIT__ETC___d321, - IF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lo_ETC___d214, - IF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lo_ETC___d277, - x__h10519, - x__h7468, - x__h7932, - x__h8976, - x__h9842; - wire IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d238, - IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d244, - IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d250, - IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d256, - IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d328, - IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d333, - IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d338, - IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d343, - IF_hg_fifo__input__TO_Start_first__3_BITS_12_T_ETC___d70, - IF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lo_ETC___d218, - IF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lo_ETC___d230, - NOT_hg_feature_lock_entryVec_1_BIT_10_0_4_OR_N_ETC___d103, - NOT_hg_feature_lock_entryVec_2_4_BIT_10_5_1_OR_ETC___d101, - NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d114, - NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d155, - NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d196, - NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d303, - NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194, - NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298, - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226, - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265, - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d314, - NOT_hg_weight_lock_entryVec_1_9_BIT_10_0_35_OR_ETC___d144, - NOT_hg_weight_lock_entryVec_2_4_BIT_10_5_32_OR_ETC___d142, - hg_feature_lock_entryVec_0_BITS_9_TO_0_4_EQ_hg_ETC___d85, - hg_feature_lock_entryVec_1_BITS_9_TO_0_1_EQ_hg_ETC___d82, - hg_feature_lock_entryVec_2_4_BITS_9_TO_0_8_EQ__ETC___d79, - hg_feature_lock_entryVec_2_4_BIT_10_5_AND_hg_f_ETC___d88, - hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65, - hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179, - hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294, - hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176, - hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291, - hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173, - hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288, - hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d182, - hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d326, - hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170, - hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285, - hg_weight_lock_entryVec_0_4_BITS_9_TO_0_25_EQ__ETC___d126, - hg_weight_lock_entryVec_1_9_BITS_9_TO_0_22_EQ__ETC___d123, - hg_weight_lock_entryVec_2_4_BITS_9_TO_0_19_EQ__ETC___d120, - hg_weight_lock_entryVec_2_4_BIT_10_5_AND_hg_we_ETC___d129; - - // actionvalue method _inthg_req - assign _inthg_req = hg ; - assign RDY__inthg_req = !hg_busyReg && hg_fifo__input__TO_Start$FULL_N ; - - // action method _inthg_resp - assign RDY__inthg_resp = hg_outputQueue$EMPTY_N ; - - // value method _inthg_checkHandle - assign _inthg_checkHandle = - _inthg_checkHandle_handle == hg_outputQueue$D_OUT[3:1] ; - assign RDY__inthg_checkHandle = hg_outputQueue$EMPTY_N ; - - // value method _inthg_peek - assign _inthg_peek = hg_outputQueue$D_OUT[0] ; - assign RDY__inthg_peek = hg_outputQueue$EMPTY_N ; - - // submodule f_rf - RegFileLoad #(.file("f"), - .addr_width(32'd10), - .data_width(32'd10), - .lo(10'h0), - .hi(10'd1023), - .binary(1'd0)) f_rf(.CLK(CLK), - .ADDR_1(f_rf$ADDR_1), - .ADDR_2(f_rf$ADDR_2), - .ADDR_3(f_rf$ADDR_3), - .ADDR_4(f_rf$ADDR_4), - .ADDR_5(f_rf$ADDR_5), - .ADDR_IN(f_rf$ADDR_IN), - .D_IN(f_rf$D_IN), - .WE(f_rf$WE), - .D_OUT_1(f_rf$D_OUT_1), - .D_OUT_2(), - .D_OUT_3(), - .D_OUT_4(), - .D_OUT_5()); - - // submodule h_rf - RegFileLoad #(.file("h"), - .addr_width(32'd10), - .data_width(32'd32), - .lo(10'h0), - .hi(10'd1023), - .binary(1'd0)) h_rf(.CLK(CLK), - .ADDR_1(h_rf$ADDR_1), - .ADDR_2(h_rf$ADDR_2), - .ADDR_3(h_rf$ADDR_3), - .ADDR_4(h_rf$ADDR_4), - .ADDR_5(h_rf$ADDR_5), - .ADDR_IN(h_rf$ADDR_IN), - .D_IN(h_rf$D_IN), - .WE(h_rf$WE), - .D_OUT_1(h_rf$D_OUT_1), - .D_OUT_2(), - .D_OUT_3(), - .D_OUT_4(), - .D_OUT_5()); - - // submodule hg_feature_lock_lockVec_0_held - SizedFIFO #(.p1width(32'd2), - .p2depth(32'd4), - .p3cntr_width(32'd2), - .guarded(32'd1)) hg_feature_lock_lockVec_0_held(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_feature_lock_lockVec_0_held$D_IN), - .ENQ(hg_feature_lock_lockVec_0_held$ENQ), - .DEQ(hg_feature_lock_lockVec_0_held$DEQ), - .CLR(hg_feature_lock_lockVec_0_held$CLR), - .D_OUT(), - .FULL_N(), - .EMPTY_N(hg_feature_lock_lockVec_0_held$EMPTY_N)); - - // submodule hg_feature_lock_lockVec_1_held - SizedFIFO #(.p1width(32'd2), - .p2depth(32'd4), - .p3cntr_width(32'd2), - .guarded(32'd1)) hg_feature_lock_lockVec_1_held(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_feature_lock_lockVec_1_held$D_IN), - .ENQ(hg_feature_lock_lockVec_1_held$ENQ), - .DEQ(hg_feature_lock_lockVec_1_held$DEQ), - .CLR(hg_feature_lock_lockVec_1_held$CLR), - .D_OUT(), - .FULL_N(), - .EMPTY_N(hg_feature_lock_lockVec_1_held$EMPTY_N)); - - // submodule hg_feature_lock_lockVec_2_held - SizedFIFO #(.p1width(32'd2), - .p2depth(32'd4), - .p3cntr_width(32'd2), - .guarded(32'd1)) hg_feature_lock_lockVec_2_held(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_feature_lock_lockVec_2_held$D_IN), - .ENQ(hg_feature_lock_lockVec_2_held$ENQ), - .DEQ(hg_feature_lock_lockVec_2_held$DEQ), - .CLR(hg_feature_lock_lockVec_2_held$CLR), - .D_OUT(), - .FULL_N(), - .EMPTY_N(hg_feature_lock_lockVec_2_held$EMPTY_N)); - - // submodule hg_feature_lock_lockVec_3_held - SizedFIFO #(.p1width(32'd2), - .p2depth(32'd4), - .p3cntr_width(32'd2), - .guarded(32'd1)) hg_feature_lock_lockVec_3_held(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_feature_lock_lockVec_3_held$D_IN), - .ENQ(hg_feature_lock_lockVec_3_held$ENQ), - .DEQ(hg_feature_lock_lockVec_3_held$DEQ), - .CLR(hg_feature_lock_lockVec_3_held$CLR), - .D_OUT(), - .FULL_N(), - .EMPTY_N(hg_feature_lock_lockVec_3_held$EMPTY_N)); - - // submodule hg_fifo_Stage__1_TO_Stage__2 - FIFO2 #(.width(32'd48), - .guarded(32'd1)) hg_fifo_Stage__1_TO_Stage__2(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_fifo_Stage__1_TO_Stage__2$D_IN), - .ENQ(hg_fifo_Stage__1_TO_Stage__2$ENQ), - .DEQ(hg_fifo_Stage__1_TO_Stage__2$DEQ), - .CLR(hg_fifo_Stage__1_TO_Stage__2$CLR), - .D_OUT(hg_fifo_Stage__1_TO_Stage__2$D_OUT), - .FULL_N(hg_fifo_Stage__1_TO_Stage__2$FULL_N), - .EMPTY_N(hg_fifo_Stage__1_TO_Stage__2$EMPTY_N)); - - // submodule hg_fifo_Stage__2_TO_Stage__3 - FIFO2 #(.width(32'd3), - .guarded(32'd1)) hg_fifo_Stage__2_TO_Stage__3(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_fifo_Stage__2_TO_Stage__3$D_IN), - .ENQ(hg_fifo_Stage__2_TO_Stage__3$ENQ), - .DEQ(hg_fifo_Stage__2_TO_Stage__3$DEQ), - .CLR(hg_fifo_Stage__2_TO_Stage__3$CLR), - .D_OUT(), - .FULL_N(hg_fifo_Stage__2_TO_Stage__3$FULL_N), - .EMPTY_N(hg_fifo_Stage__2_TO_Stage__3$EMPTY_N)); - - // submodule hg_fifo_Start_TO_Stage__1 - FIFO2 #(.width(32'd45), - .guarded(32'd1)) hg_fifo_Start_TO_Stage__1(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_fifo_Start_TO_Stage__1$D_IN), - .ENQ(hg_fifo_Start_TO_Stage__1$ENQ), - .DEQ(hg_fifo_Start_TO_Stage__1$DEQ), - .CLR(hg_fifo_Start_TO_Stage__1$CLR), - .D_OUT(hg_fifo_Start_TO_Stage__1$D_OUT), - .FULL_N(hg_fifo_Start_TO_Stage__1$FULL_N), - .EMPTY_N(hg_fifo_Start_TO_Stage__1$EMPTY_N)); - - // submodule hg_fifo__input__TO_Start - FIFO2 #(.width(32'd13), - .guarded(32'd1)) hg_fifo__input__TO_Start(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_fifo__input__TO_Start$D_IN), - .ENQ(hg_fifo__input__TO_Start$ENQ), - .DEQ(hg_fifo__input__TO_Start$DEQ), - .CLR(hg_fifo__input__TO_Start$CLR), - .D_OUT(hg_fifo__input__TO_Start$D_OUT), - .FULL_N(hg_fifo__input__TO_Start$FULL_N), - .EMPTY_N(hg_fifo__input__TO_Start$EMPTY_N)); - - // submodule hg_h_lock_lockVec_0_held - SizedFIFO #(.p1width(32'd2), - .p2depth(32'd4), - .p3cntr_width(32'd2), - .guarded(32'd1)) hg_h_lock_lockVec_0_held(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_h_lock_lockVec_0_held$D_IN), - .ENQ(hg_h_lock_lockVec_0_held$ENQ), - .DEQ(hg_h_lock_lockVec_0_held$DEQ), - .CLR(hg_h_lock_lockVec_0_held$CLR), - .D_OUT(hg_h_lock_lockVec_0_held$D_OUT), - .FULL_N(hg_h_lock_lockVec_0_held$FULL_N), - .EMPTY_N(hg_h_lock_lockVec_0_held$EMPTY_N)); - - // submodule hg_h_lock_lockVec_1_held - SizedFIFO #(.p1width(32'd2), - .p2depth(32'd4), - .p3cntr_width(32'd2), - .guarded(32'd1)) hg_h_lock_lockVec_1_held(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_h_lock_lockVec_1_held$D_IN), - .ENQ(hg_h_lock_lockVec_1_held$ENQ), - .DEQ(hg_h_lock_lockVec_1_held$DEQ), - .CLR(hg_h_lock_lockVec_1_held$CLR), - .D_OUT(hg_h_lock_lockVec_1_held$D_OUT), - .FULL_N(hg_h_lock_lockVec_1_held$FULL_N), - .EMPTY_N(hg_h_lock_lockVec_1_held$EMPTY_N)); - - // submodule hg_h_lock_lockVec_2_held - SizedFIFO #(.p1width(32'd2), - .p2depth(32'd4), - .p3cntr_width(32'd2), - .guarded(32'd1)) hg_h_lock_lockVec_2_held(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_h_lock_lockVec_2_held$D_IN), - .ENQ(hg_h_lock_lockVec_2_held$ENQ), - .DEQ(hg_h_lock_lockVec_2_held$DEQ), - .CLR(hg_h_lock_lockVec_2_held$CLR), - .D_OUT(hg_h_lock_lockVec_2_held$D_OUT), - .FULL_N(hg_h_lock_lockVec_2_held$FULL_N), - .EMPTY_N(hg_h_lock_lockVec_2_held$EMPTY_N)); - - // submodule hg_h_lock_lockVec_3_held - SizedFIFO #(.p1width(32'd2), - .p2depth(32'd4), - .p3cntr_width(32'd2), - .guarded(32'd1)) hg_h_lock_lockVec_3_held(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_h_lock_lockVec_3_held$D_IN), - .ENQ(hg_h_lock_lockVec_3_held$ENQ), - .DEQ(hg_h_lock_lockVec_3_held$DEQ), - .CLR(hg_h_lock_lockVec_3_held$CLR), - .D_OUT(hg_h_lock_lockVec_3_held$D_OUT), - .FULL_N(hg_h_lock_lockVec_3_held$FULL_N), - .EMPTY_N(hg_h_lock_lockVec_3_held$EMPTY_N)); - - // submodule hg_outputQueue - FIFO2 #(.width(32'd4), .guarded(32'd1)) hg_outputQueue(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_outputQueue$D_IN), - .ENQ(hg_outputQueue$ENQ), - .DEQ(hg_outputQueue$DEQ), - .CLR(hg_outputQueue$CLR), - .D_OUT(hg_outputQueue$D_OUT), - .FULL_N(hg_outputQueue$FULL_N), - .EMPTY_N(hg_outputQueue$EMPTY_N)); - - // submodule hg_weight_lock_lockVec_0_held - SizedFIFO #(.p1width(32'd2), - .p2depth(32'd4), - .p3cntr_width(32'd2), - .guarded(32'd1)) hg_weight_lock_lockVec_0_held(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_weight_lock_lockVec_0_held$D_IN), - .ENQ(hg_weight_lock_lockVec_0_held$ENQ), - .DEQ(hg_weight_lock_lockVec_0_held$DEQ), - .CLR(hg_weight_lock_lockVec_0_held$CLR), - .D_OUT(), - .FULL_N(), - .EMPTY_N(hg_weight_lock_lockVec_0_held$EMPTY_N)); - - // submodule hg_weight_lock_lockVec_1_held - SizedFIFO #(.p1width(32'd2), - .p2depth(32'd4), - .p3cntr_width(32'd2), - .guarded(32'd1)) hg_weight_lock_lockVec_1_held(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_weight_lock_lockVec_1_held$D_IN), - .ENQ(hg_weight_lock_lockVec_1_held$ENQ), - .DEQ(hg_weight_lock_lockVec_1_held$DEQ), - .CLR(hg_weight_lock_lockVec_1_held$CLR), - .D_OUT(), - .FULL_N(), - .EMPTY_N(hg_weight_lock_lockVec_1_held$EMPTY_N)); - - // submodule hg_weight_lock_lockVec_2_held - SizedFIFO #(.p1width(32'd2), - .p2depth(32'd4), - .p3cntr_width(32'd2), - .guarded(32'd1)) hg_weight_lock_lockVec_2_held(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_weight_lock_lockVec_2_held$D_IN), - .ENQ(hg_weight_lock_lockVec_2_held$ENQ), - .DEQ(hg_weight_lock_lockVec_2_held$DEQ), - .CLR(hg_weight_lock_lockVec_2_held$CLR), - .D_OUT(), - .FULL_N(), - .EMPTY_N(hg_weight_lock_lockVec_2_held$EMPTY_N)); - - // submodule hg_weight_lock_lockVec_3_held - SizedFIFO #(.p1width(32'd2), - .p2depth(32'd4), - .p3cntr_width(32'd2), - .guarded(32'd1)) hg_weight_lock_lockVec_3_held(.RST(RST_N), - .CLK(CLK), - .D_IN(hg_weight_lock_lockVec_3_held$D_IN), - .ENQ(hg_weight_lock_lockVec_3_held$ENQ), - .DEQ(hg_weight_lock_lockVec_3_held$DEQ), - .CLR(hg_weight_lock_lockVec_3_held$CLR), - .D_OUT(), - .FULL_N(), - .EMPTY_N(hg_weight_lock_lockVec_3_held$EMPTY_N)); - - // submodule w_rf - RegFileLoad #(.file("w"), - .addr_width(32'd10), - .data_width(32'd32), - .lo(10'h0), - .hi(10'd1023), - .binary(1'd0)) w_rf(.CLK(CLK), - .ADDR_1(w_rf$ADDR_1), - .ADDR_2(w_rf$ADDR_2), - .ADDR_3(w_rf$ADDR_3), - .ADDR_4(w_rf$ADDR_4), - .ADDR_5(w_rf$ADDR_5), - .ADDR_IN(w_rf$ADDR_IN), - .D_IN(w_rf$D_IN), - .WE(w_rf$WE), - .D_OUT_1(w_rf$D_OUT_1), - .D_OUT_2(), - .D_OUT_3(), - .D_OUT_4(), - .D_OUT_5()); - - // rule RL_hg_s_Start_execute - assign CAN_FIRE_RL_hg_s_Start_execute = - hg_fifo__input__TO_Start$EMPTY_N && - IF_hg_fifo__input__TO_Start_first__3_BITS_12_T_ETC___d70 && - (hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65 || - hg_busyReg) && - NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d114 && - NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d155 ; - assign WILL_FIRE_RL_hg_s_Start_execute = - CAN_FIRE_RL_hg_s_Start_execute && !EN__inthg_req ; - - // rule RL_hg_s_Stage__1_execute - assign WILL_FIRE_RL_hg_s_Stage__1_execute = - hg_fifo_Start_TO_Stage__1$EMPTY_N && - hg_fifo_Stage__1_TO_Stage__2$FULL_N && - IF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lo_ETC___d218 && - (hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170 || - hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173 || - hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176 || - hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179 || - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226) && - IF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lo_ETC___d230 ; - - // rule RL_hg_s_Stage__2_execute - assign WILL_FIRE_RL_hg_s_Stage__2_execute = - hg_fifo_Stage__1_TO_Stage__2$EMPTY_N && - hg_fifo_Stage__2_TO_Stage__3$FULL_N && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d314 && - !WILL_FIRE_RL_hg_s_Stage__1_execute ; - - // rule RL_hg_h_lock_freelock - assign WILL_FIRE_RL_hg_h_lock_freelock = - !WILL_FIRE_RL_hg_s_Stage__2_execute && - !WILL_FIRE_RL_hg_s_Stage__1_execute ; - - // inputs to muxes for submodule ports - assign MUX_hg_busyReg$write_1__SEL_1 = - WILL_FIRE_RL_hg_s_Start_execute && - !hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65 ; - assign MUX_hg_fifo__input__TO_Start$enq_1__SEL_1 = - WILL_FIRE_RL_hg_s_Start_execute && - hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65 ; - assign MUX_hg_h_lock_entryVec_0$write_1__SEL_1 = - WILL_FIRE_RL_hg_h_lock_freelock && - !hg_h_lock_lockVec_0_held$EMPTY_N && - hg_h_lock_entryVec_0[10] ; - assign MUX_hg_h_lock_entryVec_1$write_1__SEL_1 = - WILL_FIRE_RL_hg_h_lock_freelock && - !hg_h_lock_lockVec_1_held$EMPTY_N && - hg_h_lock_entryVec_1[10] ; - assign MUX_hg_h_lock_entryVec_2$write_1__SEL_1 = - WILL_FIRE_RL_hg_h_lock_freelock && - !hg_h_lock_lockVec_2_held$EMPTY_N && - hg_h_lock_entryVec_2[10] ; - assign MUX_hg_h_lock_entryVec_3$write_1__SEL_1 = - WILL_FIRE_RL_hg_h_lock_freelock && - !hg_h_lock_lockVec_3_held$EMPTY_N && - hg_h_lock_entryVec_3[10] ; - assign MUX_hg_fifo__input__TO_Start$enq_1__VAL_1 = - { hg_fifo__input__TO_Start$D_OUT[12:3] + 10'd1, - hg_fifo__input__TO_Start$D_OUT[2:0] } ; - assign MUX_hg_fifo__input__TO_Start$enq_1__VAL_2 = - { _inthg_req_counter, hg } ; - assign MUX_hg_h_lock_entryVec_0$write_1__VAL_2 = - { 1'd1, hg_fifo_Start_TO_Stage__1$D_OUT[44:35] } ; - - // register hg - assign hg$D_IN = hg + 3'd1 ; - assign hg$EN = EN__inthg_req ; - - // register hg_busyReg - assign hg_busyReg$D_IN = !MUX_hg_busyReg$write_1__SEL_1 ; - assign hg_busyReg$EN = - WILL_FIRE_RL_hg_s_Start_execute && - !hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65 || - EN__inthg_req ; - - // register hg_feature_lock_entryVec_0 - assign hg_feature_lock_entryVec_0$D_IN = 11'd682 ; - assign hg_feature_lock_entryVec_0$EN = - !hg_feature_lock_lockVec_0_held$EMPTY_N && - hg_feature_lock_entryVec_0[10] ; - - // register hg_feature_lock_entryVec_1 - assign hg_feature_lock_entryVec_1$D_IN = 11'd682 ; - assign hg_feature_lock_entryVec_1$EN = - !hg_feature_lock_lockVec_1_held$EMPTY_N && - hg_feature_lock_entryVec_1[10] ; - - // register hg_feature_lock_entryVec_2 - assign hg_feature_lock_entryVec_2$D_IN = 11'd682 ; - assign hg_feature_lock_entryVec_2$EN = - !hg_feature_lock_lockVec_2_held$EMPTY_N && - hg_feature_lock_entryVec_2[10] ; - - // register hg_feature_lock_entryVec_3 - assign hg_feature_lock_entryVec_3$D_IN = 11'd682 ; - assign hg_feature_lock_entryVec_3$EN = - !hg_feature_lock_lockVec_3_held$EMPTY_N && - hg_feature_lock_entryVec_3[10] ; - - // register hg_feature_lock_lockVec_0_cnt - assign hg_feature_lock_lockVec_0_cnt$D_IN = 2'h0 ; - assign hg_feature_lock_lockVec_0_cnt$EN = 1'b0 ; - - // register hg_feature_lock_lockVec_0_nextId - assign hg_feature_lock_lockVec_0_nextId$D_IN = 2'h0 ; - assign hg_feature_lock_lockVec_0_nextId$EN = 1'b0 ; - - // register hg_feature_lock_lockVec_1_cnt - assign hg_feature_lock_lockVec_1_cnt$D_IN = 2'h0 ; - assign hg_feature_lock_lockVec_1_cnt$EN = 1'b0 ; - - // register hg_feature_lock_lockVec_1_nextId - assign hg_feature_lock_lockVec_1_nextId$D_IN = 2'h0 ; - assign hg_feature_lock_lockVec_1_nextId$EN = 1'b0 ; - - // register hg_feature_lock_lockVec_2_cnt - assign hg_feature_lock_lockVec_2_cnt$D_IN = 2'h0 ; - assign hg_feature_lock_lockVec_2_cnt$EN = 1'b0 ; - - // register hg_feature_lock_lockVec_2_nextId - assign hg_feature_lock_lockVec_2_nextId$D_IN = 2'h0 ; - assign hg_feature_lock_lockVec_2_nextId$EN = 1'b0 ; - - // register hg_feature_lock_lockVec_3_cnt - assign hg_feature_lock_lockVec_3_cnt$D_IN = 2'h0 ; - assign hg_feature_lock_lockVec_3_cnt$EN = 1'b0 ; - - // register hg_feature_lock_lockVec_3_nextId - assign hg_feature_lock_lockVec_3_nextId$D_IN = 2'h0 ; - assign hg_feature_lock_lockVec_3_nextId$EN = 1'b0 ; - - // register hg_feature_lock_region - assign hg_feature_lock_region$D_IN = 1'b0 ; - assign hg_feature_lock_region$EN = 1'b0 ; - - // register hg_h_lock_entryVec_0 - assign hg_h_lock_entryVec_0$D_IN = - MUX_hg_h_lock_entryVec_0$write_1__SEL_1 ? - 11'd682 : - MUX_hg_h_lock_entryVec_0$write_1__VAL_2 ; - assign hg_h_lock_entryVec_0$EN = - WILL_FIRE_RL_hg_h_lock_freelock && - !hg_h_lock_lockVec_0_held$EMPTY_N && - hg_h_lock_entryVec_0[10] || - WILL_FIRE_RL_hg_s_Stage__1_execute && x__h9842 == 2'd0 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265 ; - - // register hg_h_lock_entryVec_1 - assign hg_h_lock_entryVec_1$D_IN = - MUX_hg_h_lock_entryVec_1$write_1__SEL_1 ? - 11'd682 : - MUX_hg_h_lock_entryVec_0$write_1__VAL_2 ; - assign hg_h_lock_entryVec_1$EN = - WILL_FIRE_RL_hg_h_lock_freelock && - !hg_h_lock_lockVec_1_held$EMPTY_N && - hg_h_lock_entryVec_1[10] || - WILL_FIRE_RL_hg_s_Stage__1_execute && x__h9842 == 2'd1 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265 ; - - // register hg_h_lock_entryVec_2 - assign hg_h_lock_entryVec_2$D_IN = - MUX_hg_h_lock_entryVec_2$write_1__SEL_1 ? - 11'd682 : - MUX_hg_h_lock_entryVec_0$write_1__VAL_2 ; - assign hg_h_lock_entryVec_2$EN = - WILL_FIRE_RL_hg_h_lock_freelock && - !hg_h_lock_lockVec_2_held$EMPTY_N && - hg_h_lock_entryVec_2[10] || - WILL_FIRE_RL_hg_s_Stage__1_execute && x__h9842 == 2'd2 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265 ; - - // register hg_h_lock_entryVec_3 - assign hg_h_lock_entryVec_3$D_IN = - MUX_hg_h_lock_entryVec_3$write_1__SEL_1 ? - 11'd682 : - MUX_hg_h_lock_entryVec_0$write_1__VAL_2 ; - assign hg_h_lock_entryVec_3$EN = - WILL_FIRE_RL_hg_h_lock_freelock && - !hg_h_lock_lockVec_3_held$EMPTY_N && - hg_h_lock_entryVec_3[10] || - WILL_FIRE_RL_hg_s_Stage__1_execute && x__h9842 == 2'd3 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265 ; - - // register hg_h_lock_lockVec_0_cnt - assign hg_h_lock_lockVec_0_cnt$D_IN = hg_h_lock_lockVec_0_cnt + 2'd1 ; - assign hg_h_lock_lockVec_0_cnt$EN = - WILL_FIRE_RL_hg_s_Stage__1_execute && - (IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d238 || - x__h9842 == 2'd0 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265) ; - - // register hg_h_lock_lockVec_0_nextId - assign hg_h_lock_lockVec_0_nextId$D_IN = hg_h_lock_lockVec_0_nextId + 2'd1 ; - assign hg_h_lock_lockVec_0_nextId$EN = - WILL_FIRE_RL_hg_s_Stage__1_execute && - (IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d238 || - x__h9842 == 2'd0 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265) ; - - // register hg_h_lock_lockVec_1_cnt - assign hg_h_lock_lockVec_1_cnt$D_IN = hg_h_lock_lockVec_1_cnt + 2'd1 ; - assign hg_h_lock_lockVec_1_cnt$EN = - WILL_FIRE_RL_hg_s_Stage__1_execute && - (IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d244 || - x__h9842 == 2'd1 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265) ; - - // register hg_h_lock_lockVec_1_nextId - assign hg_h_lock_lockVec_1_nextId$D_IN = hg_h_lock_lockVec_1_nextId + 2'd1 ; - assign hg_h_lock_lockVec_1_nextId$EN = - WILL_FIRE_RL_hg_s_Stage__1_execute && - (IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d244 || - x__h9842 == 2'd1 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265) ; - - // register hg_h_lock_lockVec_2_cnt - assign hg_h_lock_lockVec_2_cnt$D_IN = hg_h_lock_lockVec_2_cnt + 2'd1 ; - assign hg_h_lock_lockVec_2_cnt$EN = - WILL_FIRE_RL_hg_s_Stage__1_execute && - (IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d250 || - x__h9842 == 2'd2 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265) ; - - // register hg_h_lock_lockVec_2_nextId - assign hg_h_lock_lockVec_2_nextId$D_IN = hg_h_lock_lockVec_2_nextId + 2'd1 ; - assign hg_h_lock_lockVec_2_nextId$EN = - WILL_FIRE_RL_hg_s_Stage__1_execute && - (IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d250 || - x__h9842 == 2'd2 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265) ; - - // register hg_h_lock_lockVec_3_cnt - assign hg_h_lock_lockVec_3_cnt$D_IN = hg_h_lock_lockVec_3_cnt + 2'd1 ; - assign hg_h_lock_lockVec_3_cnt$EN = - WILL_FIRE_RL_hg_s_Stage__1_execute && - (IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d256 || - x__h9842 == 2'd3 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265) ; - - // register hg_h_lock_lockVec_3_nextId - assign hg_h_lock_lockVec_3_nextId$D_IN = hg_h_lock_lockVec_3_nextId + 2'd1 ; - assign hg_h_lock_lockVec_3_nextId$EN = - WILL_FIRE_RL_hg_s_Stage__1_execute && - (IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d256 || - x__h9842 == 2'd3 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265) ; - - // register hg_h_lock_region - assign hg_h_lock_region$D_IN = 1'b0 ; - assign hg_h_lock_region$EN = 1'b0 ; - - // register hg_weight_lock_entryVec_0 - assign hg_weight_lock_entryVec_0$D_IN = 11'd682 ; - assign hg_weight_lock_entryVec_0$EN = - !hg_weight_lock_lockVec_0_held$EMPTY_N && - hg_weight_lock_entryVec_0[10] ; - - // register hg_weight_lock_entryVec_1 - assign hg_weight_lock_entryVec_1$D_IN = 11'd682 ; - assign hg_weight_lock_entryVec_1$EN = - !hg_weight_lock_lockVec_1_held$EMPTY_N && - hg_weight_lock_entryVec_1[10] ; - - // register hg_weight_lock_entryVec_2 - assign hg_weight_lock_entryVec_2$D_IN = 11'd682 ; - assign hg_weight_lock_entryVec_2$EN = - !hg_weight_lock_lockVec_2_held$EMPTY_N && - hg_weight_lock_entryVec_2[10] ; - - // register hg_weight_lock_entryVec_3 - assign hg_weight_lock_entryVec_3$D_IN = 11'd682 ; - assign hg_weight_lock_entryVec_3$EN = - !hg_weight_lock_lockVec_3_held$EMPTY_N && - hg_weight_lock_entryVec_3[10] ; - - // register hg_weight_lock_lockVec_0_cnt - assign hg_weight_lock_lockVec_0_cnt$D_IN = 2'h0 ; - assign hg_weight_lock_lockVec_0_cnt$EN = 1'b0 ; - - // register hg_weight_lock_lockVec_0_nextId - assign hg_weight_lock_lockVec_0_nextId$D_IN = 2'h0 ; - assign hg_weight_lock_lockVec_0_nextId$EN = 1'b0 ; - - // register hg_weight_lock_lockVec_1_cnt - assign hg_weight_lock_lockVec_1_cnt$D_IN = 2'h0 ; - assign hg_weight_lock_lockVec_1_cnt$EN = 1'b0 ; - - // register hg_weight_lock_lockVec_1_nextId - assign hg_weight_lock_lockVec_1_nextId$D_IN = 2'h0 ; - assign hg_weight_lock_lockVec_1_nextId$EN = 1'b0 ; - - // register hg_weight_lock_lockVec_2_cnt - assign hg_weight_lock_lockVec_2_cnt$D_IN = 2'h0 ; - assign hg_weight_lock_lockVec_2_cnt$EN = 1'b0 ; - - // register hg_weight_lock_lockVec_2_nextId - assign hg_weight_lock_lockVec_2_nextId$D_IN = 2'h0 ; - assign hg_weight_lock_lockVec_2_nextId$EN = 1'b0 ; - - // register hg_weight_lock_lockVec_3_cnt - assign hg_weight_lock_lockVec_3_cnt$D_IN = 2'h0 ; - assign hg_weight_lock_lockVec_3_cnt$EN = 1'b0 ; - - // register hg_weight_lock_lockVec_3_nextId - assign hg_weight_lock_lockVec_3_nextId$D_IN = 2'h0 ; - assign hg_weight_lock_lockVec_3_nextId$EN = 1'b0 ; - - // register hg_weight_lock_region - assign hg_weight_lock_region$D_IN = 1'b0 ; - assign hg_weight_lock_region$EN = 1'b0 ; - - // submodule f_rf - assign f_rf$ADDR_1 = hg_fifo__input__TO_Start$D_OUT[12:3] ; - assign f_rf$ADDR_2 = 10'h0 ; - assign f_rf$ADDR_3 = 10'h0 ; - assign f_rf$ADDR_4 = 10'h0 ; - assign f_rf$ADDR_5 = 10'h0 ; - assign f_rf$ADDR_IN = 10'h0 ; - assign f_rf$D_IN = 10'h0 ; - assign f_rf$WE = 1'b0 ; - - // submodule h_rf - assign h_rf$ADDR_1 = hg_fifo_Start_TO_Stage__1$D_OUT[44:35] ; - assign h_rf$ADDR_2 = 10'h0 ; - assign h_rf$ADDR_3 = 10'h0 ; - assign h_rf$ADDR_4 = 10'h0 ; - assign h_rf$ADDR_5 = 10'h0 ; - assign h_rf$ADDR_IN = hg_fifo_Stage__1_TO_Stage__2$D_OUT[47:38] ; - assign h_rf$D_IN = hg_fifo_Stage__1_TO_Stage__2$D_OUT[37:6] ; - assign h_rf$WE = WILL_FIRE_RL_hg_s_Stage__2_execute ; - - // submodule hg_feature_lock_lockVec_0_held - assign hg_feature_lock_lockVec_0_held$D_IN = 2'h0 ; - assign hg_feature_lock_lockVec_0_held$ENQ = 1'b0 ; - assign hg_feature_lock_lockVec_0_held$DEQ = 1'b0 ; - assign hg_feature_lock_lockVec_0_held$CLR = 1'b0 ; - - // submodule hg_feature_lock_lockVec_1_held - assign hg_feature_lock_lockVec_1_held$D_IN = 2'h0 ; - assign hg_feature_lock_lockVec_1_held$ENQ = 1'b0 ; - assign hg_feature_lock_lockVec_1_held$DEQ = 1'b0 ; - assign hg_feature_lock_lockVec_1_held$CLR = 1'b0 ; - - // submodule hg_feature_lock_lockVec_2_held - assign hg_feature_lock_lockVec_2_held$D_IN = 2'h0 ; - assign hg_feature_lock_lockVec_2_held$ENQ = 1'b0 ; - assign hg_feature_lock_lockVec_2_held$DEQ = 1'b0 ; - assign hg_feature_lock_lockVec_2_held$CLR = 1'b0 ; - - // submodule hg_feature_lock_lockVec_3_held - assign hg_feature_lock_lockVec_3_held$D_IN = 2'h0 ; - assign hg_feature_lock_lockVec_3_held$ENQ = 1'b0 ; - assign hg_feature_lock_lockVec_3_held$DEQ = 1'b0 ; - assign hg_feature_lock_lockVec_3_held$CLR = 1'b0 ; - - // submodule hg_fifo_Stage__1_TO_Stage__2 - assign hg_fifo_Stage__1_TO_Stage__2$D_IN = - { hg_fifo_Start_TO_Stage__1$D_OUT[44:35], - h_rf_sub_hg_fifo_Start_TO_Stage__1_first__68_B_ETC___d235, - 1'd1, - IF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lo_ETC___d277, - hg_fifo_Start_TO_Stage__1$D_OUT[2:0] } ; - assign hg_fifo_Stage__1_TO_Stage__2$ENQ = - WILL_FIRE_RL_hg_s_Stage__1_execute ; - assign hg_fifo_Stage__1_TO_Stage__2$DEQ = - WILL_FIRE_RL_hg_s_Stage__2_execute ; - assign hg_fifo_Stage__1_TO_Stage__2$CLR = 1'b0 ; - - // submodule hg_fifo_Stage__2_TO_Stage__3 - assign hg_fifo_Stage__2_TO_Stage__3$D_IN = - hg_fifo_Stage__1_TO_Stage__2$D_OUT[2:0] ; - assign hg_fifo_Stage__2_TO_Stage__3$ENQ = - WILL_FIRE_RL_hg_s_Stage__2_execute ; - assign hg_fifo_Stage__2_TO_Stage__3$DEQ = - hg_fifo_Stage__2_TO_Stage__3$EMPTY_N ; - assign hg_fifo_Stage__2_TO_Stage__3$CLR = 1'b0 ; - - // submodule hg_fifo_Start_TO_Stage__1 - assign hg_fifo_Start_TO_Stage__1$D_IN = - { f_rf$D_OUT_1, - w_rf$D_OUT_1, - hg_fifo__input__TO_Start$D_OUT[2:0] } ; - assign hg_fifo_Start_TO_Stage__1$ENQ = - MUX_hg_fifo__input__TO_Start$enq_1__SEL_1 ; - assign hg_fifo_Start_TO_Stage__1$DEQ = WILL_FIRE_RL_hg_s_Stage__1_execute ; - assign hg_fifo_Start_TO_Stage__1$CLR = 1'b0 ; - - // submodule hg_fifo__input__TO_Start - assign hg_fifo__input__TO_Start$D_IN = - MUX_hg_fifo__input__TO_Start$enq_1__SEL_1 ? - MUX_hg_fifo__input__TO_Start$enq_1__VAL_1 : - MUX_hg_fifo__input__TO_Start$enq_1__VAL_2 ; - assign hg_fifo__input__TO_Start$ENQ = - WILL_FIRE_RL_hg_s_Start_execute && - hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65 || - EN__inthg_req ; - assign hg_fifo__input__TO_Start$DEQ = WILL_FIRE_RL_hg_s_Start_execute ; - assign hg_fifo__input__TO_Start$CLR = 1'b0 ; - - // submodule hg_h_lock_lockVec_0_held - assign hg_h_lock_lockVec_0_held$D_IN = hg_h_lock_lockVec_0_nextId ; - assign hg_h_lock_lockVec_0_held$ENQ = - WILL_FIRE_RL_hg_s_Stage__1_execute && - (IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d238 || - x__h9842 == 2'd0 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265) ; - assign hg_h_lock_lockVec_0_held$DEQ = - WILL_FIRE_RL_hg_s_Stage__2_execute && - hg_h_lock_lockVec_0_held$D_OUT == - IF_hg_fifo_Stage__1_TO_Stage__2_first__83_BIT__ETC___d321 && - IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d328 ; - assign hg_h_lock_lockVec_0_held$CLR = 1'b0 ; - - // submodule hg_h_lock_lockVec_1_held - assign hg_h_lock_lockVec_1_held$D_IN = hg_h_lock_lockVec_1_nextId ; - assign hg_h_lock_lockVec_1_held$ENQ = - WILL_FIRE_RL_hg_s_Stage__1_execute && - (IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d244 || - x__h9842 == 2'd1 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265) ; - assign hg_h_lock_lockVec_1_held$DEQ = - WILL_FIRE_RL_hg_s_Stage__2_execute && - hg_h_lock_lockVec_1_held$D_OUT == - IF_hg_fifo_Stage__1_TO_Stage__2_first__83_BIT__ETC___d321 && - IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d333 ; - assign hg_h_lock_lockVec_1_held$CLR = 1'b0 ; - - // submodule hg_h_lock_lockVec_2_held - assign hg_h_lock_lockVec_2_held$D_IN = hg_h_lock_lockVec_2_nextId ; - assign hg_h_lock_lockVec_2_held$ENQ = - WILL_FIRE_RL_hg_s_Stage__1_execute && - (IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d250 || - x__h9842 == 2'd2 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265) ; - assign hg_h_lock_lockVec_2_held$DEQ = - WILL_FIRE_RL_hg_s_Stage__2_execute && - hg_h_lock_lockVec_2_held$D_OUT == - IF_hg_fifo_Stage__1_TO_Stage__2_first__83_BIT__ETC___d321 && - IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d338 ; - assign hg_h_lock_lockVec_2_held$CLR = 1'b0 ; - - // submodule hg_h_lock_lockVec_3_held - assign hg_h_lock_lockVec_3_held$D_IN = hg_h_lock_lockVec_3_nextId ; - assign hg_h_lock_lockVec_3_held$ENQ = - WILL_FIRE_RL_hg_s_Stage__1_execute && - (IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d256 || - x__h9842 == 2'd3 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265) ; - assign hg_h_lock_lockVec_3_held$DEQ = - WILL_FIRE_RL_hg_s_Stage__2_execute && - hg_h_lock_lockVec_3_held$D_OUT == - IF_hg_fifo_Stage__1_TO_Stage__2_first__83_BIT__ETC___d321 && - IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d343 ; - assign hg_h_lock_lockVec_3_held$CLR = 1'b0 ; - - // submodule hg_outputQueue - assign hg_outputQueue$D_IN = { hg_fifo__input__TO_Start$D_OUT[2:0], 1'd1 } ; - assign hg_outputQueue$ENQ = MUX_hg_busyReg$write_1__SEL_1 ; - assign hg_outputQueue$DEQ = EN__inthg_resp ; - assign hg_outputQueue$CLR = 1'b0 ; - - // submodule hg_weight_lock_lockVec_0_held - assign hg_weight_lock_lockVec_0_held$D_IN = 2'h0 ; - assign hg_weight_lock_lockVec_0_held$ENQ = 1'b0 ; - assign hg_weight_lock_lockVec_0_held$DEQ = 1'b0 ; - assign hg_weight_lock_lockVec_0_held$CLR = 1'b0 ; - - // submodule hg_weight_lock_lockVec_1_held - assign hg_weight_lock_lockVec_1_held$D_IN = 2'h0 ; - assign hg_weight_lock_lockVec_1_held$ENQ = 1'b0 ; - assign hg_weight_lock_lockVec_1_held$DEQ = 1'b0 ; - assign hg_weight_lock_lockVec_1_held$CLR = 1'b0 ; - - // submodule hg_weight_lock_lockVec_2_held - assign hg_weight_lock_lockVec_2_held$D_IN = 2'h0 ; - assign hg_weight_lock_lockVec_2_held$ENQ = 1'b0 ; - assign hg_weight_lock_lockVec_2_held$DEQ = 1'b0 ; - assign hg_weight_lock_lockVec_2_held$CLR = 1'b0 ; - - // submodule hg_weight_lock_lockVec_3_held - assign hg_weight_lock_lockVec_3_held$D_IN = 2'h0 ; - assign hg_weight_lock_lockVec_3_held$ENQ = 1'b0 ; - assign hg_weight_lock_lockVec_3_held$DEQ = 1'b0 ; - assign hg_weight_lock_lockVec_3_held$CLR = 1'b0 ; - - // submodule w_rf - assign w_rf$ADDR_1 = hg_fifo__input__TO_Start$D_OUT[12:3] ; - assign w_rf$ADDR_2 = 10'h0 ; - assign w_rf$ADDR_3 = 10'h0 ; - assign w_rf$ADDR_4 = 10'h0 ; - assign w_rf$ADDR_5 = 10'h0 ; - assign w_rf$ADDR_IN = 10'h0 ; - assign w_rf$D_IN = 32'h0 ; - assign w_rf$WE = 1'b0 ; - - // remaining internal signals - assign IF_NOT_hg_feature_lock_entryVec_0_BIT_10_7_OR__ETC___d105 = - ((!hg_feature_lock_entryVec_0[10] || - !hg_feature_lock_entryVec_0_BITS_9_TO_0_4_EQ_hg_ETC___d85) && - hg_feature_lock_entryVec_1[10] && - hg_feature_lock_entryVec_1_BITS_9_TO_0_1_EQ_hg_ETC___d82) ? - 2'd1 : - 2'd0 ; - assign IF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_N_ETC___d198 = - ((!hg_h_lock_entryVec_0[10] || - !hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179) && - hg_h_lock_entryVec_1[10] && - hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176) ? - 2'd1 : - 2'd0 ; - assign IF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_N_ETC___d306 = - ((!hg_h_lock_entryVec_0[10] || - !hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294) && - hg_h_lock_entryVec_1[10] && - hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291) ? - 2'd1 : - 2'd0 ; - assign IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d238 = - x__h8976 == 2'd0 && - (hg_h_lock_entryVec_3[10] && - hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170 || - hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d182) ; - assign IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d244 = - x__h8976 == 2'd1 && - (hg_h_lock_entryVec_3[10] && - hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170 || - hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d182) ; - assign IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d250 = - x__h8976 == 2'd2 && - (hg_h_lock_entryVec_3[10] && - hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170 || - hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d182) ; - assign IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d256 = - x__h8976 == 2'd3 && - (hg_h_lock_entryVec_3[10] && - hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170 || - hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d182) ; - assign IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d328 = - x__h10519 == 2'd0 && - (hg_h_lock_entryVec_3[10] && - hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285 || - hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d326) ; - assign IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d333 = - x__h10519 == 2'd1 && - (hg_h_lock_entryVec_3[10] && - hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285 || - hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d326) ; - assign IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d338 = - x__h10519 == 2'd2 && - (hg_h_lock_entryVec_3[10] && - hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285 || - hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d326) ; - assign IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_N_ETC___d343 = - x__h10519 == 2'd3 && - (hg_h_lock_entryVec_3[10] && - hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285 || - hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d326) ; - assign IF_NOT_hg_weight_lock_entryVec_0_4_BIT_10_5_38_ETC___d146 = - ((!hg_weight_lock_entryVec_0[10] || - !hg_weight_lock_entryVec_0_4_BITS_9_TO_0_25_EQ__ETC___d126) && - hg_weight_lock_entryVec_1[10] && - hg_weight_lock_entryVec_1_9_BITS_9_TO_0_22_EQ__ETC___d123) ? - 2'd1 : - 2'd0 ; - assign IF_hg_fifo_Stage__1_TO_Stage__2_first__83_BIT__ETC___d321 = - hg_fifo_Stage__1_TO_Stage__2$D_OUT[5] ? - hg_fifo_Stage__1_TO_Stage__2$D_OUT[4:3] : - 2'd0 ; - assign IF_hg_fifo__input__TO_Start_first__3_BITS_12_T_ETC___d70 = - hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65 ? - hg_fifo__input__TO_Start$FULL_N && - hg_fifo_Start_TO_Stage__1$FULL_N : - hg_outputQueue$FULL_N ; - assign IF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lo_ETC___d214 = - (hg_h_lock_entryVec_1[10] && hg_h_lock_entryVec_0[10] && - !hg_h_lock_entryVec_2[10]) ? - 2'd2 : - ((hg_h_lock_entryVec_0[10] && !hg_h_lock_entryVec_1[10]) ? - 2'd1 : - 2'd0) ; - assign IF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lo_ETC___d218 = - (hg_h_lock_entryVec_3[10] && - hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170 || - hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d182) ? - CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d205 : - hg_h_lock_entryVec_3[10] && hg_h_lock_entryVec_2[10] && - hg_h_lock_entryVec_1[10] && - hg_h_lock_entryVec_0[10] || - CASE_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_ETC___d216 ; - assign IF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lo_ETC___d230 = - (hg_h_lock_entryVec_3[10] && - hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170 || - hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d182) ? - SEL_ARR_NOT_hg_h_lock_lockVec_0_held_notEmpty__ETC___d229 : - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226 ; - assign IF_hg_h_lock_entryVec_3_9_BIT_10_0_AND_hg_h_lo_ETC___d277 = - (hg_h_lock_entryVec_3[10] && - hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170 || - hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d182) ? - SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d275 : - SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d276 ; - assign NOT_hg_feature_lock_entryVec_1_BIT_10_0_4_OR_N_ETC___d103 = - (!hg_feature_lock_entryVec_1[10] || - !hg_feature_lock_entryVec_1_BITS_9_TO_0_1_EQ_hg_ETC___d82) && - (!hg_feature_lock_entryVec_0[10] || - !hg_feature_lock_entryVec_0_BITS_9_TO_0_4_EQ_hg_ETC___d85) && - hg_feature_lock_entryVec_2[10] && - hg_feature_lock_entryVec_2_4_BITS_9_TO_0_8_EQ__ETC___d79 ; - assign NOT_hg_feature_lock_entryVec_2_4_BIT_10_5_1_OR_ETC___d101 = - (!hg_feature_lock_entryVec_2[10] || - !hg_feature_lock_entryVec_2_4_BITS_9_TO_0_8_EQ__ETC___d79) && - (!hg_feature_lock_entryVec_1[10] || - !hg_feature_lock_entryVec_1_BITS_9_TO_0_1_EQ_hg_ETC___d82) && - (!hg_feature_lock_entryVec_0[10] || - !hg_feature_lock_entryVec_0_BITS_9_TO_0_4_EQ_hg_ETC___d85) ; - assign NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d114 = - !hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65 || - ((hg_feature_lock_entryVec_3[10] && - hg_feature_lock_entryVec_3[9:0] == - hg_fifo__input__TO_Start$D_OUT[12:3] || - hg_feature_lock_entryVec_2_4_BIT_10_5_AND_hg_f_ETC___d88) ? - SEL_ARR_NOT_hg_feature_lock_lockVec_0_held_not_ETC___d108 : - !hg_feature_lock_entryVec_3[10] || - !hg_feature_lock_entryVec_2[10] || - !hg_feature_lock_entryVec_1[10] || - !hg_feature_lock_entryVec_0[10]) ; - assign NOT_hg_fifo__input__TO_Start_first__3_BITS_12__ETC___d155 = - !hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65 || - ((hg_weight_lock_entryVec_3[10] && - hg_weight_lock_entryVec_3[9:0] == - hg_fifo__input__TO_Start$D_OUT[12:3] || - hg_weight_lock_entryVec_2_4_BIT_10_5_AND_hg_we_ETC___d129) ? - SEL_ARR_NOT_hg_weight_lock_lockVec_0_held_notE_ETC___d149 : - !hg_weight_lock_entryVec_3[10] || - !hg_weight_lock_entryVec_2[10] || - !hg_weight_lock_entryVec_1[10] || - !hg_weight_lock_entryVec_0[10]) ; - assign NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d196 = - (!hg_h_lock_entryVec_1[10] || - !hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176) && - (!hg_h_lock_entryVec_0[10] || - !hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179) && - hg_h_lock_entryVec_2[10] && - hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173 ; - assign NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d303 = - (!hg_h_lock_entryVec_1[10] || - !hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291) && - (!hg_h_lock_entryVec_0[10] || - !hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294) && - hg_h_lock_entryVec_2[10] && - hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288 ; - assign NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194 = - (!hg_h_lock_entryVec_2[10] || - !hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173) && - (!hg_h_lock_entryVec_1[10] || - !hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176) && - (!hg_h_lock_entryVec_0[10] || - !hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179) ; - assign NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298 = - (!hg_h_lock_entryVec_2[10] || - !hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288) && - (!hg_h_lock_entryVec_1[10] || - !hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291) && - (!hg_h_lock_entryVec_0[10] || - !hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294) ; - assign NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226 = - !hg_h_lock_entryVec_3[10] || !hg_h_lock_entryVec_2[10] || - !hg_h_lock_entryVec_1[10] || - !hg_h_lock_entryVec_0[10] ; - assign NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d265 = - (!hg_h_lock_entryVec_3[10] || - !hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170) && - NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194 && - NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d226 ; - assign NOT_hg_h_lock_entryVec_3_9_BIT_10_0_09_OR_NOT__ETC___d314 = - (!hg_h_lock_entryVec_3[10] || - !hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285) && - NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298 || - CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d313 ; - assign NOT_hg_weight_lock_entryVec_1_9_BIT_10_0_35_OR_ETC___d144 = - (!hg_weight_lock_entryVec_1[10] || - !hg_weight_lock_entryVec_1_9_BITS_9_TO_0_22_EQ__ETC___d123) && - (!hg_weight_lock_entryVec_0[10] || - !hg_weight_lock_entryVec_0_4_BITS_9_TO_0_25_EQ__ETC___d126) && - hg_weight_lock_entryVec_2[10] && - hg_weight_lock_entryVec_2_4_BITS_9_TO_0_19_EQ__ETC___d120 ; - assign NOT_hg_weight_lock_entryVec_2_4_BIT_10_5_32_OR_ETC___d142 = - (!hg_weight_lock_entryVec_2[10] || - !hg_weight_lock_entryVec_2_4_BITS_9_TO_0_19_EQ__ETC___d120) && - (!hg_weight_lock_entryVec_1[10] || - !hg_weight_lock_entryVec_1_9_BITS_9_TO_0_22_EQ__ETC___d123) && - (!hg_weight_lock_entryVec_0[10] || - !hg_weight_lock_entryVec_0_4_BITS_9_TO_0_25_EQ__ETC___d126) ; - assign h_rf_sub_hg_fifo_Start_TO_Stage__1_first__68_B_ETC___d235 = - h_rf$D_OUT_1 + hg_fifo_Start_TO_Stage__1$D_OUT[34:3] ; - assign hg_feature_lock_entryVec_0_BITS_9_TO_0_4_EQ_hg_ETC___d85 = - hg_feature_lock_entryVec_0[9:0] == - hg_fifo__input__TO_Start$D_OUT[12:3] ; - assign hg_feature_lock_entryVec_1_BITS_9_TO_0_1_EQ_hg_ETC___d82 = - hg_feature_lock_entryVec_1[9:0] == - hg_fifo__input__TO_Start$D_OUT[12:3] ; - assign hg_feature_lock_entryVec_2_4_BITS_9_TO_0_8_EQ__ETC___d79 = - hg_feature_lock_entryVec_2[9:0] == - hg_fifo__input__TO_Start$D_OUT[12:3] ; - assign hg_feature_lock_entryVec_2_4_BIT_10_5_AND_hg_f_ETC___d88 = - hg_feature_lock_entryVec_2[10] && - hg_feature_lock_entryVec_2_4_BITS_9_TO_0_8_EQ__ETC___d79 || - hg_feature_lock_entryVec_1[10] && - hg_feature_lock_entryVec_1_BITS_9_TO_0_1_EQ_hg_ETC___d82 || - hg_feature_lock_entryVec_0[10] && - hg_feature_lock_entryVec_0_BITS_9_TO_0_4_EQ_hg_ETC___d85 ; - assign hg_fifo__input__TO_Start_first__3_BITS_12_TO_3_ETC___d65 = - hg_fifo__input__TO_Start$D_OUT[12:3] < 10'd1000 ; - assign hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179 = - hg_h_lock_entryVec_0[9:0] == - hg_fifo_Start_TO_Stage__1$D_OUT[44:35] ; - assign hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294 = - hg_h_lock_entryVec_0[9:0] == - hg_fifo_Stage__1_TO_Stage__2$D_OUT[47:38] ; - assign hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176 = - hg_h_lock_entryVec_1[9:0] == - hg_fifo_Start_TO_Stage__1$D_OUT[44:35] ; - assign hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291 = - hg_h_lock_entryVec_1[9:0] == - hg_fifo_Stage__1_TO_Stage__2$D_OUT[47:38] ; - assign hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173 = - hg_h_lock_entryVec_2[9:0] == - hg_fifo_Start_TO_Stage__1$D_OUT[44:35] ; - assign hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288 = - hg_h_lock_entryVec_2[9:0] == - hg_fifo_Stage__1_TO_Stage__2$D_OUT[47:38] ; - assign hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d182 = - hg_h_lock_entryVec_2[10] && - hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d173 || - hg_h_lock_entryVec_1[10] && - hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d176 || - hg_h_lock_entryVec_0[10] && - hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d179 ; - assign hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_h_lock__ETC___d326 = - hg_h_lock_entryVec_2[10] && - hg_h_lock_entryVec_2_4_BITS_9_TO_0_72_EQ_hg_fi_ETC___d288 || - hg_h_lock_entryVec_1[10] && - hg_h_lock_entryVec_1_9_BITS_9_TO_0_75_EQ_hg_fi_ETC___d291 || - hg_h_lock_entryVec_0[10] && - hg_h_lock_entryVec_0_4_BITS_9_TO_0_78_EQ_hg_fi_ETC___d294 ; - assign hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170 = - hg_h_lock_entryVec_3[9:0] == - hg_fifo_Start_TO_Stage__1$D_OUT[44:35] ; - assign hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285 = - hg_h_lock_entryVec_3[9:0] == - hg_fifo_Stage__1_TO_Stage__2$D_OUT[47:38] ; - assign hg_weight_lock_entryVec_0_4_BITS_9_TO_0_25_EQ__ETC___d126 = - hg_weight_lock_entryVec_0[9:0] == - hg_fifo__input__TO_Start$D_OUT[12:3] ; - assign hg_weight_lock_entryVec_1_9_BITS_9_TO_0_22_EQ__ETC___d123 = - hg_weight_lock_entryVec_1[9:0] == - hg_fifo__input__TO_Start$D_OUT[12:3] ; - assign hg_weight_lock_entryVec_2_4_BITS_9_TO_0_19_EQ__ETC___d120 = - hg_weight_lock_entryVec_2[9:0] == - hg_fifo__input__TO_Start$D_OUT[12:3] ; - assign hg_weight_lock_entryVec_2_4_BIT_10_5_AND_hg_we_ETC___d129 = - hg_weight_lock_entryVec_2[10] && - hg_weight_lock_entryVec_2_4_BITS_9_TO_0_19_EQ__ETC___d120 || - hg_weight_lock_entryVec_1[10] && - hg_weight_lock_entryVec_1_9_BITS_9_TO_0_22_EQ__ETC___d123 || - hg_weight_lock_entryVec_0[10] && - hg_weight_lock_entryVec_0_4_BITS_9_TO_0_25_EQ__ETC___d126 ; - assign x__h10519 = - (NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d298 && - hg_h_lock_entryVec_3[10] && - hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d285) ? - 2'd3 : - (NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d303 ? - 2'd2 : - IF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_N_ETC___d306) ; - assign x__h7468 = - (NOT_hg_feature_lock_entryVec_2_4_BIT_10_5_1_OR_ETC___d101 && - hg_feature_lock_entryVec_3[10] && - hg_feature_lock_entryVec_3[9:0] == - hg_fifo__input__TO_Start$D_OUT[12:3]) ? - 2'd3 : - (NOT_hg_feature_lock_entryVec_1_BIT_10_0_4_OR_N_ETC___d103 ? - 2'd2 : - IF_NOT_hg_feature_lock_entryVec_0_BIT_10_7_OR__ETC___d105) ; - assign x__h7932 = - (NOT_hg_weight_lock_entryVec_2_4_BIT_10_5_32_OR_ETC___d142 && - hg_weight_lock_entryVec_3[10] && - hg_weight_lock_entryVec_3[9:0] == - hg_fifo__input__TO_Start$D_OUT[12:3]) ? - 2'd3 : - (NOT_hg_weight_lock_entryVec_1_9_BIT_10_0_35_OR_ETC___d144 ? - 2'd2 : - IF_NOT_hg_weight_lock_entryVec_0_4_BIT_10_5_38_ETC___d146) ; - assign x__h8976 = - (NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_OR_NOT__ETC___d194 && - hg_h_lock_entryVec_3[10] && - hg_h_lock_entryVec_3_9_BITS_9_TO_0_67_EQ_hg_fi_ETC___d170) ? - 2'd3 : - (NOT_hg_h_lock_entryVec_1_9_BIT_10_0_87_OR_NOT__ETC___d196 ? - 2'd2 : - IF_NOT_hg_h_lock_entryVec_0_4_BIT_10_5_90_OR_N_ETC___d198) ; - assign x__h9842 = - (hg_h_lock_entryVec_2[10] && hg_h_lock_entryVec_1[10] && - hg_h_lock_entryVec_0[10] && - !hg_h_lock_entryVec_3[10]) ? - 2'd3 : - IF_hg_h_lock_entryVec_1_9_BIT_10_0_AND_hg_h_lo_ETC___d214 ; - always@(x__h7932 or - hg_weight_lock_lockVec_0_held$EMPTY_N or - hg_weight_lock_lockVec_1_held$EMPTY_N or - hg_weight_lock_lockVec_2_held$EMPTY_N or - hg_weight_lock_lockVec_3_held$EMPTY_N) - begin - case (x__h7932) - 2'd0: - SEL_ARR_NOT_hg_weight_lock_lockVec_0_held_notE_ETC___d149 = - !hg_weight_lock_lockVec_0_held$EMPTY_N; - 2'd1: - SEL_ARR_NOT_hg_weight_lock_lockVec_0_held_notE_ETC___d149 = - !hg_weight_lock_lockVec_1_held$EMPTY_N; - 2'd2: - SEL_ARR_NOT_hg_weight_lock_lockVec_0_held_notE_ETC___d149 = - !hg_weight_lock_lockVec_2_held$EMPTY_N; - 2'd3: - SEL_ARR_NOT_hg_weight_lock_lockVec_0_held_notE_ETC___d149 = - !hg_weight_lock_lockVec_3_held$EMPTY_N; - endcase - end - always@(x__h7468 or - hg_feature_lock_lockVec_0_held$EMPTY_N or - hg_feature_lock_lockVec_1_held$EMPTY_N or - hg_feature_lock_lockVec_2_held$EMPTY_N or - hg_feature_lock_lockVec_3_held$EMPTY_N) - begin - case (x__h7468) - 2'd0: - SEL_ARR_NOT_hg_feature_lock_lockVec_0_held_not_ETC___d108 = - !hg_feature_lock_lockVec_0_held$EMPTY_N; - 2'd1: - SEL_ARR_NOT_hg_feature_lock_lockVec_0_held_not_ETC___d108 = - !hg_feature_lock_lockVec_1_held$EMPTY_N; - 2'd2: - SEL_ARR_NOT_hg_feature_lock_lockVec_0_held_not_ETC___d108 = - !hg_feature_lock_lockVec_2_held$EMPTY_N; - 2'd3: - SEL_ARR_NOT_hg_feature_lock_lockVec_0_held_not_ETC___d108 = - !hg_feature_lock_lockVec_3_held$EMPTY_N; - endcase - end - always@(x__h8976 or - hg_h_lock_lockVec_0_held$EMPTY_N or - hg_h_lock_lockVec_1_held$EMPTY_N or - hg_h_lock_lockVec_2_held$EMPTY_N or - hg_h_lock_lockVec_3_held$EMPTY_N) - begin - case (x__h8976) - 2'd0: - SEL_ARR_NOT_hg_h_lock_lockVec_0_held_notEmpty__ETC___d229 = - !hg_h_lock_lockVec_0_held$EMPTY_N; - 2'd1: - SEL_ARR_NOT_hg_h_lock_lockVec_0_held_notEmpty__ETC___d229 = - !hg_h_lock_lockVec_1_held$EMPTY_N; - 2'd2: - SEL_ARR_NOT_hg_h_lock_lockVec_0_held_notEmpty__ETC___d229 = - !hg_h_lock_lockVec_2_held$EMPTY_N; - 2'd3: - SEL_ARR_NOT_hg_h_lock_lockVec_0_held_notEmpty__ETC___d229 = - !hg_h_lock_lockVec_3_held$EMPTY_N; - endcase - end - always@(x__h8976 or - hg_h_lock_lockVec_0_held$FULL_N or - hg_h_lock_lockVec_1_held$FULL_N or - hg_h_lock_lockVec_2_held$FULL_N or hg_h_lock_lockVec_3_held$FULL_N) - begin - case (x__h8976) - 2'd0: - CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d205 = - hg_h_lock_lockVec_0_held$FULL_N; - 2'd1: - CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d205 = - hg_h_lock_lockVec_1_held$FULL_N; - 2'd2: - CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d205 = - hg_h_lock_lockVec_2_held$FULL_N; - 2'd3: - CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d205 = - hg_h_lock_lockVec_3_held$FULL_N; - endcase - end - always@(x__h9842 or - hg_h_lock_lockVec_0_held$FULL_N or - hg_h_lock_lockVec_1_held$FULL_N or - hg_h_lock_lockVec_2_held$FULL_N or hg_h_lock_lockVec_3_held$FULL_N) - begin - case (x__h9842) - 2'd0: - CASE_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_ETC___d216 = - hg_h_lock_lockVec_0_held$FULL_N; - 2'd1: - CASE_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_ETC___d216 = - hg_h_lock_lockVec_1_held$FULL_N; - 2'd2: - CASE_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_ETC___d216 = - hg_h_lock_lockVec_2_held$FULL_N; - 2'd3: - CASE_IF_hg_h_lock_entryVec_2_4_BIT_10_5_AND_hg_ETC___d216 = - hg_h_lock_lockVec_3_held$FULL_N; - endcase - end - always@(x__h10519 or - hg_h_lock_lockVec_0_held$EMPTY_N or - hg_h_lock_lockVec_1_held$EMPTY_N or - hg_h_lock_lockVec_2_held$EMPTY_N or - hg_h_lock_lockVec_3_held$EMPTY_N) - begin - case (x__h10519) - 2'd0: - CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d313 = - hg_h_lock_lockVec_0_held$EMPTY_N; - 2'd1: - CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d313 = - hg_h_lock_lockVec_1_held$EMPTY_N; - 2'd2: - CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d313 = - hg_h_lock_lockVec_2_held$EMPTY_N; - 2'd3: - CASE_IF_NOT_hg_h_lock_entryVec_2_4_BIT_10_5_84_ETC___d313 = - hg_h_lock_lockVec_3_held$EMPTY_N; - endcase - end - always@(x__h8976 or - hg_h_lock_lockVec_0_nextId or - hg_h_lock_lockVec_1_nextId or - hg_h_lock_lockVec_2_nextId or hg_h_lock_lockVec_3_nextId) - begin - case (x__h8976) - 2'd0: - SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d275 = - hg_h_lock_lockVec_0_nextId; - 2'd1: - SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d275 = - hg_h_lock_lockVec_1_nextId; - 2'd2: - SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d275 = - hg_h_lock_lockVec_2_nextId; - 2'd3: - SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d275 = - hg_h_lock_lockVec_3_nextId; - endcase - end - always@(x__h9842 or - hg_h_lock_lockVec_0_nextId or - hg_h_lock_lockVec_1_nextId or - hg_h_lock_lockVec_2_nextId or hg_h_lock_lockVec_3_nextId) - begin - case (x__h9842) - 2'd0: - SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d276 = - hg_h_lock_lockVec_0_nextId; - 2'd1: - SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d276 = - hg_h_lock_lockVec_1_nextId; - 2'd2: - SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d276 = - hg_h_lock_lockVec_2_nextId; - 2'd3: - SEL_ARR_hg_h_lock_lockVec_0_nextId_39_hg_h_loc_ETC___d276 = - hg_h_lock_lockVec_3_nextId; - endcase - end - - // handling of inlined registers - - always@(posedge CLK) - begin - if (RST_N == `BSV_RESET_VALUE) - begin - hg <= `BSV_ASSIGNMENT_DELAY 3'd0; - hg_busyReg <= `BSV_ASSIGNMENT_DELAY 1'd0; - hg_feature_lock_entryVec_0 <= `BSV_ASSIGNMENT_DELAY 11'd682; - hg_feature_lock_entryVec_1 <= `BSV_ASSIGNMENT_DELAY 11'd682; - hg_feature_lock_entryVec_2 <= `BSV_ASSIGNMENT_DELAY 11'd682; - hg_feature_lock_entryVec_3 <= `BSV_ASSIGNMENT_DELAY 11'd682; - hg_feature_lock_lockVec_0_cnt <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_feature_lock_lockVec_0_nextId <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_feature_lock_lockVec_1_cnt <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_feature_lock_lockVec_1_nextId <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_feature_lock_lockVec_2_cnt <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_feature_lock_lockVec_2_nextId <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_feature_lock_lockVec_3_cnt <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_feature_lock_lockVec_3_nextId <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_feature_lock_region <= `BSV_ASSIGNMENT_DELAY 1'd1; - hg_h_lock_entryVec_0 <= `BSV_ASSIGNMENT_DELAY 11'd682; - hg_h_lock_entryVec_1 <= `BSV_ASSIGNMENT_DELAY 11'd682; - hg_h_lock_entryVec_2 <= `BSV_ASSIGNMENT_DELAY 11'd682; - hg_h_lock_entryVec_3 <= `BSV_ASSIGNMENT_DELAY 11'd682; - hg_h_lock_lockVec_0_cnt <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_h_lock_lockVec_0_nextId <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_h_lock_lockVec_1_cnt <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_h_lock_lockVec_1_nextId <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_h_lock_lockVec_2_cnt <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_h_lock_lockVec_2_nextId <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_h_lock_lockVec_3_cnt <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_h_lock_lockVec_3_nextId <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_h_lock_region <= `BSV_ASSIGNMENT_DELAY 1'd1; - hg_weight_lock_entryVec_0 <= `BSV_ASSIGNMENT_DELAY 11'd682; - hg_weight_lock_entryVec_1 <= `BSV_ASSIGNMENT_DELAY 11'd682; - hg_weight_lock_entryVec_2 <= `BSV_ASSIGNMENT_DELAY 11'd682; - hg_weight_lock_entryVec_3 <= `BSV_ASSIGNMENT_DELAY 11'd682; - hg_weight_lock_lockVec_0_cnt <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_weight_lock_lockVec_0_nextId <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_weight_lock_lockVec_1_cnt <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_weight_lock_lockVec_1_nextId <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_weight_lock_lockVec_2_cnt <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_weight_lock_lockVec_2_nextId <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_weight_lock_lockVec_3_cnt <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_weight_lock_lockVec_3_nextId <= `BSV_ASSIGNMENT_DELAY 2'd0; - hg_weight_lock_region <= `BSV_ASSIGNMENT_DELAY 1'd1; - end - else - begin - if (hg$EN) hg <= `BSV_ASSIGNMENT_DELAY hg$D_IN; - if (hg_busyReg$EN) - hg_busyReg <= `BSV_ASSIGNMENT_DELAY hg_busyReg$D_IN; - if (hg_feature_lock_entryVec_0$EN) - hg_feature_lock_entryVec_0 <= `BSV_ASSIGNMENT_DELAY - hg_feature_lock_entryVec_0$D_IN; - if (hg_feature_lock_entryVec_1$EN) - hg_feature_lock_entryVec_1 <= `BSV_ASSIGNMENT_DELAY - hg_feature_lock_entryVec_1$D_IN; - if (hg_feature_lock_entryVec_2$EN) - hg_feature_lock_entryVec_2 <= `BSV_ASSIGNMENT_DELAY - hg_feature_lock_entryVec_2$D_IN; - if (hg_feature_lock_entryVec_3$EN) - hg_feature_lock_entryVec_3 <= `BSV_ASSIGNMENT_DELAY - hg_feature_lock_entryVec_3$D_IN; - if (hg_feature_lock_lockVec_0_cnt$EN) - hg_feature_lock_lockVec_0_cnt <= `BSV_ASSIGNMENT_DELAY - hg_feature_lock_lockVec_0_cnt$D_IN; - if (hg_feature_lock_lockVec_0_nextId$EN) - hg_feature_lock_lockVec_0_nextId <= `BSV_ASSIGNMENT_DELAY - hg_feature_lock_lockVec_0_nextId$D_IN; - if (hg_feature_lock_lockVec_1_cnt$EN) - hg_feature_lock_lockVec_1_cnt <= `BSV_ASSIGNMENT_DELAY - hg_feature_lock_lockVec_1_cnt$D_IN; - if (hg_feature_lock_lockVec_1_nextId$EN) - hg_feature_lock_lockVec_1_nextId <= `BSV_ASSIGNMENT_DELAY - hg_feature_lock_lockVec_1_nextId$D_IN; - if (hg_feature_lock_lockVec_2_cnt$EN) - hg_feature_lock_lockVec_2_cnt <= `BSV_ASSIGNMENT_DELAY - hg_feature_lock_lockVec_2_cnt$D_IN; - if (hg_feature_lock_lockVec_2_nextId$EN) - hg_feature_lock_lockVec_2_nextId <= `BSV_ASSIGNMENT_DELAY - hg_feature_lock_lockVec_2_nextId$D_IN; - if (hg_feature_lock_lockVec_3_cnt$EN) - hg_feature_lock_lockVec_3_cnt <= `BSV_ASSIGNMENT_DELAY - hg_feature_lock_lockVec_3_cnt$D_IN; - if (hg_feature_lock_lockVec_3_nextId$EN) - hg_feature_lock_lockVec_3_nextId <= `BSV_ASSIGNMENT_DELAY - hg_feature_lock_lockVec_3_nextId$D_IN; - if (hg_feature_lock_region$EN) - hg_feature_lock_region <= `BSV_ASSIGNMENT_DELAY - hg_feature_lock_region$D_IN; - if (hg_h_lock_entryVec_0$EN) - hg_h_lock_entryVec_0 <= `BSV_ASSIGNMENT_DELAY - hg_h_lock_entryVec_0$D_IN; - if (hg_h_lock_entryVec_1$EN) - hg_h_lock_entryVec_1 <= `BSV_ASSIGNMENT_DELAY - hg_h_lock_entryVec_1$D_IN; - if (hg_h_lock_entryVec_2$EN) - hg_h_lock_entryVec_2 <= `BSV_ASSIGNMENT_DELAY - hg_h_lock_entryVec_2$D_IN; - if (hg_h_lock_entryVec_3$EN) - hg_h_lock_entryVec_3 <= `BSV_ASSIGNMENT_DELAY - hg_h_lock_entryVec_3$D_IN; - if (hg_h_lock_lockVec_0_cnt$EN) - hg_h_lock_lockVec_0_cnt <= `BSV_ASSIGNMENT_DELAY - hg_h_lock_lockVec_0_cnt$D_IN; - if (hg_h_lock_lockVec_0_nextId$EN) - hg_h_lock_lockVec_0_nextId <= `BSV_ASSIGNMENT_DELAY - hg_h_lock_lockVec_0_nextId$D_IN; - if (hg_h_lock_lockVec_1_cnt$EN) - hg_h_lock_lockVec_1_cnt <= `BSV_ASSIGNMENT_DELAY - hg_h_lock_lockVec_1_cnt$D_IN; - if (hg_h_lock_lockVec_1_nextId$EN) - hg_h_lock_lockVec_1_nextId <= `BSV_ASSIGNMENT_DELAY - hg_h_lock_lockVec_1_nextId$D_IN; - if (hg_h_lock_lockVec_2_cnt$EN) - hg_h_lock_lockVec_2_cnt <= `BSV_ASSIGNMENT_DELAY - hg_h_lock_lockVec_2_cnt$D_IN; - if (hg_h_lock_lockVec_2_nextId$EN) - hg_h_lock_lockVec_2_nextId <= `BSV_ASSIGNMENT_DELAY - hg_h_lock_lockVec_2_nextId$D_IN; - if (hg_h_lock_lockVec_3_cnt$EN) - hg_h_lock_lockVec_3_cnt <= `BSV_ASSIGNMENT_DELAY - hg_h_lock_lockVec_3_cnt$D_IN; - if (hg_h_lock_lockVec_3_nextId$EN) - hg_h_lock_lockVec_3_nextId <= `BSV_ASSIGNMENT_DELAY - hg_h_lock_lockVec_3_nextId$D_IN; - if (hg_h_lock_region$EN) - hg_h_lock_region <= `BSV_ASSIGNMENT_DELAY hg_h_lock_region$D_IN; - if (hg_weight_lock_entryVec_0$EN) - hg_weight_lock_entryVec_0 <= `BSV_ASSIGNMENT_DELAY - hg_weight_lock_entryVec_0$D_IN; - if (hg_weight_lock_entryVec_1$EN) - hg_weight_lock_entryVec_1 <= `BSV_ASSIGNMENT_DELAY - hg_weight_lock_entryVec_1$D_IN; - if (hg_weight_lock_entryVec_2$EN) - hg_weight_lock_entryVec_2 <= `BSV_ASSIGNMENT_DELAY - hg_weight_lock_entryVec_2$D_IN; - if (hg_weight_lock_entryVec_3$EN) - hg_weight_lock_entryVec_3 <= `BSV_ASSIGNMENT_DELAY - hg_weight_lock_entryVec_3$D_IN; - if (hg_weight_lock_lockVec_0_cnt$EN) - hg_weight_lock_lockVec_0_cnt <= `BSV_ASSIGNMENT_DELAY - hg_weight_lock_lockVec_0_cnt$D_IN; - if (hg_weight_lock_lockVec_0_nextId$EN) - hg_weight_lock_lockVec_0_nextId <= `BSV_ASSIGNMENT_DELAY - hg_weight_lock_lockVec_0_nextId$D_IN; - if (hg_weight_lock_lockVec_1_cnt$EN) - hg_weight_lock_lockVec_1_cnt <= `BSV_ASSIGNMENT_DELAY - hg_weight_lock_lockVec_1_cnt$D_IN; - if (hg_weight_lock_lockVec_1_nextId$EN) - hg_weight_lock_lockVec_1_nextId <= `BSV_ASSIGNMENT_DELAY - hg_weight_lock_lockVec_1_nextId$D_IN; - if (hg_weight_lock_lockVec_2_cnt$EN) - hg_weight_lock_lockVec_2_cnt <= `BSV_ASSIGNMENT_DELAY - hg_weight_lock_lockVec_2_cnt$D_IN; - if (hg_weight_lock_lockVec_2_nextId$EN) - hg_weight_lock_lockVec_2_nextId <= `BSV_ASSIGNMENT_DELAY - hg_weight_lock_lockVec_2_nextId$D_IN; - if (hg_weight_lock_lockVec_3_cnt$EN) - hg_weight_lock_lockVec_3_cnt <= `BSV_ASSIGNMENT_DELAY - hg_weight_lock_lockVec_3_cnt$D_IN; - if (hg_weight_lock_lockVec_3_nextId$EN) - hg_weight_lock_lockVec_3_nextId <= `BSV_ASSIGNMENT_DELAY - hg_weight_lock_lockVec_3_nextId$D_IN; - if (hg_weight_lock_region$EN) - hg_weight_lock_region <= `BSV_ASSIGNMENT_DELAY - hg_weight_lock_region$D_IN; - end - end - - // synopsys translate_off - `ifdef BSV_NO_INITIAL_BLOCKS - `else // not BSV_NO_INITIAL_BLOCKS - initial - begin - hg = 3'h2; - hg_busyReg = 1'h0; - hg_feature_lock_entryVec_0 = 11'h2AA; - hg_feature_lock_entryVec_1 = 11'h2AA; - hg_feature_lock_entryVec_2 = 11'h2AA; - hg_feature_lock_entryVec_3 = 11'h2AA; - hg_feature_lock_lockVec_0_cnt = 2'h2; - hg_feature_lock_lockVec_0_nextId = 2'h2; - hg_feature_lock_lockVec_1_cnt = 2'h2; - hg_feature_lock_lockVec_1_nextId = 2'h2; - hg_feature_lock_lockVec_2_cnt = 2'h2; - hg_feature_lock_lockVec_2_nextId = 2'h2; - hg_feature_lock_lockVec_3_cnt = 2'h2; - hg_feature_lock_lockVec_3_nextId = 2'h2; - hg_feature_lock_region = 1'h0; - hg_h_lock_entryVec_0 = 11'h2AA; - hg_h_lock_entryVec_1 = 11'h2AA; - hg_h_lock_entryVec_2 = 11'h2AA; - hg_h_lock_entryVec_3 = 11'h2AA; - hg_h_lock_lockVec_0_cnt = 2'h2; - hg_h_lock_lockVec_0_nextId = 2'h2; - hg_h_lock_lockVec_1_cnt = 2'h2; - hg_h_lock_lockVec_1_nextId = 2'h2; - hg_h_lock_lockVec_2_cnt = 2'h2; - hg_h_lock_lockVec_2_nextId = 2'h2; - hg_h_lock_lockVec_3_cnt = 2'h2; - hg_h_lock_lockVec_3_nextId = 2'h2; - hg_h_lock_region = 1'h0; - hg_weight_lock_entryVec_0 = 11'h2AA; - hg_weight_lock_entryVec_1 = 11'h2AA; - hg_weight_lock_entryVec_2 = 11'h2AA; - hg_weight_lock_entryVec_3 = 11'h2AA; - hg_weight_lock_lockVec_0_cnt = 2'h2; - hg_weight_lock_lockVec_0_nextId = 2'h2; - hg_weight_lock_lockVec_1_cnt = 2'h2; - hg_weight_lock_lockVec_1_nextId = 2'h2; - hg_weight_lock_lockVec_2_cnt = 2'h2; - hg_weight_lock_lockVec_2_nextId = 2'h2; - hg_weight_lock_lockVec_3_cnt = 2'h2; - hg_weight_lock_lockVec_3_nextId = 2'h2; - hg_weight_lock_region = 1'h0; - end - `endif // BSV_NO_INITIAL_BLOCKS - // synopsys translate_on - - // handling of system tasks - - // synopsys translate_off - always@(negedge CLK) - begin - #0; - if (RST_N != `BSV_RESET_VALUE) - if (WILL_FIRE_RL_hg_s_Stage__1_execute) - $display($unsigned(h_rf_sub_hg_fifo_Start_TO_Stage__1_first__68_B_ETC___d235)); - end - // synopsys translate_on -endmodule // mkCircuit - diff --git a/src/main/scala/pipedsl/testOutputs/Circuit_verilog/mkTB.v b/src/main/scala/pipedsl/testOutputs/Circuit_verilog/mkTB.v deleted file mode 100644 index 1d1c028e..00000000 --- a/src/main/scala/pipedsl/testOutputs/Circuit_verilog/mkTB.v +++ /dev/null @@ -1,118 +0,0 @@ -// -// Generated by Bluespec Compiler -// -// -// Ports: -// Name I/O size props -// CLK I 1 clock -// RST_N I 1 reset -// -// No combinational paths from inputs to outputs -// -// - -`ifdef BSV_ASSIGNMENT_DELAY -`else - `define BSV_ASSIGNMENT_DELAY -`endif - -`ifdef BSV_POSITIVE_RESET - `define BSV_RESET_VALUE 1'b1 - `define BSV_RESET_EDGE posedge -`else - `define BSV_RESET_VALUE 1'b0 - `define BSV_RESET_EDGE negedge -`endif - -module mkTB(CLK, - RST_N); - input CLK; - input RST_N; - - // register reg_unused_0 - reg [2 : 0] reg_unused_0; - wire [2 : 0] reg_unused_0$D_IN; - wire reg_unused_0$EN; - - // register started - reg started; - wire started$D_IN, started$EN; - - // ports of submodule m - wire [9 : 0] m$_inthg_req_counter; - wire [2 : 0] m$_inthg_checkHandle_handle, m$_inthg_req; - wire m$EN__inthg_req, - m$EN__inthg_resp, - m$RDY__inthg_checkHandle, - m$RDY__inthg_req, - m$_inthg_checkHandle; - - // submodule m - mkCircuit m(.CLK(CLK), - .RST_N(RST_N), - ._inthg_checkHandle_handle(m$_inthg_checkHandle_handle), - ._inthg_req_counter(m$_inthg_req_counter), - .EN__inthg_req(m$EN__inthg_req), - .EN__inthg_resp(m$EN__inthg_resp), - ._inthg_req(m$_inthg_req), - .RDY__inthg_req(m$RDY__inthg_req), - .RDY__inthg_resp(), - ._inthg_checkHandle(m$_inthg_checkHandle), - .RDY__inthg_checkHandle(m$RDY__inthg_checkHandle), - ._inthg_peek(), - .RDY__inthg_peek()); - - // register reg_unused_0 - assign reg_unused_0$D_IN = m$_inthg_req ; - assign reg_unused_0$EN = m$RDY__inthg_req && !started ; - - // register started - assign started$D_IN = 1'd1 ; - assign started$EN = m$RDY__inthg_req && !started ; - - // submodule m - assign m$_inthg_checkHandle_handle = reg_unused_0 ; - assign m$_inthg_req_counter = 10'd0 ; - assign m$EN__inthg_req = m$RDY__inthg_req && !started ; - assign m$EN__inthg_resp = 1'b0 ; - - // handling of inlined registers - - always@(posedge CLK) - begin - if (RST_N == `BSV_RESET_VALUE) - begin - reg_unused_0 <= `BSV_ASSIGNMENT_DELAY 3'd0; - started <= `BSV_ASSIGNMENT_DELAY 1'd0; - end - else - begin - if (reg_unused_0$EN) - reg_unused_0 <= `BSV_ASSIGNMENT_DELAY reg_unused_0$D_IN; - if (started$EN) started <= `BSV_ASSIGNMENT_DELAY started$D_IN; - end - end - - // synopsys translate_off - `ifdef BSV_NO_INITIAL_BLOCKS - `else // not BSV_NO_INITIAL_BLOCKS - initial - begin - reg_unused_0 = 3'h2; - started = 1'h0; - end - `endif // BSV_NO_INITIAL_BLOCKS - // synopsys translate_on - - // handling of system tasks - - // synopsys translate_off - always@(negedge CLK) - begin - #0; - if (RST_N != `BSV_RESET_VALUE) - if (m$RDY__inthg_checkHandle && m$_inthg_checkHandle) $finish(32'd1); - end - // synopsys translate_on -endmodule // mkTB - diff --git a/src/main/scala/pipedsl/testOutputs/Cpu.bsv b/src/main/scala/pipedsl/testOutputs/Cpu.bsv deleted file mode 100644 index 24762506..00000000 --- a/src/main/scala/pipedsl/testOutputs/Cpu.bsv +++ /dev/null @@ -1,258 +0,0 @@ -import FIFOF :: *; -import Locks :: *; -import Memories :: *; -import Functions :: *; -import Multi_stg_mul :: *; -import Multi_stg_div :: *; - -export Cpu (..); -export mkCpu ; - -typedef struct { UInt#(16) pc; UInt#(4) _threadID ; } E__input__TO_Start deriving( Bits,Eq ); -typedef struct { Bool __condStage__16; UInt#(4) _threadID ; } E_Stage__5_TO_Stage__15 deriving( Bits,Eq ); -typedef struct { UInt#(2) _request_2; UInt#(5) rd; Maybe#( LockId#(4) ) _lock_id_rf_rd; UInt#(4) _threadID ; } E_Stage__5_TO_Stage__10 deriving( Bits,Eq ); -typedef struct { UInt#(32) res; UInt#(5) rd; Maybe#( LockId#(4) ) _lock_id_rf_rd; UInt#(4) _threadID ; } E_Stage__7_TO_Stage__15 deriving( Bits,Eq ); -typedef struct { UInt#(2) op; UInt#(32) rf2; UInt#(32) rf1; Maybe#( LockId#(4) ) _lock_id_rf_rd; UInt#(5) rd; UInt#(4) _threadID ; } E_Stage__4_TO_Stage__5 deriving( Bits,Eq ); -typedef struct { UInt#(32) res; UInt#(5) rd; Maybe#( LockId#(4) ) _lock_id_rf_rd; UInt#(4) _threadID ; } E_Stage__10_TO_Stage__13 deriving( Bits,Eq ); -typedef struct { UInt#(32) res; UInt#(5) rd; Maybe#( LockId#(4) ) _lock_id_rf_rd; UInt#(4) _threadID ; } E_Stage__12_TO_Stage__13 deriving( Bits,Eq ); -typedef struct { MemId#(8) _request_1; UInt#(4) _threadID ; } E_Start_TO_Stage__4 deriving( Bits,Eq ); -typedef struct { UInt#(1) _request_3; UInt#(5) rd; Maybe#( LockId#(4) ) _lock_id_rf_rd; UInt#(4) _threadID ; } E_Stage__5_TO_Stage__12 deriving( Bits,Eq ); -typedef struct { UInt#(4) _threadID ; } E_Stage__15_TO_Stage__17 deriving( Bits,Eq ); -typedef struct { UInt#(32) rf2; UInt#(32) rf1; Maybe#( LockId#(4) ) _lock_id_rf_rd; UInt#(5) rd; UInt#(4) _threadID ; } E_Stage__5_TO_Stage__7 deriving( Bits,Eq ); -typedef struct { UInt#(32) res; UInt#(5) rd; Maybe#( LockId#(4) ) _lock_id_rf_rd; UInt#(4) _threadID ; } E_Stage__13_TO_Stage__15 deriving( Bits,Eq ); -typedef struct { Bool __condStage__14; UInt#(4) _threadID ; } E_Stage__5_TO_Stage__13 deriving( Bits,Eq ); -typedef struct { UInt#(4) handle ; } OutputQueueInfo deriving( Bits,Eq ); - -interface Cpu; - method ActionValue#(UInt#(4)) req ( UInt#(16) pc ) ; - method Action resp ( ) ; - method Bool checkHandle ( UInt#(4) handle ) ; -endinterface - - -module mkCpu ( CombMem#( UInt#(32), UInt#(5) ) rf, AsyncMem#( UInt#(32), UInt#(16), MemId#(8) ) imem, Multi_stg_mul m, Multi_stg_div f, Cpu _unused_ ); - FIFOF#( E_Stage__5_TO_Stage__15 ) fifo_Stage__5_TO_Stage__15 <- mkFIFOF ( ); - FIFOF#( E_Stage__5_TO_Stage__10 ) fifo_Stage__5_TO_Stage__10 <- mkFIFOF ( ); - FIFOF#( E_Stage__7_TO_Stage__15 ) fifo_Stage__7_TO_Stage__15 <- mkFIFOF ( ); - FIFOF#( E_Stage__4_TO_Stage__5 ) fifo_Stage__4_TO_Stage__5 <- mkFIFOF ( ); - FIFOF#( E_Stage__10_TO_Stage__13 ) fifo_Stage__10_TO_Stage__13 <- mkFIFOF ( ); - FIFOF#( E_Stage__12_TO_Stage__13 ) fifo_Stage__12_TO_Stage__13 <- mkFIFOF ( ); - FIFOF#( E_Start_TO_Stage__4 ) fifo_Start_TO_Stage__4 <- mkFIFOF ( ); - FIFOF#( E_Stage__5_TO_Stage__12 ) fifo_Stage__5_TO_Stage__12 <- mkFIFOF ( ); - FIFOF#( E__input__TO_Start ) fifo__input__TO_Start <- mkFIFOF ( ); - FIFOF#( E_Stage__15_TO_Stage__17 ) fifo_Stage__15_TO_Stage__17 <- mkFIFOF ( ); - FIFOF#( E_Stage__5_TO_Stage__7 ) fifo_Stage__5_TO_Stage__7 <- mkFIFOF ( ); - FIFOF#( E_Stage__13_TO_Stage__15 ) fifo_Stage__13_TO_Stage__15 <- mkFIFOF ( ); - FIFOF#( E_Stage__5_TO_Stage__13 ) fifo_Stage__5_TO_Stage__13 <- mkFIFOF ( ); - AddrLock#( LockId#(4), UInt#(5), 4 ) rf_lock <- mkFAAddrLock ( ); - Lock#( LockId#(4) ) imem_lock <- mkLock ( ); - Lock#( LockId#(4) ) m_lock <- mkLock ( ); - Lock#( LockId#(4) ) f_lock <- mkLock ( ); - Reg#( Bool ) rf_lock_region <- mkReg ( True ); - Reg#( Bool ) imem_lock_region <- mkReg ( True ); - Reg#( Bool ) m_lock_region <- mkReg ( True ); - Reg#( Bool ) f_lock_region <- mkReg ( True ); - Reg#( Bool ) busyReg <- mkReg ( False ); - FIFOF#( OutputQueueInfo ) outputQueue <- mkFIFOF ( ); - Reg#( UInt#(4) ) _threadID <- mkReg ( 0 ); - UInt#(4) _Stage__17__threadID = fifo_Stage__15_TO_Stage__17.first()._threadID; - UInt#(2) _Stage__5_op = fifo_Stage__4_TO_Stage__5.first().op; - UInt#(32) _Stage__5_rf2 = fifo_Stage__4_TO_Stage__5.first().rf2; - UInt#(32) _Stage__5_rf1 = fifo_Stage__4_TO_Stage__5.first().rf1; - Maybe#( LockId#(4) ) _Stage__5__lock_id_rf_rd = fifo_Stage__4_TO_Stage__5.first()._lock_id_rf_rd; - UInt#(5) _Stage__5_rd = fifo_Stage__4_TO_Stage__5.first().rd; - UInt#(4) _Stage__5__threadID = fifo_Stage__4_TO_Stage__5.first()._threadID; - Bool _Stage__5___condStage__16 = ?; - Bool _Stage__5___condStage__14 = ?; - UInt#(32) _Stage__5_carg_5 = ?; - UInt#(32) _Stage__5_carg_6 = ?; - UInt#(32) _Stage__5_carg_7 = ?; - UInt#(32) _Stage__5_carg_8 = ?; - UInt#(32) _Stage__5_carg_9 = ?; - UInt#(32) _Stage__5_carg_10 = ?; - UInt#(5) _Stage__5_carg_11 = ?; - _Stage__5___condStage__16 = ( _Stage__5_op == 2'd0 ); - if ( ( ! _Stage__5___condStage__16 )) - begin - _Stage__5___condStage__14 = ( _Stage__5_op == 2'd1 ); - end - if ( ( ( ! _Stage__5___condStage__16 ) && _Stage__5___condStage__14 )) - begin - _Stage__5_carg_5 = _Stage__5_rf1; - _Stage__5_carg_6 = _Stage__5_rf2; - end - if ( ( ( ! _Stage__5___condStage__16 ) && ( ! _Stage__5___condStage__14 ) )) - begin - _Stage__5_carg_7 = _Stage__5_rf1; - _Stage__5_carg_8 = _Stage__5_rf2; - _Stage__5_carg_9 = 32'd0; - _Stage__5_carg_10 = 32'd0; - _Stage__5_carg_11 = 5'd0; - end - UInt#(1) _Stage__12__request_3 = fifo_Stage__5_TO_Stage__12.first()._request_3; - UInt#(5) _Stage__12_rd = fifo_Stage__5_TO_Stage__12.first().rd; - Maybe#( LockId#(4) ) _Stage__12__lock_id_rf_rd = fifo_Stage__5_TO_Stage__12.first()._lock_id_rf_rd; - UInt#(4) _Stage__12__threadID = fifo_Stage__5_TO_Stage__12.first()._threadID; - UInt#(32) _Stage__12_res = ?; - _Stage__12_res = f.peek(); - MemId#(8) _Stage__4__request_1 = fifo_Start_TO_Stage__4.first()._request_1; - UInt#(4) _Stage__4__threadID = fifo_Start_TO_Stage__4.first()._threadID; - UInt#(32) _Stage__4_insn = ?; - UInt#(2) _Stage__4_op = ?; - UInt#(5) _Stage__4_rs1 = ?; - UInt#(5) _Stage__4_rs2 = ?; - UInt#(5) _Stage__4_rd = ?; - UInt#(32) _Stage__4_rf1 = ?; - UInt#(32) _Stage__4_rf2 = ?; - _Stage__4_insn = imem.peekResp(_Stage__4__request_1); - _Stage__4_op = unpack( pack( _Stage__4_insn ) [ 1 : 0 ] ); - _Stage__4_rs1 = unpack( pack( _Stage__4_insn ) [ 6 : 2 ] ); - _Stage__4_rs2 = unpack( pack( _Stage__4_insn ) [ 11 : 7 ] ); - _Stage__4_rd = unpack( pack( _Stage__4_insn ) [ 16 : 12 ] ); - _Stage__4_rf1 = rf.read(_Stage__4_rs1); - _Stage__4_rf2 = rf.read(_Stage__4_rs2); - UInt#(16) _Start_pc = fifo__input__TO_Start.first().pc; - UInt#(4) _Start__threadID = fifo__input__TO_Start.first()._threadID; - Bool _Start___condStage__3 = ?; - UInt#(16) _Start_carg_4 = ?; - _Start___condStage__3 = ( _Start_pc < 16'd14 ); - if ( _Start___condStage__3) - begin - _Start_carg_4 = ( _Start_pc + 16'd1 ); - end - Bool _Stage__13___condStage__14 = fifo_Stage__5_TO_Stage__13.first().__condStage__14; - UInt#(4) _Stage__13__threadID = fifo_Stage__5_TO_Stage__13.first()._threadID; - UInt#(32) _Stage__13_res = ( ( ! _Stage__13___condStage__14 ) ? fifo_Stage__12_TO_Stage__13.first().res : ( _Stage__13___condStage__14 ? fifo_Stage__10_TO_Stage__13.first().res : ? ) ); - UInt#(5) _Stage__13_rd = ( ( ! _Stage__13___condStage__14 ) ? fifo_Stage__12_TO_Stage__13.first().rd : ( _Stage__13___condStage__14 ? fifo_Stage__10_TO_Stage__13.first().rd : ? ) ); - Maybe#( LockId#(4) ) _Stage__13__lock_id_rf_rd = ( ( ! _Stage__13___condStage__14 ) ? fifo_Stage__12_TO_Stage__13.first()._lock_id_rf_rd : ( _Stage__13___condStage__14 ? fifo_Stage__10_TO_Stage__13.first()._lock_id_rf_rd : ? ) ); - Bool _Stage__15___condStage__16 = fifo_Stage__5_TO_Stage__15.first().__condStage__16; - UInt#(4) _Stage__15__threadID = fifo_Stage__5_TO_Stage__15.first()._threadID; - UInt#(32) _Stage__15_res = ( ( ! _Stage__15___condStage__16 ) ? fifo_Stage__13_TO_Stage__15.first().res : ( _Stage__15___condStage__16 ? fifo_Stage__7_TO_Stage__15.first().res : ? ) ); - UInt#(5) _Stage__15_rd = ( ( ! _Stage__15___condStage__16 ) ? fifo_Stage__13_TO_Stage__15.first().rd : ( _Stage__15___condStage__16 ? fifo_Stage__7_TO_Stage__15.first().rd : ? ) ); - Maybe#( LockId#(4) ) _Stage__15__lock_id_rf_rd = ( ( ! _Stage__15___condStage__16 ) ? fifo_Stage__13_TO_Stage__15.first()._lock_id_rf_rd : ( _Stage__15___condStage__16 ? fifo_Stage__7_TO_Stage__15.first()._lock_id_rf_rd : ? ) ); - UInt#(2) _Stage__10__request_2 = fifo_Stage__5_TO_Stage__10.first()._request_2; - UInt#(5) _Stage__10_rd = fifo_Stage__5_TO_Stage__10.first().rd; - Maybe#( LockId#(4) ) _Stage__10__lock_id_rf_rd = fifo_Stage__5_TO_Stage__10.first()._lock_id_rf_rd; - UInt#(4) _Stage__10__threadID = fifo_Stage__5_TO_Stage__10.first()._threadID; - UInt#(32) _Stage__10_res = ?; - _Stage__10_res = m.peek(); - UInt#(32) _Stage__7_rf2 = fifo_Stage__5_TO_Stage__7.first().rf2; - UInt#(32) _Stage__7_rf1 = fifo_Stage__5_TO_Stage__7.first().rf1; - Maybe#( LockId#(4) ) _Stage__7__lock_id_rf_rd = fifo_Stage__5_TO_Stage__7.first()._lock_id_rf_rd; - UInt#(5) _Stage__7_rd = fifo_Stage__5_TO_Stage__7.first().rd; - UInt#(4) _Stage__7__threadID = fifo_Stage__5_TO_Stage__7.first()._threadID; - UInt#(32) _Stage__7_res = ?; - _Stage__7_res = ( _Stage__7_rf1 + _Stage__7_rf2 ); - rule s_Stage__17_execute ; - fifo_Stage__15_TO_Stage__17.deq(); - $display("cpu:Thread %d:Executing Stage Stage__17 %t", _Stage__17__threadID,$time() ); - endrule - rule s_Stage__5_execute (( ( ! ( ( ! _Stage__5___condStage__16 ) && _Stage__5___condStage__14 ) ) || m_lock.isEmpty() ) && ( ( ! ( ( ! _Stage__5___condStage__16 ) && ( ! _Stage__5___condStage__14 ) ) ) || f_lock.isEmpty() )); - UInt#(2) _Stage__5__request_2 = ?; - UInt#(1) _Stage__5__request_3 = ?; - if ( ( ( ! _Stage__5___condStage__16 ) && _Stage__5___condStage__14 )) - begin - _Stage__5__request_2 <- m.req(_Stage__5_carg_5, _Stage__5_carg_6); - end - if ( ( ( ! _Stage__5___condStage__16 ) && ( ! _Stage__5___condStage__14 ) )) - begin - _Stage__5__request_3 <- f.req(_Stage__5_carg_7, _Stage__5_carg_8, _Stage__5_carg_9, _Stage__5_carg_10, _Stage__5_carg_11); - end - fifo_Stage__5_TO_Stage__15.enq(E_Stage__5_TO_Stage__15 { __condStage__16 : _Stage__5___condStage__16,_threadID : _Stage__5__threadID }); - if ( ( ( ! _Stage__5___condStage__16 ) && _Stage__5___condStage__14 )) - begin - fifo_Stage__5_TO_Stage__10.enq(E_Stage__5_TO_Stage__10 { _request_2 : _Stage__5__request_2,rd : _Stage__5_rd,_lock_id_rf_rd : _Stage__5__lock_id_rf_rd,_threadID : _Stage__5__threadID }); - end - fifo_Stage__4_TO_Stage__5.deq(); - if ( ( ( ! _Stage__5___condStage__16 ) && ( ! _Stage__5___condStage__14 ) )) - begin - fifo_Stage__5_TO_Stage__12.enq(E_Stage__5_TO_Stage__12 { _request_3 : _Stage__5__request_3,rd : _Stage__5_rd,_lock_id_rf_rd : _Stage__5__lock_id_rf_rd,_threadID : _Stage__5__threadID }); - end - if ( ( ! _Stage__5___condStage__16 )) - begin - fifo_Stage__5_TO_Stage__13.enq(E_Stage__5_TO_Stage__13 { __condStage__14 : _Stage__5___condStage__14,_threadID : _Stage__5__threadID }); - end - if ( _Stage__5___condStage__16) - begin - fifo_Stage__5_TO_Stage__7.enq(E_Stage__5_TO_Stage__7 { rf2 : _Stage__5_rf2,rf1 : _Stage__5_rf1,rd : _Stage__5_rd,_threadID : _Stage__5__threadID,_lock_id_rf_rd : _Stage__5__lock_id_rf_rd }); - end - $display("cpu:Thread %d:Executing Stage Stage__5 %t", _Stage__5__threadID,$time() ); - endrule - rule s_Stage__12_execute (f.checkHandle(_Stage__12__request_3)); - f.resp(); - fifo_Stage__12_TO_Stage__13.enq(E_Stage__12_TO_Stage__13 { res : _Stage__12_res,rd : _Stage__12_rd,_lock_id_rf_rd : _Stage__12__lock_id_rf_rd,_threadID : _Stage__12__threadID }); - fifo_Stage__5_TO_Stage__12.deq(); - $display("cpu:Thread %d:Executing Stage Stage__12 %t", _Stage__12__threadID,$time() ); - endrule - rule s_Stage__4_execute (imem.checkRespId(_Stage__4__request_1) && rf_lock.isEmpty(_Stage__4_rs1) && rf_lock.isEmpty(_Stage__4_rs2) && rf_lock.canRes(_Stage__4_rd)); - Maybe#( LockId#(4) ) _Stage__4__lock_id_rf_rd = ?; - imem.resp(_Stage__4__request_1); - _Stage__4__lock_id_rf_rd <- rf_lock.res(_Stage__4_rd); - fifo_Stage__4_TO_Stage__5.enq(E_Stage__4_TO_Stage__5 { rf1 : _Stage__4_rf1,op : _Stage__4_op,_threadID : _Stage__4__threadID,_lock_id_rf_rd : _Stage__4__lock_id_rf_rd,rd : _Stage__4_rd,rf2 : _Stage__4_rf2 }); - fifo_Start_TO_Stage__4.deq(); - $display("cpu:Thread %d:Executing Stage Stage__4 %t", _Stage__4__threadID,$time() ); - endrule - rule s_Start_execute (imem_lock.isEmpty()); - MemId#(8) _Start__request_1 = ?; - if ( _Start___condStage__3) - begin - fifo__input__TO_Start.enq(E__input__TO_Start { pc : _Start_carg_4,_threadID : _Start__threadID }); - end - _Start__request_1 <- imem.req(_Start_pc, ?, False); - fifo__input__TO_Start.deq(); - fifo_Start_TO_Stage__4.enq(E_Start_TO_Stage__4 { _request_1 : _Start__request_1,_threadID : _Start__threadID }); - $display("cpu:Thread %d:Executing Stage Start %t", _Start__threadID,$time() ); - endrule - rule s_Stage__13_execute ; - if ( _Stage__13___condStage__14) - begin - fifo_Stage__10_TO_Stage__13.deq(); - end - if ( ( ! _Stage__13___condStage__14 )) - begin - fifo_Stage__12_TO_Stage__13.deq(); - end - fifo_Stage__13_TO_Stage__15.enq(E_Stage__13_TO_Stage__15 { res : _Stage__13_res,rd : _Stage__13_rd,_lock_id_rf_rd : _Stage__13__lock_id_rf_rd,_threadID : _Stage__13__threadID }); - fifo_Stage__5_TO_Stage__13.deq(); - $display("cpu:Thread %d:Executing Stage Stage__13 %t", _Stage__13__threadID,$time() ); - endrule - rule s_Stage__15_execute (rf_lock.owns(fromMaybe( 0 , _Stage__15__lock_id_rf_rd ), _Stage__15_rd)); - $display(_Stage__15_res); - rf.write(_Stage__15_rd, _Stage__15_res); - rf_lock.rel(fromMaybe( 0 , _Stage__15__lock_id_rf_rd ), _Stage__15_rd); - if ( _Stage__15___condStage__16) - begin - fifo_Stage__7_TO_Stage__15.deq(); - end - if ( ( ! _Stage__15___condStage__16 )) - begin - fifo_Stage__13_TO_Stage__15.deq(); - end - fifo_Stage__15_TO_Stage__17.enq(E_Stage__15_TO_Stage__17 { _threadID : _Stage__15__threadID }); - fifo_Stage__5_TO_Stage__15.deq(); - $display("cpu:Thread %d:Executing Stage Stage__15 %t", _Stage__15__threadID,$time() ); - endrule - rule s_Stage__10_execute (m.checkHandle(_Stage__10__request_2)); - m.resp(); - fifo_Stage__10_TO_Stage__13.enq(E_Stage__10_TO_Stage__13 { res : _Stage__10_res,rd : _Stage__10_rd,_lock_id_rf_rd : _Stage__10__lock_id_rf_rd,_threadID : _Stage__10__threadID }); - fifo_Stage__5_TO_Stage__10.deq(); - $display("cpu:Thread %d:Executing Stage Stage__10 %t", _Stage__10__threadID,$time() ); - endrule - rule s_Stage__7_execute ; - fifo_Stage__7_TO_Stage__15.enq(E_Stage__7_TO_Stage__15 { res : _Stage__7_res,rd : _Stage__7_rd,_lock_id_rf_rd : _Stage__7__lock_id_rf_rd,_threadID : _Stage__7__threadID }); - fifo_Stage__5_TO_Stage__7.deq(); - $display("cpu:Thread %d:Executing Stage Stage__7 %t", _Stage__7__threadID,$time() ); - endrule - method ActionValue#(UInt#(4)) req ( UInt#(16) pc ) if( ( ! busyReg ) ); - fifo__input__TO_Start.enq(E__input__TO_Start { pc : pc,_threadID : _threadID }); - busyReg <= True; - _threadID <= ( _threadID + 1 ); - return _threadID; - endmethod - method Action resp ( ) ; - outputQueue.deq(); - endmethod - method Bool checkHandle ( UInt#(4) handle ) ; - return ( handle == outputQueue.first().handle ); - endmethod -endmodule diff --git a/src/main/scala/pipedsl/testOutputs/Functions.bsv b/src/main/scala/pipedsl/testOutputs/Functions.bsv deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/scala/pipedsl/testOutputs/Hist.bsv b/src/main/scala/pipedsl/testOutputs/Hist.bsv deleted file mode 100644 index d87fee67..00000000 --- a/src/main/scala/pipedsl/testOutputs/Hist.bsv +++ /dev/null @@ -1,107 +0,0 @@ -import FIFOF :: *; -import Locks :: *; -import Memories :: *; -import Functions :: *; - -export Hist (..); -export mkHist ; - -typedef struct { UInt#(10) counter; UInt#(3) _threadID ; } E__input__TO_Start deriving( Bits,Eq ); -typedef struct { UInt#(10) m; UInt#(32) wt; UInt#(3) _threadID ; } E_Start_TO_Stage__1 deriving( Bits,Eq ); -typedef struct { UInt#(10) m; UInt#(32) nm; Maybe#( LockId#(4) ) _lock_id_h_m; UInt#(3) _threadID ; } E_Stage__1_TO_Stage__2 deriving( Bits,Eq ); -typedef struct { UInt#(3) _threadID ; } E_Stage__2_TO_Stage__3 deriving( Bits,Eq ); -typedef struct { UInt#(3) handle; Bool data ; } OutputQueueInfo deriving( Bits,Eq ); - -interface Hist; - method ActionValue#(UInt#(3)) req ( UInt#(10) counter ) ; - method Action resp ( ) ; - method Bool checkHandle ( UInt#(3) handle ) ; - method Bool peek ( ) ; -endinterface - - -module mkHist ( CombMem#( UInt#(10), UInt#(10) ) feature, CombMem#( UInt#(32), UInt#(10) ) weight, CombMem#( UInt#(32), UInt#(10) ) h, Hist _unused_ ); - FIFOF#( E__input__TO_Start ) fifo__input__TO_Start <- mkFIFOF ( ); - FIFOF#( E_Start_TO_Stage__1 ) fifo_Start_TO_Stage__1 <- mkFIFOF ( ); - FIFOF#( E_Stage__1_TO_Stage__2 ) fifo_Stage__1_TO_Stage__2 <- mkFIFOF ( ); - FIFOF#( E_Stage__2_TO_Stage__3 ) fifo_Stage__2_TO_Stage__3 <- mkFIFOF ( ); - AddrLock#( LockId#(4), UInt#(10), 4 ) feature_lock <- mkFAAddrLock ( ); - AddrLock#( LockId#(4), UInt#(10), 4 ) weight_lock <- mkFAAddrLock ( ); - AddrLock#( LockId#(4), UInt#(10), 4 ) h_lock <- mkFAAddrLock ( ); - Reg#( Bool ) feature_lock_region <- mkReg ( True ); - Reg#( Bool ) weight_lock_region <- mkReg ( True ); - Reg#( Bool ) h_lock_region <- mkReg ( True ); - Reg#( Bool ) busyReg <- mkReg ( False ); - FIFOF#( OutputQueueInfo ) outputQueue <- mkFIFOF ( ); - Reg#( UInt#(3) ) _threadID <- mkReg ( 0 ); - UInt#(10) _Start_counter = fifo__input__TO_Start.first().counter; - UInt#(3) _Start__threadID = fifo__input__TO_Start.first()._threadID; - Bool _Start___condStage__6 = ?; - UInt#(10) _Start_carg = ?; - UInt#(10) _Start_m = ?; - UInt#(32) _Start_wt = ?; - _Start___condStage__6 = ( _Start_counter < 10'd1000 ); - if ( _Start___condStage__6) - begin - _Start_carg = ( _Start_counter + 10'd1 ); - _Start_m = feature.read(_Start_counter); - _Start_wt = weight.read(_Start_counter); - end - UInt#(10) _Stage__1_m = fifo_Start_TO_Stage__1.first().m; - UInt#(32) _Stage__1_wt = fifo_Start_TO_Stage__1.first().wt; - UInt#(3) _Stage__1__threadID = fifo_Start_TO_Stage__1.first()._threadID; - UInt#(32) _Stage__1_nm = ?; - _Stage__1_nm = ( h.read(_Stage__1_m) + _Stage__1_wt ); - UInt#(10) _Stage__2_m = fifo_Stage__1_TO_Stage__2.first().m; - UInt#(32) _Stage__2_nm = fifo_Stage__1_TO_Stage__2.first().nm; - Maybe#( LockId#(4) ) _Stage__2__lock_id_h_m = fifo_Stage__1_TO_Stage__2.first()._lock_id_h_m; - UInt#(3) _Stage__2__threadID = fifo_Stage__1_TO_Stage__2.first()._threadID; - UInt#(3) _Stage__3__threadID = fifo_Stage__2_TO_Stage__3.first()._threadID; - rule s_Start_execute (( ( ! ( ! _Start___condStage__6 ) ) || busyReg ) && ( ( ! _Start___condStage__6 ) || feature_lock.isEmpty(_Start_counter) ) && ( ( ! _Start___condStage__6 ) || weight_lock.isEmpty(_Start_counter) )); - if ( _Start___condStage__6) - begin - fifo__input__TO_Start.enq(E__input__TO_Start { counter : _Start_carg,_threadID : _Start__threadID }); - end - if ( ( ! _Start___condStage__6 )) - begin - busyReg <= False; - outputQueue.enq(OutputQueueInfo { data : True,handle : _Start__threadID }); - end - fifo__input__TO_Start.deq(); - if ( _Start___condStage__6) - begin - fifo_Start_TO_Stage__1.enq(E_Start_TO_Stage__1 { m : _Start_m,wt : _Start_wt,_threadID : _Start__threadID }); - end - endrule - rule s_Stage__1_execute (h_lock.canRes(_Stage__1_m) && h_lock.isEmpty(_Stage__1_m)); - Maybe#( LockId#(4) ) _Stage__1__lock_id_h_m = ?; - $display(_Stage__1_nm); - _Stage__1__lock_id_h_m <- h_lock.res(_Stage__1_m); - fifo_Stage__1_TO_Stage__2.enq(E_Stage__1_TO_Stage__2 { m : _Stage__1_m,nm : _Stage__1_nm,_lock_id_h_m : _Stage__1__lock_id_h_m,_threadID : _Stage__1__threadID }); - fifo_Start_TO_Stage__1.deq(); - endrule - rule s_Stage__2_execute ; - h.write(_Stage__2_m, _Stage__2_nm); - h_lock.rel(fromMaybe( 0 , _Stage__2__lock_id_h_m ), _Stage__2_m); - fifo_Stage__1_TO_Stage__2.deq(); - fifo_Stage__2_TO_Stage__3.enq(E_Stage__2_TO_Stage__3 { _threadID : _Stage__2__threadID }); - endrule - rule s_Stage__3_execute ; - fifo_Stage__2_TO_Stage__3.deq(); - endrule - method ActionValue#(UInt#(3)) req ( UInt#(10) counter ) if( ( ! busyReg ) ); - fifo__input__TO_Start.enq(E__input__TO_Start { counter : counter,_threadID : _threadID }); - busyReg <= True; - _threadID <= ( _threadID + 1 ); - return _threadID; - endmethod - method Action resp ( ) ; - outputQueue.deq(); - endmethod - method Bool peek ( ) ; - return outputQueue.first().data; - endmethod - method Bool checkHandle ( UInt#(3) handle ) ; - return ( handle == outputQueue.first().handle ); - endmethod -endmodule diff --git a/src/main/scala/pipedsl/testOutputs/Multi_stg_div.bsv b/src/main/scala/pipedsl/testOutputs/Multi_stg_div.bsv deleted file mode 100644 index 52ffb16f..00000000 --- a/src/main/scala/pipedsl/testOutputs/Multi_stg_div.bsv +++ /dev/null @@ -1,84 +0,0 @@ -import FIFOF :: *; -import Locks :: *; -import Memories :: *; -import Functions :: *; -import Multi_stg_mul :: *; - -export Multi_stg_div (..); -export mkMulti_stg_div ; - -typedef struct { UInt#(32) num; UInt#(32) denom; UInt#(32) quot; UInt#(32) acc; UInt#(5) cnt; UInt#(1) _threadID ; } E__input__TO_Start deriving( Bits,Eq ); -typedef struct { UInt#(1) handle; UInt#(32) data ; } OutputQueueInfo deriving( Bits,Eq ); - -interface Multi_stg_div; - method ActionValue#(UInt#(1)) req ( UInt#(32) num, UInt#(32) denom, UInt#(32) quot, UInt#(32) acc, UInt#(5) cnt ) ; - method Action resp ( ) ; - method Bool checkHandle ( UInt#(1) handle ) ; - method UInt#(32) peek ( ) ; -endinterface - - -(* synthesize *) -module mkMulti_stg_div ( Multi_stg_div _unused_ ); - FIFOF#( E__input__TO_Start ) fifo__input__TO_Start <- mkFIFOF ( ); - Reg#( Bool ) busyReg <- mkReg ( False ); - FIFOF#( OutputQueueInfo ) outputQueue <- mkFIFOF ( ); - Reg#( UInt#(1) ) _threadID <- mkReg ( 0 ); - UInt#(32) _Start_quot = fifo__input__TO_Start.first().quot; - UInt#(5) _Start_cnt = fifo__input__TO_Start.first().cnt; - UInt#(32) _Start_acc = fifo__input__TO_Start.first().acc; - UInt#(32) _Start_num = fifo__input__TO_Start.first().num; - UInt#(32) _Start_denom = fifo__input__TO_Start.first().denom; - UInt#(1) _Start__threadID = fifo__input__TO_Start.first()._threadID; - UInt#(32) _Start_tmp = ?; - UInt#(32) _Start_na = ?; - UInt#(32) _Start_nq = ?; - UInt#(32) _Start_nnum = ?; - Bool _Start___condStage__3 = ?; - UInt#(32) _Start_carg = ?; - UInt#(32) _Start_carg_0 = ?; - UInt#(32) _Start_carg_1 = ?; - UInt#(32) _Start_carg_2 = ?; - UInt#(5) _Start_carg_3 = ?; - _Start_tmp = unpack( { pack( _Start_acc ) [ 30 : 0 ], pack( _Start_num ) [ 31 : 31 ] } ); - _Start_na = ( ( _Start_tmp >= _Start_denom ) ? ( _Start_tmp - _Start_denom ) : _Start_tmp ); - _Start_nq = ( ( _Start_tmp >= _Start_denom ) ? unpack( { pack( ( _Start_quot << 1'd1 ) ) [ 31 : 1 ], pack( 1'd1 ) } ) : ( _Start_quot << 1'd1 ) ); - _Start_nnum = ( _Start_num << 1'd1 ); - _Start___condStage__3 = ( _Start_cnt == 5'd31 ); - if ( ( ! _Start___condStage__3 )) - begin - _Start_carg = _Start_nnum; - _Start_carg_0 = _Start_denom; - _Start_carg_1 = _Start_nq; - _Start_carg_2 = _Start_na; - _Start_carg_3 = ( _Start_cnt + 5'd1 ); - end - rule s_Start_execute (( ( ! _Start___condStage__3 ) || busyReg )); - if ( _Start___condStage__3) - begin - busyReg <= False; - outputQueue.enq(OutputQueueInfo { data : _Start_nq,handle : _Start__threadID }); - end - if ( ( ! _Start___condStage__3 )) - begin - fifo__input__TO_Start.enq(E__input__TO_Start { acc : _Start_carg_2,cnt : _Start_carg_3,num : _Start_carg,denom : _Start_carg_0,_threadID : _Start__threadID,quot : _Start_carg_1 }); - end - fifo__input__TO_Start.deq(); - $display("multi_stg_div:Thread %d:Executing Stage Start %t", _Start__threadID,$time() ); - endrule - method ActionValue#(UInt#(1)) req ( UInt#(32) num, UInt#(32) denom, UInt#(32) quot, UInt#(32) acc, UInt#(5) cnt ) if( ( ! busyReg ) ); - fifo__input__TO_Start.enq(E__input__TO_Start { num : num,acc : acc,quot : quot,_threadID : _threadID,denom : denom,cnt : cnt }); - busyReg <= True; - _threadID <= ( _threadID + 1 ); - return _threadID; - endmethod - method Action resp ( ) ; - outputQueue.deq(); - endmethod - method UInt#(32) peek ( ) ; - return outputQueue.first().data; - endmethod - method Bool checkHandle ( UInt#(1) handle ) ; - return ( handle == outputQueue.first().handle ); - endmethod -endmodule diff --git a/src/main/scala/pipedsl/testOutputs/Multi_stg_mul.bsv b/src/main/scala/pipedsl/testOutputs/Multi_stg_mul.bsv deleted file mode 100644 index 8be1411b..00000000 --- a/src/main/scala/pipedsl/testOutputs/Multi_stg_mul.bsv +++ /dev/null @@ -1,68 +0,0 @@ -import FIFOF :: *; -import Locks :: *; -import Memories :: *; -import Functions :: *; - -export Multi_stg_mul (..); -export mkMulti_stg_mul ; - -typedef struct { UInt#(32) a1; UInt#(32) a2; UInt#(2) _threadID ; } E__input__TO_Start deriving( Bits,Eq ); -typedef struct { UInt#(32) rr; UInt#(32) lr; UInt#(32) rl; UInt#(2) _threadID ; } E_Start_TO_Stage__0 deriving( Bits,Eq ); -typedef struct { UInt#(2) handle; UInt#(32) data ; } OutputQueueInfo deriving( Bits,Eq ); - -interface Multi_stg_mul; - method ActionValue#(UInt#(2)) req ( UInt#(32) a1, UInt#(32) a2 ) ; - method Action resp ( ) ; - method Bool checkHandle ( UInt#(2) handle ) ; - method UInt#(32) peek ( ) ; -endinterface - - -(* synthesize *) -module mkMulti_stg_mul ( Multi_stg_mul _unused_ ); - FIFOF#( E__input__TO_Start ) fifo__input__TO_Start <- mkFIFOF ( ); - FIFOF#( E_Start_TO_Stage__0 ) fifo_Start_TO_Stage__0 <- mkFIFOF ( ); - FIFOF#( OutputQueueInfo ) outputQueue <- mkFIFOF ( ); - Reg#( UInt#(2) ) _threadID <- mkReg ( 0 ); - UInt#(32) _Start_a1 = fifo__input__TO_Start.first().a1; - UInt#(32) _Start_a2 = fifo__input__TO_Start.first().a2; - UInt#(2) _Start__threadID = fifo__input__TO_Start.first()._threadID; - UInt#(32) _Start_rr = ?; - UInt#(32) _Start_rl = ?; - UInt#(32) _Start_lr = ?; - _Start_rr = unsignedMul( unpack( pack( _Start_a1 ) [ 15 : 0 ] ) , unpack( pack( _Start_a2 ) [ 15 : 0 ] ) ); - _Start_rl = unsignedMul( unpack( pack( _Start_a1 ) [ 15 : 0 ] ) , unpack( pack( _Start_a2 ) [ 31 : 16 ] ) ); - _Start_lr = unsignedMul( unpack( pack( _Start_a1 ) [ 31 : 16 ] ) , unpack( pack( _Start_a2 ) [ 15 : 0 ] ) ); - UInt#(32) _Stage__0_rr = fifo_Start_TO_Stage__0.first().rr; - UInt#(32) _Stage__0_lr = fifo_Start_TO_Stage__0.first().lr; - UInt#(32) _Stage__0_rl = fifo_Start_TO_Stage__0.first().rl; - UInt#(2) _Stage__0__threadID = fifo_Start_TO_Stage__0.first()._threadID; - UInt#(32) _Stage__0_t1 = ?; - UInt#(32) _Stage__0_res = ?; - _Stage__0_t1 = ( _Stage__0_rl + _Stage__0_lr ); - _Stage__0_res = ( ( _Stage__0_t1 << 5'd16 ) + _Stage__0_rr ); - rule s_Start_execute ; - fifo__input__TO_Start.deq(); - fifo_Start_TO_Stage__0.enq(E_Start_TO_Stage__0 { rr : _Start_rr,lr : _Start_lr,rl : _Start_rl,_threadID : _Start__threadID }); - $display("multi_stg_mul:Thread %d:Executing Stage Start %t", _Start__threadID,$time() ); - endrule - rule s_Stage__0_execute ; - outputQueue.enq(OutputQueueInfo { data : _Stage__0_res,handle : _Stage__0__threadID }); - fifo_Start_TO_Stage__0.deq(); - $display("multi_stg_mul:Thread %d:Executing Stage Stage__0 %t", _Stage__0__threadID,$time() ); - endrule - method ActionValue#(UInt#(2)) req ( UInt#(32) a1, UInt#(32) a2 ) ; - fifo__input__TO_Start.enq(E__input__TO_Start { a1 : a1,a2 : a2,_threadID : _threadID }); - _threadID <= ( _threadID + 1 ); - return _threadID; - endmethod - method Action resp ( ) ; - outputQueue.deq(); - endmethod - method UInt#(32) peek ( ) ; - return outputQueue.first().data; - endmethod - method Bool checkHandle ( UInt#(2) handle ) ; - return ( handle == outputQueue.first().handle ); - endmethod -endmodule diff --git a/src/main/scala/pipedsl/testOutputs/clean.sh b/src/main/scala/pipedsl/testOutputs/clean.sh deleted file mode 100644 index e95adbb1..00000000 --- a/src/main/scala/pipedsl/testOutputs/clean.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -rm -f *.bi *.bo *.ba -rm -f *.cxx *.h *.o *.so *.bexe -rm -f *.v *.vexe -rm -f *.vcd *~ *.fsdb *.log -rm -f *.sched -find * -type d -exec rm -rf {} + - diff --git a/src/main/scala/pipedsl/testOutputs/f b/src/main/scala/pipedsl/testOutputs/f deleted file mode 100644 index 2f16247c..00000000 --- a/src/main/scala/pipedsl/testOutputs/f +++ /dev/null @@ -1,1024 +0,0 @@ -1b9 -1ba -275 -21b -2e4 -3fc -3c6 -197 -1a4 -129 -206 -2b4 -2e -3ea -198 -22e -38 -d2 -129 -200 -1d7 -2b4 -339 -9f -231 -31a -91 -204 -36c -2f1 -2b8 -29f -1cd -17d -3c8 -27d -5c -1dd -342 -18e -6a -178 -289 -105 -1a6 -f7 -1d6 -94 -7e -2ac -319 -2a8 -87 -e3 -22e -bc -2d9 -279 -33d -3b5 -26e -3df -59 -9d -25f -126 -351 -135 -e8 -1e9 -3d -26c -3ab -18e -3ae -61 -2f2 -3b2 -1d6 -cd -1a4 -266 -3c8 -35b -2d6 -3b0 -2cb -28 -167 -356 -4f -390 -194 -1c6 -f8 -4 -2f0 -81 -20a -15d -208 -271 -7c -1a6 -5d -7a -24b -1e2 -2dd -1e2 -18 -325 -b -330 -3af -383 -2ed -205 -301 -29 -172 -2c -1fd -30a -3d3 -4a -92 -3ad -238 -31c -33d -338 -233 -cd -a -70 -9 -3d0 -188 -24b -29c -96 -f6 -30 -58 -19c -167 -123 -100 -3b3 -3f2 -2a -1b5 -290 -364 -19a -356 -23b -31b -4d -21d -3ff -10e -1f6 -235 -af -1c9 -fe -373 -6e -19b -1c3 -36 -a1 -3a -28c -26c -28e -144 -af -254 -230 -139 -28 -108 -178 -3aa -2c9 -c3 -1b6 -211 -3b3 -37 -63 -1b0 -224 -5a -2ca -3f2 -2a7 -5b -2cd -1c0 -c0 -134 -2d8 -133 -17 -1f7 -23f -2a9 -288 -317 -199 -122 -30e -35f -9 -142 -271 -3e0 -103 -18b -67 -f5 -37a -34f -2bb -374 -af -28d -2ee -4e -ca -35d -9 -3ac -21b -334 -7d -2a6 -13e -10b -22 -10f -3f7 -3e1 -2eb -ee -2e7 -378 -10e -380 -241 -2ae -3ae -343 -127 -b0 -2d1 -3b4 -3f8 -1d6 -16f -28a -300 -65 -1ea -39b -118 -8a -32c -1d4 -16f -2ab -2c4 -118 -c9 -3ad -114 -157 -210 -1e -246 -2d0 -3cc -1a2 -3ef -2db -1cc -82 -1f4 -351 -2b3 -2a1 -b1 -2fb -39d -2e0 -281 -297 -1dc -1eb -2b2 -3e2 -11c -303 -1fb -17d -2cf -3e0 -25 -ea -130 -37e -384 -1e8 -36c -f9 -183 -313 -112 -16b -127 -10c -311 -2a5 -1d6 -46 -bb -3b6 -134 -3d1 -11f -4f -373 -314 -1f9 -2e9 -39f -321 -21f -fb -1e8 -201 -82 -71 -c8 -3c1 -247 -80 -3de -53 -1b8 -bd -27e -280 -58 -2c7 -139 -2ec -45 -2a3 -14b -273 -35c -347 -3d4 -209 -23c -5f -38b -37a -75 -3ab -31e -6b -31 -2b9 -188 -376 -39a -194 -12b -20e -68 -1e7 -167 -4b -31a -151 -1e7 -381 -358 -163 -3a9 -45 -1a7 -1c1 -3b8 -3c8 -1af -23 -ef -164 -1d1 -ba -330 -eb -3e -180 -3c7 -2d8 -2f -2dd -23b -35d -388 -9a -18e -20a -2b5 -220 -200 -1f5 -32c -16 -3b5 -2b3 -4a -345 -171 -35e -c8 -2e6 -34e -2c8 -353 -3fa -1bf -2cc -2e8 -16 -345 -59 -a0 -185 -e8 -24 -21d -39f -26a -26 -20b -2c6 -1fd -3f0 -17c -d1 -155 -20 -125 -3a2 -207 -10e -3c6 -42 -11a -112 -25d -1a -1d -18a -39f -2df -2d6 -24e -56 -1e0 -2cf -d3 -3a2 -25f -16f -17a -18c -9f -d7 -48 -27c -65 -220 -38c -3d3 -311 -2ec -31e -3d2 -15c -1f4 -281 -1f3 -17e -a6 -8d -6d -273 -1db -17d -34e -189 -277 -2b0 -2f1 -32a -df -2ca -77 -2dc -314 -185 -249 -261 -3a6 -94 -192 -ca -314 -2b -26 -13e -295 -247 -6d -1fb -1fe -2f9 -3f6 -2f7 -3e6 -104 -a8 -f3 -d4 -2c5 -224 -21 -145 -20b -36d -280 -2b9 -177 -3df -23a -e1 -1c1 -2ed -213 -16b -11c -133 -e5 -59 -180 -35e -394 -36 -193 -1e9 -1a5 -7a -196 -3f3 -26d -13a -151 -184 -e3 -38f -389 -238 -251 -21b -3ec -39a -3b6 -cd -32b -130 -3bc -2b4 -a6 -3cf -102 -269 -2f9 -3c6 -25 -1d0 -b6 -4 -28b -f1 -207 -33d -9a -1a4 -3d9 -379 -2e8 -1ce -2d4 -2e4 -bc -39a -26b -330 -7f -1e -371 -19c -e -cc -25f -263 -36c -28f -3cf -89 -3fe -2ab -63 -191 -7e -288 -32f -3ec -25f -170 -3c8 -376 -28c -9c -18a -14 -1b6 -40 -30b -13a -f6 -20 -10c -5c -33a -14c -36c -225 -24f -3ae -2e2 -12a -17e -2cf -5e -36f -13c -291 -123 -57 -245 -6f -3a4 -1f8 -2d7 -323 -1f3 -9f -27e -33b -62 -239 -22a -b4 -1e5 -142 -2c -194 -2bd -24e -304 -3d9 -117 -2c1 -393 -324 -261 -29c -3cf -2c0 -3ba -27 -348 -65 -d6 -379 -1f1 -3c6 -371 -26b -16b -49 -7d -121 -313 -379 -351 -4b -3de -23c -2e4 -355 -2a6 -12 -71 -145 -13d -206 -69 -340 -310 -3a8 -70 -175 -127 -2e6 -9 -77 -4f -377 -2c0 -297 -399 -2f8 -f2 -16b -2fa -214 -58 -3e0 -119 -3e0 -378 -32 -253 -3ae -6 -30d -3f8 -1bd -10a -241 -272 -351 -397 -b3 -21b -19d -218 -70 -91 -1a6 -10 -db -294 -dd -20c -a8 -310 -19a -50 -2df -2ab -359 -14 -3a4 -128 -157 -2b5 -98 -321 -2e1 -3e8 -358 -2f4 -1fd -2dd -155 -b -2f1 -396 -1ea -214 -2dc -f2 -3b -3fa -9a -2fd -197 -143 -126 -3cd -66 -214 -356 -2df -376 -1f0 -3b9 -2c4 -29e -251 -98 -34 -1ab -24c -304 -325 -141 -32f -10f -e5 -181 -3e -3f4 -13 -2ed -107 -3db -133 -2c5 -241 -18b -1e7 -367 -a2 -158 -b8 -3cf -27f -3d2 -46 -5e -a5 -bf -346 -eb -245 -3e0 -3bb -100 -29 -15d -e2 -1f5 -72 -3ff -d4 -397 -21 -228 -b5 -2a7 -af -2c -3d2 -3f7 -107 -17 -e6 -82 -2ce -2dd -5b -34 -2fc -1f3 -149 -f5 -250 -357 -cf -2b4 -392 -24d -29 -338 -c7 -2c4 -ac -1bb -24a -2a8 -39b -343 -396 -2fc -ca -6c -35a -142 -265 -262 -1bf -1f1 -33c -75 -332 -180 -1fc -1f9 -14f -2c9 -350 -1d4 -f9 -190 -2e7 -28a -164 -1ed -6b -37e -294 -2ba -296 -355 -203 -39e -55 -34 -19a -af -c5 -29a -19e -133 -326 -288 -240 -336 -384 -322 -189 -3a4 -16 -1a7 -35c -b9 -344 -194 -29b -2cc -341 -29b -180 -380 -91 -2fd -1dc -3a8 -d3 -27a -294 -2e3 -29f -20e -24f -b9 -210 -24a -35c -11b -156 -1c6 -db -2f9 -5e -8a -10b -235 -262 -283 -1b5 -2d3 -1a8 -2b2 -254 -45 -362 -1e9 -3e6 -e -6c -286 -14b -106 -396 -2b5 -335 -10a -3c -3b4 -205 -109 -130 -316 -31a -13b -1a1 -1f5 -109 -b6 diff --git a/src/main/scala/pipedsl/testOutputs/h b/src/main/scala/pipedsl/testOutputs/h deleted file mode 100644 index 69e7556d..00000000 --- a/src/main/scala/pipedsl/testOutputs/h +++ /dev/null @@ -1,1024 +0,0 @@ -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 diff --git a/src/main/scala/pipedsl/testOutputs/imemMultiExec b/src/main/scala/pipedsl/testOutputs/imemMultiExec deleted file mode 100644 index 97240385..00000000 --- a/src/main/scala/pipedsl/testOutputs/imemMultiExec +++ /dev/null @@ -1,16 +0,0 @@ -00000000 // 0 + 0 = 0 in rf[0] -00001084 // 1 + 1 = 2 in rf[1] -00002108 // 2 + 2 = 4 in rf[2] -0000318C // 3 + 3 = 6 in rf[3] -00004081 // rf[0] * rf[1] = 0 in rf[4] -//Show off parallelism for multi, divider, and adder, no hazards -0000510D // rf[3] * rf[2] = 6 * 4 = 24 in rf[5] -0000F734 // rf[13] + rf[14] = 13 + 14 = 27 in rf[15] -0000A663 // rf[24] / rf[12] = 24/12 = 2 in rf[10] -00006115 // rf[5] * rf[2] = 24 * 4 = 96 in rf[6] -00016AD0 // rf[20] + rf[21] = 20 + 21 = 41 in rf[22] -//Make sure data hazards arent allowed to be parallelized -0000719A // rf[6] / rf[3] = 96 / 6 = 16 in rf[7] -0000739E // rf[7] / rf[7] = 1 in rf[7] -0000719D // rf[7] * rf[3] = 1 * 6 = 6 in rf[7] -0000719C // rf[7] + rf[3] = 6 + 6 = 12 in rf[7] diff --git a/src/main/scala/pipedsl/testOutputs/mkCircuit.ba b/src/main/scala/pipedsl/testOutputs/mkCircuit.ba deleted file mode 100644 index e40a1c8b183389ddd510c232d40746cb82604a51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122803 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[~Rc>&}*tN`y6Y2vB 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 SBM9n2+$DF$H0sL<&`|~=RvO~M36~SA`hQG zXlXADdSU4(c-3tGcvx#6l(swdek*84Vd-f%sFyhv1!45KA9eefES0vJy?VbH-P#Xd z&FhSMo_dqoI;w6;kvv8CRe3G1dG{uCtNb0N3O0+0DXl!M`n#A?ndU`wHi3!yocHDw z7f&42JFAW0Wvzc4`Ss&Y{RqfgQWi2bfhVwfK^R29s>oBRiZ8nuPm*5&H<^$rj@4ur zluSg=>M}+UI1epoMsy?UwK-0#(T%^)mo*1}*F4tmlH zj{A)O4k}*I_f@>2##3c>c=D!IY-0BHluX%!7CD!g~(`>U9U-AC^YAoRk>A(-cY z2-)-+kYxtRuOUkWA?h zy=D~TXe4zA`2(;+-*^a_3A-Fq$^uUT4xVXFZvp1Xrb% zQ@UlTdxr{(EaT}C z6&`~LaNL#>vvifl3QEirrdypsE@A0|^&nU7ae<%)qmmARdI0>zL!yra0J)AWtZ$na zwmPaljY>i1wP5Ms=0wlw6>cwFJHSg5(q)Gy7a&I6YRT96EA&Z0uCQYL3S@XPOa#eq zwxh!XzZXDBA^;8!ql`GID<}s2;EcsI(iEW4z*P7-t!%&WGX-QSrvio*tnL@5vB?>6 zCNm=J=2^T!5%eX{BUNQ#P?fMdzAnZo$7(6jrhXXIj~>?AjbqmD(_A|;t6}s&LV|wK zmm{fIAX1B#^A_b)8PBk{^G}`L4FWbFiG3$jP1Z(UxdC^R!FXC_tUPR~*jzqV`Hjkl zD%Vtgt#Vc61I6lmKIMCVyZE}Gi{2v3rrRDzj~2ae3^105hvG6`P_UtnRe+%e!-t-W zs~^SnfJ!k&!L#01OkA33N@X!o_Bvl%lOvT`e8G)zIsWqS<&3P+VXRiBbVI% z#_qP?N=ixs@OP?PzVA1_lK0_ZxlS&hXIf!mQ9pF7KOSU_s%R{CA6MaiYe&fFj$?EK zG#)k?>U182StTRVmq5baSFm1okx1N+4F9sqdmQ2)n@k5yi}i;^-S_>&wcD$5o|LW& z=4PY96NU9uclA9?pcQfbT_S$@q~6qFl{$c&-x9Qiu8@uHd&-i{Hc9oa4iYDBL)`)o zzp*~V1UoC3d@#i1lgt5m2KjRXncW-7>?(Adp~45AX{(;PQz3Q z#{&>h;DqvEh;Gv>OvKBjct+V|0XVIGd^nOd{-K5S$W=$rRTo&(~0ZL34r264&H> zm&w7w$Js1jQi?NJcA(k=GV%n~6`Yc`)*|<<7Q|F_tswM(VZ^$R8@?PTg~#N5Pafvs z1(SA}PIPTM=3^J5y+jL5R&cO2hoAs2Dop24m$)?&(zKIZ9#{R}u5ThxiK;-!renJJv%T0PFN?+#gXv~Ua?^h6)#sY9X_t<`akEa(?1stsP?A}0LRB4 zkqu1q^5$A8o0=TEjnaHYj)^SBlFo)H^k6d00L0T&ESb(}mVoJqF+5@Du-+wewmc{V z(=LzS5G12VaE2EH=`lUtIsg-(b9Lk55*?Od$i@v;+Qq;Q3EP(=FkC|gsUsi*5U}3x zYQ#2-DU54unlmt7%TC)^>DVGS7ef#VIMuG?K8TqIGNPsp^v1wR!FA8H8hCc7z)RJF zBaMI%d=xDJzxW`YZg&GuYk8&>?_N-ZZSR=CJ0#)|3op6f{u+HB9Y7tJ+|bzzl<;b$ zDf<*+AHHYEy(P!FC&Y6LFcX2hy>(%lL7`jt{vT37Tc&ipm9OF3#0!*gOpfFI9N?_2 z#BW_-2PBm2+Cmrf(@8wGA1{u666+Y%8eXH(m%oGvKY_TPrLy0MMkmG379zxmD^Di= z?bdruZrOW6{(=Jt);14@hQ*3$GxGO;;+O!q`*1RQ35W;Bk;wQs+IYM{r~_lO+Q#d< z2eN^>QMO--o?u*+hr}6oY5%eiODJG0s>5X_zYu?}GI>h5M-hC60>J{vyyq`+ahm)O DYWE|( diff --git a/src/main/scala/pipedsl/testOutputs/mkTB.bexe b/src/main/scala/pipedsl/testOutputs/mkTB.bexe deleted file mode 100755 index 930c50b8..00000000 --- a/src/main/scala/pipedsl/testOutputs/mkTB.bexe +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -BLUESPECDIR=`echo 'puts $env(BLUESPECDIR)' | bluetcl` - -for arg in $@ -do - if (test "$arg" = "-h") - then - exec $BLUESPECDIR/tcllib/bluespec/bluesim.tcl $0.so mkTB --script_name `basename $0` -h - fi -done -exec $BLUESPECDIR/tcllib/bluespec/bluesim.tcl $0.so mkTB --script_name `basename $0` "$@" diff --git a/src/main/scala/pipedsl/testOutputs/mkTB.bexe.so b/src/main/scala/pipedsl/testOutputs/mkTB.bexe.so deleted file mode 100755 index ec23356fcc9f7877afc80219cafe488ff7ebb2f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224624 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 diff --git a/src/main/scala/pipedsl/testOutputs/rfMultiExec b/src/main/scala/pipedsl/testOutputs/rfMultiExec deleted file mode 100644 index 67d81a41..00000000 --- a/src/main/scala/pipedsl/testOutputs/rfMultiExec +++ /dev/null @@ -1,40 +0,0 @@ -00000000 -00000001 -00000002 -00000003 -00000004 -00000005 -00000006 -00000007 -00000008 -00000009 -0000000a -0000000b -0000000c -0000000d -0000000e -0000000f -00000010 -00000011 -00000012 -00000013 -00000014 -00000015 -00000016 -00000017 -00000018 -00000019 -0000001a -0000001b -0000001c -0000001d -0000001e -0000001f - - - - - - - - diff --git a/src/main/scala/pipedsl/testOutputs/runbsc.sh b/src/main/scala/pipedsl/testOutputs/runbsc.sh deleted file mode 100644 index 9672deff..00000000 --- a/src/main/scala/pipedsl/testOutputs/runbsc.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -TOP=Circuit -TB="mkTB" -ARGS="-no-show-timestamps -no-show-version --aggressive-conditions" -BPATH="-p .:%/Prelude:%/Libraries:/Users/kevinzhang/Documents/SpecLang/bscRuntime/memories:/Users/kevinzhang/Documents/SpecLang/bscRuntime/locks:/Users/kevinzhang/Documents/SpecLang/bscRuntime/stages" -#Compiling Base Module -#bsc $ARGS $BPATH -show-schedule -verilog $FILE -#Compile test bench -VDIR="$TOP"_verilog -SDIR="$TOP"_sim -mkdir -p $VDIR -mkdir -p $SDIR -bsc $ARGS $BPATH -show-schedule -verilog -vdir $VDIR -u "$TOP".bsv -#Run simulation for like...a million cycles -bsc $ARGS $BPATH -sim -simdir $SDIR -u "$TOP".bsv -bsc $ARGS -sim -simdir $SDIR -o "$TB".bexe -e "$TB" "$TB".ba -./"$TB".bexe > top.sim.out diff --git a/src/main/scala/pipedsl/testOutputs/top.sim.out b/src/main/scala/pipedsl/testOutputs/top.sim.out deleted file mode 100644 index ce43b9ac..00000000 --- a/src/main/scala/pipedsl/testOutputs/top.sim.out +++ /dev/null @@ -1,998 +0,0 @@ - 58205 - 19762 - 32169 - 36716 - 18286 - 23715 - 19698 - 3539 - 31690 - 6886 - 58591 - 7194 - 50784 - 15506 - 50669 - 47216 - 26687 - 24353 - 26011 - 27418 - 23316 - 18314 - 12357 - 7810 - 32553 - 22728 - 10313 - 30138 - 65164 - 61744 - 6659 - 39492 - 1476 - 46486 - 25223 - 1781 - 13821 - 36930 - 54348 - 28286 - 50337 - 16965 - 28762 - 5883 - 37569 - 1335 - 5101 - 39547 - 28724 - 39443 - 19304 - 3533 - 40081 - 6248 - 82595 - 56472 - 41003 - 62199 - 34204 - 55938 - 4688 - 49123 - 60145 - 59148 - 28024 - 55250 - 7439 - 15088 - 57099 - 18487 - 51168 - 56530 - 5207 - 68841 - 36633 - 34234 - 31234 - 64249 - 55466 - 18127 - 73870 - 43803 - 40215 - 50955 - 43475 - 16898 - 60129 - 54172 - 57627 - 8279 - 22662 - 1652 - 52272 - 22217 - 20004 - 24206 - 59350 - 27803 - 45575 - 6844 - 54432 - 25952 - 51273 - 98221 - 10935 - 17747 - 49322 - 34462 - 11838 - 78219 - 19286 - 35432 - 33470 - 450 - 5878 - 30648 - 36220 - 32685 - 11902 - 12350 - 58805 - 62743 - 50416 - 10024 - 34905 - 27858 - 58509 - 11432 - 24393 - 23325 - 94701 - 35234 - 31885 - 44451 - 48641 - 53878 - 29933 - 42812 - 57140 - 78763 - 58521 - 1280 - 46126 - 37627 - 2293 - 35262 - 119905 - 3969 - 48579 - 5980 - 48681 - 1705 - 9906 - 52099 - 43712 - 56134 - 10947 - 19500 - 56151 - 54021 - 56958 - 13474 - 62388 - 3798 - 52553 - 44726 - 53964 - 52935 - 32253 - 3740 - 1406 - 52621 - 4955 - 43270 - 41450 - 16223 - 121552 - 30493 - 54102 - 61460 - 50132 - 56021 - 47074 - 90307 - 29889 - 59067 - 8799 - 13647 - 63006 - 34773 - 26377 - 27991 - 47263 - 29002 - 4263 - 44661 - 32710 - 38916 - 75335 - 22530 - 9280 - 274 - 16886 - 31107 - 17672 - 9420 - 59138 - 18662 - 39654 - 4989 - 63088 - 41239 - 38946 - 22021 - 21360 - 20416 - 32899 - 73150 - 1606 - 44212 - 40137 - 57902 - 7094 - 33394 - 22157 - 60861 - 7448 - 27534 - 13908 - 118146 - 35466 - 31036 - 5083 - 344 - 38594 - 121017 - 32892 - 78487 - 15470 - 50628 - 6897 - 3132 - 3740 - 43455 - 13259 - 36433 - 1098 - 56542 - 59265 - 19430 - 2438 - 109430 - 40976 - 58508 - 41510 - 89054 - 10523 - 10714 - 8765 - 62238 - 6257 - 53538 - 80594 - 60319 - 1598 - 12855 - 50882 - 32805 - 50690 - 35866 - 38223 - 33907 - 45137 - 109895 - 58603 - 11583 - 90882 - 53990 - 66861 - 27376 - 17966 - 36590 - 56149 - 57118 - 59760 - 42956 - 18942 - 18593 - 16455 - 51309 - 41814 - 61462 - 32953 - 58787 - 8194 - 26757 - 18071 - 23159 - 28577 - 29581 - 8563 - 38333 - 36761 - 49167 - 24029 - 5941 - 60096 - 44240 - 80261 - 7696 - 78211 - 63240 - 52949 - 58747 - 55187 - 61129 - 30432 - 85101 - 63724 - 14828 - 1908 - 53213 - 5498 - 45620 - 29042 - 1943 - 59516 - 126837 - 64340 - 51662 - 61658 - 40033 - 53579 - 50813 - 55876 - 76729 - 13779 - 17578 - 14363 - 6786 - 12294 - 34696 - 3315 - 54114 - 58785 - 56894 - 50265 - 41156 - 31850 - 44139 - 63184 - 48800 - 42662 - 11232 - 1125 - 33477 - 45564 - 20883 - 15040 - 105478 - 46229 - 40666 - 40902 - 10642 - 710 - 59413 - 42326 - 25350 - 32139 - 10329 - 30435 - 33724 - 71201 - 18373 - 20201 - 58786 - 16778 - 39119 - 7297 - 118688 - 23234 - 43076 - 58133 - 4534 - 35000 - 61484 - 25658 - 158349 - 7191 - 46054 - 21796 - 48136 - 49067 - 60939 - 51361 - 37215 - 82386 - 60324 - 57036 - 38216 - 54089 - 39499 - 15150 - 9406 - 11429 - 52306 - 36670 - 55036 - 4695 - 61044 - 26415 - 23620 - 69552 - 49687 - 60460 - 78635 - 73052 - 56365 - 36950 - 93764 - 82956 - 24346 - 5786 - 89663 - 49044 - 52748 - 64666 - 61389 - 109197 - 76693 - 41476 - 45573 - 35465 - 57659 - 18573 - 25893 - 48680 - 23838 - 1228 - 26952 - 43928 - 31039 - 71926 - 53940 - 100763 - 21486 - 17757 - 81687 - 14216 - 97837 - 37267 - 35869 - 47959 - 32770 - 56595 - 53370 - 2668 - 10870 - 11480 - 39558 - 7344 - 4499 - 29705 - 53331 - 150797 - 45281 - 17494 - 15721 - 62533 - 53965 - 27175 - 54936 - 13466 - 57276 - 38497 - 66957 - 63082 - 65478 - 15231 - 14367 - 58951 - 54434 - 57352 - 147074 - 54216 - 58243 - 65395 - 36959 - 19442 - 47678 - 55624 - 50112 - 3974 - 71211 - 37194 - 110541 - 80909 - 18200 - 21742 - 95609 - 72162 - 56845 - 27967 - 48491 - 56679 - 33839 - 37701 - 18902 - 132371 - 78918 - 164 - 54458 - 43868 - 62153 - 20106 - 45438 - 100119 - 26974 - 36201 - 74237 - 78424 - 32300 - 25566 - 4459 - 95077 - 65257 - 1199 - 96009 - 21712 - 79917 - 14924 - 43981 - 75032 - 58386 - 102075 - 38676 - 6334 - 32708 - 45674 - 19361 - 61484 - 33686 - 16717 - 12837 - 11336 - 88140 - 64275 - 36785 - 45523 - 48180 - 67567 - 15157 - 49132 - 74476 - 22066 - 7678 - 74623 - 96382 - 17769 - 43352 - 12864 - 108484 - 2588 - 122976 - 84106 - 56716 - 50653 - 45046 - 23308 - 75643 - 43220 - 18933 - 41892 - 39015 - 52559 - 4013 - 54500 - 3497 - 33999 - 62883 - 32595 - 37542 - 34991 - 115396 - 29240 - 86628 - 122319 - 68827 - 32304 - 66197 - 60974 - 40540 - 73213 - 53340 - 4189 - 27980 - 10375 - 95998 - 96393 - 42592 - 56935 - 59123 - 19187 - 25360 - 76939 - 124666 - 56411 - 137318 - 46827 - 63555 - 41203 - 16940 - 7288 - 19749 - 96878 - 94131 - 17112 - 69162 - 38342 - 57011 - 29756 - 76237 - 59486 - 54408 - 82383 - 50489 - 128194 - 2510 - 64160 - 26418 - 58866 - 92585 - 89298 - 22185 - 48455 - 82346 - 26020 - 49929 - 102211 - 11573 - 89823 - 61740 - 80962 - 42 - 64549 - 19834 - 68593 - 56444 - 32196 - 52995 - 83368 - 44183 - 50126 - 57522 - 6870 - 25208 - 165238 - 28730 - 14854 - 143739 - 4171 - 8165 - 54554 - 35273 - 10181 - 60113 - 21 - 52224 - 58431 - 18264 - 14456 - 52801 - 45940 - 551 - 28001 - 9861 - 107304 - 89212 - 60645 - 7141 - 15469 - 22804 - 43560 - 24509 - 36570 - 66351 - 76371 - 79983 - 10946 - 76837 - 56125 - 66660 - 20980 - 17100 - 5991 - 15191 - 52200 - 65510 - 104613 - 23590 - 20489 - 7738 - 38381 - 93069 - 22613 - 100281 - 16364 - 129073 - 54802 - 75674 - 77353 - 6313 - 110846 - 60713 - 48545 - 127545 - 36499 - 18871 - 55373 - 58075 - 32923 - 60101 - 33997 - 28431 - 106645 - 88437 - 54567 - 76984 - 35029 - 34224 - 41881 - 19333 - 65480 - 15247 - 60173 - 59335 - 134680 - 50007 - 105377 - 49976 - 50569 - 35656 - 21213 - 61175 - 5117 - 79552 - 26685 - 54468 - 76557 - 105343 - 25443 - 132552 - 23981 - 13122 - 37666 - 164083 - 55912 - 9538 - 70945 - 37315 - 52015 - 107950 - 46786 - 52139 - 25675 - 19844 - 165467 - 63663 - 55625 - 103286 - 23222 - 147797 - 4666 - 36368 - 56600 - 17201 - 60787 - 70429 - 102403 - 107678 - 61159 - 48059 - 128011 - 62312 - 28213 - 103586 - 18423 - 24818 - 43894 - 7333 - 75796 - 32207 - 13987 - 106460 - 39476 - 64141 - 115281 - 48501 - 36029 - 64107 - 36248 - 38081 - 112457 - 58643 - 62078 - 43191 - 30900 - 65642 - 12217 - 57114 - 53804 - 62295 - 41082 - 14953 - 121708 - 68129 - 64797 - 116211 - 7734 - 64626 - 65333 - 16263 - 60231 - 34334 - 32830 - 32097 - 44529 - 62434 - 62608 - 13531 - 79415 - 61238 - 27888 - 43909 - 91640 - 29560 - 61925 - 108751 - 27051 - 42428 - 152971 - 43387 - 157981 - 19977 - 51416 - 64825 - 49465 - 53201 - 332 - 161384 - 7926 - 47121 - 75451 - 36822 - 64243 - 21159 - 63109 - 45755 - 46407 - 156035 - 32589 - 73442 - 39139 - 56916 - 57797 - 94001 - 57995 - 65797 - 36503 - 55752 - 83257 - 46593 - 13293 - 86188 - 153115 - 124697 - 58105 - 85150 - 86445 - 81368 - 49767 - 64444 - 33237 - 148117 - 70350 - 85642 - 9325 - 170865 - 62064 - 64338 - 55048 - 56259 - 13020 - 62540 - 43396 - 25298 - 96911 - 56537 - 33224 - 114956 - 55919 - 11969 - 3820 - 46889 - 61771 - 48925 - 91951 - 54162 - 61413 - 16045 - 44105 - 90122 - 54807 - 27181 - 81544 - 41256 - 61777 - 29752 - 20792 - 146562 - 19810 - 81385 - 63934 - 73148 - 64512 - 57025 - 114579 - 23229 - 20325 - 15799 - 72672 - 58198 - 51906 - 77045 - 110047 - 299 - 33348 - 71484 - 31718 - 2359 - 60868 - 123780 - 133269 - 193038 - 15088 - 13076 - 5056 - 154573 - 59640 - 112112 - 57938 - 19614 - 84720 - 27085 - 17456 - 108557 - 79195 - 109540 - 92903 - 28894 - 21022 - 129404 - 64646 - 85273 - 4376 - 118707 - 176809 - 101083 - 46273 - 49368 - 50010 - 78097 - 78735 - 893 - 173722 - 20049 - 88499 - 61035 - 24648 - 33684 - 85365 - 42051 - 110428 - 531 - 61164 - 69605 - 99352 - 48318 - 62889 - 44902 - 20194 - 55744 - 61889 - 44501 - 33382 - 43031 - 50210 - 82274 diff --git a/src/main/scala/pipedsl/testOutputs/w b/src/main/scala/pipedsl/testOutputs/w deleted file mode 100644 index fb229e85..00000000 --- a/src/main/scala/pipedsl/testOutputs/w +++ /dev/null @@ -1,1024 +0,0 @@ -e35d -4d32 -7da9 -8f6c -476e -5ca3 -4cf2 -dd3 -7bca -1ae6 -e4df -1c1a -c660 -3c92 -c5ed -b870 -683f -5f21 -4ab5 -6b1a -5b14 -2b70 -3045 -1e82 -7f29 -58c8 -2849 -75ba -fe8c -f130 -1a03 -9a44 -5c4 -b596 -6287 -6f5 -35fd -9042 -d44c -6e7e -c4a1 -4245 -705a -16fb -92c1 -537 -13ed -9a7b -7034 -9a13 -4b68 -dcd -9c91 -1868 -8a33 -dc98 -a02b -f2f7 -859c -da82 -1250 -bfe3 -eaf1 -e70c -6d78 -d7d2 -1d0f -3af0 -df0b -4837 -c7e0 -dcd2 -1457 -9e6b -8f19 -85ba -7a02 -faf9 -c4bd -46cf -a4c4 -ab1b -3a90 -c70b -a9d3 -4202 -eae1 -d39c -e11b -2057 -5886 -674 -cc30 -56c9 -4e24 -5e8e -e7d6 -6c9b -b207 -1abc -d4a0 -6560 -c849 -ecec -2ab7 -4553 -c0aa -869e -2e3e -aaed -4b56 -8a68 -82be -1c2 -16f6 -77b8 -8d7c -7fad -2e7e -303e -e5b5 -f517 -c4f0 -2728 -8859 -6cd2 -e48d -2ca8 -5f49 -5b1d -ec51 -89a2 -7c8d -66d4 -be01 -d276 -74ed -a73c -df34 -7301 -e499 -500 -b42e -92fb -8f5 -89be -f346 -f81 -bdc3 -175c -be29 -6a9 -26b2 -cb83 -aac0 -db46 -a6c -4c2c -db57 -d305 -de7e -34a2 -f3b4 -ed6 -cd49 -aeb6 -d2cc -cec7 -7dfd -e9c -57e -cd8d -135b -a906 -a1ea -3f5f -fdfe -771d -d356 -415e -c3d4 -dad5 -b7e2 -8d27 -74c1 -a476 -225f -354f -f61e -87d5 -6709 -55fb -b89f -714a -10a7 -ae75 -7fc6 -9804 -681e -5802 -2440 -112 -41f6 -7983 -4508 -24cc -e702 -48e6 -9ae6 -137d -f670 -a117 -9822 -5605 -5370 -4fc0 -8083 -a8d1 -646 -4754 -9cc9 -e22e -1bb6 -8272 -568d -edbd -1d18 -6b8e -3654 -dd6e -8a8a -793c -13db -158 -96c2 -bafb -807c -a32b -3c6e -c5c4 -1af1 -c3c -e9c -a9bf -33cb -8e51 -44a -dcde -e781 -4be6 -986 -b7c2 -a010 -e48c -a226 -ccc5 -291b -29da -223d -f31e -1871 -d122 -6228 -eb9f -63e -3237 -c6c2 -8025 -c602 -8c1a -954f -8473 -b051 -c1a8 -e4eb -2d3f -d6e8 -d2e6 -d885 -6af0 -462e -8eee -db55 -df1e -e970 -a7cc -49fe -48a1 -4047 -c86d -a356 -f016 -63aa -e5a3 -2002 -6885 -4697 -5a77 -6fa1 -738d -2173 -95bd -8f99 -c00f -5ddd -1735 -eac0 -acd0 -83ef -1e10 -94ba -f708 -ced5 -e57b -d793 -eec9 -76e0 -4de1 -f8ec -39ec -774 -cfdd -157a -885a -7172 -797 -e87c -b4a3 -fb54 -c9ce -f0da -5759 -d14b -c67d -81be -adbc -35d3 -44aa -381b -1a82 -3006 -8788 -cf3 -5c82 -e5a1 -3ae8 -c459 -a0c4 -7c6a -ac6b -f6d0 -bea0 -a6a6 -2be0 -465 -82c5 -b1fc -489e -3ac0 -e424 -b495 -9eda -9fc6 -2992 -2c6 -e815 -a556 -6306 -7d8b -2859 -76e3 -83bc -2864 -47c5 -3a92 -e5a2 -418a -98cf -1c81 -f06c -5ac2 -a844 -16e5 -11b6 -88b8 -f02c -643a -962c -1c17 -5b1e -5524 -57ce -bfab -ee0b -c8a1 -915f -a2f8 -eba4 -decc -9548 -3632 -9a4b -3b2e -24be -2ca5 -cc52 -8f3e -d53a -1257 -ee74 -672f -5c44 -eae4 -c217 -bdee -e6ff -869a -dc2d -9056 -615b -9205 -5f1a -169a -f325 -bf94 -4999 -fc9a -154b -c4ea -bec3 -a204 -b205 -8a89 -4077 -488d -6525 -be28 -5d1e -4cc -6948 -ab98 -793f -1c5c -30b0 -9eaa -53ee -455d -600c -3788 -9faf -7711 -8c1d -bb57 -8002 -dd13 -b8a -a6c -2a76 -2cd8 -9a86 -1cb0 -1193 -7409 -d053 -a197 -63ef -4456 -3d69 -2468 -d2cd -6a27 -d698 -349a -4e29 -9661 -5bba -f66a -ffc6 -3b7f -1a0f -e647 -6099 -7290 -913b -d3c8 -e383 -e0f1 -905f -4bf2 -ba3e -1286 -ad26 -f86 -8dd2 -89b3 -fb38 -566b -4718 -54ee -8563 -a655 -de0d -6d3f -bd6b -dd67 -842f -907f -49d6 -cb8e -cf21 -a4 -d4ba -ab5c -199 -4e8a -b17e -ef13 -695e -8d69 -ec2a -ecfb -7e2c -63de -116b -d8ea -fee9 -357 -550c -54d0 -7cd6 -2e10 -abcd -78ad -5fe3 -e1eb -9714 -18be -7fc4 -b26a -4ba1 -f02c -8396 -414d -3225 -2c48 -a9d7 -fb13 -8fb1 -31d1 -bc34 -55f3 -1eb4 -bfec -6309 -5632 -1dfe -44b3 -eb02 -4569 -93de -1b0b -c0c2 -a1c -56c5 -e15b -5303 -c5dd -9c9b -5b0c -df44 -a8d4 -4a2 -a3a4 -9867 -cd4f -fad -7fc0 -da9 -6c67 -f5a3 -7f53 -335d -88af -902d -7238 -aa20 -ecf5 -5f38 -7e30 -1d1a -ee2e -56d2 -6092 -d05c -105d -6d4c -fc9 -c61d -8181 -a660 -de67 -8865 -4af3 -6310 -5c38 -750d -4c05 -f7d8 -b6eb -f843 -27b4 -422c -1c78 -5b7 -9dd6 -1d4f -42d8 -372e -95c6 -35e -743c -a00f -e85e -d488 -61c7 -c539 -a855 -9ce -2a44 -6732 -e5f2 -84be -eb88 -56a9 -4d13 -a093 -65a4 -50d1 -4d74 -2d35 -8b96 -966a -fce3 -2a -c78b -4d7a -841c -dc7c -7dc4 -bf56 -917a -8fe7 -525c -aab5 -1ad6 -6278 -90b4 -703a -3a06 -d59d -104b -1fe5 -67db -51aa -27c5 -ead1 -15 -cc00 -d4be -4758 -3878 -ce41 -b374 -227 -6d61 -2685 -c51b -5d09 -6a20 -1be5 -3c6d -5914 -aa28 -5fbd -8eda -fce9 -353c -555a -2ac2 -35bb -db3d -4d79 -51f4 -42cc -1767 -3b57 -680a -1b4d -9e05 -5c26 -5009 -1e3a -95ed -9245 -5855 -8f76 -3fec -8133 -61d6 -e4c2 -84d1 -18a9 -eb3a -ed29 -b62d -6a80 -dda -2da0 -19ad -ba82 -3376 -eac5 -69dc -6f0f -dc3c -c9c4 -d527 -47d9 -88d5 -85b0 -a399 -4b85 -2d52 -3b8f -38d9 -9f3a -355f -59f9 -c15d -c338 -6963 -69d5 -52dd -eef7 -13fd -897 -683d -d4c4 -d97a -69fc -6363 -6a49 -5427 -3342 -9322 -4f78 -da68 -2542 -43ff -91c3 -cb2f -c122 -b6c2 -3d18 -644b -4d84 -c397 -f8af -d949 -93ae -326d -c1a8 -123a -8e10 -dd18 -4331 -ed73 -8f87 -ec6a -c958 -eee7 -255a -8a62 -f368 -20bb -e12e -47f7 -1ac4 -4c5c -1ca5 -f80e -7dcf -36a3 -b1d1 -9a34 -2a13 -d625 -22ef -9ff -7a2 -8d98 -149c -e285 -57aa -de81 -a8b7 -73e8 -240f -2fb9 -d147 -d22c -1b85 -a07a -3a69 -2423 -df5e -4162 -d4c7 -1e36 -fc72 -d1f6 -3f87 -6298 -6979 -803e -7d61 -adf1 -18a5 -6a28 -34db -d093 -bb6b -62d4 -ab85 -7784 -7378 -f1e5 -3051 -69ab -a5bc -adc7 -7d33 -c36f -3253 -cd0 -fd39 -c139 -cfd1 -14c -ddc3 -1ef6 -70f9 -2b67 -6811 -faf3 -52a7 -f685 -a064 -7ccf -5bbb -7f4d -611f -68a5 -c398 -e1c5 -af9d -e28b -cc63 -5c72 -757d -4a26 -b601 -33ed -f8aa -8899 -bcc6 -2ae8 -be4d -e802 -f4f2 -c267 -1d7e -81d5 -8044 -ee8e -ce4c -246d -f849 -f270 -a4c5 -d708 -dbc3 -32dc -55f0 -a984 -62d2 -e1ac -5337 -81c8 -c1d7 -da6f -2ec1 -eec -a95c -2b49 -9602 -d997 -af25 -eb36 -3ead -ac49 -5cdb -d617 -6a2d -d540 -613c -f151 -2c73 -5138 -f3f8 -4d62 -f93f -f9be -e86d -fc00 -2e70 -c6a7 -5abd -37f -3779 -ef3b -e356 -8938 -5562 -d0c7 -12b -8244 -2c77 -7be6 -937 -edc4 -94fa -63f7 -9bf3 -3af0 -3314 -13c0 -642 -e8f8 -7446 -e252 -4c9e -5c27 -69cd -438c -136b -1c65 -c040 -82d2 -70de -521e -c10d -fc86 -a181 -1118 -d32d -7627 -eacb -5a0b -911f -2d9d -e58c -4d48 -37d -f8bb -4e51 -bf6f -65b3 -2642 -12b6 -be87 -9557 -4475 -213 -eeec -b91c -f608 -9437 -65d3 -1a17 -4046 -c77 -8794 -add5 -5bb4 -a817 -c422 -8153 -de87 -f7b8 -f907 -70dc -dd78 -51b8 -ff40 -3f3c -56b0 -f21e -9b9 -d3f8 -5361 -b976 -1816 -d466 -c9f9 -11bf -d636 -dafe -8452 -b4d2 -d4c3 -b34e -6de7 -6d6d diff --git a/src/main/scala/pipedsl/typechecker/LockRegionChecker.scala b/src/main/scala/pipedsl/typechecker/LockRegionChecker.scala index dd9712d4..4c49df36 100644 --- a/src/main/scala/pipedsl/typechecker/LockRegionChecker.scala +++ b/src/main/scala/pipedsl/typechecker/LockRegionChecker.scala @@ -6,6 +6,7 @@ import pipedsl.common.{Locks, Syntax} import pipedsl.common.Syntax._ import pipedsl.typechecker.Environments._ import pipedsl.typechecker.TypeChecker.TypeChecks +import pipedsl.analysis.TypeAnalysis /** * This checks that all lock reservations happen only within a valid lock region. @@ -14,8 +15,9 @@ import pipedsl.typechecker.TypeChecker.TypeChecks * - Checks: That all lock "reserve" statements occur inside the appropriate lock region. * - Checks: That all lock regions are well formed according to the above. */ -object LockRegionChecker extends TypeChecks[Id, LockState] { +class LockRegionChecker(prog:Prog) extends TypeChecks[Id, LockState] { + val typeAnalysis = TypeAnalysis.get(prog) override def emptyEnv(): Environment[Id, LockState] = Environments.EmptyLockEnv //Functions can't interact with locks or memories right now. @@ -23,7 +25,8 @@ object LockRegionChecker extends TypeChecks[Id, LockState] { override def checkFunc(f: FuncDef, env: Environment[Id, LockState]): Environment[Id, LockState] = env override def checkModule(m: ModuleDef, env: Environment[Id, LockState]): Environment[Id, LockState] = { - val nenv = m.modules.foldLeft[Environment[Id, LockState]](env)( (e, m) => m.typ match { + // TODO: Do we need this now that we have attributes? + val nenv = m.modules.foldLeft[Environment[Id, LockState]](env)( (e, m) => typeAnalysis.typeCheck(m.name) match { case TMemType(_, _, _, _) => e.add(m.name, Free) case TModType(_, _, _, _) => e.add(m.name, Free) case _ => throw UnexpectedCase(m.pos) From 374ca5b4ca44dfe411425e57c440db27bc0f172d Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Mon, 26 Apr 2021 21:05:44 -0400 Subject: [PATCH 07/12] temp commit --- .../pipedsl/analysis/TypeInference.scala | 77 +++++++++++++++++++ src/main/scala/pipedsl/common/Errors.scala | 4 + 2 files changed, 81 insertions(+) create mode 100644 src/main/scala/pipedsl/analysis/TypeInference.scala diff --git a/src/main/scala/pipedsl/analysis/TypeInference.scala b/src/main/scala/pipedsl/analysis/TypeInference.scala new file mode 100644 index 00000000..d55bca74 --- /dev/null +++ b/src/main/scala/pipedsl/analysis/TypeInference.scala @@ -0,0 +1,77 @@ +package pipedsl.analysis + +import pipedsl.common.Errors.{UnexpectedType, UnificationError} +import pipedsl.common.Syntax +import pipedsl.common.Syntax.{BOp, EBinop, Expr, Id, TBool, TFun, TNamedType, TSizedInt, TString, TVoid, Type} + +class TypeInference { + + type Env = Map[Id, Type] + type Subst = List[(Id, Type)] + + var counter = 0 + + private def generateTypeVar(): TNamedType = TNamedType(Id("__TYPE__" + counter)); counter += 1 + private def occursIn(name: Id, b: Type): Boolean = b match { + case Syntax.TSizedInt(len, unsigned) => false + case Syntax.TString() => false + case Syntax.TVoid() => false + case Syntax.TBool() => false + case Syntax.TFun(args, ret) => args.foldLeft[Boolean](false)((b, t) => b || occursIn(name, t)) || occursIn(name, ret) + case Syntax.TRecType(name, fields) =>false + case Syntax.TMemType(elem, addrSize, readLatency, writeLatency) => false + case Syntax.TModType(inputs, refs, retType, name) => false + case Syntax.TNamedType(name) => false + } + + private def unify(a: Type, b: Type): Subst = (a,b) match { + case (t1: TNamedType, t2) => if (!occursIn(t1.name, t2)) List((t1.name, t2)) else List() + case (t1, t2: TNamedType) => if (!occursIn(t2.name, t1)) List((t2.name, t1)) else List() + case (_:TString, _:TString) => List() + case (_: TBool, _:TBool) => List() + case (_: TVoid, _:TVoid) => List() + case (_: TSizedInt, _: TSizedInt) => List() + //TODO: TSIZEDINT + case (TFun(args1, ret1), TFun(args2, ret2)) if args1.length == args2.length => + args1.zip(args2).foldLeft[Subst](List())((s, t) => s ++ unify(t._1, t._2)) ++ unify(ret1, ret2) + case _ => throw UnificationError(a, b) + } + + private def infer(env: Env, e: Expr): (Subst, Type) = e match { + case Syntax.EInvalid => + case Syntax.EIsValid(ex) => + case Syntax.EFromMaybe(ex) => + case Syntax.EInt(v, base, bits) => (List(), TSizedInt(bits, true)) + case Syntax.EString(v) => (List(), TString()) + case Syntax.EBool(v) => (List(), TBool()) + case Syntax.EUop(op, ex) => op match { + case Syntax.BoolUOp(op) => + case _ => + } + case Syntax.EBinop(op, e1, e2) => + val (s1, t1) = infer(env, e1) + //TODO substitute into env, use new env + val (s2, t2) = infer(env, e2) + case Syntax.ERecAccess(rec, fieldName) => + case Syntax.ERecLiteral(fields) => + case Syntax.EMemAccess(mem, index) => + case Syntax.EBitExtract(num, start, end) => + case Syntax.ETernary(cond, tval, fval) => + case Syntax.EApp(func, args) => + case Syntax.ECall(mod, args) => + case Syntax.EVar(id) => + case Syntax.ECast(ctyp, exp) => + case expr: Syntax.CirExpr => + } + + private def binOpExpectedType(b: BOp): Type = b match { + case Syntax.EqOp(op) => + val t = generateTypeVar() // TODO: This can be anything? + TFun(List(t, t), TBool()) + case Syntax.CmpOp(op) => TFun(List(TSizedInt(32, true), TSizedInt(32, true)), TBool())//TODO: TSizedInt? + case Syntax.BoolOp(op, fun) => TFun(List(TBool(), TBool()), TBool()) + case Syntax.NumOp(op, fun) => TFun(List(TSizedInt(32, true), TSizedInt(32, true)), TSizedInt(32, true)) + case Syntax.BitOp(op, fun) => TFun(List(TSizedInt(32, true), TSizedInt(32, true)), TSizedInt(32, true)) + } + +} diff --git a/src/main/scala/pipedsl/common/Errors.scala b/src/main/scala/pipedsl/common/Errors.scala index 2b68e3a4..a210478f 100644 --- a/src/main/scala/pipedsl/common/Errors.scala +++ b/src/main/scala/pipedsl/common/Errors.scala @@ -128,4 +128,8 @@ object Errors { case class UnexpectedBSVType(msg: String) extends RuntimeException(msg) case class MalformedLockTypes(msg: String) extends RuntimeException(msg) + + case class UnificationError(t1: Type, t2: Type) extends RuntimeException( + s"Unable to unify type $t1 and type $t2" + ) } From c57401aa7cc705ff0eb363b6cd776d0b2620e27b Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Mon, 3 May 2021 03:23:46 -0400 Subject: [PATCH 08/12] broken but getting there --- .../pipedsl/analysis/TypeInference.scala | 287 +++++++++++++++--- .../pipedsl/typechecker/Environments.scala | 2 + 2 files changed, 244 insertions(+), 45 deletions(-) diff --git a/src/main/scala/pipedsl/analysis/TypeInference.scala b/src/main/scala/pipedsl/analysis/TypeInference.scala index d55bca74..20fcd31a 100644 --- a/src/main/scala/pipedsl/analysis/TypeInference.scala +++ b/src/main/scala/pipedsl/analysis/TypeInference.scala @@ -1,28 +1,165 @@ package pipedsl.analysis import pipedsl.common.Errors.{UnexpectedType, UnificationError} -import pipedsl.common.Syntax -import pipedsl.common.Syntax.{BOp, EBinop, Expr, Id, TBool, TFun, TNamedType, TSizedInt, TString, TVoid, Type} +import pipedsl.common.Syntax._ +import pipedsl.typechecker.Subtypes.areEqual +import pipedsl.common.Errors +import java.util.function.ToIntFunction +import pipedsl.typechecker.Environments.TypeEnv +import pipedsl.typechecker.Environments -class TypeInference { +object TypeInference { - type Env = Map[Id, Type] type Subst = List[(Id, Type)] var counter = 0 - + + def checkProgram(p: Prog) = { + var runningEnv: TypeEnv = TypeEnv() + for (f <- p.fdefs) { + runningEnv = runningEnv.add(f.name, TFun(f.args.map(p => p.typ), f.ret)) + checkCommand(f.body, runningEnv.asInstanceOf[TypeEnv], List()) + } + for (m <- p.moddefs) { + val inputTypes = m.inputs.map(p => p.typ) + val modTypes = m.modules.map(m => replaceNamedType(m.typ, runningEnv)) + runningEnv = runningEnv.add(m.name, TModType(inputTypes, modTypes, m.ret, Some(m.name))) + checkCommand(m.body, runningEnv.asInstanceOf[TypeEnv], List()) + } + } + + def checkModule(m: ModuleDef, env: TypeEnv) = { + val inputTypes = m.inputs.map(p => p.typ) + val modTypes = m.modules.map(m => replaceNamedType(m.typ, env)) + val modEnv = env.add(m.name, TModType(inputTypes, modTypes, m.ret, Some(m.name))) + for () + } + + private def replaceNamedType(t: Type, tenv: TypeEnv): Type = t match { + case TNamedType(name) => tenv(name) + case _ => t + } + + def checkCommand(c: Command, env: TypeEnv, sub: Subst): (TypeEnv, Subst) = c match { + case CLockOp(mem, op) => //test basic first + (env, sub) + case CEmpty() => (env, sub) + case CReturn(exp) => (env, sub) + case CLockStart(mod) => throw new RuntimeException()//how to unify or condition? + case CIf(cond, cons, alt) => + //TODO: Might need to do some special handling with composing substitutions in this case + val (condS, condT) = infer(env, cond) + val newSub = compose_subst(sub, condS) + val newEnv = env.apply_subst_typeenv(condS) + val (consEnv, consSub) = checkCommand(cons, newEnv, newSub) + val newEnv2 = newEnv.apply_subst_typeenv(consSub) + val (altEnv, altSub) = checkCommand(alt, newEnv2, consSub) + //TODO: Intersection of both envs? + ((consEnv.apply_subst_typeenv(altSub).intersect(altEnv.apply_subst_typeenv(altSub)).asInstanceOf[TypeEnv]), altSub) + case CLockEnd(mod) => (env, sub) //how to unify an or condition? + case CSplit(cases, default) => //TODO + var (runningEnv, runningSub) = checkCommand(default, env, sub) + runningEnv = runningEnv.apply_subst_typeenv(runningSub) + for (c <- cases) { + val (condS, condT) = infer(env, c.cond) + //construct substitution you will use to check command + val newSub = compose_subst(runningSub, condS) + //apply substitution to original environmnet, which you will use to check the body + val newEnv = env.apply_subst_typeenv(newSub) + val (caseEnv, caseSub) = checkCommand(c.body, newEnv, newSub) + runningSub = caseSub + runningEnv = runningEnv.apply_subst_typeenv(runningSub).intersect(caseEnv.apply_subst_typeenv(runningSub)) + } + (runningEnv, runningSub) + case CExpr(exp) => (env, sub) //TODO + case CCheck(predVar) => (env, sub) + case CTBar(c1, c2) => + val (e, s) = checkCommand(c1, env, sub) + val e1 = e.apply_subst_typeenv(s) + val (e2, s2) = checkCommand(c2, e1, s) + (e2.apply_subst_typeenv(s2), s2) + case CPrint(evar) => (env, sub) + //how to unify or conditions> This I guess is an polymorphic function with restrictions + case CSpeculate(predVar, predVal, verify, body) => (env, sub) + case COutput(exp) => + (env, sub) + //How to check wellformedness with the module body + case CRecv(lhs, rhs, typ) => + val (slhs, tlhs) = infer(env, lhs) + val (srhs, trhs) = infer(env, rhs) + val s1 = unify(tlhs, trhs) + val sret = compose_many_subst(sub, slhs, srhs, s1, typ match { + case Some(value) => compose_subst(unify(tlhs, value), unify(trhs, value)) + case None => List() + }) + val newEnv = lhs match { + case EVar(id) => env.add(id, tlhs) + case _ => env + } + (newEnv.asInstanceOf[TypeEnv].apply_subst_typeenv(sret), sret) + case CAssign(lhs, rhs, typ) => + val (slhs, tlhs) = infer(env, lhs) + val (srhs, trhs) = infer(env, rhs) + val s1 = unify(tlhs, trhs) + val sret = compose_many_subst(sub, slhs, srhs, s1, typ match { + case Some(value) => compose_subst(unify(tlhs, value), unify(trhs, value)) + case None => List() + }) + val newEnv = lhs match { + case EVar(id) => env.add(id, tlhs) + case _ => env + } + (newEnv.asInstanceOf[TypeEnv].apply_subst_typeenv(sret), sret) + case CSeq(c1, c2) => + val (e, s) = checkCommand(c1, env, sub) + val e1 = e.apply_subst_typeenv(s) + val (e2, s2) = checkCommand(c2, e1, s) + (e2.apply_subst_typeenv(s2), s2) + } + private def generateTypeVar(): TNamedType = TNamedType(Id("__TYPE__" + counter)); counter += 1 private def occursIn(name: Id, b: Type): Boolean = b match { - case Syntax.TSizedInt(len, unsigned) => false - case Syntax.TString() => false - case Syntax.TVoid() => false - case Syntax.TBool() => false - case Syntax.TFun(args, ret) => args.foldLeft[Boolean](false)((b, t) => b || occursIn(name, t)) || occursIn(name, ret) - case Syntax.TRecType(name, fields) =>false - case Syntax.TMemType(elem, addrSize, readLatency, writeLatency) => false - case Syntax.TModType(inputs, refs, retType, name) => false - case Syntax.TNamedType(name) => false + case TSizedInt(len, unsigned) => false + case TString() => false + case TVoid() => false + case TBool() => false + case TFun(args, ret) => args.foldLeft[Boolean](false)((b, t) => b || occursIn(name, t)) || occursIn(name, ret) + case TRecType(name, fields) =>false + case TMemType(elem, addrSize, readLatency, writeLatency) => false + case TModType(inputs, refs, retType, name) => false + case TNamedType(name) => false + } + + private def subst_into_type(typevar: Id, toType: Type, inType: Type): Type = inType match { + case TRecType(name, fields) => inType //TODO + case t@TMemType(elem, addrSize, readLatency, writeLatency) => t.copy(elem=subst_into_type(typevar, toType, elem)) + case TSizedInt(len, unsigned) => inType + case TString() => inType + case TBool() => inType + case TVoid() => inType + case TFun(args, ret) => TFun(args.map(a=>subst_into_type(typevar, toType, a)), subst_into_type(typevar, toType, ret)) + case TNamedType(name) => if(name == typevar) toType else inType + case TModType(inputs, refs, retType, name) => + TModType( + inputs.map(i => subst_into_type(typevar, toType, i)), + refs.map(r => subst_into_type(typevar, toType, r)), + retType match { + case Some(value) => Some(subst_into_type(typevar, toType, value)) + case None => None + }, name) } + + def apply_subst_typ(subst: Subst, t: Type): Type = subst.foldLeft[Type](t)((t1, s) => subst_into_type(s._1, s._2, t1)) + + private def apply_subst_substs(subst: Subst, inSubst: Subst): Subst = + inSubst.foldLeft[Subst](List())((s, c) => s :+ ((c._1, apply_subst_typ(subst, c._2)))) + + private def compose_subst(sub1: Subst, sub2: Subst): Subst = + sub1 ++ apply_subst_substs(sub1, sub2) + + private def compose_many_subst(subs: Subst*): Subst = + subs.foldRight[Subst](List())((s1, s2) => compose_subst(s1, s2)) + private def unify(a: Type, b: Type): Subst = (a,b) match { case (t1: TNamedType, t2) => if (!occursIn(t1.name, t2)) List((t1.name, t2)) else List() @@ -33,45 +170,105 @@ class TypeInference { case (_: TSizedInt, _: TSizedInt) => List() //TODO: TSIZEDINT case (TFun(args1, ret1), TFun(args2, ret2)) if args1.length == args2.length => - args1.zip(args2).foldLeft[Subst](List())((s, t) => s ++ unify(t._1, t._2)) ++ unify(ret1, ret2) + compose_subst(args1.zip(args2).foldLeft[Subst](List())((s, t) => s ++ unify(t._1, t._2)), unify(ret1, ret2)) + case (TModType(input1, refs1, retType1, name1), TModType(input2, refs2, retType2, name2)) => + //TODO: Name?\ + if (name1 != name2) throw UnificationError(a,b) + compose_subst( + input1.zip(input2).foldLeft[Subst](List())((s, t) => s ++ unify(t._1, t._2)), + compose_subst( + refs1.zip(refs2).foldLeft[Subst](List())((s,t) => s ++ unify(t._1, t._2)), + ((retType1, retType2) match { + case (Some(t1:Type), Some(t2:Type)) => unify(t1, t2) + case (None, None) => List() + case _ => throw UnificationError(a,b) + }))) + case (TMemType(elem1, addrSize1, readLatency1, writeLatency1), TMemType(elem2, addrSize2, readLatency2, writeLatency2)) => + if (addrSize1 != addrSize2 || readLatency1 != readLatency2 || writeLatency1 != writeLatency2) throw UnificationError(a, b) + unify(elem1, elem2) case _ => throw UnificationError(a, b) } - private def infer(env: Env, e: Expr): (Subst, Type) = e match { - case Syntax.EInvalid => - case Syntax.EIsValid(ex) => - case Syntax.EFromMaybe(ex) => - case Syntax.EInt(v, base, bits) => (List(), TSizedInt(bits, true)) - case Syntax.EString(v) => (List(), TString()) - case Syntax.EBool(v) => (List(), TBool()) - case Syntax.EUop(op, ex) => op match { - case Syntax.BoolUOp(op) => - case _ => - } - case Syntax.EBinop(op, e1, e2) => - val (s1, t1) = infer(env, e1) - //TODO substitute into env, use new env - val (s2, t2) = infer(env, e2) - case Syntax.ERecAccess(rec, fieldName) => - case Syntax.ERecLiteral(fields) => - case Syntax.EMemAccess(mem, index) => - case Syntax.EBitExtract(num, start, end) => - case Syntax.ETernary(cond, tval, fval) => - case Syntax.EApp(func, args) => - case Syntax.ECall(mod, args) => - case Syntax.EVar(id) => - case Syntax.ECast(ctyp, exp) => - case expr: Syntax.CirExpr => + //Updating the type environment with the new subtitution whenever you generate one allows errors to be found :D + private def infer(env: TypeEnv, e: Expr): (Subst, Type) = e match { + case EInt(v, base, bits) => (List(), TSizedInt(bits, true)) + case EString(v) => (List(), TString()) + case EBool(v) => (List(), TBool()) + case EUop(op, ex) => + val (s, t) = infer(env, ex) + val retType = generateTypeVar() + val subst = unify(TFun(List(t), retType), uOpExpectedType(op)) + (compose_subst(s, subst), retType) + case EBinop(op, e1, e2) => + val (s1, t1) = infer(env, e1) + val newEnv = env.apply_subst_typeenv(s1) + val (s2, t2) = infer(newEnv, e2) + val retType = generateTypeVar() + val subst = unify(TFun(List(t2,t1), retType), binOpExpectedType(op)) + (compose_many_subst(s1, s2, subst), retType) + case EMemAccess(mem, index) => + if(!env(mem).isInstanceOf[TMemType]) throw UnexpectedType(e.pos, "Memory Access", "TMemtype", env(mem)) + val retTyp = generateTypeVar() + val (s, t) = infer(env, index) + val subst = unify(TFun(List(t), retTyp), getMemAccessType(env(mem).asInstanceOf[TMemType])) + (compose_subst(s,subst), retTyp) + case EBitExtract(num, start, end) => throw new RuntimeException() //TODO + case ETernary(cond, tval, fval) => + val (sc, tc) = infer(env, cond) + val env1 = env.apply_subst_typeenv(sc) + val (st, tt) = infer(env1, tval) + val env2 = env1.apply_subst_typeenv(st) + val (sf, tf) = infer(env, fval) + val substc = unify(tc, TBool()) + val subst = unify(tt, tf) + (compose_many_subst(sc, st, sf, substc, subst), tt) + case EApp(func, args) => + val expectedType = env(func) + val retType = generateTypeVar() + val (subList, typeList) = args.map(a => infer(env, a)).unzip + val subst = unify(TFun(typeList, retType), expectedType) + (compose_many_subst((subList :+ subst).toSeq:_*), retType) + case ECall(mod, args) => + if (!env(mod).isInstanceOf[TModType]) throw UnexpectedType(e.pos, "Module Call", "TModType", env(mod)) + val expectedType = getArrowModType(env(mod).asInstanceOf[TModType]) + val retType = generateTypeVar() + val (subList, typeList) = args.map(a => infer(env, a)).unzip + val subst = unify(TFun(typeList, retType), expectedType) + (compose_many_subst((subList :+ subst).toSeq:_*), retType) + case EVar(id) => (List(), env(id)) + case ECast(ctyp, exp) => + //TODO this is wrong probably + val (s, t) = infer(env, exp) + val newT = apply_subst_typ(s, t) + if (!areEqual(ctyp, newT)) throw Errors.IllegalCast(e.pos, ctyp, newT) + (s, ctyp) } private def binOpExpectedType(b: BOp): Type = b match { - case Syntax.EqOp(op) => + case EqOp(op) => val t = generateTypeVar() // TODO: This can be anything? TFun(List(t, t), TBool()) - case Syntax.CmpOp(op) => TFun(List(TSizedInt(32, true), TSizedInt(32, true)), TBool())//TODO: TSizedInt? - case Syntax.BoolOp(op, fun) => TFun(List(TBool(), TBool()), TBool()) - case Syntax.NumOp(op, fun) => TFun(List(TSizedInt(32, true), TSizedInt(32, true)), TSizedInt(32, true)) - case Syntax.BitOp(op, fun) => TFun(List(TSizedInt(32, true), TSizedInt(32, true)), TSizedInt(32, true)) + case CmpOp(op) => TFun(List(TSizedInt(32, true), TSizedInt(32, true)), TBool())//TODO: TSizedInt? + case BoolOp(op, fun) => TFun(List(TBool(), TBool()), TBool()) + case NumOp(op, fun) => TFun(List(TSizedInt(32, true), TSizedInt(32, true)), TSizedInt(32, true)) + case BitOp(op, fun) => TFun(List(TSizedInt(32, true), TSizedInt(32, true)), TSizedInt(32, true)) + } + + private def uOpExpectedType(u: UOp): Type = u match { + case BitUOp(op) => TFun(List(TSizedInt(32, true)), TSizedInt(32, true)) + case BoolUOp(op) => TFun(List(TBool()), TBool()) + case NumUOp(op) => TFun(List(TSizedInt(32, true)), TSizedInt(32, true)) + } + + private def getArrowModType(t: TModType): TFun = { + TFun(t.inputs, t.retType match { + case None => TVoid() + case Some(value) => value + }) + } + + private def getMemAccessType(t: TMemType): TFun = { + TFun(List(TSizedInt(t.addrSize, unsigned=true)), t.elem) } } diff --git a/src/main/scala/pipedsl/typechecker/Environments.scala b/src/main/scala/pipedsl/typechecker/Environments.scala index ee761740..933c6db5 100644 --- a/src/main/scala/pipedsl/typechecker/Environments.scala +++ b/src/main/scala/pipedsl/typechecker/Environments.scala @@ -5,6 +5,7 @@ import pipedsl.common.Errors._ import pipedsl.common.Locks._ import pipedsl.common.Syntax._ import pipedsl.common.Utilities._ +import pipedsl.analysis.TypeInference._ object Environments { @@ -83,6 +84,7 @@ object Environments { } })) } + def apply_subst_typeenv(subst: List[(Id, Type)]): TypeEnv = TypeEnv(typeMap.foldLeft[Map[Id, Type]](Map())((e, kv) => e + (kv._1 -> apply_subst_typ(subst, kv._2)))) } case class LockEnv(lockMap: Map[Id, LockState] = Map()) extends Environment[Id, LockState] { From 56cd903f89ecb6d9af2182287e1f3f86dd7b0214 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Tue, 4 May 2021 13:04:59 -0400 Subject: [PATCH 09/12] reeady for testing --- .../pipedsl/analysis/TypeInference.scala | 271 ++++++++++++------ 1 file changed, 191 insertions(+), 80 deletions(-) diff --git a/src/main/scala/pipedsl/analysis/TypeInference.scala b/src/main/scala/pipedsl/analysis/TypeInference.scala index 20fcd31a..74762f26 100644 --- a/src/main/scala/pipedsl/analysis/TypeInference.scala +++ b/src/main/scala/pipedsl/analysis/TypeInference.scala @@ -1,12 +1,11 @@ package pipedsl.analysis -import pipedsl.common.Errors.{UnexpectedType, UnificationError} +import pipedsl.common.Errors.{ArgLengthMismatch, UnexpectedSubtype, UnexpectedType, UnificationError} import pipedsl.common.Syntax._ -import pipedsl.typechecker.Subtypes.areEqual +import pipedsl.typechecker.Subtypes.{areEqual, isSubtype} import pipedsl.common.Errors -import java.util.function.ToIntFunction -import pipedsl.typechecker.Environments.TypeEnv -import pipedsl.typechecker.Environments +import pipedsl.common.Syntax.Latency.{Asynchronous, Combinational, Sequential} +import pipedsl.typechecker.Environments.{Environment, TypeEnv} object TypeInference { @@ -14,32 +13,99 @@ object TypeInference { var counter = 0 - def checkProgram(p: Prog) = { - var runningEnv: TypeEnv = TypeEnv() - for (f <- p.fdefs) { - runningEnv = runningEnv.add(f.name, TFun(f.args.map(p => p.typ), f.ret)) - checkCommand(f.body, runningEnv.asInstanceOf[TypeEnv], List()) - } - for (m <- p.moddefs) { - val inputTypes = m.inputs.map(p => p.typ) - val modTypes = m.modules.map(m => replaceNamedType(m.typ, runningEnv)) - runningEnv = runningEnv.add(m.name, TModType(inputTypes, modTypes, m.ret, Some(m.name))) - checkCommand(m.body, runningEnv.asInstanceOf[TypeEnv], List()) + def checkProgram(p: Prog): Environment[Id, Type] = { + val funcEnvs = p.fdefs.foldLeft[Environment[Id, Type]](TypeEnv())((env, f) => checkFunc(f, env.asInstanceOf[TypeEnv])) + val modEnvs = p.moddefs.foldLeft[Environment[Id, Type]](funcEnvs)((env, m) => checkModule(m, env.asInstanceOf[TypeEnv])) + checkCircuit(p.circ, modEnvs) + } + + def checkCircuit(c: Circuit, tenv: Environment[Id, Type]): Environment[Id, Type] = c match { + case CirSeq(c1, c2) => { + val e1 = checkCircuit(c1, tenv) + checkCircuit(c2, e1) } + case CirConnect(name, c) => + val (t, env2) = checkCirExpr(c, tenv) + env2.add(name, t) + case CirExprStmt(ce) => checkCirExpr(ce, tenv)._2 } - def checkModule(m: ModuleDef, env: TypeEnv) = { + private def checkCirExpr(c: CirExpr, tenv: Environment[Id, Type]): (Type, Environment[Id, Type]) = c match { + case CirMem(elemTyp, addrSize) => { + val mtyp = TMemType(elemTyp, addrSize, Asynchronous, Asynchronous) + (mtyp, tenv) + } + case CirRegFile(elemTyp, addrSize) => { + val mtyp = TMemType(elemTyp, addrSize, Combinational, Sequential) + (mtyp, tenv) + } + case CirNew(mod, mods) => { + val mtyp = tenv(mod) + mtyp match { + case TModType(_, refs, _, _) => { + if(refs.length != mods.length) { + throw ArgLengthMismatch(c.pos, mods.length, refs.length) + } + refs.zip(mods).foreach { + case (reftyp, mname) => { + if (!(isSubtype(tenv(mname), reftyp))) { + throw UnexpectedSubtype(mname.pos, mname.toString, reftyp, tenv(mname)) + } + } + } + (mtyp, tenv) + } + case x => throw UnexpectedType(c.pos, c.toString, "Module Type", x) + } + } + case CirCall(mod, inits) => { + val mtyp = tenv(mod) + mtyp match { + case TModType(ityps, _, _, _) => { + if(ityps.length != inits.length) { + throw ArgLengthMismatch(c.pos, inits.length, ityps.length) + } + ityps.zip(inits).foreach { + case (expectedT, arg) => { + val (subst, atyp, aenv) = infer(tenv.asInstanceOf[TypeEnv], arg) + if (!isSubtype(atyp, expectedT)) { + throw UnexpectedSubtype(arg.pos, arg.toString, expectedT, atyp) + } + } + } + (mtyp, tenv) + } + case x => throw UnexpectedType(c.pos, c.toString, "Module Type", x) + } + } + } + + def checkModule(m: ModuleDef, env: TypeEnv): Environment[Id, Type] = { val inputTypes = m.inputs.map(p => p.typ) val modTypes = m.modules.map(m => replaceNamedType(m.typ, env)) val modEnv = env.add(m.name, TModType(inputTypes, modTypes, m.ret, Some(m.name))) - for () + val inEnv = m.inputs.foldLeft[Environment[Id, Type]](modEnv)((env, p) => env.add(p.name, p.typ)) + val pipeEnv = m.modules.foldLeft[Environment[Id, Type]](inEnv)((env, m) => env.add(m.name, m.typ)) + checkCommand(m.body, pipeEnv.asInstanceOf[TypeEnv], List()) + modEnv + } + + def checkFunc(f: FuncDef, env: TypeEnv): Environment[Id, Type] = { + val inputTypes = f.args.map(a => a.typ) + val funType = TFun(inputTypes, f.ret) + val funEnv = env.add(f.name, funType) + val inEnv = f.args.foldLeft[Environment[Id, Type]](funEnv)((env, a) => env.add(a.name, a.typ)) + checkCommand(f.body, inEnv.asInstanceOf[TypeEnv], List()) + funEnv } private def replaceNamedType(t: Type, tenv: TypeEnv): Type = t match { case TNamedType(name) => tenv(name) case _ => t } - +//INVARIANTS +//Transforms the argument sub by composing any additional substitution +//Transforms the argument env by subbing in the returned substitution and adding any relevatn variables def checkCommand(c: Command, env: TypeEnv, sub: Subst): (TypeEnv, Subst) = c match { case CLockOp(mem, op) => //test basic first (env, sub) @@ -48,36 +114,37 @@ object TypeInference { case CLockStart(mod) => throw new RuntimeException()//how to unify or condition? case CIf(cond, cons, alt) => //TODO: Might need to do some special handling with composing substitutions in this case - val (condS, condT) = infer(env, cond) - val newSub = compose_subst(sub, condS) - val newEnv = env.apply_subst_typeenv(condS) + val (condS, condT, env1) = infer(env, cond) + val tempSub = compose_subst(sub, condS) + val condTyp = apply_subst_typ(tempSub, condT) + val newSub = compose_subst(tempSub, unify(condTyp, TBool())) + val newEnv = env1.apply_subst_typeenv(newSub) val (consEnv, consSub) = checkCommand(cons, newEnv, newSub) val newEnv2 = newEnv.apply_subst_typeenv(consSub) val (altEnv, altSub) = checkCommand(alt, newEnv2, consSub) //TODO: Intersection of both envs? - ((consEnv.apply_subst_typeenv(altSub).intersect(altEnv.apply_subst_typeenv(altSub)).asInstanceOf[TypeEnv]), altSub) + (consEnv.apply_subst_typeenv(altSub).intersect(altEnv).asInstanceOf[TypeEnv], altSub) case CLockEnd(mod) => (env, sub) //how to unify an or condition? case CSplit(cases, default) => //TODO var (runningEnv, runningSub) = checkCommand(default, env, sub) - runningEnv = runningEnv.apply_subst_typeenv(runningSub) for (c <- cases) { - val (condS, condT) = infer(env, c.cond) - //construct substitution you will use to check command - val newSub = compose_subst(runningSub, condS) + val (condS, condT, env1) = infer(env, c.cond) + val tempSub = compose_subst(runningSub, condS) + val condTyp = apply_subst_typ(tempSub, condT) + val newSub = compose_subst(tempSub, unify(condTyp, TBool())) //apply substitution to original environmnet, which you will use to check the body val newEnv = env.apply_subst_typeenv(newSub) val (caseEnv, caseSub) = checkCommand(c.body, newEnv, newSub) runningSub = caseSub - runningEnv = runningEnv.apply_subst_typeenv(runningSub).intersect(caseEnv.apply_subst_typeenv(runningSub)) + runningEnv = runningEnv.apply_subst_typeenv(runningSub).intersect(caseEnv).asInstanceOf[TypeEnv] } (runningEnv, runningSub) case CExpr(exp) => (env, sub) //TODO case CCheck(predVar) => (env, sub) case CTBar(c1, c2) => val (e, s) = checkCommand(c1, env, sub) - val e1 = e.apply_subst_typeenv(s) - val (e2, s2) = checkCommand(c2, e1, s) - (e2.apply_subst_typeenv(s2), s2) + val (e2, s2) = checkCommand(c2, e, s) + (e2, s2) case CPrint(evar) => (env, sub) //how to unify or conditions> This I guess is an polymorphic function with restrictions case CSpeculate(predVar, predVal, verify, body) => (env, sub) @@ -85,36 +152,41 @@ object TypeInference { (env, sub) //How to check wellformedness with the module body case CRecv(lhs, rhs, typ) => - val (slhs, tlhs) = infer(env, lhs) - val (srhs, trhs) = infer(env, rhs) - val s1 = unify(tlhs, trhs) - val sret = compose_many_subst(sub, slhs, srhs, s1, typ match { - case Some(value) => compose_subst(unify(tlhs, value), unify(trhs, value)) + val (slhs, tlhs, lhsEnv) = infer(env, lhs) + val (srhs, trhs, rhsEnv) = infer(lhsEnv, rhs) + val tempSub = compose_many_subst(sub, slhs, srhs) + val lhstyp = apply_subst_typ(tempSub, tlhs) + val rhstyp = apply_subst_typ(tempSub, trhs) + val s1 = unify(lhstyp, rhstyp) + val sret = compose_many_subst(tempSub, s1, typ match { + case Some(value) => compose_subst(unify(lhstyp, value), unify(rhstyp, value)) case None => List() }) val newEnv = lhs match { - case EVar(id) => env.add(id, tlhs) - case _ => env + case EVar(id) => rhsEnv.add(id, tlhs) + case _ => rhsEnv } (newEnv.asInstanceOf[TypeEnv].apply_subst_typeenv(sret), sret) case CAssign(lhs, rhs, typ) => - val (slhs, tlhs) = infer(env, lhs) - val (srhs, trhs) = infer(env, rhs) - val s1 = unify(tlhs, trhs) - val sret = compose_many_subst(sub, slhs, srhs, s1, typ match { - case Some(value) => compose_subst(unify(tlhs, value), unify(trhs, value)) + val (slhs, tlhs, lhsEnv) = infer(env, lhs) + val (srhs, trhs, rhsEnv) = infer(lhsEnv, rhs) + val tempSub = compose_many_subst(sub, slhs, srhs) + val lhstyp = apply_subst_typ(tempSub, tlhs) + val rhstyp = apply_subst_typ(tempSub, trhs) + val s1 = unify(lhstyp, rhstyp) + val sret = compose_many_subst(tempSub, s1, typ match { + case Some(value) => compose_subst(unify(lhstyp, value), unify(rhstyp, value)) case None => List() }) val newEnv = lhs match { - case EVar(id) => env.add(id, tlhs) - case _ => env + case EVar(id) => rhsEnv.add(id, tlhs) + case _ => rhsEnv } (newEnv.asInstanceOf[TypeEnv].apply_subst_typeenv(sret), sret) case CSeq(c1, c2) => - val (e, s) = checkCommand(c1, env, sub) - val e1 = e.apply_subst_typeenv(s) + val (e1, s) = checkCommand(c1, env, sub) val (e2, s2) = checkCommand(c2, e1, s) - (e2.apply_subst_typeenv(s2), s2) + (e2, s2) } private def generateTypeVar(): TNamedType = TNamedType(Id("__TYPE__" + counter)); counter += 1 @@ -189,59 +261,98 @@ object TypeInference { case _ => throw UnificationError(a, b) } - //Updating the type environment with the new subtitution whenever you generate one allows errors to be found :D - private def infer(env: TypeEnv, e: Expr): (Subst, Type) = e match { - case EInt(v, base, bits) => (List(), TSizedInt(bits, true)) - case EString(v) => (List(), TString()) - case EBool(v) => (List(), TBool()) + //Updating the type environment with the new substitution whenever you generate one allows errors to be found :D + //The environment returned is guaratneed to already have been substituted into with the returned substitution + private def infer(env: TypeEnv, e: Expr): (Subst, Type, TypeEnv) = e match { + case EInt(v, base, bits) => (List(), TSizedInt(bits, true), env) + case EString(v) => (List(), TString(), env) + case EBool(v) => (List(), TBool(), env) case EUop(op, ex) => - val (s, t) = infer(env, ex) + val (s, t, env1) = infer(env, ex) val retType = generateTypeVar() - val subst = unify(TFun(List(t), retType), uOpExpectedType(op)) - (compose_subst(s, subst), retType) + val tNew = apply_subst_typ(s, t) + val subst = unify(TFun(List(tNew), retType), uOpExpectedType(op)) + val retSubst = compose_subst(s, subst) + val retTyp = apply_subst_typ(retSubst, retType) + (retSubst, retTyp, env1.apply_subst_typeenv(retSubst)) case EBinop(op, e1, e2) => - val (s1, t1) = infer(env, e1) - val newEnv = env.apply_subst_typeenv(s1) - val (s2, t2) = infer(newEnv, e2) + val (s1, t1, env1) = infer(env, e1) + val (s2, t2, env2) = infer(env1, e2) val retType = generateTypeVar() - val subst = unify(TFun(List(t2,t1), retType), binOpExpectedType(op)) - (compose_many_subst(s1, s2, subst), retType) + val subTemp = compose_subst(s1, s2) + val t1New = apply_subst_typ(subTemp, t1) + val t2New = apply_subst_typ(subTemp, t2) + val subst = unify(TFun(List(t2New,t1New), retType), binOpExpectedType(op)) + val retSubst = compose_subst(subTemp, subst) + val retTyp = apply_subst_typ(retSubst, retType) + (retSubst, retTyp, env2.apply_subst_typeenv(retSubst)) case EMemAccess(mem, index) => if(!env(mem).isInstanceOf[TMemType]) throw UnexpectedType(e.pos, "Memory Access", "TMemtype", env(mem)) - val retTyp = generateTypeVar() - val (s, t) = infer(env, index) - val subst = unify(TFun(List(t), retTyp), getMemAccessType(env(mem).asInstanceOf[TMemType])) - (compose_subst(s,subst), retTyp) + val retType = generateTypeVar() + val (s, t, env1) = infer(env, index) + val tTemp = apply_subst_typ(s, t) + val subst = unify(TFun(List(tTemp), retType), getMemAccessType(env1(mem).asInstanceOf[TMemType])) + val retSubst = compose_subst(s,subst) + val retTyp = apply_subst_typ(retSubst, tTemp) + (retSubst, retTyp, env1.apply_subst_typeenv(retSubst)) case EBitExtract(num, start, end) => throw new RuntimeException() //TODO case ETernary(cond, tval, fval) => - val (sc, tc) = infer(env, cond) - val env1 = env.apply_subst_typeenv(sc) - val (st, tt) = infer(env1, tval) - val env2 = env1.apply_subst_typeenv(st) - val (sf, tf) = infer(env, fval) - val substc = unify(tc, TBool()) - val subst = unify(tt, tf) - (compose_many_subst(sc, st, sf, substc, subst), tt) + val (sc, tc, env1) = infer(env, cond) + val (st, tt, env2) = infer(env1, tval) + val (sf, tf, env3) = infer(env2, fval) + val substSoFar = compose_many_subst(sc, st, sf) + val tcNew = apply_subst_typ(substSoFar, tc) + val ttNew = apply_subst_typ(substSoFar, tt) + val tfNew = apply_subst_typ(substSoFar, tf) + val substc = unify(tcNew, TBool()) + val subst = unify(ttNew, tfNew) + val retSubst = compose_many_subst(sc, st, sf, substc, subst) + val retType = apply_subst_typ(retSubst, ttNew) + (retSubst, retType, env3.apply_subst_typeenv(retSubst)) case EApp(func, args) => val expectedType = env(func) val retType = generateTypeVar() - val (subList, typeList) = args.map(a => infer(env, a)).unzip + var runningEnv: TypeEnv = env + var runningSubst: Subst = List() + var typeList: List[Type] = List() + for (a <- args) { + val (sub, typ, env1) = infer(runningEnv, a) + runningSubst = compose_subst(runningSubst, sub) + typeList = typeList :+ typ + runningEnv = env1 + } + typeList = typeList.map(t=> apply_subst_typ(runningSubst, t)) val subst = unify(TFun(typeList, retType), expectedType) - (compose_many_subst((subList :+ subst).toSeq:_*), retType) + val retSubst = compose_subst(runningSubst, subst) + val retEnv = runningEnv.apply_subst_typeenv(retSubst) + val retTyp = apply_subst_typ(retSubst, retType) + (retSubst, retTyp, retEnv) case ECall(mod, args) => if (!env(mod).isInstanceOf[TModType]) throw UnexpectedType(e.pos, "Module Call", "TModType", env(mod)) val expectedType = getArrowModType(env(mod).asInstanceOf[TModType]) val retType = generateTypeVar() - val (subList, typeList) = args.map(a => infer(env, a)).unzip + var runningEnv: TypeEnv = env + var runningSubst: Subst = List() + var typeList: List[Type] = List() + for (a <- args) { + val (sub, typ, env1) = infer(runningEnv, a) + runningSubst = compose_subst(runningSubst, sub) + typeList = typeList :+ typ + runningEnv = env1 + } + typeList = typeList.map(t=> apply_subst_typ(runningSubst, t)) val subst = unify(TFun(typeList, retType), expectedType) - (compose_many_subst((subList :+ subst).toSeq:_*), retType) - case EVar(id) => (List(), env(id)) + val retSubst = compose_subst(runningSubst, subst) + val retEnv = runningEnv.apply_subst_typeenv(retSubst) + val retTyp = apply_subst_typ(retSubst, retType) + (retSubst, retTyp, retEnv) + case EVar(id) => (List(), env(id), env) case ECast(ctyp, exp) => //TODO this is wrong probably - val (s, t) = infer(env, exp) + val (s, t, env1) = infer(env, exp) val newT = apply_subst_typ(s, t) if (!areEqual(ctyp, newT)) throw Errors.IllegalCast(e.pos, ctyp, newT) - (s, ctyp) + (s, ctyp, env1) } private def binOpExpectedType(b: BOp): Type = b match { From 77aa833ceebeaaded5bc6d3ef6e1b685fac18daa Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 7 May 2021 14:27:59 -0400 Subject: [PATCH 10/12] added tests --- src/main/scala/pipedsl/Main.scala | 12 +- .../pipedsl/analysis/TypeInference.scala | 30 +++- .../type-inference-basic-pass.pdl | 143 ++++++++++++++++++ .../type-inference-fail-base-type.pdl | 10 ++ .../type-inference-fail-boolBinOp.pdl | 9 ++ .../type-inference-fail-call-args.pdl | 18 +++ .../type-inference-fail-call.pdl | 18 +++ .../type-inference-fail-eqBinOp.pdl | 8 + .../type-inference-fail-funcApp.pdl | 12 ++ .../type-inference-fail-intersecting-env.pdl | 0 .../type-inference-fail-numBinOp.pdl | 8 + .../type-inference-fail-ternary.pdl | 9 ++ .../type-inference-func-app-arg.pdl | 12 ++ 13 files changed, 277 insertions(+), 12 deletions(-) create mode 100644 src/test/tests/typecheckTests/type-inference-basic-pass.pdl create mode 100644 src/test/tests/typecheckTests/type-inference-fail-base-type.pdl create mode 100644 src/test/tests/typecheckTests/type-inference-fail-boolBinOp.pdl create mode 100644 src/test/tests/typecheckTests/type-inference-fail-call-args.pdl create mode 100644 src/test/tests/typecheckTests/type-inference-fail-call.pdl create mode 100644 src/test/tests/typecheckTests/type-inference-fail-eqBinOp.pdl create mode 100644 src/test/tests/typecheckTests/type-inference-fail-funcApp.pdl create mode 100644 src/test/tests/typecheckTests/type-inference-fail-intersecting-env.pdl create mode 100644 src/test/tests/typecheckTests/type-inference-fail-numBinOp.pdl create mode 100644 src/test/tests/typecheckTests/type-inference-fail-ternary.pdl create mode 100644 src/test/tests/typecheckTests/type-inference-func-app-arg.pdl diff --git a/src/main/scala/pipedsl/Main.scala b/src/main/scala/pipedsl/Main.scala index cc5db04b..f6ea93ae 100644 --- a/src/main/scala/pipedsl/Main.scala +++ b/src/main/scala/pipedsl/Main.scala @@ -6,7 +6,7 @@ import java.nio.file.{Files, Paths, StandardCopyOption} import com.microsoft.z3.Context import com.typesafe.scalalogging.Logger import org.apache.commons.io.FilenameUtils -import pipedsl.analysis.{PredicateAnalysis, TimingAnalysis, TypeAnalysis} +import pipedsl.analysis.{PredicateAnalysis, TimingAnalysis, TypeAnalysis, TypeInference} import pipedsl.codegen.bsv.{BSVPrettyPrinter, BluespecInterfaces} import pipedsl.codegen.bsv.BluespecGeneration.BluespecProgramGenerator import pipedsl.common.DAGSyntax.PStage @@ -45,6 +45,7 @@ object Main { val r = p.parseAll(p.prog, new String(Files.readAllBytes(inputFile.toPath))) val outputName = FilenameUtils.getBaseName(inputFile.getName) + ".parse" val outputFile = new File(Paths.get(outDir.getPath, outputName).toString) + println(r) if (printOutput) new PrettyPrinter(Some(outputFile)).printProgram(r.get) r.get } @@ -68,10 +69,11 @@ object Main { val pinfo = new ProgInfo(prog) try { val canonProg = CanonicalizePass.run(prog) - TypeAnalysis.get(prog).checkProg() - TimingAnalysis.get(prog).checkProg() - MarkNonRecursiveModulePass.run(prog) - val recvProg = SimplifyRecvPass.run(prog) + TypeInference.checkProgram(canonProg) + TypeAnalysis.get(canonProg).checkProg() + TimingAnalysis.get(canonProg).checkProg() + MarkNonRecursiveModulePass.run(canonProg) + val recvProg = SimplifyRecvPass.run(canonProg) new LockRegionChecker(recvProg).check(recvProg, None) val lockWellformedChecker = new LockWellformedChecker() val locks = lockWellformedChecker.check(canonProg) diff --git a/src/main/scala/pipedsl/analysis/TypeInference.scala b/src/main/scala/pipedsl/analysis/TypeInference.scala index 74762f26..01a4fc94 100644 --- a/src/main/scala/pipedsl/analysis/TypeInference.scala +++ b/src/main/scala/pipedsl/analysis/TypeInference.scala @@ -86,7 +86,8 @@ object TypeInference { val modEnv = env.add(m.name, TModType(inputTypes, modTypes, m.ret, Some(m.name))) val inEnv = m.inputs.foldLeft[Environment[Id, Type]](modEnv)((env, p) => env.add(p.name, p.typ)) val pipeEnv = m.modules.foldLeft[Environment[Id, Type]](inEnv)((env, m) => env.add(m.name, m.typ)) - checkCommand(m.body, pipeEnv.asInstanceOf[TypeEnv], List()) + println(checkCommand(m.body, pipeEnv.asInstanceOf[TypeEnv], List())) + modEnv } @@ -106,7 +107,7 @@ object TypeInference { //INVARIANTS //Transforms the argument sub by composing any additional substitution //Transforms the argument env by subbing in the returned substitution and adding any relevatn variables - def checkCommand(c: Command, env: TypeEnv, sub: Subst): (TypeEnv, Subst) = c match { + def checkCommand(c: Command, env: TypeEnv, sub: Subst): (TypeEnv, Subst) = {println(sub); c match { case CLockOp(mem, op) => //test basic first (env, sub) case CEmpty() => (env, sub) @@ -152,7 +153,10 @@ object TypeInference { (env, sub) //How to check wellformedness with the module body case CRecv(lhs, rhs, typ) => - val (slhs, tlhs, lhsEnv) = infer(env, lhs) + val (slhs, tlhs, lhsEnv) = lhs match { + case EVar(id) => (List(), typ.getOrElse(generateTypeVar()), env) + case _ => infer(env, lhs) + } val (srhs, trhs, rhsEnv) = infer(lhsEnv, rhs) val tempSub = compose_many_subst(sub, slhs, srhs) val lhstyp = apply_subst_typ(tempSub, tlhs) @@ -168,11 +172,18 @@ object TypeInference { } (newEnv.asInstanceOf[TypeEnv].apply_subst_typeenv(sret), sret) case CAssign(lhs, rhs, typ) => - val (slhs, tlhs, lhsEnv) = infer(env, lhs) + println(lhs) + println(rhs) + val (slhs, tlhs, lhsEnv) = (List(), typ.getOrElse(generateTypeVar()), env) val (srhs, trhs, rhsEnv) = infer(lhsEnv, rhs) val tempSub = compose_many_subst(sub, slhs, srhs) val lhstyp = apply_subst_typ(tempSub, tlhs) - val rhstyp = apply_subst_typ(tempSub, trhs) + val rhstyp = apply_subst_typ(tempSub, trhs) + println(tlhs) + println(trhs) + println(lhstyp) + println(rhstyp) + val s1 = unify(lhstyp, rhstyp) val sret = compose_many_subst(tempSub, s1, typ match { case Some(value) => compose_subst(unify(lhstyp, value), unify(rhstyp, value)) @@ -188,8 +199,12 @@ object TypeInference { val (e2, s2) = checkCommand(c2, e1, s) (e2, s2) } +} - private def generateTypeVar(): TNamedType = TNamedType(Id("__TYPE__" + counter)); counter += 1 + private def generateTypeVar(): TNamedType = { + counter += 1 + TNamedType(Id("__TYPE__" + counter)) + } private def occursIn(name: Id, b: Type): Boolean = b match { case TSizedInt(len, unsigned) => false case TString() => false @@ -282,8 +297,9 @@ object TypeInference { val subTemp = compose_subst(s1, s2) val t1New = apply_subst_typ(subTemp, t1) val t2New = apply_subst_typ(subTemp, t2) + val argSub = unify(t1New, t2New) val subst = unify(TFun(List(t2New,t1New), retType), binOpExpectedType(op)) - val retSubst = compose_subst(subTemp, subst) + val retSubst = compose_many_subst(subTemp, argSub, subst) val retTyp = apply_subst_typ(retSubst, retType) (retSubst, retTyp, env2.apply_subst_typeenv(retSubst)) case EMemAccess(mem, index) => diff --git a/src/test/tests/typecheckTests/type-inference-basic-pass.pdl b/src/test/tests/typecheckTests/type-inference-basic-pass.pdl new file mode 100644 index 00000000..bf6f5c44 --- /dev/null +++ b/src/test/tests/typecheckTests/type-inference-basic-pass.pdl @@ -0,0 +1,143 @@ + +def helper1(a: int<32>, b:bool, c: String): int<32> { + d = a + 1<32>; + e = b && false; + if (e) { + f = c; + } + return d; +} + +def helper2(a:bool, b: bool): bool { + c = a && b; + return c; +} + +pipe test1(input: int<32>)[rf: int<32>[32]] { + a = input; + b = true; + c = b; + if (c) { + d = a + 5<32>; + } +} + +pipe test2(input: int<32>)[rf: int<32>[32]] { + a = input; + b = true; + c = b; + if (c) { + d = a + 5<32>; + } else { + d = b; + } +} + +pipe test3()[] { + a = true; + b = a; + c = a || b; + d = c || b; + if (c) { + e = 1<32>; + } + if (d) { + f = 1<32>; + } +} + +pipe test4()[] { + a = true; + b = false; + c = a == b; + d = 5<32>; + e = 6<32>; + f = e==d; + if (c) { + + } + if (f) { + + } +} + +pipe test5()[] { + a = 5<32>; + b = 6<32>; + c = a + b; + d = c * b; + e = c / d; + f = e % d; + g = e - f; + h = g > f; + i = g <= f; + j = h && i; + if (j) { + + } +} + + +pipe test6(input: int<32>)[rf: int<32>[32]] { + a = input; + b = true; + c = b; + if (c) { + d = a + 5<32>; + } else { + d = b; + } +} + +pipe test7()[rf: int<32>[32]] { + a = 1<32>; + b = a; + c = rf[a]; + d = c == a; + e = d && d; +} + +pipe test8()[rf: int<32>[32]] { + a = 5<32>; + b = true; + c = false; + if (helper2(helper2(b, c),b)) { + d = a; + } + f = a; + s = "yES"; + e = helper1(f, helper2(b, c), s); + if (e==f) { + + } +} + +pipe test9()[rf: int<32>[32]] { + a = true || false; + b = a; + c = b ; + d = b && c; + e = (b) ? d : c; + if (!e) { + + } +} + +pipe test10(a: bool, b: int<32>)[rf: int<32>[32]]: int<32> { + output(5<32>); +} + +pipe test11()[rf: int<32>[32]] { + a = 5<32>; + b = 10<32>; + c = a + b; + d = false; + e = true; + f = e || d; + g = call test10(f, c); + h = g == b; +} + +circuit { + r = memory(int<32>, 32); +} \ No newline at end of file diff --git a/src/test/tests/typecheckTests/type-inference-fail-base-type.pdl b/src/test/tests/typecheckTests/type-inference-fail-base-type.pdl new file mode 100644 index 00000000..72889371 --- /dev/null +++ b/src/test/tests/typecheckTests/type-inference-fail-base-type.pdl @@ -0,0 +1,10 @@ +pipe test1(input: int<32>)[rf: int<32>[32]] { + a = input + 2<32>; + if (a) { + + } +} + +circuit { + r = memory(int<32>, 32); +} \ No newline at end of file diff --git a/src/test/tests/typecheckTests/type-inference-fail-boolBinOp.pdl b/src/test/tests/typecheckTests/type-inference-fail-boolBinOp.pdl new file mode 100644 index 00000000..3a302da6 --- /dev/null +++ b/src/test/tests/typecheckTests/type-inference-fail-boolBinOp.pdl @@ -0,0 +1,9 @@ + +pipe test1(input: int<32>)[rf: int<32>[32]] { + a = input; + b = a || a; +} + +circuit { + r = memory(int<32>, 32); +} \ No newline at end of file diff --git a/src/test/tests/typecheckTests/type-inference-fail-call-args.pdl b/src/test/tests/typecheckTests/type-inference-fail-call-args.pdl new file mode 100644 index 00000000..379def08 --- /dev/null +++ b/src/test/tests/typecheckTests/type-inference-fail-call-args.pdl @@ -0,0 +1,18 @@ +pipe test10(a: bool, b: int<32>)[rf: int<32>[32]]: int<32> { + output(5<32>); +} + +pipe test11()[rf: int<32>[32]] { + a = 5<32>; + b = 10<32>; + c = a + b; + d = false; + e = true; + f = e || d; + g = call test10(c, c); + h = g == b; +} + +circuit { + r = memory(int<32>, 32); +} \ No newline at end of file diff --git a/src/test/tests/typecheckTests/type-inference-fail-call.pdl b/src/test/tests/typecheckTests/type-inference-fail-call.pdl new file mode 100644 index 00000000..6bc02fad --- /dev/null +++ b/src/test/tests/typecheckTests/type-inference-fail-call.pdl @@ -0,0 +1,18 @@ +pipe test10(a: bool, b: int<32>)[rf: int<32>[32]]: int<32> { + output(5<32>); +} + +pipe test11()[rf: int<32>[32]] { + a = 5<32>; + b = 10<32>; + c = a + b; + d = false; + e = true; + f = e || d; + g = call test10(f, c); + h = g == d; +} + +circuit { + r = memory(int<32>, 32); +} \ No newline at end of file diff --git a/src/test/tests/typecheckTests/type-inference-fail-eqBinOp.pdl b/src/test/tests/typecheckTests/type-inference-fail-eqBinOp.pdl new file mode 100644 index 00000000..0d4bae05 --- /dev/null +++ b/src/test/tests/typecheckTests/type-inference-fail-eqBinOp.pdl @@ -0,0 +1,8 @@ +pipe test1(input: int<32>)[rf: int<32>[32]] { + a = true; + b = a == input; +} + +circuit { + r = memory(int<32>, 32); +} \ No newline at end of file diff --git a/src/test/tests/typecheckTests/type-inference-fail-funcApp.pdl b/src/test/tests/typecheckTests/type-inference-fail-funcApp.pdl new file mode 100644 index 00000000..f69d3e87 --- /dev/null +++ b/src/test/tests/typecheckTests/type-inference-fail-funcApp.pdl @@ -0,0 +1,12 @@ +def func(a: bool, b: int<32>): bool { + return b; +} + +pipe test1(input: int<32>)[rf: int<32>[32]] { + a = true; + b = func(a, input) + 5<32>; +} + +circuit { + r = memory(int<32>, 32); +} \ No newline at end of file diff --git a/src/test/tests/typecheckTests/type-inference-fail-intersecting-env.pdl b/src/test/tests/typecheckTests/type-inference-fail-intersecting-env.pdl new file mode 100644 index 00000000..e69de29b diff --git a/src/test/tests/typecheckTests/type-inference-fail-numBinOp.pdl b/src/test/tests/typecheckTests/type-inference-fail-numBinOp.pdl new file mode 100644 index 00000000..3096b3d3 --- /dev/null +++ b/src/test/tests/typecheckTests/type-inference-fail-numBinOp.pdl @@ -0,0 +1,8 @@ +pipe test1(input: int<32>)[rf: int<32>[32]] { + a = true; + b = a + a; +} + +circuit { + r = memory(int<32>, 32); +} \ No newline at end of file diff --git a/src/test/tests/typecheckTests/type-inference-fail-ternary.pdl b/src/test/tests/typecheckTests/type-inference-fail-ternary.pdl new file mode 100644 index 00000000..e635be6e --- /dev/null +++ b/src/test/tests/typecheckTests/type-inference-fail-ternary.pdl @@ -0,0 +1,9 @@ +pipe test1(input: int<32>)[rf: int<32>[32]] { + a = true; + b = input; + c = (b) ? a : b; +} + +circuit { + r = memory(int<32>, 32); +} \ No newline at end of file diff --git a/src/test/tests/typecheckTests/type-inference-func-app-arg.pdl b/src/test/tests/typecheckTests/type-inference-func-app-arg.pdl new file mode 100644 index 00000000..c2bb8609 --- /dev/null +++ b/src/test/tests/typecheckTests/type-inference-func-app-arg.pdl @@ -0,0 +1,12 @@ +def func(a: bool, b: int<32>): bool { + return b; +} + +pipe test1(input: int<32>)[rf: int<32>[32]] { + a = true; + b = func(a, a); +} + +circuit { + r = memory(int<32>, 32); +} \ No newline at end of file From ab8dead6a00b21d72d1654b0bb46801a0d3fce56 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Mon, 10 May 2021 10:34:05 -0400 Subject: [PATCH 11/12] Things are working, just need sized int --- src/main/scala/pipedsl/Main.scala | 1 - .../pipedsl/analysis/TypeInference.scala | 107 +++++++++++++----- 2 files changed, 80 insertions(+), 28 deletions(-) diff --git a/src/main/scala/pipedsl/Main.scala b/src/main/scala/pipedsl/Main.scala index f6ea93ae..2fb4cc63 100644 --- a/src/main/scala/pipedsl/Main.scala +++ b/src/main/scala/pipedsl/Main.scala @@ -45,7 +45,6 @@ object Main { val r = p.parseAll(p.prog, new String(Files.readAllBytes(inputFile.toPath))) val outputName = FilenameUtils.getBaseName(inputFile.getName) + ".parse" val outputFile = new File(Paths.get(outDir.getPath, outputName).toString) - println(r) if (printOutput) new PrettyPrinter(Some(outputFile)).printProgram(r.get) r.get } diff --git a/src/main/scala/pipedsl/analysis/TypeInference.scala b/src/main/scala/pipedsl/analysis/TypeInference.scala index 01a4fc94..ad9c8e17 100644 --- a/src/main/scala/pipedsl/analysis/TypeInference.scala +++ b/src/main/scala/pipedsl/analysis/TypeInference.scala @@ -1,6 +1,6 @@ package pipedsl.analysis -import pipedsl.common.Errors.{ArgLengthMismatch, UnexpectedSubtype, UnexpectedType, UnificationError} +import pipedsl.common.Errors.{ArgLengthMismatch, MalformedLockTypes, UnexpectedReturn, UnexpectedSubtype, UnexpectedType, UnificationError} import pipedsl.common.Syntax._ import pipedsl.typechecker.Subtypes.{areEqual, isSubtype} import pipedsl.common.Errors @@ -10,12 +10,20 @@ import pipedsl.typechecker.Environments.{Environment, TypeEnv} object TypeInference { type Subst = List[(Id, Type)] - - var counter = 0 + private var currentDef: Id = Id("-invalid-") + private var counter = 0 def checkProgram(p: Prog): Environment[Id, Type] = { - val funcEnvs = p.fdefs.foldLeft[Environment[Id, Type]](TypeEnv())((env, f) => checkFunc(f, env.asInstanceOf[TypeEnv])) - val modEnvs = p.moddefs.foldLeft[Environment[Id, Type]](funcEnvs)((env, m) => checkModule(m, env.asInstanceOf[TypeEnv])) + val funcEnvs = p.fdefs.foldLeft[Environment[Id, Type]](TypeEnv())( + (env, f) => { + currentDef = f.name + checkFunc(f, env.asInstanceOf[TypeEnv]) + }) + val modEnvs = p.moddefs.foldLeft[Environment[Id, Type]](funcEnvs)( + (env, m) => { + currentDef = m.name + checkModule(m, env.asInstanceOf[TypeEnv]) + }) checkCircuit(p.circ, modEnvs) } @@ -85,9 +93,8 @@ object TypeInference { val modTypes = m.modules.map(m => replaceNamedType(m.typ, env)) val modEnv = env.add(m.name, TModType(inputTypes, modTypes, m.ret, Some(m.name))) val inEnv = m.inputs.foldLeft[Environment[Id, Type]](modEnv)((env, p) => env.add(p.name, p.typ)) - val pipeEnv = m.modules.foldLeft[Environment[Id, Type]](inEnv)((env, m) => env.add(m.name, m.typ)) - println(checkCommand(m.body, pipeEnv.asInstanceOf[TypeEnv], List())) - + val pipeEnv = m.modules.zip(modTypes).foldLeft[Environment[Id, Type]](inEnv)((env, m) => env.add(m._1.name, m._2)) + checkCommand(m.body, pipeEnv.asInstanceOf[TypeEnv], List()) modEnv } @@ -107,14 +114,41 @@ object TypeInference { //INVARIANTS //Transforms the argument sub by composing any additional substitution //Transforms the argument env by subbing in the returned substitution and adding any relevatn variables - def checkCommand(c: Command, env: TypeEnv, sub: Subst): (TypeEnv, Subst) = {println(sub); c match { + def checkCommand(c: Command, env: TypeEnv, sub: Subst): (TypeEnv, Subst) = c match { case CLockOp(mem, op) => //test basic first - (env, sub) + env(mem.id) match { + case t@TMemType(elem, addrSize, readLatency, writeLatency) => mem.evar match { + case Some(value) => + val (s, t, e) = infer(env, value) + val tempSub = compose_subst(sub, s) + val tNew = apply_subst_typ(tempSub, t) + val newSub = compose_subst(tempSub, unify(tNew, TSizedInt(addrSize, true))) + (e.apply_subst_typeenv(newSub), newSub) + case None => (env, sub) + } + case TModType(inputs, refs, retType, name) => + if (mem.evar.isDefined) throw MalformedLockTypes("Pipeline modules can not have specific locks") + (env, sub) + case b => throw UnexpectedType(mem.id.pos, c.toString, "Memory or Module Type", b) + } case CEmpty() => (env, sub) - case CReturn(exp) => (env, sub) - case CLockStart(mod) => throw new RuntimeException()//how to unify or condition? + case CReturn(exp) => + val (s, t, e) = infer(env, exp) + val tempSub = compose_subst(sub, s) + val tNew = apply_subst_typ(tempSub, t) + val funT = env(currentDef) + funT match { + case TFun(args, ret) => + val retSub = compose_subst(tempSub, unify(tNew, ret)) + (e.apply_subst_typeenv(retSub), retSub) + case b => throw UnexpectedType(c.pos, c.toString, funT.toString, b) + } + case CLockStart(mod) => + if(!(env(mod).isInstanceOf[TMemType] || env(mod).isInstanceOf[TModType])) { + throw UnexpectedType(mod.pos, c.toString, "Memory or Module Type", env(mod)) + } + (env, sub) case CIf(cond, cons, alt) => - //TODO: Might need to do some special handling with composing substitutions in this case val (condS, condT, env1) = infer(env, cond) val tempSub = compose_subst(sub, condS) val condTyp = apply_subst_typ(tempSub, condT) @@ -125,7 +159,11 @@ object TypeInference { val (altEnv, altSub) = checkCommand(alt, newEnv2, consSub) //TODO: Intersection of both envs? (consEnv.apply_subst_typeenv(altSub).intersect(altEnv).asInstanceOf[TypeEnv], altSub) - case CLockEnd(mod) => (env, sub) //how to unify an or condition? + case CLockEnd(mod) => + if(!(env(mod).isInstanceOf[TMemType] || env(mod).isInstanceOf[TModType])) { + throw UnexpectedType(mod.pos, c.toString, "Memory or Module Type", env(mod)) + } + (env, sub) case CSplit(cases, default) => //TODO var (runningEnv, runningSub) = checkCommand(default, env, sub) for (c <- cases) { @@ -134,13 +172,16 @@ object TypeInference { val condTyp = apply_subst_typ(tempSub, condT) val newSub = compose_subst(tempSub, unify(condTyp, TBool())) //apply substitution to original environmnet, which you will use to check the body - val newEnv = env.apply_subst_typeenv(newSub) + val newEnv = env1.apply_subst_typeenv(newSub) val (caseEnv, caseSub) = checkCommand(c.body, newEnv, newSub) runningSub = caseSub runningEnv = runningEnv.apply_subst_typeenv(runningSub).intersect(caseEnv).asInstanceOf[TypeEnv] } (runningEnv, runningSub) - case CExpr(exp) => (env, sub) //TODO + case CExpr(exp) => + val (s, t, e) = infer(env, exp) + val retS = compose_subst(sub, s) + (e.apply_subst_typeenv(retS), retS) //TODO case CCheck(predVar) => (env, sub) case CTBar(c1, c2) => val (e, s) = checkCommand(c1, env, sub) @@ -150,7 +191,20 @@ object TypeInference { //how to unify or conditions> This I guess is an polymorphic function with restrictions case CSpeculate(predVar, predVal, verify, body) => (env, sub) case COutput(exp) => - (env, sub) + val (s, t, e) = infer(env, exp) + val tempSub = compose_subst(sub, s) + val tNew = apply_subst_typ(tempSub, t) + val modT = env(currentDef) + modT match { + case TModType(inputs, refs, retType, name) => + retType match { + case Some(value) => + val retSub = compose_subst(tempSub, unify(tNew, value)) + (e.apply_subst_typeenv(retSub), retSub) + case None => (e.apply_subst_typeenv(tempSub), tempSub) + } + case b => throw UnexpectedType(c.pos, c.toString, modT.toString, b) + } //How to check wellformedness with the module body case CRecv(lhs, rhs, typ) => val (slhs, tlhs, lhsEnv) = lhs match { @@ -172,18 +226,11 @@ object TypeInference { } (newEnv.asInstanceOf[TypeEnv].apply_subst_typeenv(sret), sret) case CAssign(lhs, rhs, typ) => - println(lhs) - println(rhs) val (slhs, tlhs, lhsEnv) = (List(), typ.getOrElse(generateTypeVar()), env) val (srhs, trhs, rhsEnv) = infer(lhsEnv, rhs) val tempSub = compose_many_subst(sub, slhs, srhs) val lhstyp = apply_subst_typ(tempSub, tlhs) - val rhstyp = apply_subst_typ(tempSub, trhs) - println(tlhs) - println(trhs) - println(lhstyp) - println(rhstyp) - + val rhstyp = apply_subst_typ(tempSub, trhs) val s1 = unify(lhstyp, rhstyp) val sret = compose_many_subst(tempSub, s1, typ match { case Some(value) => compose_subst(unify(lhstyp, value), unify(rhstyp, value)) @@ -198,7 +245,6 @@ object TypeInference { val (e1, s) = checkCommand(c1, env, sub) val (e2, s2) = checkCommand(c2, e1, s) (e2, s2) - } } private def generateTypeVar(): TNamedType = { @@ -311,7 +357,14 @@ object TypeInference { val retSubst = compose_subst(s,subst) val retTyp = apply_subst_typ(retSubst, tTemp) (retSubst, retTyp, env1.apply_subst_typeenv(retSubst)) - case EBitExtract(num, start, end) => throw new RuntimeException() //TODO + case EBitExtract(num, start, end) => + val (s, t, e) = infer(env, num) + t match { + case TSizedInt(len, unsigned) if len >= (math.abs(end - start) + 1) => (s, t, e) + case b => throw UnificationError(b, TSizedInt(32, true)) + } + + //TODO case ETernary(cond, tval, fval) => val (sc, tc, env1) = infer(env, cond) val (st, tt, env2) = infer(env1, tval) From 5e172ad720082c94fd29580032212661e8f1d32b Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sun, 16 May 2021 19:08:34 -0400 Subject: [PATCH 12/12] initial bit width testing looks good --- src/main/scala/pipedsl/Parser.scala | 2 +- .../pipedsl/analysis/TimingAnalysis.scala | 2 +- .../scala/pipedsl/analysis/TypeAnalysis.scala | 14 +-- .../pipedsl/analysis/TypeInference.scala | 117 +++++++++++++----- .../scala/pipedsl/codegen/bsv/BSVSyntax.scala | 2 +- src/main/scala/pipedsl/common/DAGSyntax.scala | 2 +- src/main/scala/pipedsl/common/Syntax.scala | 11 +- src/test/scala/pipedsl/MainSuite.scala | 10 +- .../type-inference-basic-pass.typechecksol | 1 + ...ype-inference-bit-width-tests.typechecksol | 1 + ...type-inference-fail-base-type.typechecksol | 1 + ...t-too-small-memAccessToosmall.typechecksol | 1 + ...ence-fail-bit-too-small-minus.typechecksol | 1 + ...rence-fail-bit-too-small-mult.typechecksol | 1 + ...rence-fail-bit-too-small-plus.typechecksol | 1 + ...type-inference-fail-boolBinOp.typechecksol | 1 + ...type-inference-fail-call-args.typechecksol | 1 + .../type-inference-fail-call.typechecksol | 1 + .../type-inference-fail-eqBinOp.typechecksol | 1 + ...e-inference-fail-func-app-arg.typechecksol | 1 + .../type-inference-fail-funcApp.typechecksol | 1 + .../type-inference-fail-numBinOp.typechecksol | 1 + .../type-inference-fail-ternary.typechecksol | 1 + .../type-inference-bit-width-tests.pdl | 50 ++++++++ ...e-fail-bit-too-small-memAccessToosmall.pdl | 9 ++ ...ype-inference-fail-bit-too-small-minus.pdl | 9 ++ ...type-inference-fail-bit-too-small-mult.pdl | 9 ++ ...type-inference-fail-bit-too-small-plus.pdl | 9 ++ ...l => type-inference-fail-func-app-arg.pdl} | 0 .../type-inference-fail-intersecting-env.pdl | 0 30 files changed, 212 insertions(+), 49 deletions(-) create mode 100644 src/test/tests/typecheckTests/solutions/type-inference-basic-pass.typechecksol create mode 100644 src/test/tests/typecheckTests/solutions/type-inference-bit-width-tests.typechecksol create mode 100644 src/test/tests/typecheckTests/solutions/type-inference-fail-base-type.typechecksol create mode 100644 src/test/tests/typecheckTests/solutions/type-inference-fail-bit-too-small-memAccessToosmall.typechecksol create mode 100644 src/test/tests/typecheckTests/solutions/type-inference-fail-bit-too-small-minus.typechecksol create mode 100644 src/test/tests/typecheckTests/solutions/type-inference-fail-bit-too-small-mult.typechecksol create mode 100644 src/test/tests/typecheckTests/solutions/type-inference-fail-bit-too-small-plus.typechecksol create mode 100644 src/test/tests/typecheckTests/solutions/type-inference-fail-boolBinOp.typechecksol create mode 100644 src/test/tests/typecheckTests/solutions/type-inference-fail-call-args.typechecksol create mode 100644 src/test/tests/typecheckTests/solutions/type-inference-fail-call.typechecksol create mode 100644 src/test/tests/typecheckTests/solutions/type-inference-fail-eqBinOp.typechecksol create mode 100644 src/test/tests/typecheckTests/solutions/type-inference-fail-func-app-arg.typechecksol create mode 100644 src/test/tests/typecheckTests/solutions/type-inference-fail-funcApp.typechecksol create mode 100644 src/test/tests/typecheckTests/solutions/type-inference-fail-numBinOp.typechecksol create mode 100644 src/test/tests/typecheckTests/solutions/type-inference-fail-ternary.typechecksol create mode 100644 src/test/tests/typecheckTests/type-inference-bit-width-tests.pdl create mode 100644 src/test/tests/typecheckTests/type-inference-fail-bit-too-small-memAccessToosmall.pdl create mode 100644 src/test/tests/typecheckTests/type-inference-fail-bit-too-small-minus.pdl create mode 100644 src/test/tests/typecheckTests/type-inference-fail-bit-too-small-mult.pdl create mode 100644 src/test/tests/typecheckTests/type-inference-fail-bit-too-small-plus.pdl rename src/test/tests/typecheckTests/{type-inference-func-app-arg.pdl => type-inference-fail-func-app-arg.pdl} (100%) delete mode 100644 src/test/tests/typecheckTests/type-inference-fail-intersecting-env.pdl diff --git a/src/main/scala/pipedsl/Parser.scala b/src/main/scala/pipedsl/Parser.scala index f5587a67..bf7439cd 100644 --- a/src/main/scala/pipedsl/Parser.scala +++ b/src/main/scala/pipedsl/Parser.scala @@ -217,7 +217,7 @@ class Parser extends RegexParsers with PackratParsers { seqCmd } - lazy val sizedInt: P[Type] = "int" ~> angular(posint) ^^ { bits => TSizedInt(bits, unsigned = true) } + lazy val sizedInt: P[Type] = "int" ~> angular(posint) ^^ { bits => TSizedInt(TBitWidthLen(bits), unsigned = true) } lazy val latency: P[Latency.Latency] = "c" ^^ { _ => Latency.Combinational } | "s" ^^ { _ => Latency.Sequential } | "a" ^^ { _ => Latency.Asynchronous } diff --git a/src/main/scala/pipedsl/analysis/TimingAnalysis.scala b/src/main/scala/pipedsl/analysis/TimingAnalysis.scala index 33cb11f4..c7e27cb2 100644 --- a/src/main/scala/pipedsl/analysis/TimingAnalysis.scala +++ b/src/main/scala/pipedsl/analysis/TimingAnalysis.scala @@ -187,7 +187,7 @@ class TimingAnalysis(program: Tree[ProgramNode, Prog], typeAnalysis: TypeAnalysi throw UnexpectedAsyncReference(a.pos, a.toString) }) Asynchronous - case e@EVar(id) => if(!availableNow(e)(id) && isRhs(e)) { println(availableNow(e)); println(availableNext(e)); println(generatedAvailableNext(NoneAvailable)(e)); println(generatedAvailableNow(NoneAvailable)(e)); throw UnavailableArgUse(e.pos, id.toString)} else { Combinational } + case e@EVar(id) => if(!availableNow(e)(id) && isRhs(e)) { throw UnavailableArgUse(e.pos, id.toString)} else { Combinational } case ECast(_, exp) => latency(exp) case _ => Combinational } diff --git a/src/main/scala/pipedsl/analysis/TypeAnalysis.scala b/src/main/scala/pipedsl/analysis/TypeAnalysis.scala index e2b37328..11e9cf59 100644 --- a/src/main/scala/pipedsl/analysis/TypeAnalysis.scala +++ b/src/main/scala/pipedsl/analysis/TypeAnalysis.scala @@ -5,7 +5,7 @@ import org.bitbucket.inkytonik.kiama.relation.Tree import pipedsl.common.Errors.{ArgLengthMismatch, IllegalCast, MalformedFunction, MissingType, UnexpectedAssignment, UnexpectedCase, UnexpectedCommand, UnexpectedReturn, UnexpectedSubtype, UnexpectedType} import pipedsl.common.Syntax import pipedsl.common.Syntax.Latency.{Asynchronous, Combinational, Sequential} -import pipedsl.common.Syntax.{BitOp, BitUOp, BoolOp, BoolUOp, CAssign, CCheck, CIf, CLockEnd, CLockOp, CLockStart, COutput, CRecv, CReturn, CSeq, CSpeculate, CSplit, CTBar, CirCall, CirConnect, CirExpr, CirExprStmt, CirMem, CirNew, CirRegFile, CirSeq, Circuit, CmpOp, Command, EVar, EqOp, Expr, FuncDef, Id, ModuleDef, NumOp, NumUOp, Prog, ProgramNode, TBool, TFun, TMemType, TModType, TNamedType, TRecType, TSizedInt, TString, TVoid, Type} +import pipedsl.common.Syntax._ import pipedsl.typechecker.Environments.{EmptyTypeEnv, Environment, TypeEnv} import pipedsl.typechecker.Subtypes.{areEqual, isSubtype} @@ -143,7 +143,7 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { if(!mem.evar.isEmpty) { val idxt = typeCheck(mem.evar.get) idxt match { - case TSizedInt(l, true) if l == memt.addrSize => () + case TSizedInt(l, true) if l.asInstanceOf[TBitWidthLen].len == memt.addrSize => () case _ => throw UnexpectedType(mem.pos, "lock operation", "ubit<" + memt.addrSize + ">", idxt) } } @@ -253,7 +253,7 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { private def checkExpr(e: Expr): Type = { val tenv = context(e) e match { - case Syntax.EInt(v, base, bits) => TSizedInt(bits, unsigned = true) + case Syntax.EInt(v, base, bits) => TSizedInt(TBitWidthLen(bits), unsigned = true) case Syntax.EString(v) =>TString() case Syntax.EBool(v) =>TBool() case Syntax.EUop(op, ex) => @@ -268,7 +268,7 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { val t2 = typeCheck(e2) op match { case BitOp("++", _) => (t1, t2) match { - case (TSizedInt(l1, u1), TSizedInt(l2, u2)) if u1 == u2 => TSizedInt(l1 + l2, u1) + case (TSizedInt(l1, u1), TSizedInt(l2, u2)) if u1 == u2 => TSizedInt(TBitWidthLen(l1.asInstanceOf[TBitWidthLen].len + l2.asInstanceOf[TBitWidthLen].len), u1) case (_, _) => throw UnexpectedType(e.pos, "concat", "sized number", t1) } case BitOp("<<", _) => (t1, t2) match { @@ -278,7 +278,7 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { case (TSizedInt(l1, u1), TSizedInt(_, _)) => TSizedInt(l1, u1) } case NumOp("*", _) => (t1, t2) match { - case (TSizedInt(l1, u1), TSizedInt(l2, u2)) if u1 == u2 => TSizedInt(l1 + l2, u1) + case (TSizedInt(l1, u1), TSizedInt(l2, u2)) if u1 == u2 => TSizedInt(TBitWidthLen(l1.asInstanceOf[TBitWidthLen].len + l2.asInstanceOf[TBitWidthLen].len), u1) case (_, _) => throw UnexpectedType(e.pos, "concat", "sized number", t1) } case _ => if (!areEqual(t1, t2)) { throw UnexpectedType(e2.pos, e2.toString, t1.toString(), t2) } else { @@ -307,14 +307,14 @@ class TypeAnalysis(program: Tree[ProgramNode, Prog]) extends Attribution { val memt = tenv(mem) val idxt= typeCheck(index) (memt, idxt) match { - case (TMemType(e, s, _, _), TSizedInt(l, true)) if l == s => e + case (TMemType(e, s, _, _), TSizedInt(l, true)) if l.asInstanceOf[TBitWidthLen].len == s => e case _ => throw UnexpectedType(e.pos, "memory access", "mismatched types", memt) } case Syntax.EBitExtract(num, start, end) => val ntyp = typeCheck(num) val bitsLeft = math.abs(end - start) + 1 ntyp.matchOrError(e.pos, "bit extract", "sized number") { - case TSizedInt(l, u) if l >= bitsLeft => TSizedInt(bitsLeft, u) + case TSizedInt(l, u) if l.asInstanceOf[TBitWidthLen].len >= bitsLeft => TSizedInt(TBitWidthLen(bitsLeft), u) case _ => throw UnexpectedType(e.pos, "bit extract", "sized number larger than extract range", ntyp) } case Syntax.ETernary(cond, tval, fval) => diff --git a/src/main/scala/pipedsl/analysis/TypeInference.scala b/src/main/scala/pipedsl/analysis/TypeInference.scala index ad9c8e17..4d45337b 100644 --- a/src/main/scala/pipedsl/analysis/TypeInference.scala +++ b/src/main/scala/pipedsl/analysis/TypeInference.scala @@ -114,7 +114,8 @@ object TypeInference { //INVARIANTS //Transforms the argument sub by composing any additional substitution //Transforms the argument env by subbing in the returned substitution and adding any relevatn variables - def checkCommand(c: Command, env: TypeEnv, sub: Subst): (TypeEnv, Subst) = c match { + def checkCommand(c: Command, env: TypeEnv, sub: Subst): (TypeEnv, Subst) = { + c match { case CLockOp(mem, op) => //test basic first env(mem.id) match { case t@TMemType(elem, addrSize, readLatency, writeLatency) => mem.evar match { @@ -122,7 +123,7 @@ object TypeInference { val (s, t, e) = infer(env, value) val tempSub = compose_subst(sub, s) val tNew = apply_subst_typ(tempSub, t) - val newSub = compose_subst(tempSub, unify(tNew, TSizedInt(addrSize, true))) + val newSub = compose_subst(tempSub, unify(tNew, TSizedInt(TBitWidthLen(addrSize), true))) (e.apply_subst_typeenv(newSub), newSub) case None => (env, sub) } @@ -215,7 +216,7 @@ object TypeInference { val tempSub = compose_many_subst(sub, slhs, srhs) val lhstyp = apply_subst_typ(tempSub, tlhs) val rhstyp = apply_subst_typ(tempSub, trhs) - val s1 = unify(lhstyp, rhstyp) + val s1 = unify(rhstyp, lhstyp) val sret = compose_many_subst(tempSub, s1, typ match { case Some(value) => compose_subst(unify(lhstyp, value), unify(rhstyp, value)) case None => List() @@ -231,7 +232,7 @@ object TypeInference { val tempSub = compose_many_subst(sub, slhs, srhs) val lhstyp = apply_subst_typ(tempSub, tlhs) val rhstyp = apply_subst_typ(tempSub, trhs) - val s1 = unify(lhstyp, rhstyp) + val s1 = unify(rhstyp, lhstyp) val sret = compose_many_subst(tempSub, s1, typ match { case Some(value) => compose_subst(unify(lhstyp, value), unify(rhstyp, value)) case None => List() @@ -246,13 +247,20 @@ object TypeInference { val (e2, s2) = checkCommand(c2, e1, s) (e2, s2) } + } private def generateTypeVar(): TNamedType = { counter += 1 TNamedType(Id("__TYPE__" + counter)) } + + private def generateBitWidthTypeVar(): TBitWidthVar = { + counter += 1 + TBitWidthVar(Id("__BITWIDTH__" + counter)) + } + private def occursIn(name: Id, b: Type): Boolean = b match { - case TSizedInt(len, unsigned) => false + case TSizedInt(len, unsigned) => occursIn(name, len) case TString() => false case TVoid() => false case TBool() => false @@ -260,13 +268,16 @@ object TypeInference { case TRecType(name, fields) =>false case TMemType(elem, addrSize, readLatency, writeLatency) => false case TModType(inputs, refs, retType, name) => false - case TNamedType(name) => false + case TNamedType(name1) => name1 == name + case TBitWidthVar(name1) => name1 == name + case TBitWidthAdd(b1, b2) => occursIn(name, b1) || occursIn(name, b2) + case TBitWidthMax(b1, b2) => occursIn(name, b1) || occursIn(name, b2) + case TBitWidthLen(len) => false } private def subst_into_type(typevar: Id, toType: Type, inType: Type): Type = inType match { - case TRecType(name, fields) => inType //TODO case t@TMemType(elem, addrSize, readLatency, writeLatency) => t.copy(elem=subst_into_type(typevar, toType, elem)) - case TSizedInt(len, unsigned) => inType + case TSizedInt(len, unsigned) => TSizedInt(subst_into_type(typevar, toType, len).asInstanceOf[TBitWidth], unsigned) case TString() => inType case TBool() => inType case TVoid() => inType @@ -280,6 +291,23 @@ object TypeInference { case Some(value) => Some(subst_into_type(typevar, toType, value)) case None => None }, name) + case t: TBitWidth => + t match { + case TBitWidthVar(name) => if (name == typevar) toType else inType + case TBitWidthLen(len) => inType + case TBitWidthAdd(b1, b2) => + val t1 = TBitWidthAdd(subst_into_type(typevar, toType, b1).asInstanceOf[TBitWidth], subst_into_type(typevar, toType, b2).asInstanceOf[TBitWidth]) + (t1.b1, t1.b2) match { + case (TBitWidthLen(len1), TBitWidthLen(len2)) => TBitWidthLen(len1 + len2) + case _ => t1 + } + case TBitWidthMax(b1, b2) => + val t1 = TBitWidthMax(subst_into_type(typevar, toType, b1).asInstanceOf[TBitWidth], subst_into_type(typevar, toType, b2).asInstanceOf[TBitWidth]) + (t1.b1, t1.b2) match { + case (TBitWidthLen(len1), TBitWidthLen(len2)) => TBitWidthLen(len1.max(len2)) + case _ => t1 + } + } } def apply_subst_typ(subst: Subst, t: Type): Type = subst.foldLeft[Type](t)((t1, s) => subst_into_type(s._1, s._2, t1)) @@ -293,39 +321,42 @@ object TypeInference { private def compose_many_subst(subs: Subst*): Subst = subs.foldRight[Subst](List())((s1, s2) => compose_subst(s1, s2)) - + //for subtyping bit widths, t1 is the subtype, t2 is the supertype. so t2 is the expected private def unify(a: Type, b: Type): Subst = (a,b) match { case (t1: TNamedType, t2) => if (!occursIn(t1.name, t2)) List((t1.name, t2)) else List() case (t1, t2: TNamedType) => if (!occursIn(t2.name, t1)) List((t2.name, t1)) else List() case (_:TString, _:TString) => List() case (_: TBool, _:TBool) => List() case (_: TVoid, _:TVoid) => List() - case (_: TSizedInt, _: TSizedInt) => List() + case (TSizedInt(len1, unsigned1), TSizedInt(len2, unsigned)) => unify(len1, len2) //TODO: TSIZEDINT case (TFun(args1, ret1), TFun(args2, ret2)) if args1.length == args2.length => - compose_subst(args1.zip(args2).foldLeft[Subst](List())((s, t) => s ++ unify(t._1, t._2)), unify(ret1, ret2)) + val s1 = args1.zip(args2).foldLeft[Subst](List())((s, t) => compose_subst(s, unify(apply_subst_typ(s, t._1), apply_subst_typ(s, t._2)))) + compose_subst(s1, unify(apply_subst_typ(s1, ret1), apply_subst_typ(s1, ret2))) case (TModType(input1, refs1, retType1, name1), TModType(input2, refs2, retType2, name2)) => //TODO: Name?\ if (name1 != name2) throw UnificationError(a,b) - compose_subst( - input1.zip(input2).foldLeft[Subst](List())((s, t) => s ++ unify(t._1, t._2)), - compose_subst( - refs1.zip(refs2).foldLeft[Subst](List())((s,t) => s ++ unify(t._1, t._2)), + val s1 = input1.zip(input2).foldLeft[Subst](List())((s, t) => compose_subst(s, unify(apply_subst_typ(s, t._1), apply_subst_typ(s, t._2)))) + val s2 = refs1.zip(refs2).foldLeft[Subst](s1)((s,t) => compose_subst(s, unify(apply_subst_typ(s, t._1), apply_subst_typ(s, t._2)))) + compose_subst(s2, ((retType1, retType2) match { - case (Some(t1:Type), Some(t2:Type)) => unify(t1, t2) + case (Some(t1:Type), Some(t2:Type)) => unify(apply_subst_typ(s2, t1), apply_subst_typ(s2,t2)) case (None, None) => List() case _ => throw UnificationError(a,b) - }))) + })) case (TMemType(elem1, addrSize1, readLatency1, writeLatency1), TMemType(elem2, addrSize2, readLatency2, writeLatency2)) => if (addrSize1 != addrSize2 || readLatency1 != readLatency2 || writeLatency1 != writeLatency2) throw UnificationError(a, b) unify(elem1, elem2) + case (t1: TBitWidthVar, t2: TBitWidth) => if(!occursIn(t1.name, t2)) List((t1.name, t2)) else List() + case (t1: TBitWidth, t2: TBitWidthVar) => if(!occursIn(t2.name, t1)) List((t2.name, t1)) else List() + case (t1: TBitWidthLen, t2: TBitWidthLen) => if (t2.len < t1.len) throw UnificationError(t1, t2) else List() //TODO: need to figure this out: we want this subtyping rule to throw error when its being used, but not when its a binop!!! case _ => throw UnificationError(a, b) } //Updating the type environment with the new substitution whenever you generate one allows errors to be found :D //The environment returned is guaratneed to already have been substituted into with the returned substitution private def infer(env: TypeEnv, e: Expr): (Subst, Type, TypeEnv) = e match { - case EInt(v, base, bits) => (List(), TSizedInt(bits, true), env) + case EInt(v, base, bits) => (List(), TSizedInt(TBitWidthLen(bits), true), env) case EString(v) => (List(), TString(), env) case EBool(v) => (List(), TBool(), env) case EUop(op, ex) => @@ -343,9 +374,8 @@ object TypeInference { val subTemp = compose_subst(s1, s2) val t1New = apply_subst_typ(subTemp, t1) val t2New = apply_subst_typ(subTemp, t2) - val argSub = unify(t1New, t2New) - val subst = unify(TFun(List(t2New,t1New), retType), binOpExpectedType(op)) - val retSubst = compose_many_subst(subTemp, argSub, subst) + val subst = unify(TFun(List(t1New,t2New), retType), binOpExpectedType(op)) + val retSubst = compose_many_subst(subTemp, subst) val retTyp = apply_subst_typ(retSubst, retType) (retSubst, retTyp, env2.apply_subst_typeenv(retSubst)) case EMemAccess(mem, index) => @@ -355,15 +385,14 @@ object TypeInference { val tTemp = apply_subst_typ(s, t) val subst = unify(TFun(List(tTemp), retType), getMemAccessType(env1(mem).asInstanceOf[TMemType])) val retSubst = compose_subst(s,subst) - val retTyp = apply_subst_typ(retSubst, tTemp) + val retTyp = apply_subst_typ(retSubst, retType) (retSubst, retTyp, env1.apply_subst_typeenv(retSubst)) case EBitExtract(num, start, end) => val (s, t, e) = infer(env, num) t match { - case TSizedInt(len, unsigned) if len >= (math.abs(end - start) + 1) => (s, t, e) - case b => throw UnificationError(b, TSizedInt(32, true)) + case TSizedInt(TBitWidthLen(len), unsigned) if len >= (math.abs(end - start) + 1) => (s, TSizedInt(TBitWidthLen(math.abs(end - start) + 1), true), e) + case b => throw UnificationError(b, TSizedInt(TBitWidthLen(32), true)) //TODO Add better error message } - //TODO case ETernary(cond, tval, fval) => val (sc, tc, env1) = infer(env, cond) @@ -374,7 +403,7 @@ object TypeInference { val ttNew = apply_subst_typ(substSoFar, tt) val tfNew = apply_subst_typ(substSoFar, tf) val substc = unify(tcNew, TBool()) - val subst = unify(ttNew, tfNew) + val subst = unify(ttNew, tfNew) //TODO this will fail with bad subtyping stuff going on currently bc for sized ints, we don't care which one is bigger right val retSubst = compose_many_subst(sc, st, sf, substc, subst) val retType = apply_subst_typ(retSubst, ttNew) (retSubst, retType, env3.apply_subst_typeenv(retSubst)) @@ -390,7 +419,7 @@ object TypeInference { typeList = typeList :+ typ runningEnv = env1 } - typeList = typeList.map(t=> apply_subst_typ(runningSubst, t)) + typeList = typeList.map(t => apply_subst_typ(runningSubst, t)) val subst = unify(TFun(typeList, retType), expectedType) val retSubst = compose_subst(runningSubst, subst) val retEnv = runningEnv.apply_subst_typeenv(retSubst) @@ -423,21 +452,43 @@ object TypeInference { if (!areEqual(ctyp, newT)) throw Errors.IllegalCast(e.pos, ctyp, newT) (s, ctyp, env1) } + private def binOpExpectedType(b: BOp): Type = b match { case EqOp(op) => val t = generateTypeVar() // TODO: This can be anything? TFun(List(t, t), TBool()) - case CmpOp(op) => TFun(List(TSizedInt(32, true), TSizedInt(32, true)), TBool())//TODO: TSizedInt? + case CmpOp(op) => TFun(List(TSizedInt(generateBitWidthTypeVar(), true), TSizedInt(generateBitWidthTypeVar(), true)), TBool())//TODO: TSizedInt? case BoolOp(op, fun) => TFun(List(TBool(), TBool()), TBool()) - case NumOp(op, fun) => TFun(List(TSizedInt(32, true), TSizedInt(32, true)), TSizedInt(32, true)) - case BitOp(op, fun) => TFun(List(TSizedInt(32, true), TSizedInt(32, true)), TSizedInt(32, true)) + case NumOp(op, fun) => + val b1 = generateBitWidthTypeVar() + val b2 = generateBitWidthTypeVar() + op match { + case "/" => TFun(List(TSizedInt(b1, true), TSizedInt(b2, true)), TSizedInt(b1, true)) + case "*" => TFun(List(TSizedInt(b1, true), TSizedInt(b2, true)), TSizedInt(TBitWidthAdd(b1, b2), true)) + case "+" => TFun(List(TSizedInt(b1, true), TSizedInt(b2, true)), TSizedInt(TBitWidthMax(b1, b2), true)) + case "-" => TFun(List(TSizedInt(b1, true), TSizedInt(b2, true)), TSizedInt(TBitWidthMax(b1, b2), true)) + case "%" => TFun(List(TSizedInt(b1, true), TSizedInt(b2, true)), TSizedInt(b1, true)) + } + case BitOp(op, fun) => + val b1 = generateBitWidthTypeVar() + val b2 = generateBitWidthTypeVar() + op match { + case "++" => TFun(List(TSizedInt(b1, true), TSizedInt(b2, true)), TSizedInt(TBitWidthAdd(b1, b2), true)) + case _ => TFun(List(TSizedInt(b1, true), TSizedInt(b2, true)), TSizedInt(b1, true)) + } } private def uOpExpectedType(u: UOp): Type = u match { - case BitUOp(op) => TFun(List(TSizedInt(32, true)), TSizedInt(32, true)) + case BitUOp(op) => + val b1 = generateBitWidthTypeVar() + //TODO: Fix this + TFun(List(TSizedInt(b1, true)), TSizedInt(b1, true)) case BoolUOp(op) => TFun(List(TBool()), TBool()) - case NumUOp(op) => TFun(List(TSizedInt(32, true)), TSizedInt(32, true)) + case NumUOp(op) => + val b1 = generateBitWidthTypeVar() + TFun(List(TSizedInt(b1, true)), TSizedInt(b1, true)) + } private def getArrowModType(t: TModType): TFun = { @@ -448,7 +499,7 @@ object TypeInference { } private def getMemAccessType(t: TMemType): TFun = { - TFun(List(TSizedInt(t.addrSize, unsigned=true)), t.elem) + TFun(List(TSizedInt(TBitWidthLen(t.addrSize), unsigned=true)), t.elem) } } diff --git a/src/main/scala/pipedsl/codegen/bsv/BSVSyntax.scala b/src/main/scala/pipedsl/codegen/bsv/BSVSyntax.scala index 868b3b78..70eacecb 100644 --- a/src/main/scala/pipedsl/codegen/bsv/BSVSyntax.scala +++ b/src/main/scala/pipedsl/codegen/bsv/BSVSyntax.scala @@ -38,7 +38,7 @@ object BSVSyntax { bsints.getMemType(isAsync = rlat != Combinational, BSizedInt(unsigned = true, addrSize), toBSVType(elem), Some(bsints.getDefaultMemHandleType)) - case TSizedInt(len, unsigned) => BSizedInt(unsigned, len) + case TSizedInt(len, unsigned) => BSizedInt(unsigned, len.asInstanceOf[TBitWidthLen].len) case TBool() => BBool case TString() => BString case TModType(_, _, _, Some(n)) => modmap(n) diff --git a/src/main/scala/pipedsl/common/DAGSyntax.scala b/src/main/scala/pipedsl/common/DAGSyntax.scala index 6ecab255..4b306f50 100644 --- a/src/main/scala/pipedsl/common/DAGSyntax.scala +++ b/src/main/scala/pipedsl/common/DAGSyntax.scala @@ -309,7 +309,7 @@ object DAGSyntax { for(i <- defaultNum-2 to 0 by -1 ) { eTernary = ETernary(conds(i), EInt(i, bits = intSize), eTernary.copy()) } - this.addCmd(CAssign(condVar, eTernary, Some(TSizedInt(intSize, true)))) + this.addCmd(CAssign(condVar, eTernary, Some(TSizedInt(TBitWidthLen(intSize), true)))) for (i <- 0 until defaultNum) { this.addEdgeTo(condStages(i).head, condSend = Some (EBinop(EqOp("=="), condVar, EInt(i, bits = intSize)))) condStages(i).last.addEdgeTo(joinStage, condRecv = Some (EBinop(EqOp("=="), condVar, EInt(i, bits = intSize)))) diff --git a/src/main/scala/pipedsl/common/Syntax.scala b/src/main/scala/pipedsl/common/Syntax.scala index 670f74a1..cbd5de99 100644 --- a/src/main/scala/pipedsl/common/Syntax.scala +++ b/src/main/scala/pipedsl/common/Syntax.scala @@ -74,11 +74,15 @@ object Syntax { case TModType(ins, refs, _, _) => s"${ins.mkString("->")} ++ ${refs.mkString("=>")})" case TRequestHandle(m, _) => s"${m}_Request" case TNamedType(n) => n.toString + case TBitWidthAdd(b1, b2) => "add(" + b1 + ", " + b2 + ")" + case TBitWidthLen(len) => len.toString() + case TBitWidthMax(b1, b2) => "max(" + b1 + ", " + b2 + ")" + case TBitWidthVar(name) => "bitVar(" + name + ")" } } // Types that can be upcast to Ints sealed trait IntType - case class TSizedInt(len: Int, unsigned: Boolean) extends Type with IntType + case class TSizedInt(len: TBitWidth, unsigned: Boolean) extends Type with IntType // Use case class instead of case object to get unique positions case class TString() extends Type case class TVoid() extends Type @@ -90,6 +94,11 @@ object Syntax { case class TRequestHandle(mod: Id, isLock: Boolean) extends Type //This is primarily used for parsing and is basically just a type variable case class TNamedType(name: Id) extends Type + sealed trait TBitWidth extends Type + case class TBitWidthVar(name: Id) extends TBitWidth + case class TBitWidthLen(len: Int) extends TBitWidth + case class TBitWidthAdd(b1: TBitWidth, b2: TBitWidth) extends TBitWidth + case class TBitWidthMax(b1: TBitWidth, b2: TBitWidth) extends TBitWidth /** * Define common helper methods implicit classes. diff --git a/src/test/scala/pipedsl/MainSuite.scala b/src/test/scala/pipedsl/MainSuite.scala index 06cae067..ab5914b3 100644 --- a/src/test/scala/pipedsl/MainSuite.scala +++ b/src/test/scala/pipedsl/MainSuite.scala @@ -274,11 +274,13 @@ class MainSuite extends AnyFunSuite { } - test("Lock Typechecking Tests") { - val testDir = new File("src/test/tests/typecheckTests") + + val testDir = new File("src/test/tests/typecheckTests") for (file <- testDir.listFiles().filter(f => f.isFile)) { - testTypecheck(testDir, file) + test(file.toString()) { + testTypecheck(testDir, file) + } } - } + } diff --git a/src/test/tests/typecheckTests/solutions/type-inference-basic-pass.typechecksol b/src/test/tests/typecheckTests/solutions/type-inference-basic-pass.typechecksol new file mode 100644 index 00000000..9fb4ec93 --- /dev/null +++ b/src/test/tests/typecheckTests/solutions/type-inference-basic-pass.typechecksol @@ -0,0 +1 @@ +Passed \ No newline at end of file diff --git a/src/test/tests/typecheckTests/solutions/type-inference-bit-width-tests.typechecksol b/src/test/tests/typecheckTests/solutions/type-inference-bit-width-tests.typechecksol new file mode 100644 index 00000000..9fb4ec93 --- /dev/null +++ b/src/test/tests/typecheckTests/solutions/type-inference-bit-width-tests.typechecksol @@ -0,0 +1 @@ +Passed \ No newline at end of file diff --git a/src/test/tests/typecheckTests/solutions/type-inference-fail-base-type.typechecksol b/src/test/tests/typecheckTests/solutions/type-inference-fail-base-type.typechecksol new file mode 100644 index 00000000..e4d7046a --- /dev/null +++ b/src/test/tests/typecheckTests/solutions/type-inference-fail-base-type.typechecksol @@ -0,0 +1 @@ +Failed \ No newline at end of file diff --git a/src/test/tests/typecheckTests/solutions/type-inference-fail-bit-too-small-memAccessToosmall.typechecksol b/src/test/tests/typecheckTests/solutions/type-inference-fail-bit-too-small-memAccessToosmall.typechecksol new file mode 100644 index 00000000..e4d7046a --- /dev/null +++ b/src/test/tests/typecheckTests/solutions/type-inference-fail-bit-too-small-memAccessToosmall.typechecksol @@ -0,0 +1 @@ +Failed \ No newline at end of file diff --git a/src/test/tests/typecheckTests/solutions/type-inference-fail-bit-too-small-minus.typechecksol b/src/test/tests/typecheckTests/solutions/type-inference-fail-bit-too-small-minus.typechecksol new file mode 100644 index 00000000..e4d7046a --- /dev/null +++ b/src/test/tests/typecheckTests/solutions/type-inference-fail-bit-too-small-minus.typechecksol @@ -0,0 +1 @@ +Failed \ No newline at end of file diff --git a/src/test/tests/typecheckTests/solutions/type-inference-fail-bit-too-small-mult.typechecksol b/src/test/tests/typecheckTests/solutions/type-inference-fail-bit-too-small-mult.typechecksol new file mode 100644 index 00000000..e4d7046a --- /dev/null +++ b/src/test/tests/typecheckTests/solutions/type-inference-fail-bit-too-small-mult.typechecksol @@ -0,0 +1 @@ +Failed \ No newline at end of file diff --git a/src/test/tests/typecheckTests/solutions/type-inference-fail-bit-too-small-plus.typechecksol b/src/test/tests/typecheckTests/solutions/type-inference-fail-bit-too-small-plus.typechecksol new file mode 100644 index 00000000..e4d7046a --- /dev/null +++ b/src/test/tests/typecheckTests/solutions/type-inference-fail-bit-too-small-plus.typechecksol @@ -0,0 +1 @@ +Failed \ No newline at end of file diff --git a/src/test/tests/typecheckTests/solutions/type-inference-fail-boolBinOp.typechecksol b/src/test/tests/typecheckTests/solutions/type-inference-fail-boolBinOp.typechecksol new file mode 100644 index 00000000..e4d7046a --- /dev/null +++ b/src/test/tests/typecheckTests/solutions/type-inference-fail-boolBinOp.typechecksol @@ -0,0 +1 @@ +Failed \ No newline at end of file diff --git a/src/test/tests/typecheckTests/solutions/type-inference-fail-call-args.typechecksol b/src/test/tests/typecheckTests/solutions/type-inference-fail-call-args.typechecksol new file mode 100644 index 00000000..e4d7046a --- /dev/null +++ b/src/test/tests/typecheckTests/solutions/type-inference-fail-call-args.typechecksol @@ -0,0 +1 @@ +Failed \ No newline at end of file diff --git a/src/test/tests/typecheckTests/solutions/type-inference-fail-call.typechecksol b/src/test/tests/typecheckTests/solutions/type-inference-fail-call.typechecksol new file mode 100644 index 00000000..e4d7046a --- /dev/null +++ b/src/test/tests/typecheckTests/solutions/type-inference-fail-call.typechecksol @@ -0,0 +1 @@ +Failed \ No newline at end of file diff --git a/src/test/tests/typecheckTests/solutions/type-inference-fail-eqBinOp.typechecksol b/src/test/tests/typecheckTests/solutions/type-inference-fail-eqBinOp.typechecksol new file mode 100644 index 00000000..e4d7046a --- /dev/null +++ b/src/test/tests/typecheckTests/solutions/type-inference-fail-eqBinOp.typechecksol @@ -0,0 +1 @@ +Failed \ No newline at end of file diff --git a/src/test/tests/typecheckTests/solutions/type-inference-fail-func-app-arg.typechecksol b/src/test/tests/typecheckTests/solutions/type-inference-fail-func-app-arg.typechecksol new file mode 100644 index 00000000..e4d7046a --- /dev/null +++ b/src/test/tests/typecheckTests/solutions/type-inference-fail-func-app-arg.typechecksol @@ -0,0 +1 @@ +Failed \ No newline at end of file diff --git a/src/test/tests/typecheckTests/solutions/type-inference-fail-funcApp.typechecksol b/src/test/tests/typecheckTests/solutions/type-inference-fail-funcApp.typechecksol new file mode 100644 index 00000000..e4d7046a --- /dev/null +++ b/src/test/tests/typecheckTests/solutions/type-inference-fail-funcApp.typechecksol @@ -0,0 +1 @@ +Failed \ No newline at end of file diff --git a/src/test/tests/typecheckTests/solutions/type-inference-fail-numBinOp.typechecksol b/src/test/tests/typecheckTests/solutions/type-inference-fail-numBinOp.typechecksol new file mode 100644 index 00000000..e4d7046a --- /dev/null +++ b/src/test/tests/typecheckTests/solutions/type-inference-fail-numBinOp.typechecksol @@ -0,0 +1 @@ +Failed \ No newline at end of file diff --git a/src/test/tests/typecheckTests/solutions/type-inference-fail-ternary.typechecksol b/src/test/tests/typecheckTests/solutions/type-inference-fail-ternary.typechecksol new file mode 100644 index 00000000..e4d7046a --- /dev/null +++ b/src/test/tests/typecheckTests/solutions/type-inference-fail-ternary.typechecksol @@ -0,0 +1 @@ +Failed \ No newline at end of file diff --git a/src/test/tests/typecheckTests/type-inference-bit-width-tests.pdl b/src/test/tests/typecheckTests/type-inference-bit-width-tests.pdl new file mode 100644 index 00000000..550a7a6a --- /dev/null +++ b/src/test/tests/typecheckTests/type-inference-bit-width-tests.pdl @@ -0,0 +1,50 @@ + +def helper1(a: int<32>, b:bool, c: String): int<32> { + d = a + 1; + f = d + 4; + if (f == d) { + return f; + } +} + +def helper2(a:bool, b: bool): bool { + c = a && b; + return c; +} + +pipe test1(input: int<32>)[rf: int<32>[32]] { + a = 6 * 6; + int<32> b = a; + int<32> c = a + b; +} + +pipe test2(input: int<32>)[rf: int<32>[32]] { + a = 1; + b = rf[a]; +} + +pipe test3(input: int<32>)[rf: int<32>[32]] { + a = 1; + int<32> b = a << 4; + int<5> c = a << 4; +} + +pipe test4(input: int<32>)[rf: int<32>[32]] { + a = 15<32>; + int<32> b = a{0:8}; +} + +pipe test5()[] { + a = 6 * 6; + int<6> b = a; + int<64> c = helper1(a, true, "hi"); +} + +pipe test6()[] { + a = 6 - 6; + int<3> b = a; +} + +circuit { + r = memory(int<32>, 32); +} \ No newline at end of file diff --git a/src/test/tests/typecheckTests/type-inference-fail-bit-too-small-memAccessToosmall.pdl b/src/test/tests/typecheckTests/type-inference-fail-bit-too-small-memAccessToosmall.pdl new file mode 100644 index 00000000..dd313404 --- /dev/null +++ b/src/test/tests/typecheckTests/type-inference-fail-bit-too-small-memAccessToosmall.pdl @@ -0,0 +1,9 @@ + +pipe test6()[rf: int<32>[32]] { + int<64> a = 6 * 6; + c = rf[a]; +} + +circuit { + r = memory(int<32>, 32); +} \ No newline at end of file diff --git a/src/test/tests/typecheckTests/type-inference-fail-bit-too-small-minus.pdl b/src/test/tests/typecheckTests/type-inference-fail-bit-too-small-minus.pdl new file mode 100644 index 00000000..1149577f --- /dev/null +++ b/src/test/tests/typecheckTests/type-inference-fail-bit-too-small-minus.pdl @@ -0,0 +1,9 @@ + +pipe test6()[] { + a = 6 - 6; + int<2> b = a; +} + +circuit { + r = memory(int<32>, 32); +} \ No newline at end of file diff --git a/src/test/tests/typecheckTests/type-inference-fail-bit-too-small-mult.pdl b/src/test/tests/typecheckTests/type-inference-fail-bit-too-small-mult.pdl new file mode 100644 index 00000000..737be003 --- /dev/null +++ b/src/test/tests/typecheckTests/type-inference-fail-bit-too-small-mult.pdl @@ -0,0 +1,9 @@ + +pipe test6()[] { + a = 6 * 6; + int<5> b = a; +} + +circuit { + r = memory(int<32>, 32); +} \ No newline at end of file diff --git a/src/test/tests/typecheckTests/type-inference-fail-bit-too-small-plus.pdl b/src/test/tests/typecheckTests/type-inference-fail-bit-too-small-plus.pdl new file mode 100644 index 00000000..deabf477 --- /dev/null +++ b/src/test/tests/typecheckTests/type-inference-fail-bit-too-small-plus.pdl @@ -0,0 +1,9 @@ + +pipe test6()[] { + a = 6 + 6; + int<2> b = a; +} + +circuit { + r = memory(int<32>, 32); +} \ No newline at end of file diff --git a/src/test/tests/typecheckTests/type-inference-func-app-arg.pdl b/src/test/tests/typecheckTests/type-inference-fail-func-app-arg.pdl similarity index 100% rename from src/test/tests/typecheckTests/type-inference-func-app-arg.pdl rename to src/test/tests/typecheckTests/type-inference-fail-func-app-arg.pdl diff --git a/src/test/tests/typecheckTests/type-inference-fail-intersecting-env.pdl b/src/test/tests/typecheckTests/type-inference-fail-intersecting-env.pdl deleted file mode 100644 index e69de29b..00000000