aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/firrtl/Emitter.scala24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/main/scala/firrtl/Emitter.scala b/src/main/scala/firrtl/Emitter.scala
index 316a7044..30c764d8 100644
--- a/src/main/scala/firrtl/Emitter.scala
+++ b/src/main/scala/firrtl/Emitter.scala
@@ -316,7 +316,7 @@ class VerilogEmitter extends Emitter {
assigns += Seq("assign ",e," = ",value,";")
// In simulation, assign garbage under a predicate
def garbageAssign(e: Expression, syn: Expression, garbageCond: Expression) = {
- assigns += Seq("`ifndef RANDOMIZE")
+ assigns += Seq("`ifndef RANDOMIZE_ASSIGN")
assigns += Seq("assign ", e, " = ", syn, ";")
assigns += Seq("`else")
assigns += Seq("assign ", e, " = ", garbageCond, " ? ", rand_string(tpe(syn)), " : ", syn, ";")
@@ -381,14 +381,14 @@ class VerilogEmitter extends Emitter {
Seq(nx,"[",long_BANG(t) - 1,":0]")
}
def initialize(e: Expression) = {
- initials += Seq("`ifdef RANDOMIZE")
+ initials += Seq("`ifdef RANDOMIZE_REG_INIT")
initials += Seq(e, " = ", rand_string(tpe(e)), ";")
initials += Seq("`endif")
}
def initialize_mem(s: DefMemory) = {
val index = WRef("initvar", s.dataType, ExpKind(), UNKNOWNGENDER)
val rstring = rand_string(s.dataType)
- initials += Seq("`ifdef RANDOMIZE")
+ initials += Seq("`ifdef RANDOMIZE_MEM_INIT")
initials += Seq("for (initvar = 0; initvar < ", s.depth, "; initvar = initvar+1)")
initials += Seq(tab, WSubAccess(wref(s.name, s.dataType), index, s.dataType, FEMALE), " = ", rstring,";")
initials += Seq("`endif")
@@ -673,16 +673,30 @@ class VerilogEmitter extends Emitter {
emit(Seq("endmodule"))
}
-
+
build_netlist(m.body)
build_ports()
build_streams(m.body)
emit_streams()
m
}
-
+
+ def emit_preamble() {
+ emit(Seq(
+ "`ifdef RANDOMIZE_ASSIGN\n",
+ "`define RANDOMIZE\n",
+ "`endif\n",
+ "`ifdef RANDOMIZE_REG_INIT\n",
+ "`define RANDOMIZE\n",
+ "`endif\n",
+ "`ifdef RANDOMIZE_MEM_INIT\n",
+ "`define RANDOMIZE\n",
+ "`endif\n"))
+ }
+
def run(c: Circuit, w: Writer) = {
this.w = Some(w)
+ emit_preamble()
for (m <- c.modules) {
m match {
case (m:Module) => emit_verilog(m)