我正在尝试将OpenSoCFaric-1.1.2从chisel2重写到chisel3。但是对于下面的代码,我遇到错误信息"data to be connected 'chisel3.core.UInt@103‘必须是硬件,而不是一个裸凿类型“:
文件: packettoFlit.scala类: PacketToFlit val flitWidth = Flit.fromBits(0.U,parms).getWidth
File:channel.scala对象: Flit
object Flit {
def head(h: HeadFlit) : Flit = {
val f = new Flit(h.parms)
f.x := f.union.pack("Head", h)
f
}
def body(b: BodyFlit) : Flit = {
val f = new Flit(b.parms)
f.x := f.union.pack("Body", b)
f
}
def fromBits(n: UInt, parms: Parameters) : Flit = {
val f = new Flit(parms)
f.x := n
f
}
/*
def zeroHead(parms: Parameters) : HeadFlit = {
val x = new HeadFlit(parms)
x.
}
*/
}现在我对如何重写这样的代码段来修复错误没有好的想法。你能给我一些帮助或建议吗?非常感谢!
发布于 2018-05-08 00:47:03
我们需要看到更多的错误消息(行号)和更多的代码来提供明确的答案,但我们猜测,在需要文字(y.U)的地方使用了UInt(x.W),或者缺少Wire()/WireInit()包装器。
注意: LBL正在积极地将这段代码迁移到Chisel3。你最好等着他们的作品出版。
发布于 2018-05-09 10:26:49
下面是Flit类的源代码。
class Flit(parms: Parameters) extends Bundle {
val union = new BitUnion(Map("Head" -> new HeadFlit(parms), "Body" -> new BodyFlit(parms)))
val x = UInt(union.width.W)
val numVCs = parms.get[Int]("numVCs")
def asHead(dummy: Int = 0) : HeadFlit = union.unpack[HeadFlit]("Head", x)
def asBody(dummy: Int = 0) : BodyFlit = union.unpack[BodyFlit]("Body", x)
def whenHead(block: HeadFlit => Unit) { union.whenTag[HeadFlit]("Head", x)(block) }
def whenBody(block: BodyFlit => Unit) { union.whenTag[BodyFlit]("Body", x)(block) }
def isHead(dummy: Int = 0) : Bool = union.tagEquals("Head", x)
def isBody(dummy: Int = 0) : Bool = union.tagEquals("Body", x)
def isTail(dummy: Int = 0) : Bool = {
val tailBit = Bool()
when (isHead()) {
tailBit := union.unpack[HeadFlit]("Head", x).isTail
} .otherwise {
tailBit := union.unpack[BodyFlit]("Body", x).isTail
}
tailBit
}
def getVCPort(dummy: Int = 0) : UInt = {
val vcBits = UInt(log2Ceil(numVCs).W)
when (isHead()) {
vcBits := union.unpack[HeadFlit]("Head", x).vcPort
} .otherwise {
vcBits := union.unpack[BodyFlit]("Body", x).vcPort
}
vcBits
}
//override def clone = { new Flit(parms).asInstanceOf[this.type] }
override def cloneType: this.type = new Flit(parms).asInstanceOf[this.type]
// override def width : Int = {x.width}
}非常感谢!Bibo
https://stackoverflow.com/questions/50209138
复制相似问题