资源描述
CIC插值滤波器设计指导
2007年11月12日
杜伟韬
0.1版
修订记录:
设计目标
设计一个16倍的插值的CIC滤波器IP,名称为CIC16I。接口如下图所示,左边为输入信号右边为输出信号,黑体表示多比特位宽。
管脚说明
信号名称
方向
位宽
定义
备注
CLK
输入
1
时钟
上升沿
RST
输入
1
复位
高电平异步
DIN
输入
参数化(16)
输入数据
CLK同步
DINEN
输入
1
输入数据使能
高有效CLK同步,单周期有效
DOUT
输出
参数化(16)
输出数据
CLK同步
DOUTEN
输出
1
输出数据使能
高有效CLK同步,单周期有效
OUTIDX
输出
2
输出标号
表示当前输出数据在其插值序列中的位置
CLKOUT
输出
1
输出时钟
与CLK在概念上为同一时钟,仅用于测试
I/O时序
说明:
CIC16I所有电路位于一个时钟域中,CIC16I的输入输出数据均为时钟驱动,即输入数据DIN需要使用使能信号DINEN同步,DINEN信号为单周期有效,相邻的两个DIN输入数据需要间隔至少16个时钟周期。每当一个有效的DIN数据进入CIC16I,经过P个时钟周期的流水延迟后(用户对P的数值没有具体要求),DIN[n]对应的16个插值结果样点数据DOUT[n,0]~DOUT[n,15]在16个时钟周期内连续输出,对于每个有效输出的DOUT[n,k]数据,DOUTEN作为其高有效单周期的驱动信号。
CIC16I的输入、输出数据均为16比特有符号数,内部节点数据宽度不限,但是要求尽量达到较高的计算精度。
设计成果
设计过程完成后,应当还有以下设计资料。
n 参考文献
n 需求分析和理论算法推导报告
n 定点算法研究及仿真结果报告
n 电路结构设计报告
n 用户手册与测试报告
u 定点仿真代码
u Testbenc 代码
u RTL代码
设计阶段规划
整个设计流程分为资料阅读阶段,需求分析和理论算法设计与仿真阶段,定点算法设计和仿真阶段,电路RTL结构设计、验证阶段。
1 资料阅读
阅读相关书籍和论文,明确以下问题:1为什么要进行数字上变频?2 CIC插值算法的优点是什么?其相应的电路结构有什么优点?3 CIC算法本身还有那些不足?有如何的改进方式?4 CIC插值算法有那些参数可以设定,这些参数设定又会影响CIC插值算法的哪些性质或结果?相应的推导公式是什么?
本阶段的目标是从宏观上了解目标算法和电路的各种特性,了解各种设计相关的可调参数以及参数之间的关系。本阶段是为后面的需求分析过程作准备。本阶段完成后请保留相关参考文献。除了阅读相关论文,另外推荐阅读 MATLAB 的Filter Design Toolbox-Multirate Filters部分中的CIC滤波器设计相关文档。了解CIC滤波器的各种设计参数以及评价方式。
2需求分析和理论算法设计
细化用户层面的设计需求,得到设计的内部需求分析,根据已有的CIC滤波器相关知识,设计CIC滤波器的理论算法。推导相关的算法公式并且注意是否可能进行优化,本步骤的理论算法公式中的标号系统将作为最终定点算法中的标号系统。一旦理论算法确定,可以在Matlab中进行理论算法的浮点仿真。Matlab仿真代码应当包含以下几个模块,1仿真参数,模型参数配置模块。2生成激励数据的模块,3算法模型模块,4算法输出结果分析模块。
本阶段完成后,得到理论算法及性能的分析推导公式文档,以及相应的Matlab仿真文件。
3定点算法设计和仿真阶段
本阶段主要考虑算法定点模型中各个运算节点的定点运算规则,各种数据的定点位宽,算法的定点模型中的以上细节需要做到可配置化,在运行定点仿真的时候,通过观察不同的定点参数配置得到的结果最终确定电路实现时的定点参数选取。
除了模型和激励数据定点化之外,本阶段算法模型中的标号系统还是与浮点仿真模型中的保持一致的。
本阶段完成后,得到相应的Matlab定点仿真代码和定点配置参数及相应的定点性能。
4电路RTL结构设计和验证阶段
本阶段具体考虑算法公式向电路的映射,首先应当做的是电路模块划分,分离出算法标号系统的电路和算法数据处理的电路模块,另外需要把算法中的存储(逻辑层面)向电路中的存储单元(物理层面)映射。一般来说,标号系统电路的作用是生成循环变量,并且在循环变量的控制下,在运算单元和存储单元之间传递数据,比如使用计数器生成循环变量,根据循环变量生成数据RAM的读写地址,根据循环变量使用交换开关在RAM和运算单元的各个数据端口之间切换数据的传输通路。
模块划分完之后,需要设计模块的输入输出接口信号以及模块之间的互联。对应运算单元模块,需要根据用户对fMAX的需求设计其流水线级数,在确定流水线级数之后,需要初步设计模块的接口时序。
在动手编写RTL代码之前,一定要把模块划分和接口设计、模块互联设计完成,并且完成相应的设计报告,直到最底下一层子模块的接口和互联设计完成后再开始编写RTL,对于子模块的RTL设计,首先需要明确2件事情,1是该子模块的接口逻辑和时序是怎样的,2该子模块内部应当有多少个触发器,亦即对应子模块的逻辑,哪些要用组合逻辑完成,哪些要用时序逻辑完成。
该阶段和阶段3的联系是,阶段3为本阶段生成testbench中的激励数据、结果对比数据,还有部分RTL代码(如果需要的话)。
展开阅读全文