本文首发于个人博客
1.设计目标
设计基于单口SRAM的转置型FIR,半并行实现,要求满足:
- 并行程度与串行程度参数可配置
- 数据位宽可配置,支持负数,负数为补码类型
2.参数表
名称 | 默认值 | 说明 |
---|---|---|
PALL_PAM | 4 | 并行阶数 |
PALL_PAM_LOG | 2 | 并行阶数LOG值 |
SERI_PAM | 4 | 串行阶数 |
SERI_PAM_LOG | 2 | 串行阶数LOG值 |
DATA_WIDTH | 16 | 数据位宽 |
3.端口列表
3.1.系统端口
名称 | 类型 | 位宽 | 说明 |
---|---|---|---|
clk | input | 1 | 系统时钟 |
rst_n | input | 1 | 系统复位信号,低有效 |
3.2.配置端口
名称 | 类型 | 位宽 | 说明 |
---|---|---|---|
cfg_valid | input | 1 | 配置有效信号 |
cfg_addr | input | PALL_PAM_LOG*SERI_PAM_LOG | 配置地址 |
cfg_data | input | DATA_WIDTH | 配置数据 |
3.3.数据端口
名称 | 类型 | 位宽 | 说明 |
---|---|---|---|
din_valid | input | 1 | 输入有效信号 |
din_busy | output | 1 | 输入忙信号 |
din_data | input | DATA_WIDTH | 输入数据 |
dout_valid | output | 1 | 输出有效信号 |
dout_busy | input | 1 | 输出忙信号 |
dout_data | output | DATA_WIDTH | 输出数据 |
4.系统结构
4.1.结构框图
该FIR共分为四个部分:
- 输入部分:输入寄存器和单口RAM,用于控制输入端口信号,实现数据输入
- 计算部分:由多个串行单元组成,每个串行单元 串行计算,多个串行单元之间并行计算
- 输出部分:输出寄存器,用于控制输出端口信号实现结果输出功能
- 控制部分:产生时序控制信号,控制输入部分、计算部分和输出部分的运行
4.2.系统算法
以一个六阶的FIR为例,并行度为2,串行度为3(每个串行处理单元串行处理3个乘加操作),整体有以下数据流:
c y c l e 0 1 2 3 4 5 6 7 i n p u t x ( 0 ) x ( 2 ) x ( 4 ) x ( 1 ) x ( 3 ) x ( 5 ) x ( 2 ) x ( 4 ) P E 1 h ( 5 ) x ( 0 ) h ( 3 ) x ( 2 ) h ( 1 ) x ( 4 ) h ( 5 ) x ( 1 ) h ( 3 ) x ( 3 ) h ( 1 ) x ( 5 ) h ( 5 ) x ( 2 ) h ( 3 ) x ( 4 ) P E 2 h ( 4 ) x ( 0 ) h (