2021.7.24—chisel vec部分的代码有更新,之前有点错误!!!
一、FIR Filter介绍现在假设我们需要实现一个FIR滤波器,其实就是实现以下功能:
class My4ElementFir(b0: Int, b1: Int, b2: Int, b3: Int) extends Module {
val io = IO(new Bundle {
val in = Input(UInt(8.W))
val out = Output(UInt(8.W))
})
val x_n1 = RegNext(io.in, 0.U)
val x_n2 = RegNext(x_n1, 0.U)
val x_n3 = RegNext(x_n2, 0.U)
io.out := io.in * b0.U(8.W) + x_n1 * b1.U(8.W) +
x_n2 * b2.U(8.W) + x_n3 * b3.U(8.W)
}
可以看到,当系数数量固定时,我们只需要简单的定义几个寄存器,然后按照公式计算出输出即可。这种写法很直观,也比较简单,但是前提是必须知道系数的个数,否则并不知道定义几个寄存器。
三、系数个数不固定的写法(使用集合或Vec)当系数个数不固定的时候,我们就需要使用scala的集合或者chisel的Vec来实现以上功能。此时在代码逻辑上就比原来稍微复杂了一丢丢,但其实只要实现数据在集合或者Vec中移位即可。
- 使用scala的集合
class MyManyElementFir(consts: Seq[UInt], bitWidth: Int) extends Module {
val io = IO(new Bundle {
val in = Input(UInt(bitWidth.W))
val out = Output(UInt(bitWidth.W))
})
val regs = mutable.ArrayBuffer[UInt]()
for(i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?