Chisel 中的 <> 运算符是什么?
What is the <> operator in 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
}
在 Scala 中,大多数符号如 /!<> 等都是有效的方法名称。 operator/method 的定义视具体情况而定。
方法调用也可以有不同的语法,您可以将 .()
替换为空格,例如
a.foo(bar)
与
相同
a foo bar
所以接线员调用:
a <> b
与
相同
a.<>(b)
<>
用于批量连接两个模块之间的所有同名端口。所以在上面的例子中,
io.out <> queue
是比较简洁的写法
io.out.valid := queue.valid
io.out.bits := queue.bits
queue.ready := io.out.ready
因为它们都被 Decoupled
接口包装,该接口定义了 ready
、valid
和 bits
端口(注意 ready
连接流在相反的方向:批量连接正确处理这个)。
我更彻底地阅读了 Chisel wiki 后发现 the answer。
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
}
在 Scala 中,大多数符号如 /!<> 等都是有效的方法名称。 operator/method 的定义视具体情况而定。
方法调用也可以有不同的语法,您可以将 .()
替换为空格,例如
a.foo(bar)
与
相同a foo bar
所以接线员调用:
a <> b
与
相同a.<>(b)
<>
用于批量连接两个模块之间的所有同名端口。所以在上面的例子中,
io.out <> queue
是比较简洁的写法
io.out.valid := queue.valid
io.out.bits := queue.bits
queue.ready := io.out.ready
因为它们都被 Decoupled
接口包装,该接口定义了 ready
、valid
和 bits
端口(注意 ready
连接流在相反的方向:批量连接正确处理这个)。
我更彻底地阅读了 Chisel wiki 后发现 the answer。