关于凿子的语法:Vec&线

时间:2016-11-26 08:22:03

标签: chisel

我正在学习Chisel3。

我对这些代码有一些疑问。

val myVec = Wire(Vec(5, SInt(width = 23)))  // Vector of 5 23-bit signed integers.

我想如果我宣布一个向量,我需要写#34; Wire"但是当我看到这些代码时我错了。

class BigBundle extends Bundle {


 val myVec = Vec(5, SInt(width = 23))  // Vector of 5 23-bit signed integers.

 val flag  = Bool()
 // Previously defined bundle.

 val f     = new MyFloat

}

它突然在我的脸上猛击,所以我想知道我什么时候使用" Wire"?

提前致谢。

2 个答案:

答案 0 :(得分:5)

这里的关键是Chisel3在“类型”和“值”之间的区别。

VecBundleUIntSIntBool是“类型”的示例。

WireRegInputOutputMem是“值”的示例。

上面有BigBundle

class BigBundle extends Bundle {
  val myVec = Vec(5, SInt(23.W)) // Vector of 5 23-bit signed integers.
  val flag = Bool()
  val f = new MyFloat // Previously defined bundle.
}

BigBundle是“类型”,就像Vec(5, SInt(23.W))是“类型”一样。

如果您希望使用这些类型,可以创建其中一种类型的Wire,例如。

val myVecWire = Wire(Vec(5, SInt(23.W)))
val myBundleWire = Wire(new BigBundle)

编辑:更新了现代chisel3风格

答案 1 :(得分:4)

您可以将Wire用于任何可能重新分配值的Chisel节点。

val a = Wire(Bool())
a := Bool(false)
...