【问题标题】:What does the Queue Standard Library Interface of Chisel 3 synthesizes to?Chisel 3 的队列标准库接口综合成什么?
【发布时间】:2017-12-14 22:31:45
【问题描述】:

Queue 和 Chisel 的其他标准库接口(@98​​7654327@、Valid 等)在Cheat-Sheet 中有简要定义,Chisel Manual 中有更详细的定义。我还在 StackOverflow 上找到了这两个答案 - herehere

但是,这些资源都没有以可塑的方式解释 - 我觉得这将有助于我更好地理解这些接口的用途 - 这些代码行合成什么 - 它们在实际硬件中是什么样的?

例如,这里是来自包HardFloat的FPU代码的sn-p:

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

其中DivRecFN_io 是一个类,如下所示:

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

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

谢谢。

【问题讨论】:

    标签: riscv chisel


    【解决方案1】:

    对于它在实际硬件中的样子:

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

    【讨论】:

    • @collins,谢谢,这回答了我的问题,我只是想从维基百科添加一个不错的animation,以保证表示的完整性。
    【解决方案2】:

    解耦将 DivRecFN Bundle 连接到字段命名位,并添加就绪和有效信号,这些信号通常用于管理在单个周期内不返回结果的模块的流控制。默认情况下,DecoupledIO 的数据字段为Output。行尾的翻转会将其转换为Input。考虑包含 val input 的模块 C 和使用 Module(C) 实例的模块 P,模块 C消耗 Bundle 中的数据,该模块的父级P 将产生放置在 Bundle 中的数据。 C 会断言 ready 以表明它已准备好接收数据,并且会在 P 断言 valid 时读取/使用该数据。 解耦 Bundle 中的字段为

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

    【讨论】:

    • 嗨,非常感谢您的精彩解释。请您在编写“声明它的模块”时更具体一点 - 您是指包含val input 的那个吗?因为,val input 又是另一个Bundle(称为io)的一部分,用于不同的Module(称为ValExec_DivSqrtRecFN_small_div)。另外,您在哪里找到标题为 bits 的字段 - 或者它来自 ab 类型为 Bits 的事实?
    • 在语句 val input = Decoupled(new DivRecFN_io(expWidth, sigWidth)).flip 中,input 是一个包含 ready、valid 和 bits 字段的 Bundle。 bits 字段包含传递给 Decoupled() 的捆绑包,在本例中为新的 DivRecFN。我已经编辑了答案,试图弄清楚我在说哪个模块。
    猜你喜欢
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多