«данные для подключения 'chisel3.core.UInt@103' должны быть аппаратными, а не чистым типом зубила» при перезаписи OpenSoCFabric1.1.2 из Chisel2 в Chisel3 - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь переписать OpenSoCFaric-1.1.2 с долота 2 на долото 3. Но я сталкиваюсь с сообщениями об ошибках "данные для подключения 'chisel3.core.UInt@103' должны быть аппаратными, а не чистым типом долота" для приведенного ниже кода:

Файл: packettoFlit.scala класс: PacketToFlit val flitWidth = Flit.fromBits (0.U, parms) .getWidth

Файл: 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.
    }
    */
}

И теперь у меня нет хороших идей о том, как переписать такие сегменты кода, чтобы исправить ошибку. Не могли бы вы дать некоторую помощь или предложения? Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Ниже приведен исходный код для класса 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}
}

Большое спасибо! Бибо

0 голосов
/ 07 мая 2018

Нам нужно было бы увидеть больше сообщения об ошибке (номер строки) и больше кода, чтобы дать окончательный ответ, но мы предполагаем, что где-то используется UInt (xW), где ожидается литерал (yU) или обертка Wire () / WireInit () отсутствует.

ПРИМЕЧАНИЕ. LBL активно переносит этот код в Chisel3. Возможно, вам лучше дождаться публикации их работы.

...