首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将OpenSoCFabric1.1.2从Chisel2重写为Chisel3时,“要连接的数据必须是硬件,而不是裸凿类型”

将OpenSoCFabric1.1.2从Chisel2重写为Chisel3时,“要连接的数据必须是硬件,而不是裸凿类型”
EN

Stack Overflow用户
提问于 2018-05-07 15:31:05
回答 2查看 553关注 0票数 0

我正在尝试将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

代码语言:javascript
复制
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.
    }
    */
}

现在我对如何重写这样的代码段来修复错误没有好的想法。你能给我一些帮助或建议吗?非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2018-05-08 00:47:03

我们需要看到更多的错误消息(行号)和更多的代码来提供明确的答案,但我们猜测,在需要文字(y.U)的地方使用了UInt(x.W),或者缺少Wire()/WireInit()包装器。

注意: LBL正在积极地将这段代码迁移到Chisel3。你最好等着他们的作品出版。

票数 0
EN

Stack Overflow用户

发布于 2018-05-09 10:26:49

下面是Flit类的源代码。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50209138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档