Chisel:如何实现高效的单热多路复用?

时间:2016-12-19 06:57:58

标签: bus mux chisel one-hot-encoding

我有一个表,其中表的每一行都包含状态(寄存器)。有逻辑选择一个特定的行。只有一行接收"选择"信号。然后访问该选定行的状态。状态的一部分作为输出连接到模块的IO,或者IO的一部分用作输入以更新状态。

如果我用电路实现这个,我会使用传递门。所选择的信号将导通一组传输门,这将把行的寄存器连接到总线。然后总线将连接到IO捆绑包。这是快速,小面积和低能量。

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

问题分为两部分: 1)有没有办法在Chisel中指定总线,以便你有传输门或传统的三态驱动器都挂在总线上?

2)如果失败了,是否有一个快速,小面积,低能量的方式在Chisel中这样做?

由于

1 个答案:

答案 0 :(得分:4)

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

2)你试过Mux1H in chisel3.util吗?它基本上发射输入的乘积和它们相应的选择位的总和。我不确定这与您提议的实施方式相比如何。我很乐意看到QOR比较。如果这个构造不够,你无法用凿子准确表达你想要的东西,你可以使用parameterized BlackBox来实现你的单热多路复用器并根据需要实例化。