gpt4 book ai didi

chisel - 是否有一种可接受的方法可以在 Chisel 中获得格雷码计数器?

转载 作者:行者123 更新时间:2023-12-04 10:20:10 26 4
gpt4 key购买 nike

我希望在 Chisel3 中编写计数器,用于寻址子单元。如果计数器与子单元中的某个寄存器匹配,则子单元触发,否则不触发。

我宁愿用格雷码而不是二进制来循环地址。在 Chisel 中编写二进制计数器很容易,但我看不到格雷码计数器的规定。

我可以编写一种类似于 Uint 和 Sint 的新类型,但如果它已经存在,我不愿意重新发明它。然而,我在食谱或其他关于格雷码的文档中没有看到任何内容。 Github 刚刚打开了一个面向 Minecraft 的 repo(因为它匹配“chisel”) 有 VHDL 的现有内容,但我想在 Chisel 中表达这一点。

那么我是否错过了可以在 Chisel 中提供灰色计数器的资源?如果做不到这一点,构建一个类似于 Uint 的新类型是一种合理的方式吗?

最佳答案

我快速环顾四周,没有找到与您要查找的内容完全相同的内容。我能找到的最接近的是火箭芯片中的一个简单的格雷计数器( https://github.com/chipsalliance/rocket-chip/blob/29ce00180f2a69947546d6385a1da86cbc584376/src/main/scala/util/AsyncQueue.scala#L49 ),但它使用常规的二进制计数,然后只返回一个 UInt在格雷码中。它也没有利用任何 Scala 类型安全。

我认为这将是一个合理的构建,如果您愿意,可以将其贡献给 https://github.com/freechipsproject/ip-contributions以提高知名度。

我想如果你想要一个合适的 GrayCode类型,创建自定义类型是合理的。不幸的是,没有办法扩展 Data对于 Bits -like 类型(该层次结构中的所有类型都是密封的),但您可以创建自定义 Bundle包装了一个 UInt然后实现您自己的一组操作,例如。

class GrayCode(private val w: Int) extends Bundle {
val value = UInt(w.W)

def +(that: GrayCode): GrayCode = ???
}
object GrayCode {
// Lets you write GrayCode(4.W)
// Width is defined in chisel3.internal.firrtl though which is awkward...
def apply(width: Width): GrayCode = ???
}

这只是一个快速草图。 DSP 工具库包含 DSP 自定义类型的示例: https://github.com/ucb-bar/dsptools

他们倾向于使用 Scala Typeclasses很多这是一个更高级的 Scala 功能。只是提到以防万一他们看起来陌生的一些语法。

关于chisel - 是否有一种可接受的方法可以在 Chisel 中获得格雷码计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60903080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com