关于凿子的语法:Vec&Wire

jjl*_*lin 5 chisel

我正在学习Chisel3.

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

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

我想如果我声明一个向量,我需要写"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

}
Run Code Online (Sandbox Code Playgroud)

它突然冲到我的脸上,所以我想知道我什么时候使用"电线"?

提前致谢.

Jac*_*nig 5

这里的关键是Chisel3在"类型"和"值"之间的区别.

Vec,Bundle,UInt,SInt,和Bool是的例子"类型".

Wire,Reg,Input,Output,和Mem是的例子"值".

有了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.
}
Run Code Online (Sandbox Code Playgroud)

BigBundle是一个"类型"就像Vec(5, SInt(23.W))一个"类型".

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

val myVecWire = Wire(Vec(5, SInt(23.W)))
val myBundleWire = Wire(new BigBundle)
Run Code Online (Sandbox Code Playgroud)

编辑:更新为现代chisel3风格


Chr*_*ris 4

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

val a = Wire(Bool())
a := Bool(false)
...
Run Code Online (Sandbox Code Playgroud)