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

sea*_*lle 11 bus mux chisel one-hot-encoding

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

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

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

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

2)如果不这样做,Chisel中有一个快速,小面积,低能量的方式吗?

谢谢

Jac*_*nig 5

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

2)你在chisel3.util中尝试过Mux1H吗?它本质上发出输入及其相应选择位的乘积之和。我不确定这与您建议的实施相比如何。我很想看到 QOR 比较。如果这个构造还不够,并且您无法在 chisel 中精确表达您想要的内容,您可以使用参数化 BlackBox来实现您的单热多路复用器并根据需要实例化它。