From 5901c57caab635c0d5c1a7ac6502ea7872f44001 Mon Sep 17 00:00:00 2001 From: Adam Izraelevitz Date: Wed, 24 Feb 2016 20:36:47 -0800 Subject: Fixed printf bugs in scala and stanza versions. Required special casing prints in SplitExp, and emitting expressions instead of their toString counterparts --- src/main/scala/firrtl/Emitter.scala | 15 +-------------- src/main/scala/firrtl/passes/Passes.scala | 11 +++++++++-- 2 files changed, 10 insertions(+), 16 deletions(-) (limited to 'src/main/scala') diff --git a/src/main/scala/firrtl/Emitter.scala b/src/main/scala/firrtl/Emitter.scala index 04552de4..94eca465 100644 --- a/src/main/scala/firrtl/Emitter.scala +++ b/src/main/scala/firrtl/Emitter.scala @@ -362,21 +362,8 @@ object VerilogEmitter extends Emitter { Seq("$fdisplay(32'h80000002,\"",ret,"\");$finish;") } def printf (str:String,args:Seq[Expression]) : Seq[Any] = { - def emitArg(exp: Expression): String = { - exp match { - case v: UIntValue => s"${v.width match { - case w: IntWidth => w.width.toString - }}'H${v.value.toString(16)}" - case v: SIntValue => s"${v.width match { - case w: IntWidth => w.width.toString - }}'sH${v.value.toString(16)}" - case r: Ref => r.name - case r: WRef => r.name - case _ => error("Unexpected expression in printf: " + exp.serialize) - } - } val q = '"'.toString - val strx = (Seq(q + escape(str) + q) ++ args.map(x => emitArg(x))).reduce(_ + "," + _) + val strx = (Seq(q + escape(str) + q) ++ args.flatMap(x => Seq(",",x))) Seq("$fwrite(32'h80000002,",strx,");") } def delay (e:Expression, n:Int, clk:Expression) : Expression = { diff --git a/src/main/scala/firrtl/passes/Passes.scala b/src/main/scala/firrtl/passes/Passes.scala index e8a2106c..69372b9f 100644 --- a/src/main/scala/firrtl/passes/Passes.scala +++ b/src/main/scala/firrtl/passes/Passes.scala @@ -1252,9 +1252,16 @@ object SplitExp extends Pass { case (e) => e } } - eMap(split_exp_e(0) _,s) match { + s match { case (s:Begin) => sMap(split_exp_s _,s) - case (s) => v += s; s + case (s:Print) => { + val sx = eMap(split_exp_e(1) _,s) + v += sx; sx + } + case (s) => { + val sx = eMap(split_exp_e(0) _,s) + v += sx; sx + } } } split_exp_s(m.body) -- cgit v1.2.3