diff options
| author | Henry Cook | 2015-08-05 00:54:32 -0700 |
|---|---|---|
| committer | Andrew Waterman | 2015-08-05 16:36:08 -0700 |
| commit | f98e9e4143a113ac1020ed20c5e01b41aa29efe5 (patch) | |
| tree | 89fa57975e1f137ee184aafdc7a0a81ec09aa994 /src/main/scala/Chisel/Core.scala | |
| parent | a02d788d9e9c4b42fd866e5c34e42aa771aab68c (diff) | |
Massive Driver simplification, some tweaks to Parameter api
Diffstat (limited to 'src/main/scala/Chisel/Core.scala')
| -rw-r--r-- | src/main/scala/Chisel/Core.scala | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/src/main/scala/Chisel/Core.scala b/src/main/scala/Chisel/Core.scala index 52b7ea48..b5bebe33 100644 --- a/src/main/scala/Chisel/Core.scala +++ b/src/main/scala/Chisel/Core.scala @@ -16,14 +16,13 @@ class IdGen { object Builder { val components = new ArrayBuffer[Component]() val idGen = new IdGen + val paramz = new Stack[Parameters] + def pushParameters(p: Parameters) { paramz.push(p) } + def popParameters { paramz.pop } val modulez = new Stack[Module]() - def pushModule(mod: Module) { - modulez.push(mod) - } + def pushModule(mod: Module) { modulez.push(mod) } + def popModule { modulez.pop } def getComponent(): Module = if (modulez.length > 0) modulez.head else null - def popModule() { - modulez.pop - } val globalNamespace = new FIRRTLNamespace def namespace = if (modulez.isEmpty) globalNamespace else modulez.head._namespace val commandz = new Stack[ArrayBuffer[Command]]() @@ -71,14 +70,20 @@ object Builder { refmap(id._id) } - def build[T <: Module](f: => T): (Circuit, T) = { + def build[T <: Module](f: => T): Circuit = { val (cmd, mod) = collectCommands(f) setRefForId(mod, mod.name) - (Circuit(components, components.last.name), mod) + Circuit(components, components.last.name) } } +object build { + def apply[T <: Module](f: => T): Circuit = { + Builder.build(f) + } +} + import Builder._ /// CHISEL IR @@ -350,7 +355,7 @@ abstract class Data(dirArg: Direction) extends Id { } def toPort: Port = Port(this, toType) - def params = if(Driver.parStack.isEmpty) Parameters.empty else Driver.parStack.top + def params = if(paramz.isEmpty) Parameters.empty else paramz.top } object Wire { @@ -932,16 +937,16 @@ object Bundle { val keywords = HashSet[String]("flip", "asInput", "asOutput", "cloneType", "clone", "toBits") def apply[T <: Bundle](b: => T)(implicit p: Parameters): T = { - Driver.parStack.push(p.push) + pushParameters(p.push) val res = b - Driver.parStack.pop + popParameters res } def apply[T <: Bundle](b: => T, f: PartialFunction[Any,Any]): T = { val q = params.alterPartial(f) apply(b)(q) } - private def params = if(Driver.parStack.isEmpty) Parameters.empty else Driver.parStack.top + private def params = if(paramz.isEmpty) Parameters.empty else paramz.top } class Bundle extends Aggregate(NO_DIR) { @@ -1004,8 +1009,7 @@ class Bundle extends Aggregate(NO_DIR) { object Module { def apply[T <: Module](bc: => T)(implicit p: Parameters = params): T = { - Driver.modStackPushed = true - Driver.parStack.push(p.push) + pushParameters(p.push) val m = bc m.setRefs val cmd = popCommands @@ -1014,7 +1018,7 @@ object Module { val component = Component(m.name, ports, cmd) components += component pushCommand(DefInstance(m, m.name, ports)) - Driver.parStack.pop + popParameters m.connectImplicitIOs m } @@ -1022,7 +1026,7 @@ object Module { val q = params.alterPartial(f) apply(m)(q) } - private def params = if(Driver.parStack.isEmpty) Parameters.empty else Driver.parStack.top + private def params = if(paramz.isEmpty) Parameters.empty else paramz.top } abstract class Module(_clock: Clock = null, _reset: Bool = null) extends Id { @@ -1222,3 +1226,7 @@ class Emitter { def emit(e: Circuit): String = withIndent{ "circuit " + e.main + " : " + join0(e.components.map(x => emit(x)), newline) } + newline } + +object emit { + def apply(e: Circuit) = new Emitter().emit(e) +} |
