【问题标题】:Chisel: how to implement a one-hot mux that is efficient?Chisel:如何实现高效的 one-hot mux?
【发布时间】:2017-05-04 04:34:50
【问题描述】:

我有一个表格,表格的每一行都包含状态(寄存器)。存在选择一个特定行的逻辑。只有一行接收“选择”信号。然后访问该选定行的状态。要么将状态的一部分作为输出连接到模块的 IO,要么将 IO 的一部分用作更新状态的输入。

如果我用电路实现这一点,我会使用通道门。选定的信号将打开一组传输门,这会将行的寄存器连接到总线。然后将总线连接到 IO 包。这是速度快、面积小、能耗低。

在 Chisel 中有一种直接的实现方式。它将所选行编码为二进制数,然后将该数字应用于传统多路复用器的选择输入。不幸的是,对于一个有 20 到 50 行、数百位状态的表,这种实现可能非常缓慢,并且在面积和能源上都是浪费的。

问题分为两部分: 1) 有没有办法在 Chisel 中指定公共汽车,这样您就可以将通行门或传统的三州司机都挂在公共汽车上?

2) 做不到这一点,在 Chisel 中是否有一种快速、小面积、低能耗的方法?

谢谢

【问题讨论】:

    标签: bus mux chisel one-hot-encoding


    【解决方案1】:

    1) Chisel 不完全支持双向线,但通过实验模拟类型 (see example),您至少可以在 Verilog 黑盒之间通过您的 Chisel 代码缝合总线。

    2) 你试过Mux1H in chisel3.util吗?它基本上发出输入及其相应选择位的乘积之和。我不确定这与您提出的实施相比如何。我很想看看 QOR 比较。如果这个结构还不够,并且您无法在 chisel 中准确表达您想要的内容,您可以使用 parameterized BlackBox 来实现您的 one-hot mux 并根据需要实例化它。

    【讨论】:

    • 感谢您的链接。这实际上为我们带来了一个持久而关键的点。我们不是复杂的编码人员。但是实施 Rocket 的人和 Chisel 开发人员是。软件编码实践的复杂程度远远超过我们的技能。了解 Mux1H 的实现所需的学习并非易事。
    • Chisel 代码的这种不可穿透性一直是一个障碍。一方面,base Chisel 的生产力远远高于 Verilog。大约需要一个月到两个月的时间才能在 Chisel 中交付可用的工作。我们雇用的大约 60% 的人已经辞职,因为他们甚至达不到这一点。但是,Mux1H 所代表的水平,以及越来越多的 Rocket 代码,我估计可能需要 6 个月到一年才能适应这种编码实践。对我们来说,在制作商业产品时,雇佣普通的 Verilog 开发人员,这是一个真正的问题。
    • 获取答案的内容.. 感谢您提供有关模拟的提示。在第 1 点)我不清楚 Verilog Black Boxes 的提及。我不清楚双向。巴士实际上是单向的。它只是有多个源都可以驱动同一根电线。例如,三态驱动器是单向的。此外,将值放入总线并从总线接收的逻辑都是 Chisel。不涉及 Verilog 黑盒..
    • 在第 2 点)中,我怀疑 Mux1H 是我提到的实现 1 hot 的直接方式——多路复用树。这种方法相当大而且耗能大。问题的要点是找到一个门更少且消耗更少能量的替代方案。标准总线就是这样一种电路。 Chisel 有没有办法打印出它生成的节点的图片?例如,FIRRTL 节点的可视化以及它们如何相互连接?如果我们能看到代码产生了什么,这实际上有助于解决代码不透明度问题。
    • 更新——查看了上面提到的模拟凿子,再次感谢您的指点。事实证明,Analog 的东西是关于连接具有 AnalogPorts 的 AnalogBlockBoxes .. 明白了,谢谢。虽然目前尚不清楚这如何应用.. 问题是关于如何以有效的方式实现 one-hot in Chisel.. 使用黑匣子意味着用不同的语言实现.. 问题是关于 Chisel 特性,这些特性允许在 Chisel 语言中 高效实施。
    猜你喜欢
    • 1970-01-01
    • 2019-06-28
    • 2017-06-07
    • 2019-04-21
    • 2018-03-24
    • 2021-06-12
    • 2023-03-17
    • 2018-12-25
    • 2017-05-11
    相关资源
    最近更新 更多