The basic types are Bits
, UInt
and SInt
which can be defined with width n.W
scala> import chisel3._
import chisel3._
scala> Bits
val res0: chisel3.Bits.type = chisel3.package$Bits$@185a2b97
scala> 4.W
val res1: chisel3.internal.firrtl.Width = <4>
scala> Bits(8.W)
val res2: chisel3.UInt = UInt<8>
scala> UInt(5.W)
val res3: chisel3.UInt = UInt<5>
scala> SInt(8.W)
val res4: chisel3.SInt = SInt<8>
constants is converted to chisel type with .U
and .S
scala> 0.U
val res3: chisel3.UInt = UInt<1>(0)
scala> -1.S
val res4: chisel3.SInt = SInt<1>(-1)
scala> -1.S(4.W)
val res5: chisel3.SInt = SInt<4>(-1)
One possible issue is
scala> 1.U(32)
^
warning: Passing an Int to .U is usually a mistake: It does *not* set the width but does a bit extract.
Did you mean .U(32.W)?
If you do want bit extraction, use .U.extract(32) instead.
val res7: chisel3.Bool = Bool(false)