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 的其他标准库接口(Decoupled
、Valid
等)的简要定义
但是,这些资源都没有以可塑的方式进行解释 - 我觉得这会帮助我更好地理解这些接口的用途 - 这些代码行综合到什么 - 它们在实际硬件中看起来像什么?
例如,这里是包 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 当 valid
被 P 断言时该数据。
解耦 Bundle 中的字段将是
input.ready
input.valid
input.bits.a
input.bits.b
...
它在实际硬件中的样子:
默认的 Chisel util Queue 是一个标准的 circular buffer 实现。这意味着它有一系列带有入队和出队指针的寄存器,这些寄存器作为对队列操作的结果而移动,检查是否为满和空。
在 Cheat-Sheet and a bit more detail in the Chisel Manual. I also found these two answers here at Whosebug -
Queue
和 Chisel 的其他标准库接口(Decoupled
、Valid
等)的简要定义
但是,这些资源都没有以可塑的方式进行解释 - 我觉得这会帮助我更好地理解这些接口的用途 - 这些代码行综合到什么 - 它们在实际硬件中看起来像什么?
例如,这里是包 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 当 valid
被 P 断言时该数据。
解耦 Bundle 中的字段将是
input.ready
input.valid
input.bits.a
input.bits.b
...
它在实际硬件中的样子:
默认的 Chisel util Queue 是一个标准的 circular buffer 实现。这意味着它有一系列带有入队和出队指针的寄存器,这些寄存器作为对队列操作的结果而移动,检查是否为满和空。