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

数字逻辑 - 组合电路:小型设计 笔记

这一章介绍的是设计小的组合电路时候的设计方法。

信号命名标准

对于一个信号,如果逻辑 1 表示有效,逻辑 0 表示无效,不活跃或者禁止的话,我们称此信号为高电平有效的,通常我们使用不带任何前缀或者后缀的名称来表示一个高电平有效的信号;如果逻辑 0 表示有效,逻辑 1 表示无效,不活跃或者禁止的话,该信号就是低电平有效的,我们一般使用带有下划线的名称来表示低电平有效信号。

对于单个信号,我们通常使用小写来表示,对于多个则一般用大写字母。比如 x,X, _x , _X分别定义了单个/多个 高电平/低电平信号。

2018-08-09 数字逻辑
Link