aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/firrtl/Emitter.scala12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/main/scala/firrtl/Emitter.scala b/src/main/scala/firrtl/Emitter.scala
index 109bfad8..0e2cdbb8 100644
--- a/src/main/scala/firrtl/Emitter.scala
+++ b/src/main/scala/firrtl/Emitter.scala
@@ -44,6 +44,8 @@ import WrappedExpression._
import scala.collection.mutable.LinkedHashMap
import scala.collection.mutable.ArrayBuffer
+class EmitterException(message: String) extends PassException(message)
+
trait Emitter extends LazyLogging {
def run(c: Circuit, w: Writer)
}
@@ -162,6 +164,16 @@ class VerilogEmitter extends Emitter {
def a2 () : Expression = doprim.args(2)
def c0 () : Int = doprim.consts(0).toInt
def c1 () : Int = doprim.consts(1).toInt
+
+ def checkArgumentLegality(e: Expression) = e match {
+ case _: UIntValue =>
+ case _: SIntValue =>
+ case _: WRef =>
+ case _: WSubField =>
+ case _ => throw new EmitterException(s"Can't emit ${e.getClass.getName} as PrimOp argument")
+ }
+
+ doprim.args foreach checkArgumentLegality
doprim.op match {
case ADD_OP => Seq(cast_if(a0())," + ", cast_if(a1()))