Chisel 3的Queue Standard Library Interface综合成什么?

What does the Queue Standard Library Interface of Chisel 3 synthesizes to?

Cheat-Sheet and a bit more detail in the Chisel Manual. I also found these two answers here at Whosebug - and .

中有 Queue 和 Chisel 的其他标准库接口(DecoupledValid 等)的简要定义

但是,这些资源都没有以可塑的方式进行解释 - 我觉得这会帮助我更好地理解这些接口的用途 - 这些代码行综合到什么 - 它们在实际硬件中看起来像什么?

例如,这里是包 HardFloat:

中的 FPU 代码片段

val input = Decoupled(new DivRecFN_io(expWidth, sigWidth)).flip

其中 DivRecFN_io 是一个 class 如下:

class DivRecFN_io(expWidth: Int, sigWidth: Int) extends Bundle { val a = ... val b = ... val ... ... }

包含 Decouple 的行究竟实现了什么?

谢谢。

解耦将 DivRecFN 束连接到字段命名位,并添加通常用于管理在单个周期内未 return 结果的模块的流控制的就绪和有效信号。默认情况下,DecoupledIO 的数据字段将为 Output。该行末尾的翻转会将其转换为 Input。考虑包含 val input 的模块 C 和使用 Module(C),模块 C 消耗 Bundle 中的数据,该模块的父级 P 将生成放在 Bundle 中的数据。 C 将断言 ready 以指示它已准备好数据,并且 read/use 当 validP 断言时该数据。 解耦 Bundle 中的字段将是

input.ready
input.valid
input.bits.a
input.bits.b
...

它在实际硬件中的样子:

默认的 Chisel util Queue 是一个标准的 circular buffer 实现。这意味着它有一系列带有入队和出队指针的寄存器,这些寄存器作为对队列操作的结果而移动,检查是否为满和空。