summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Waterman2015-07-30 18:21:06 -0700
committerAndrew Waterman2015-07-30 18:21:06 -0700
commit3ea058aff4eef3fc7ed928fcaf848eb9dff7f702 (patch)
tree52612b098d3295777218b34245203d2f645daa68
parent4db738d1ba732cf2a5d8ae30867b2622030c9c1d (diff)
Work around FIRRTL literal restrictions
-rw-r--r--src/main/scala/Chisel/Core.scala7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/main/scala/Chisel/Core.scala b/src/main/scala/Chisel/Core.scala
index 96ac04da..354f3ac1 100644
--- a/src/main/scala/Chisel/Core.scala
+++ b/src/main/scala/Chisel/Core.scala
@@ -177,14 +177,17 @@ abstract class LitArg (val num: BigInt, val width: Int) extends Arg {
case class ULit(n: BigInt, w: Int = -1) extends LitArg(n, w) {
def fullname = name
- def name = "UInt<" + width + ">(" + num + ")"
+ def name = "UInt<" + width + ">(\"h0" + num.toString(16) + "\")"
require(n >= 0, s"UInt literal ${n} is negative")
}
case class SLit(n: BigInt, w: Int = -1) extends LitArg(n, w) {
def fullname = name
- def name = "SInt<" + width + ">(" + num + ")"
+ def name = {
+ val unsigned = if (n < 0) (BigInt(1) << w) + n else n
+ s"asSInt(${ULit(unsigned, w).name})"
+ }
}
case class Ref(val name: String) extends Immediate {