我正在学习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)
它突然冲到我的脸上,所以我想知道我什么时候使用"电线"?
提前致谢.
这里的关键是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风格
您可以将Wire其用于任何可以重新分配值的 Chisel 节点。
val a = Wire(Bool())
a := Bool(false)
...
Run Code Online (Sandbox Code Playgroud)