我是Chisel的新学习者.克隆在Chisel中的目的是什么?我在某处写到,"它创建了一个浅层副本".我们为什么需要它?这是一些例子.你能详细说明吗?
1)
class Valid[+T <: Data](gen: T) extends Bundle
{
val valid = Output(Bool())
val bits = Output(gen.chiselCloneType)//?????
def fire(): Bool = valid
override def cloneType: this.type = Valid(gen).asInstanceOf[this.type]
}
/** Adds a valid protocol to any interface */
object Valid {
def apply[T <: Data](gen: T): Valid[T] = new Valid(gen)
}
Run Code Online (Sandbox Code Playgroud)
2)
class Packet(n: Int, w: Int) extends Bundle {
val address = UInt(Log2Up(n).W)
val payload = UInt(w.W)
override def cloneType: this.type =
new Packet(n, w).asInstanceOf[this.type]
}
Run Code Online (Sandbox Code Playgroud)
为什么cloneType是Override.它是否像Scala中的apply方法,或者只是更新Bundle中的cloneType方法.
谢谢
我有一些关于凿子转换的问题。我知道这是理论上的,但如果有人提出他的意见会很好。
1)想问为什么Chisel不注重VHDL/SystemVerilog的转换。虽然 Verilog 和 VHDL 是相同的,但在一些国家,尤其是欧洲,更喜欢 VHDL。2) 同样,C++模型用于仿真模型。为什么不是 SystemC 用于此目的?
我正在阅读一些笔记,发现 FIRRTL 是转换 CHISEL-->FIRRTL--> Verilog 和 CHISEL ---> FIRRTL--> C++ 模型的中间人。
使用(低)FIRRTL 规范转换 VHDL 和 SystemC 模型是个好主意吗?