20 岁,是学生

电路设计中的分治法 —— 以 Chisel 实现优先编码器为例

在实现我的毕业设计时,遇到了这么一个需求:找出一组数字中最低(高)位的 1 的位置 —— 换句话说,就是一个优先编码器。显然最基本的版本实现起来很简单,尤其是我们还是在使用 Chisel 这么个懒人神器的情况下,初代代码如下(仅作为例子,下同),一行就解决了问题。

1
2
3
4
5
6
7
class Example extends Module {
val io = IO(new Bundle() {
val i = Input(UInt(64.W))
val o = Output(UInt(log2Ceil(64).W))
})
io.o := PriorityEncoder(io.i)
}

但是我们看生成的 Verilog 以及 yosys 的报告,发现资源消耗比较大,时序算下来也能把我血压给拉满。

2021-01-02 数字逻辑
Link