Chisel中的<>运算符是什么?

时间:2018-08-31 23:53:13

标签: scala chisel

Chisel教程利用了似乎是<>的运算符,这对我来说是完全不熟悉的。它是做什么的?

另外,它来自哪里?在其他Scala库甚至其他语言中,此运算符是否具有常规含义?

这是一个示例用法,来自Chisel Generator Bootcamp练习,第3.2节:

class MyQueue extends Module {
    // Example circuit using a Queue
    val io = IO(new Bundle {
        val in = Flipped(Decoupled(UInt(8.W)))
        val out = Decoupled(UInt(8.W))
    })
    val queue = Queue(io.in, 2)  // 2-element queue
    io.out <> queue
}

2 个答案:

答案 0 :(得分:4)

<>用于批量连接两个模块之间所有相同名称的端口。因此,在上面的示例中,

io.out <> queue

是一种更简洁的书写方式

io.out.valid := queue.valid
io.out.bits := queue.bits
queue.ready := io.out.ready

因为它们都由Decoupled接口包装,该接口定义了readyvalidbits端口(请注意,ready连接在相反的方向:批量连接可以正确处理此问题。

更彻底地阅读了Chisel Wiki后,我发现the answer

答案 1 :(得分:3)

在Scala中,大多数符号如/!<>等都是有效的方法名称。视情况定义操作员/方法。

方法调用还可以具有不同的语法,您可以将.()替换为空格,例如

a.foo(bar)

相同
a foo bar

操作员致电:

a <> b

相同
a.<>(b)