伤城文章网 > 设计/艺术 > 论文_EDA设计微波滤波器

论文_EDA设计微波滤波器


装 订 线 ……………….……. …………. …………. ………

……………………. ………………. …………………

毕 业 论 文
题目: EDA 设计微波滤波器 ——基于 DA 算法的 FIR 数字低通滤波器设计





信息科学与工程学院

专业班级 电子信息科学与技术 3 班 届 次

学生姓名 学 号

指导教师

二 O 一 O 年 六 月 十二 日





1 绪论································· ································ 1 1.1 概述································ ······························· 1 1.2 课题研究的目的和意义······················· ·······················1 1.3 国内外的研究现状························· ·························1 1.4 课题研究的内容及预期目标······················ ····················· 2 2 FIR 数字低通滤波器的设计·······················3 ······················· 2.1 数字滤波器概述·························· ··························3 2.2 FIR 滤波器基础···························3 ··························· 2.2.1 FIR 滤波器的基本结构·······················3 ······················· 2.2.2 FIR 和 IIR 滤波器的比较······················· ······················5 2.3 窗函数法设计 FIR 滤波器······················· ······················6 2.4 利用 MATLAB 工具获取滤波器系数···················7 ··················· 2.5 分布式算法概述·························· ··························8 2.5.1 FIR 滤波器的几种实现方法·····················8 ····················· 2.5.2 分布式算法的推导························ ························9 3 EDA 技术和 FPGA 介绍·························11 ························· 3.1 EDA 技术简介···························· ···························11 3.2 FPGA 介绍·····························11 ····························· 3.2.1 FPGA 简介····························11 ···························· 3.2.2 FPGA 的基本结构·························11 ························· 3.2.3 FPGA 的设计流程·························11 ························· 4 基于 VHDL 语言的 FIR 滤波器设计····················13 ······ ············ 4.1 基于 FPGA 的 FIR 滤波器设计流程···················13 ··················· 4.2 VHDL 语言描述实现 FIR 滤波器设计··················13 ·················· 4.2.1 各模块输出位数的确定······················13 ····················· 4.2.2 各模块电路设计·························14 ························ 5 FIR 滤波器的综合与仿真························ ·······················21 5.1 综合及仿真的意义························· 21 ························· 5.2 FIR 滤波器的仿真·························· ·························21 5.3 FIR 滤波器的综合·························23 ························ 5.4 滤波器滤波性能的再验证······················24 ····················· 6 总结································27 ······························· 参考文献·······························29 ······························ 致谢·································30 ································ 附录·································31 ································

I

Contents
1 Introduction········································ ·······································1 ······································· 1.1 Outline·········································1 ········································· ········································· 1.2 Purpose and significance of the research························ ························ ·······················1 1.3 Research home and abroad······························· ······························· ······························1 1.4 Study of the subject content and expectations·····················2 ····················· ····················· 2 FIR digital filter formula································· ································· ································3 2.1 Filter Overview····································· ····································· ····································3 2.2 FIR filter based····································· ····································· ····································3 2.2.1 The basic structure of FIR filter···························3 ··························· ··························· 2.2.2 Comparison of FIR and IIR filters·························· ·························· ·························5 2.3 FIR Filter Design Window Function·························· ·························· ·························6 2.4 Obtain the filter coefficients using MATLAB tools··················7 ·················· ·················· 2.5 Distributed Algorithms································· ································· ································8 2.5.1 Several FIR Filter Implementation·························· ·························· ·························8 2.5.2 Derivation of Distributed Algorithms························· ························9 ························ 3 EDA technology and FPGA description························· ························11 ························ 3.1 EDA Technical Overview······························· ······························· ······························11 3.2 FPGA Overview···································· ···································11 ··································· 3.2.1 FPGA introduction·································11 ································· ································· 3.2.2 The basic structure of FPGA····························11 ···························· ···························· 3.2.3 FPGA design flow·································· ·································11 ································· 4 VHDL language based on FIR filter design······················· ······················13 ······················ 4.1 FPGA-based FIR filter design process························13 ························ ························ 4.2 VHDL language to describe the realization of FIR filter design···········13 ··········· ··········· 4.2.1 The output of each module to determine the median················ ················ ···············13 4.2.2 The circuit design·································· ·································· ·································14 5 FIR filter synthesis and simulation···························21 ··························· ··························· 5.1 The significance of Synthesis and Simulation····················21 ···················· ···················· 5.2 FIR filter simulation·································· ·································21 ································· 5.3 FIR filter synthesis··································23 ·································· ·································· 5.4 Filtering properties of filter re-verification······················ ······················ ·····················24 6 Summary········································27 ········································ ········································ References········································· ········································29 ········································ Acknowledgments ····································30 ···································· ···································· Appendix·········································31 ········································· ·········································

II

EDA 设计微波 FIR 滤波器

【摘要】EDA 技术以功能强大的计算机为平台。作为 IEEE 标准硬件描述语言,利用 VHDL 进行 系统行为级设计已成为 FPGA 和 ASIC 设计的主流。 目前由于在雷达、微波通讯等部门,多频率工作越来越普遍,对分隔频率的要求也相应提 高,所以需要用到大量的滤波器。 图像处理以及数据传输都要求信道具有线性相位特性。有限长单位冲激响应(FIR)数字 滤波器是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线 性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。因此,FIR 滤波器 在通信、图像处理、模式识别等领域都有着广泛的应用。 本设计采用的分布式算法在提高系统运算速度和硬件资源利用率上发挥了重要作用。 【关键词】FPGA、VHDL、低通、FIR 滤波器、DA

EDA design of microwave FIR filters
Liu Zhihu
【Abstract】 The technology of EDA is based on the powerful platform of computers。As prescribed language of hardware of the IEEE criteria,it’s been popular for FPGA and ASIC design used by VHDL for the system design at the level of behavior。 Filter is a two-port network,nowadays there is a great need for filters in Radar, microwave communications and other departments,because it’s more and more popular for the work of multi-frequency,and we have a more tough requirement for frequency separation。 Image processing and data transmission require channel with linear phase characteristics. Finite Impulse Response (FIR) digital filter is the most basic digital signal processing system components, it can ensure to have strict linear phase-frequency characteristic at any amplitude-frequency characteristic,and its unit sample response is finite length at the same time,so the filter is a stable system。Therefore,the FIR filters have a wild application in the fields of communication、image processing、simulated recognition and so on。 【Key words】VHDL、FPGA、low-pass、FIR filters、DA

III

1 绪论
1.1 概述 EDA 技术以功能强大的计算机为平台。 作为 IEEE 标准硬件描述语言, 利用 VHDL 进行系统行为级设计已成为 FPGA 和 ASIC 设计的主流。 目前由于在雷达、微波通讯等部门,多频率工作越来越普遍,对分隔频率的要 求也相应提高,所以需要用到大量的滤波器。目前应用最为广泛的是带通型的滤波 器。本课题设计一种最为基本的 FIR 数字低通滤波器,可通过参数调整,设计成其 他类型的滤波器,如带通滤波器等。 图像处理以及数据传输都要求信道具有线性相位特性。有限长单位冲激响应 (FIR)数字滤波器是数字信号处理系统中最基本的元件,它可以在保证任意幅频 特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波 器是稳定的系统。因此,FIR 滤波器在通信、图像处理、模式识别等领域都有着广 泛的应用。 本设计采用的分布式算法在提高系统运算速度和硬件资源利用率上发挥了重要 作用。 1.2 课题研究的目的和意义 在数字信号处理中,FIR 数字滤波器是最常用的单元之一。它用于将输入信号 x[n]的频率特性进行特定的修改,转换成另外的输出序列 y[n]。 由于在性能、成本、灵活性和功耗等方面的优势,基于 FPGA 的数字信号处理 器已广泛应用于图像、视频和无线通信领域。采用分布式算法的 FPGA 滤波器采用 纯硬件的方式实现 FIR 滤波,其突出的优点是:运算速度不再和滤波器的阶数正相 关,而是与采样数据的宽度相关,特别适合于高阶高速 FIR 滤波器的设计。 1.3 国内外的研究现状 嵌入式系统是一个面向应用、技术密集、资金密集、高度分散、不可垄断的产 业。随着各个领域应用需求的多样化,嵌入式设计技术和芯片技术也经历着一次又 一次的革新。虽然 ASIC 的成本很低,但设计周期长、投入费用高、风险较大,而 可编程逻辑器件(Programmable Logic Device)设计灵活、功能强大,尤其是高 密度现场可编程逻辑器件(Programmable Gate Array),其设计性能已完全能够 与 ASIC 媲美,而且由于 FPGA 的逐步普及,其性价比已足以与 ASIC 抗衡。因此, FPGA 在嵌入式系统设计领域已占据越来越重要的地位。
1

1.4 课题研究的内容及预期目标。 本课题是利用分布式算法设计 FIR 数字低通滤波器,主要是研究分布式算法的 原理及其在该设计中的应用,以及用 FPGA 软件设计,利用 VHDL 语言编程,并在
Q u a rtu sII

操作环境中实现编译、综合,以及用其自带的软件进行仿真。通过与

F MATLAB 的联合应用, 对结果进行分析与验证。 模拟出一台 F s 为 44KHz, c 为 10.4KHz

的 FIR 数字低通滤波器,并用其进行模拟滤波,测试其效果。

2

2 FIR 数字滤波器的设计
2.1 数字滤波器概述 数字滤波器(Digital Filter)是由数字乘法器、加法器和延时单元组成的一 种装置。其功能是对输入离散信号的数字代码进行运算处理,以达到改变频谱的目 的。由于电子计算机技术和大规模集成电路的发展,数字滤波器已可用计算机软件 实现,也可用大规模集成数字硬件实时实现。 数字滤波器是一个离散时间系统(按预定的算法,将输入离散时间信号转换为 所要求的输出离散时间信号的特定功能装置)。应用数字滤波器处理模拟信号时, 首先须对输入模拟信号进行限带、抽样和模数转换。数字滤波器输入信号的抽样率 应大于被处理信号带宽的两倍,其频率响应具有以抽样频率为间隔的周期重复特 性,且以折叠频率即 1/2 抽样频率点成镜像对称。为得到模拟信号,数字滤波器处 理的输出数字信号须经数模转换、平滑。数字滤波器具有高精度、高可靠性、可程 控改变频率或复用、 便于集成等优点。 数字滤波器在语言信号处理、图像信号处理、 医学生物信号处理以及其他应用领域都得到了广泛应用。 数字滤波器有低通、 高通、 带通和全通等类型。它可以是时不变的或时变的、因果的或非因果的、线性的或非 线性的。本课题研究的是应用最为广泛的线性时不变数字滤波器。 2.2 FIR 滤波器基础 2.2.1 FIR 滤波器的基本结构 FIR 滤波器有四类基本结构,即横截型(卷积型、直接型)结构;级联型结构; 频率抽样型结构;快速卷积型结构。本设计应用直接型结构,所以在以下章节将对 其作重点介绍。 FIR 数字滤波器是一个线性时不变系统(LTI) 阶因果有限冲激响应滤波器 ,N 可以用传输函数 H(z)来描述,
H (z) ?
N

? h(k ) z
k ?0

?k

(2.1)

在时域中,上述有限冲激响应滤波器的输入输出关系如下:
y [ n ] ? x[ n ] ? h[ n ] ?

?

N

x[ k ]h[ n ? k ]

(2.2)

k ?0

其中,x[n]和 y[n]分别是输入和输出序列。 N 阶有限冲激响应滤波器要用 N+1 个系数描述, 通常要用 N+1 个乘法器和 N 个 两输入加法器来实现。乘法器的系数正好是传递函数的系数,因此这种结构称为直 接型结构,可通过式(2.2)来实现,如图 1。
3

图 2.1 直接型结构 当冲击响应满足下列条件时, FIR 滤波器具有对称结构,为线性相位滤波器:
h(n) ? h( N ? 1 ? n)
(2.3)

这种对称性,可使得乘法器数量减半:对 n 阶滤波器,当 n 为偶数时,乘法器 的个数为 n/2 个;当 n 为奇数时,乘法器的个数为(n+1)/2 个。在电路实现中,乘 法器占用的逻辑单元数较多。乘法器的增加,意味着电路成本增加,另外对电路的 工作速度也有影响。 N 阶线性相位的因果 FIR 系统的单位冲激响应滤波器可用对称冲激响应
h[ n ] ? h[ N ? n ] h[ n ] ? h[ N ? n ]

(2.4) (2.5)

或者反对称冲激响应
h[ n ] ? ? h[ N ? n ] h[ n ] ? ? h[ N ? n ]

来描述。 具有对称冲激响应的 FIR 传输函数的冲激响应可写成如下形式: 当 N 为偶数时
N

H (z) ?

?

N

?1

h[ n ] z

?n

?

n?0

?

2

h [ n ]( z

?n

? z

?(N ?n)

) ? h(

N 2

?

N 2

)z

(2.6)

n?0

当 N 为奇数时
N ?1

H (z) ?

? h[ n ] z
n?0

N

?1

?n

?

?

2

h [ n ]( z

?n

? z

?(N ?n)

)

(2.7)

n?0

则 FIR 线性相位系统的结构可转化成如图 2.2 和图 2.3 所示。

图 2.2 N 为奇数

4

图 2.3 N 为偶数

表 2.1 线性相位 FIR 滤波器的幅度特性与相位特性一览表 2.2.2 FIR 和 IIR 滤波器的比较 1.在相同的技术指标下, 滤波器由于存在着输出对输入的反馈, IIR 所以可用比 FIR 滤波器更少的阶数来满足指标的要求, 所用的存储单元少, 运算次数少, 较为经济。 2.FIR 滤波器可得到严格的线性相位,而 IIR 滤波器做不到这一点,IIR 滤波器的 选择性愈好,其相位的非线性愈严重。因而,如果 IIR 滤波器要得到线性相位,又 要满足幅度滤波的技术要求,必须加全通网络进行相位校正,这同样会大大增加滤 波器的阶数。 3.FIR 滤波器主要采用非递归结构,因而无论从理论上还是从实际的有限精度的运 算中它都是稳定的,有限精度运算的误差也较小。 4.对于 FIR 滤波器,由于冲击响应是有限长的,因而可以用快速傅里叶变换算法,
5

这样运算速度可以快得多。 5.从设计上看,IIR 滤波器可以利用模拟滤波器设计的现成的闭合公式、数据和表 格,因而计算工作量较小,对计算工具要求不高。 6.IIR 滤波器主要是设计规格化的、频率特性为分段函数的标准低通、高通、带通、 带阻、全通滤波器,FIR 滤波器则要灵活的多。 从以上比较看出,IIR 滤波器与 FIR 滤波器各有特点,所以可以从实际应用时 的要求出发,从多方面考虑来加以选择。 2.3 窗函数法设计 FIR 滤波器 窗函数法的设计步骤如下: (1)给定所要求的频率响应函数 H d ? e jw ? ;
N ?1

(2)利用公式 H ? w ? ?

? a ? n ? co s ? w n ? 求 h ? n ? ? ID T F T
d
n?0

2

? H d ? e jw ? ? ? ?



(3)由过度带宽及阻带最小衰减的要求, 通过查表, 选定窗 w ? n ? 的形状及 N 的大小, 一般 N 要通过几次试探而最后确定; (4)求得所设计的 FIR 滤波器的单位抽样响应
h ? n? ? h ? ? n d n ?w ? ,

n=0,1,…N-1

(5)求 H ? e jw ? ? D T F T ? h ? n ? ? ,检验是否满足设计要求,如不满足,则要重新设计。 ? ? 通常采用窗函数法设计 FIR 滤波器方法简单,有闭合形式的公式可循,因而很 实用。但是这些滤波器的设计还不是最优的。首先通带和阻带的波动基本上相等, 另外对于大部分窗函数来说,通带内或阻带内的波动不是均匀的,通常离开过渡带 时会减小。若允许波动在整个通带内均匀分布,就会产生较小的峰值波动。 常用的窗函数有六种:矩形窗、三角形窗、汉宁窗、海明窗、布拉克曼窗和凯 泽窗。

表 2.2 常用窗函数的特性 2.4 利用 MATLAB 工具获取滤波器系数。 本课题的设计采用 MATLAB 设计计算 FIR 数字滤波器系数。
6

根据要求,要设计一个输入 8 位,输出 8 位的 17 阶线性相位 FIR 滤波器,所以 采用图 2(a)的方式,其中输入信号范围为:[±99,0,0,0, ±70,0,0,0, ± 99,0,0,0, ±70,…],此滤波器 Fs 为 44kHz,Fc 为 10.4kHz。MATLAB 设计计算 滤波器系数过程如下: FIR 滤波器参数设置,因为是 17 阶,所以 Specify order 处填 16,h(0)=0.

图 2.4 MATLAB 中 FIR 滤波器的参数设置

图 2.5 FIR 滤波器的幅频响应

图 2.6 FIR 滤波器的相频响应

图 2.7 FIR 滤波器的冲激响应

7

图 2.8 FIR 滤波器系数

图 2.9 对 FIR 滤波器的系数进行调整,整数化 可得 FIR 滤波器的参数为[-12 -18 13 29 -13 -52 14 162 -52 -13 29 13 -18 -12]

242

162

14

2.5 分布式算法概述 2.5.1 FIR 滤波器的几种实现方法 目前 FIR 滤波器大致有以下几种实现方法: (1)使用单片通用数字滤波器集成电路实现。单片通用数字滤波器(TDC1028)使用 简单方便,但由于字长和阶数的规格较少,不易完全满足实际需要。虽可采用多片 扩展来满足,但会增加体积和功耗,因而在实际中受到一定限制。 (2)采用 DSP 器件实现。由于有专门的函数可供调用,因此使用 DSP 器件设计 FIR 滤波器相对较简单,其应用也最为广泛。其唯一缺点是程序顺序执行,尽管 DSP 器
8

件性能不断提高,但在某些实时性要求极高的场合中受到限制。 (3)采用可编程逻辑器件实现。随着可编程逻辑器件的容量和速度不断提高,实现 单片系统集成已经成为可能。利用可编程逻辑器件实现 FIR 滤波器,由于实现的是 硬件并行算法,因此特别适用于某些实时性要求高的场合。 2.5.2 分布式算法的推导 分布式算法 (distributed arithmetic, DA)早在 1973 年就已经被 Croisie 提 出,但由于它特别适合用 FPGA 来实现,故直到 FPGA 出现以后,才被广泛的应用在 FPGA 中计算乘积和。 本次设计采用分布式算法设计 FIR 滤波器, 并对其进行了改进。 一个线性时不变网络的输出可以表示为
y ?? c, x ??
N ?1

? c ? n ? ? x ? n ? ? c ? 0 ? x ? 0 ? ? c ?1? x ?1? ? ... ? c ? N
n?0

? 1 ? x ? N ? 1 ? (2.8)

x 进一步假设系数 c ? n ? 是已知常数, ? n ? 是变量。 无符号 DA 系统假设变量 x ? n ? 的

表达式为
x[ n ] ?

?

B ?1

x b ? n ? ? 2 , x b ? n ? ? ? 0,1 ? ,
b

(2.9)

b?0

式中, x b ? n ? 表示 x ? n ? 的第 b 位, x ? n ? 即为 x 的第 n 次采样。而内积 y 可以表 示为
y ?
N ?1 B ?1

? c ?n? ? ?
n?0

xb ? k ? ? 2

b

(2.10)

b?0

重新分别求和,其结果为
y ? c ? 0 ? ? x B ?1 ? 0 ? 2 c ? 1 ? ? x B ? 1 ?1 ? 2
B ?1 B ?1

? xB?2 ?0? 2
B?2

B?2

? ? ? ? ? x0 ? 0 ? 2
0

0

??
0

? x B ? 2 ?1 ? 2
B ?1

? ? ? ? ? x 0 ?1 ? 2
B?2

? ? ??? ?

c ? N ? 1? ? x B ?1 ? N ? 1? 2

? x B ? 2 ? N ? 1? 2

? ? ? ? ? x 0 ? N ? 1? 2
B ?1

?

? ? c ? 0 ? x B ? 1 ? 0 ? ? c ?1 ? x B ? 1 ?1 ? ? ? ? ? ? c ? N ? 1 ? x B ? 1 ? N ? 1 ? ? 2

?

?c ?0? x

B?2

? 0 ? ? c ?1? x B ? 2 ?1? ? ? ? ? ? c ? N
0

? 1? x B ? 2 ? N ? 1? ? 2
0

B?2

? ??? ?

? c ? 0 ? x ? 0 ? ? c ? 1 ? x ?1 ? ? ? ? ? ? c ? N
0

? 1? x 0 ? N ? 1? ? 2 。

(2.11)

从以上推倒可以发现,DA 算法是一种以实现乘法运算为目的的运算方法。他与 传统算法实现乘加运算的不同在于,执行部分积运算的先后顺序不同。DA 算法在实 现乘加功能时,首先将各输入数据的每一对应位产生的部分积预先进行相加,形成 相应的部分积,然后再对各部分积进行累加形成最终结果,而传统算法是所有乘积 已经产生之后再相加完成乘加运算的。传统算法的实现如下图所示

9

字移寄存器 X[N-1] ··· X[1] X[0]

乘法器

累加器

· C[N-1] ··· C[1] C[0] +

寄 存 器

图 2.10 传统的可编程数字信号处理器结构 与传统串行算法相比,DA 算法可极大地减少硬件电路的规模,提高电路的执行 速度。其实现如下图(虚线为流水线寄存器)所示。
X[N-1] C[N-1] C[N-1] ··· ··· ··· X[1] C[1] C[1] X[0] C[0] C[0] LUT +/寄 存 器

Y

1/z

图 2.11 移位加法 DA 结构

10

3 EDA 技术和 FPGA 介绍
3.1. EDA 技术简介 所谓 EDA 技术,就是以功能强大的计算机为平台,以 EDA 软件为工具,对用硬 件描述语言 HDL(Hardware Description Language)的系统逻辑设计软件,自动地 完成逻辑编译、简化、分割、综合、布局布线及逻辑优化和仿真测试的电子产品自 动化设计过程。当然,随着 EDA 技术的逐渐成熟,也包括了如 PSPICE、EWB、MATLAB 等计算机辅助分析 CAA 技术, PROTEL、 如 ORCAD 等印刷制版计算机辅助设计, 等等。 利用 EDA 技术进行电子系统的设计,具有以下几个特点: (1)用软件的方式设计硬件; (2)用软件方式设计的系统到硬件系统的转换是由相关的开发软件自动完成的; (3)设计过程中可用相关软件进行各种仿真; (4)系统可现场编程,在线升级; (5)整个系统可集成在一个芯片上,使之具有体积小、功耗低及可靠性高的特点。 3.2 FPGA 介绍 3.2.1 FPGA 简介 FPGA 是英文 Field Programmable Gate Array 的缩写,即现场可编程门阵列, 它是在 PAL、GAL、EPLD 等可编程器件的基础上进一步发展的产物。它是作为专用 集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足, 又克服了原有可编程器件门电路数有限的缺点。 FPGA 采用了逻辑单元阵列 LCA(Logic Cell Array)这样一个新概念,内部包 括可配置逻辑模块 CLB(Configurable Logic Block) 、输入输出模块 IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA 的基本特点主要有: (1)采用 FPGA 设计 ASIC 电路,用户不需要投片生产,就能得到合用的芯片。 (2)FPGA 可做其它全定制或半定制 ASIC 电路的中试样片。 (3)FPGA 内部有丰富的触发器和 I/O 引脚。 (4) FPGA 是 ASIC 电路中设计周期最短、 开发费用最低、 风险最小的器件之一。 FPGA 采用高速 CHMOS 工艺,功耗低,可以与 CMOS、TTL 电平兼容。可以说,FPGA 芯片是 小批量系统提高系统集成度、可靠性的最佳选择之一。目前 FPGA 的品种很多,有 XILINX 的 XC 系列、TI 公司的 TPC 系列、ALTERA 公司的 FLEX 系列等。 3.2.2 FPGA 的基本结构 FPGA 由 6 部分组成,分别为可编程输入/输出单元、基本可编程逻辑单元、嵌 入式块 RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等。
11

3.2.3 FPGA 的设计流程 FPGA 开发采用的是一种高层次设计方法,这是一种“自顶向下”的方法,适应 了当今芯片开发的复杂程度提高、上市时间紧迫的特点。 其设计流程图如下图所示:
图形方式 VHDL/Verilog 语言 报告文件 系统划分 概念设计

行为描述

源文件

编译器

报告文件

功能仿真

报告文件

报告文件

FPG 一次 设 计 方 综合器 法,这是 一种“自 顶向下” 时序仿真 的方法, 适 应 了 适配器 当 今 芯 片 开 发 的 复 杂 编程器 程 度 提 高、上市 图 3.1 FPGA 设计流程图 时 间 紧 迫 的 特 点。 这 种 设 计 方 法 首 先 从 系 统 设 计 入手,在 顶 层 进 行 功 能 方 框 图 的 划 分
12 和 结 构

网表文件

波形文件

编程文件

设计。在 方 框 图

4 基于分布式算法的 FIR 滤波器设计
4.1 基于 FPGA 的 FIR 设计流程 FPGA 基本开发流程如下图所示,主要包括:设计输入(Design Entry);设计仿 真(Simulation) ;设计综合(Synthesize) ;布局布线(Place & Route) ;配置 (Configuration) 。 其开发流程图如下:
设计输入 设计仿真

设计综合

布局布线

配置

图 4.1 基于 FPGA 的开发流程 采用合理、条理清晰的设计目录结构有助于提高设计的效率、可维护性。如采 用类似下图的目录结构:
Design

源代码

综合 图 4.2

仿真

布局布线

FPGA 设计的目录结构

4.2 VHDL 语言描述实现 FIR 滤波器设计 4.2.1 各模块输出位数的确定

13

D Q
cp
?

D Q
cp
?

D Q
cp
?

D Q
cp
?

D Q
cp
?

D Q
cp
?

D Q
cp
?

D Q
cp
?

?
Q D
?

?
Q D

?
Q D

?
Q D

?
Q D

?
Q D

?
Q D

?
Q D

cp

?

cp

?

cp

?

cp

?

cp
?52

?

cp

?

cp

?

cp

?12

?18

13

29

?13

14

162

242

- ?

+ ?

+

?

+ + +
?

- ?

+ + ?

+

?

+

?

+ 8

8

z ?1

Y[7...0]
图 4.3 滤波器原理图

由第二章知,所设计的滤波器的系数为[-12 162 242 14 -52 -13 29 13 -18

-18

13

29

-13

-52

14

-12]。对第一级加法器,输入全为 8 位,

输出统一为 9 位。 对各个乘法器进行分析, 12=8+4,8 为 2 的 3 次方, 向左移了 3 位, 输出为 12 位; 18=16+2,16 为 2 的 4 次方, 向左移了 4 位, 输出为 13 位; 以此类推, 13 乘法器输出为 12 位,29 输出为 13 位,52 输出为 14 位,162 输出为 16 位,242 输出为 16 位。对剩余加法器进行分析,对输入序列进行分析,[±99,0,0,0, ± 70,0,0,0, ±99,0,0,0, ±70,…],周期为 8,经分析当总值最大时,总 输出应为 99*18+70*29+52*70+99*162=1782+2030+3640+16038=23630,2 的 15 次方 为 32768,再加上一位符号位,所以输出应为 16 位,由此类推,12、18 乘法器输 出之和为 13 位,13、29 乘法器输出之和应为 13 位,总输出为 14 位。另一支路上, 13、52 乘法器输出之和为 14 位,14、162 乘法器输出之和为 16 位,其总输出之和 为 16 位,最后这两路输出之和为 16 位。将后 8 位舍去,加上由乘法器 242 输出得 到的 8 位,总输出为 8 位。至此,所有器件的输入输出都可判定。 4.2.2 各模块电路设计 (1)寄存器 寄存器用于寄存一组二值代码,对寄存器的触发器只要求它们具有置 1、置 0 的功能即可,因而本设计中用 D 触发器组成寄存器,实现寄存功能。在 CP 正跳变 边沿前接受输入信号,正跳变边沿触发翻转,正跳变边沿后输入即被封锁。 寄存器的 VHDL 语言实现(8 位) LIBRARY IEEE;
14

USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff8 IS PORT( clk : Din : Dout :
END dff8;

IN IN

STD_LOGIC; STD_LOGIC; STD_LOGIC_VECTOR(7 DOWNTO 0);

clear : IN

OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );

ARCHITECTURE a OF dff8 IS BEGIN
PROCESS(clk,clear)

BEGIN IF clear='1' THEN Dout<="00000000"; ELSIF clear='0' THEN IF(clk'EVENT AND clk='1') THEN Dout <= Din; END IF; END IF; END PROCESS; END a;

图 4.4 寄存器的模块图

图 4.5 寄存器的波形仿真
15

完全符合设计要求。 (2)加法器 在将两个多位二进制数相加时,除了最低位以外,每一位都应该考虑来自低位 的进位, 即将两个对应位的加数和来自低位的进位 3 个数相加。 这种运算称为全加, 所用的电路称为全加器。 多位加法器的构成有两种方式:并行进位和串行进位。并行进位加法器设有进 位产生逻辑,预算速度较快;串行进位方式是将全加器级联构成多位加法器。并行 进位加法器通常比串行级联加法器占用更多的资源。随着位数的增加,相同位数的 并行加法器与串行加法器的资源占用差距也越来越大,因此,在工程中使用加法器 时,要在速度和容量之间寻找平衡点。 本次设计采用的是并行加法器方式。实现两个二进制数字的相加运算。当到达 时钟上升沿时,将两数输入,运算,输出结果。 (以下以 12 位数加 16 位数生成 16 位数的加法器为例) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_arith.ALL; ENTITY add121616 is PORT( clk : in STD_LOGIC; Din1 :in signed (11 downto 0); Din2 :in signed (15 downto 0); Dout:out signed (15 downto 0) ); END add121616; ARCHITECTURE a of add121616 is SIGNAL s1: signed(15 downto 0); BEGIN s1<=(Din1(11)&Din1(11)&Din1(11)&Din1(11)&Din1); PROCESS(Din1,Din2,clk) BEGIN if clk'event and clk='1' then
16

Dout<=s1+Din2; end if; end process; end a;

图 4.6 加法器的模块图

图 4.7 加法器的仿真波形 完全符合设计要求。 (3)减法器 减法器的原理与加法器类似,尤其是并行式的减法器与加法器的区别仅仅在于 最后的和数为两数相减。如:Dout<=Din2-s1。 由上面简化电路的需要,当乘法器常系数为负数的,可以取该数的模用来作为 乘法器的输入,其输出作为一个减法器的输入即可。故减法器要实现两个二进制数 相减的运算。当到达时钟上升沿时,将两数输入,运算,输出结果。 减法器的 VHDL 语言实现 (以下以 16 位数减去 14 位数输出 16 位数的减法器为例) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_arith.ALL; ENTITY sub141616 is PORT( clk : in STD_LOGIC; Din1 :in signed (13 downto 0);
17

Din2 :in signed (15 downto 0); Dout :out signed(15 downto 0)); END sub141616; ARCHITECTURE a of sub141616 is SIGNAL s1: signed(15 downto 0); BEGIN s1<=(Din1(13)&Din1(13)&Din1); PROCESS(Din1,Din2,clk) BEGIN if clk'event and clk='1' then Dout<=Din2-s1; end if; end process; end a;

图 4.8 减法器的模块图

图 4.9 减法器的波形仿真 完全符合设计要求。 (4)乘法器 从资源和速度考虑,常系数乘法运算可用移位相加来实现。将常系数分解成几 个 2 的幂的和形式。下例为乘 14 电路设计,算法:14=8+4+2。实现输入带符号数 据与固定数据两个二进制数的乘法运算。 当到达时钟上升沿时, 将两数输入, 运算, 输出结果。
18

乘法器的 VHDL 语言实现 LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; ENTITY mult14 is PORT( clk : Din : Dout : ); END mult14; ARCHITECTURE a OF mult14 IS SIGNAL s1 : SIGNED (11 DOWNTO 0); SIGNAL s2 : SIGNED (10 DOWNTO 0); SIGNAL s3 : SIGNED (9 DOWNTO 0); SIGNAL s4 : SIGNED (12 DOWNTO 0); BEGIN P1:process(Din) BEGIN s1(11 DOWNTO 3)<=Din; s1( 2 DOWNTO 0)<="000"; s2(10 DOWNTO 2)<=Din; s2(1 s3(9 DOWNTO 0)<="00"; DOWNTO 1)<=Din; IN STD_LOGIC; IN SIGNED (8 DOWNTO 0); OUT SIGNED (12 DOWNTO 0)

s3(0)<='0'; if Din(8)='0' then s4<=('0'&s1(11 downto 0))+("00"&s2(10 DOWNTO 0))+("000"&s3(9 DOWNTO 0)); else s4<=('1'&s1(11 downto 0))+("11"&s2(10 DOWNTO 0))+("111"&s3(9
19

DOWNTO 0)); end if; end process; P2: PROCESS(clk) BEGIN if clk'event and clk='1' then Dout<=s4; end if; END PROCESS; END a;

图 4.10 乘法器的模块图

图 4.11 乘法器的波形仿真 结果完全符合设计要求。

20

5 FIR 滤波器的综合与仿真
5.1 综合及仿真的意义 综合技术实际上是设计的正向过程,就是帮助设计者自动完成不同层次和不同 形式的设计描述之间的转换。数字系统的设计可以在不同层次上进行。其中最高的 设计层次为系统层,最低为电路层,电路层上的设计可以给出其互连线结构。在每 一层上,数字系统都可以用三种方式描述。即:行为描述,着重于系统和其它部件 与环境交互作用的方式,如输入与输出的映射关系;结构描述,给出组成系统的互 连部件的集合,常用于网表描述;物理描述,确定系统设计构成的规格。与数字系 统不同的设计层次相对应, 综合也可以在各个层次上进行, 通常可以分为三个层次: (1)高层次综合(2)逻辑综合(3)版图综合。 仿真在一个完整的设计中具有很大的意义。根据仿真的结果分析参数对设计的 影响,为正确做出设计奠定基础。 本设计仿真的目的是在软件环境下了解设计描述与设计意图的一致性。及早地 发现错误点,以便及时的修正,降低相关工作的复杂度,提高设计的准确度。同时使 工作得到优化。 仿真的分类: (a)功能仿真:功能仿真仅对设计描述的逻辑功能进行测试模拟,以了解其实现的 功能是否满足原设计要求,仿真过程不涉及具体器件的硬件特性,如延迟特性。 (b)时序仿真:又称为后仿真,是在电路已经映射到特定的工艺环境后,将电路的 路径延迟和门延迟考虑进对电路行为的影响后,来比较电路的行为是否还能够在一 定条件下满足设计构想。 5.2 FIR 数字低通滤波器的仿真 (1)设定输入信号 根据设计要求,输入信号范围是: [±99,0,0,0, ±70,0,0,0, ±99,0,0,0, ±70,…] 我们任意设定输入信号为: X=[99,0,0,0,70,0,0,0,99,0,0,0,70,0,0,0,99,0,0,0, 70,0,0,0,99,0,0,0,70,0,0,0] (2)输出信号理论值 由 FIR 数字滤波器的公式

21

计算出相应的理论值。 (3)相应仿真输出结果

图 5.1 时序仿真图 通过 MATLAB 工具计算理论输出值的过程如下

图 5.2 通过 MATLAB 工具计算理论输出值

22

输出结果 y[n]

y[0] y[1] y[2] y[3] y[4] y[5] y[6] y[7] y[8] y[9] y[10] y[11] y[12] y[13] y[14] y[15] y[16] y[17]

理论值 MATLAB 卷积值/512 -2.3203 -3.4805 2.5137 5.6074 -4.1543 -12.516 4.4844 35.289 42.695 20.734 7.1348 17.701 26.418 15.24 8.9121 24.699 38.598 24.699 8.9121 15.24 24.777 15.24 8.9121 24.699 38.598 24.699 8.9121 15.24 24.777 15.24 8.9121 24.699 38.598 24.699

仿真结果 经仿真器仿真 -3 -4 2 5 -5 -13 4 35 41 20 7 17 26 15 8 24 37 24 8 15 24 15 8 24 37 24 8 15 24 15 8 24 37 24

表 5.1 FIR 数字低通滤波器理论值和仿真结果一览表 5.3 FIR 数字低通滤波器的综合 FIR 滤波器的整体电路基本与其原理图类似。整体电路如下图所示:

23

图 5.3 FIR 滤波器的整体电路图 限于篇幅,将整个电路缩小如上,详见电子版源程序框图 fir.bdf。 5.4 滤波器滤波性能的再验证 为了更为形象的测试所设计滤波器的滤波性能,已知 f s =44KHz, fc =10.4KHz, 对频率为 5KHz 的正弦波进行抽样,其 MATLAB 实现如下:

图 5.4 用 MATLAB 对 5KHz 正弦波抽样 将所得结果进行四舍五入,得到量化整数值,并将其作为仿真输入,其仿真结 果如下图所示:
24

图 5.5 5KHz 离散信号的仿真波形 由于周期时延,其输出结果应该记为[22,29,22,4,-17,· ··]将其作为离 散信号输入,其离散信号波形的 MATLAB 实现如下:

图 5.6 频率为 5KHz 的离散信号输入输出波形图 由输出离散信号的波形图可以看出,5KHz 的正弦波通过了该 FIR 滤波器,但是 由于时序的原因,产生了一定角度的移相。 为了进一步验证该滤波器的性能,在 5KHz 正弦信号的基础上增加 20KHz 余弦 信号的干扰信号,同样用 44KHz 的采样频率对其进行抽样,其 MATLAB 实现如下:

图 5.7 用 MATLAB 对混合信号的抽样
25

同样,将所得结果进行四舍五入,得到量化整数值,并将其作为仿真输入,其 仿真结果如下图所示:

图 5.8 混合离散信号的仿真波形图 由于其周期时延,其输出结果应该记为[22,29,21,4,-16,· ··],与 5KHz 的抽样信号输出极其吻合!

图 5.9 混合离散信号的输入输出波形图 通过对比,我们完全有理由相信 5KHz 的离散信号通过了滤波器,而 20KHz 的 离散信号被滤除! 该滤波器性能良好,且波形基本没有毛刺,实验完全符合设计要求!

26

6 总结
数字滤波器的实现,通常有两种方法。一是软件实现,利用计算机选择相应的 算法,编制出高质量的正确程序。另一种方法是硬件实现,利用数字器件,例如: 加法器,常数乘法器和延迟器等装配成专门设备,但硬件方案的确定一般通过编程, 即在计算机上进行仿真。所以一个功能优良的硬件实现与软件实现有着密切的关 系。 而这次利用 FPGA 技术来设计带通数字滤波器,有着非常优越的软件条件。可 以实现以少量集成芯片实现高质量滤波器的设计。而且在硬件实现前用软件方法仿 真模拟,以此来缩短设计周期,减少工作量,提高设计成功率。具有以往设计方法 所没有的优越性。而且它具有硬件调试方便的优点。 按照最优方案进行设计。先进行软件编程,程序编译通过后,进行波形仿真, 再进行系统编译和仿真。 设计过程中遇到的主要问题: (1)全新接触 FPGA 的知识以及相关软件,中文资料较少,需要更好的英文水平去参阅 英文资料。 (2)在配置和使用上的问题,对 Mars-EP1C3-S-Core 核心板所知甚少,不能熟练进 行操作,如引脚分配等。 (3)程序调试的问题,还不能熟练的解决一些常见错误。如在编译成功后,对其仿 真 时 提 示 错 误 信 息 : Error: Run Generate Functional Simulation Netlist (quartus_map fir --generate_functional_sim_netlist) to generate functional simulation netlist for top level entity "fir" before running the Simulator (quartus_sim), 此时, 选择 Processing, 在其下拉菜单中选择 Generate Functional Simulation Netlist,成功生成后再对其进行仿真即可。 在设计中还出现了一个较为复杂的错误:第一遍设计时,原本 d8 信号是直接 进入乘法器 242,这样输出为 15 位,再经过四个延时器与左边加起来的信号同步, 最后在进入一个加法器,此加法器输入信号为左边来的 16 位信号,和乘法器 242 输出的信号 15 位,各取前 8 位信号相加,输出最后结果。理论上,无论是输入输 出信号的位数,还是考虑延时同步,还是舍去的位数多少都没有问题,所以我认为 这种设计是可行的。 到了仿真模拟结果的时候,粗略一看,好像和 MATLAB 计算出的卷积结果差不 多,但是仔细一看发现虽然大部分结果都差不多,但有几位数几乎扩大了一倍:

27

图 6.1 设计中出现的错误的仿真波形 仔细看,可以发现有 88,84,87 出现,其他位上出入不大。 为了解决这个问题我想可能是乘法器 242 的问题,虽然理论上说的通,但是毕 竟左边和右边的原理图在位数和经过延时器顺序上有了出入,也许问题就出在这。 于是重新修改了乘法器 mult242。 输入 9 位输出 16 位; 修改了最后的加法器 add888, 输入都为 16 位输出为 8 位;增加一个延时器 dff89,接在 d8 信号后面,输入 8 位输 出 9 位,相当于右边电路的第一级加法器产生的效果。修改了延时器 dff15,由原来 的 15 位改成了现在的 16 位。 这样相当于 d8 信号先经过延时器 dff89 输出 9 位信号,进入乘法器 242 输出 16 位信号,再经过 3 次延时器 dff15,达到和右边信号同步的目的,最后进入加法 器 add888,取前 8 位和右边得到的数据相加输出结果。 果然这样,再看最后的数据就正确了。另外由于本次设计的是 17 阶滤波器, 所以在精度上与更高阶的滤波器有一定的差距,但是可以接受,能反映出波形变化 的趋势。 设计中还需进一步改进的地方: (1)基本的 FIR 滤波器的实现算法多是卷积运算形式,可用加法器和乘法器直接实现, 这种直接实现 FIR 滤波器的方法在速度和节省资源上都不是最有效的。乘法器的速 度影响着整个系统的速度,如果可以实现快速乘法器的设计,则可以大大提高整个 系统的速度。本设计采用的 DA 算法和关于对称性质的利用,使整个系统的速度大 为提高。但由于本人能力有限,未能充分利用 FPGA 器件的最大特点,即基于查找 表原理。在硬件资源的充分利用方面很是欠缺。 (2)可以利用 FPGA 自带的 IP 核进行滤波器的设计,取出高位,再结合自己的程序设 计,可以缩短设计周期,并较为可靠。 (3)本文只是做了完整的 FPGA 设计的一部分,实现了功能仿真,FPGA 是一个庞大的知 识系统,需要学习的知识非常多,以后还可以做时序仿真,将所做内容下载到芯片里, 可以做成实物。

28

参考文献 [1]潘松、黄继业.EDA 技术实用教程[第 2 版].科学出版社,2005. [2]刘学观、郭辉萍.微波技术与天线(第 2 版).西安电子科技大学出版社,2006. [3]程佩青.数字信号处理教程(第 3 版).清华大学出版社,2007. [4]刘欲晓,方强,等.EDA 技术与 VHDL 电路开发应用实践[第 1 版].电子工业出版 社,2009. [5]飞思科技产品研发中心.MATLAB7[第 1 版].电子工业出版社,2007. [6] 北京理工大学 ASIC 研究所.VHDL 语言 100 例详解[第 1 版].清华大学出版社, 2009. [7]薛寒冰,韩雪,等.基于分布式算法的 FIR 数字滤波器的 FPGA 实现.大连交通大 学学报.2009, (4). [8]李亚奇,张雅绮.线性相位 FIR 滤波器.电子测量技术.天津大学.2005, (6). [9]王旭东.FIR 的 FPGA 实现及其 QuartusⅡ与 MATLAB 仿真.电子工程师.2004,5) ( . [10]赵金宪,吴三,等.基于 FPGA 分布式算法的 FIR 滤波器的实现.黑龙江科技学 院学报.2006, (4). [11]赵岚,毕卫红,等.基于 FPGA 的分布式算法 FIR 滤波器设计.电子测量技 术.2007, (7). [12]王天云.基于分布式算法 FIR 滤波器的 FPGA 实现.舰船电子工程.2005, (149) . [13]朱冰莲,程联营,等.基于分布式算法的高阶 FIR 滤波器及其 FPGA 实现.电视 技术.2006, (2). [14]戴敬,王超.基于 FPGA 多级分布式算法的 FIR 数字滤波器设计.沈阳建筑大学 学报(自然科学版).2010, (1). [15] Robert Lacoste.No Fear with FIR:Put a Finite Impulse Response Filter to Work.Robert Lacoste’s The Darker Side,2010. [16][Brazil]Volnei A.Pedroni.Circuit Design with VHDL.电子工业出版社, 2005. [17]Jianfeng Xie,Jianjun He.FPGA realization of FIR filters for high-speed and medium-speed by using modified distributed arithmetic architectures.Microelectronics Journal.2010, (6). [18]Vladimir Ciric,Ivan Milentijevic.Configurable folded array for FIR filtering.Journal of System Architecture.2008,(1-2). [19]Bela Feher.Coefficient-dependent logic synthesis of FIR digital filters.Microelectronics Journal.1994,(3).
29

致谢 本文是在导师的精心指导和严格要求下完成的。首先,我衷心感谢老师,从毕 业设计的选题到论文的完成都凝聚着导师的辛劳和汗水。在毕业设计的后期导师还 亲自修改我们的论文,并给出修改意见。使我在专业知识上有了很大的收获。 其次,我要感谢老师。在毕业设计期间,王老师给了我很大的帮助,我的毕业 设计才能够如期完成。还要感谢兰鹏老师,是他坚定了我选做设计类论文的信心。 在此期间,我学到了不少东西,感觉比较充实。一起做毕业设计的过程中我除了学 到很多滤波器的相关知识外,还感受到了大家一起学习共同努力的快乐。同时感谢 我们宿舍的舍友们,在毕业设计间,我们互相鼓励互相影响,忘记不了我们一起奋 斗写论文的日子。 再次,我要特别感谢我的几位同学——。在我毕业设计期间,他们也给了我很 大的帮助,帮我解决了不少难题。 最后,有问题上百度 Google 一下,感谢人外人的指导与分享。

30

附录 电子信息科学与技术 顶层模块的源程序代码 LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY work; ENTITY fir IS port ( clk : clear : Din : Dout : ); END fir; ARCHITECTURE bdf_type OF fir IS component add121313 PORT(clk : IN STD_LOGIC; Din1 : IN STD_LOGIC_VECTOR(11 downto 0); Din2 : IN STD_LOGIC_VECTOR(12 downto 0); Dout : OUT STD_LOGIC_VECTOR(12 downto 0) ); end component; component dff8 PORT(clk : IN STD_LOGIC; clear : IN STD_LOGIC; Din : IN STD_LOGIC_VECTOR(7 downto 0); Dout : OUT STD_LOGIC_VECTOR(7 downto 0) ); end component; component add889 PORT(clk : IN STD_LOGIC; Din1 : IN STD_LOGIC_VECTOR(7 downto 0);
31

IN IN IN OUT

STD_LOGIC; STD_LOGIC; STD_LOGIC_VECTOR(7 downto 0); STD_LOGIC_VECTOR(7 downto 0)

Din2 : IN STD_LOGIC_VECTOR(7 downto 0); Dout : OUT STD_LOGIC_VECTOR(8 downto 0) ); end component; component mult12 PORT(clk : IN STD_LOGIC; Din : IN STD_LOGIC_VECTOR(8 downto 0); Dout : OUT STD_LOGIC_VECTOR(11 downto 0) ); end component; component mult18 PORT(clk : IN STD_LOGIC; Din : IN STD_LOGIC_VECTOR(8 downto 0); Dout : OUT STD_LOGIC_VECTOR(12 downto 0) ); end component; component mult13 PORT(clk : IN STD_LOGIC; Din : IN STD_LOGIC_VECTOR(8 downto 0); Dout : OUT STD_LOGIC_VECTOR(11 downto 0) ); end component; component mult29 PORT(clk : IN STD_LOGIC; Din : IN STD_LOGIC_VECTOR(8 downto 0); Dout : OUT STD_LOGIC_VECTOR(12 downto 0) ); end component; component mult52 PORT(clk : IN STD_LOGIC; Din : IN STD_LOGIC_VECTOR(8 downto 0); Dout : OUT STD_LOGIC_VECTOR(13 downto 0) );
32

end component; component mult14 PORT(clk : IN STD_LOGIC; Din : IN STD_LOGIC_VECTOR(8 downto 0); Dout : OUT STD_LOGIC_VECTOR(11 downto 0) ); end component; component mult162 PORT(clk : IN STD_LOGIC; Din : IN STD_LOGIC_VECTOR(8 downto 0); Dout : OUT STD_LOGIC_VECTOR(15 downto 0) ); end component; component dff89 PORT(clk : IN STD_LOGIC; clear : IN STD_LOGIC; Din : IN STD_LOGIC_VECTOR(7 downto 0); Dout : OUT STD_LOGIC_VECTOR(8 downto 0) ); end component; component add121414 PORT(clk : IN STD_LOGIC; Din1 : IN STD_LOGIC_VECTOR(11 downto 0); Din2 : IN STD_LOGIC_VECTOR(13 downto 0); Dout : OUT STD_LOGIC_VECTOR(13 downto 0) ); end component; component add121616 PORT(clk : IN STD_LOGIC; Din1 : IN STD_LOGIC_VECTOR(11 downto 0); Din2 : IN STD_LOGIC_VECTOR(15 downto 0); Dout : OUT STD_LOGIC_VECTOR(15 downto 0) );
33

end component; component sub131314 PORT(clk : IN STD_LOGIC; Din1 : IN STD_LOGIC_VECTOR(12 downto 0); Din2 : IN STD_LOGIC_VECTOR(12 downto 0); Dout : OUT STD_LOGIC_VECTOR(13 downto 0) ); end component; component sub141616 PORT(clk : IN STD_LOGIC; Din1 : IN STD_LOGIC_VECTOR(13 downto 0); Din2 : IN STD_LOGIC_VECTOR(15 downto 0); Dout : OUT STD_LOGIC_VECTOR(15 downto 0) ); end component; component add141616 PORT(clk : IN STD_LOGIC; Din1 : IN STD_LOGIC_VECTOR(13 downto 0); Din2 : IN STD_LOGIC_VECTOR(15 downto 0); Dout : OUT STD_LOGIC_VECTOR(15 downto 0) ); end component; component mult242 PORT(clk : IN STD_LOGIC; Din : IN STD_LOGIC_VECTOR(8 downto 0); Dout : OUT STD_LOGIC_VECTOR(15 downto 0) ); end component; component dff15 PORT(clk : IN STD_LOGIC; clear : IN STD_LOGIC; Din : IN STD_LOGIC_VECTOR(15 downto 0); Dout : OUT STD_LOGIC_VECTOR(15 downto 0)
34

); end component; component add888 PORT(clk : IN STD_LOGIC; Din1 : IN STD_LOGIC_VECTOR(15 downto 0); Din2 : IN STD_LOGIC_VECTOR(15 downto 0); Dout : OUT STD_LOGIC_VECTOR(7 downto 0) ); end component; signal add14 : signal add16 : signal mul3 : signal mul4 : signal mul5 : signal mul6 : signal mul7 : signal mul8 : signal mul9 : STD_LOGIC_VECTOR(13 downto 0); STD_LOGIC_VECTOR(15 downto 0); STD_LOGIC_VECTOR(8 downto 0); STD_LOGIC_VECTOR(8 downto 0); STD_LOGIC_VECTOR(8 downto 0); STD_LOGIC_VECTOR(8 downto 0); STD_LOGIC_VECTOR(8 downto 0); STD_LOGIC_VECTOR(8 downto 0); STD_LOGIC_VECTOR(8 downto 0); STD_LOGIC_VECTOR(11 downto 0); STD_LOGIC_VECTOR(12 downto 0); STD_LOGIC_VECTOR(11 downto 0); STD_LOGIC_VECTOR(12 downto 0); STD_LOGIC_VECTOR(7 downto 0); STD_LOGIC_VECTOR(7 downto 0); STD_LOGIC_VECTOR(7 downto 0); STD_LOGIC_VECTOR(7 downto 0); STD_LOGIC_VECTOR(7 downto 0); STD_LOGIC_VECTOR(7 downto 0); STD_LOGIC_VECTOR(7 downto 0); STD_LOGIC_VECTOR(7 downto 0); STD_LOGIC_VECTOR(7 downto 0); STD_LOGIC_VECTOR(7 downto 0); STD_LOGIC_VECTOR(7 downto 0);
35

signal SYNTHESIZED_WIRE_0 : signal SYNTHESIZED_WIRE_1 : signal SYNTHESIZED_WIRE_2 : signal SYNTHESIZED_WIRE_3 : signal SYNTHESIZED_WIRE_50 : signal SYNTHESIZED_WIRE_51 : signal SYNTHESIZED_WIRE_52 : signal SYNTHESIZED_WIRE_53 : signal SYNTHESIZED_WIRE_54 : signal SYNTHESIZED_WIRE_55 : signal SYNTHESIZED_WIRE_56 : signal SYNTHESIZED_WIRE_57 : signal SYNTHESIZED_WIRE_12 : signal SYNTHESIZED_WIRE_58 : signal SYNTHESIZED_WIRE_59 :

signal SYNTHESIZED_WIRE_60 : signal SYNTHESIZED_WIRE_61 : signal SYNTHESIZED_WIRE_62 : signal SYNTHESIZED_WIRE_63 : signal SYNTHESIZED_WIRE_64 : signal SYNTHESIZED_WIRE_27 : signal SYNTHESIZED_WIRE_28 : signal SYNTHESIZED_WIRE_31 : signal SYNTHESIZED_WIRE_32 : signal SYNTHESIZED_WIRE_33 : signal SYNTHESIZED_WIRE_34 : signal SYNTHESIZED_WIRE_35 : signal SYNTHESIZED_WIRE_36 : signal SYNTHESIZED_WIRE_37 : signal SYNTHESIZED_WIRE_38 : signal SYNTHESIZED_WIRE_40 : signal SYNTHESIZED_WIRE_41 : signal SYNTHESIZED_WIRE_42 : signal SYNTHESIZED_WIRE_43 : signal SYNTHESIZED_WIRE_44 : BEGIN b2v_inst : add121313 PORT MAP(clk => clk,

STD_LOGIC_VECTOR(7 downto 0); STD_LOGIC_VECTOR(7 downto 0); STD_LOGIC_VECTOR(7 downto 0); STD_LOGIC_VECTOR(7 downto 0); STD_LOGIC_VECTOR(7 downto 0); STD_LOGIC_VECTOR(8 downto 0); STD_LOGIC_VECTOR(8 downto 0); STD_LOGIC_VECTOR(11 downto 0); STD_LOGIC_VECTOR(13 downto 0); STD_LOGIC_VECTOR(11 downto 0); STD_LOGIC_VECTOR(15 downto 0); STD_LOGIC_VECTOR(12 downto 0); STD_LOGIC_VECTOR(12 downto 0); STD_LOGIC_VECTOR(13 downto 0); STD_LOGIC_VECTOR(15 downto 0); STD_LOGIC_VECTOR(15 downto 0); STD_LOGIC_VECTOR(15 downto 0); STD_LOGIC_VECTOR(15 downto 0); STD_LOGIC_VECTOR(15 downto 0); STD_LOGIC_VECTOR(15 downto 0);

Din1 => SYNTHESIZED_WIRE_0, Din2 => SYNTHESIZED_WIRE_1, Dout => SYNTHESIZED_WIRE_35); b2v_inst1 : add121313 PORT MAP(clk => clk, Din1 => SYNTHESIZED_WIRE_2, Din2 => SYNTHESIZED_WIRE_3, Dout => SYNTHESIZED_WIRE_36); b2v_inst10 : dff8 PORT MAP(clk => clk,
36

clear => clear, Din => SYNTHESIZED_WIRE_50, Dout => SYNTHESIZED_WIRE_51); b2v_inst11 : dff8 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_51, Dout => SYNTHESIZED_WIRE_52); b2v_inst12 : dff8 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_52, Dout => SYNTHESIZED_WIRE_53); b2v_inst13 : dff8 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_53, Dout => SYNTHESIZED_WIRE_54); b2v_inst14 : dff8 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_54, Dout => SYNTHESIZED_WIRE_55); b2v_inst15 : dff8 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_55, Dout => SYNTHESIZED_WIRE_56); b2v_inst16 : dff8 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_56, Dout => SYNTHESIZED_WIRE_57);
37

b2v_inst17 : dff8 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_57, Dout => SYNTHESIZED_WIRE_12); b2v_inst18 : add889 PORT MAP(clk => clk, Din1 => SYNTHESIZED_WIRE_12, Din2 => Din, Dout => SYNTHESIZED_WIRE_27); b2v_inst19 : add889 PORT MAP(clk => clk, Din1 => SYNTHESIZED_WIRE_57, Din2 => SYNTHESIZED_WIRE_58, Dout => SYNTHESIZED_WIRE_28); b2v_inst2 : dff8 PORT MAP(clk => clk, clear => clear, Din => Din, Dout => SYNTHESIZED_WIRE_58); b2v_inst20 : add889 PORT MAP(clk => clk, Din1 => SYNTHESIZED_WIRE_56, Din2 => SYNTHESIZED_WIRE_59, Dout => mul3); b2v_inst21 : add889 PORT MAP(clk => clk, Din1 => SYNTHESIZED_WIRE_55, Din2 => SYNTHESIZED_WIRE_60, Dout => mul4); b2v_inst22 : add889 PORT MAP(clk => clk, Din1 => SYNTHESIZED_WIRE_54,
38

Din2 => SYNTHESIZED_WIRE_61, Dout => mul5); b2v_inst23 : add889 PORT MAP(clk => clk, Din1 => SYNTHESIZED_WIRE_53, Din2 => SYNTHESIZED_WIRE_62, Dout => mul6); b2v_inst24 : add889 PORT MAP(clk => clk, Din1 => SYNTHESIZED_WIRE_52, Din2 => SYNTHESIZED_WIRE_63, Dout => mul7); b2v_inst25 : add889 PORT MAP(clk => clk, Din1 => SYNTHESIZED_WIRE_51, Din2 => SYNTHESIZED_WIRE_64, Dout => mul8); b2v_inst26 : mult12 PORT MAP(clk => clk, Din => SYNTHESIZED_WIRE_27, Dout => SYNTHESIZED_WIRE_0); b2v_inst27 : mult18 PORT MAP(clk => clk, Din => SYNTHESIZED_WIRE_28, Dout => SYNTHESIZED_WIRE_1); b2v_inst28 : mult13 PORT MAP(clk => clk, Din => mul3, Dout => SYNTHESIZED_WIRE_2); b2v_inst29 : mult29 PORT MAP(clk => clk, Din => mul4, Dout => SYNTHESIZED_WIRE_3);
39

b2v_inst3 : dff8 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_58, Dout => SYNTHESIZED_WIRE_59); b2v_inst30 : mult13 PORT MAP(clk => clk, Din => mul5, Dout => SYNTHESIZED_WIRE_31); b2v_inst31 : mult52 PORT MAP(clk => clk, Din => mul6, Dout => SYNTHESIZED_WIRE_32); b2v_inst32 : mult14 PORT MAP(clk => clk, Din => mul7, Dout => SYNTHESIZED_WIRE_33); b2v_inst33 : mult162 PORT MAP(clk => clk, Din => mul8, Dout => SYNTHESIZED_WIRE_34); b2v_inst34 : dff89 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_50, Dout => mul9); b2v_inst35 : add121414 PORT MAP(clk => clk, Din1 => SYNTHESIZED_WIRE_31, Din2 => SYNTHESIZED_WIRE_32, Dout => add14); b2v_inst36 : add121616 PORT MAP(clk => clk,
40

Din1 => SYNTHESIZED_WIRE_33, Din2 => SYNTHESIZED_WIRE_34, Dout => add16); b2v_inst37 : sub131314 PORT MAP(clk => clk, Din1 => SYNTHESIZED_WIRE_35, Din2 => SYNTHESIZED_WIRE_36, Dout => SYNTHESIZED_WIRE_37); b2v_inst38 : sub141616 PORT MAP(clk => clk, Din1 => add14, Din2 => add16, Dout => SYNTHESIZED_WIRE_38); b2v_inst39 : add141616 PORT MAP(clk => clk, Din1 => SYNTHESIZED_WIRE_37, Din2 => SYNTHESIZED_WIRE_38, Dout => SYNTHESIZED_WIRE_43); b2v_inst4 : dff8 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_59, Dout => SYNTHESIZED_WIRE_60); b2v_inst40 : mult242 PORT MAP(clk => clk, Din => mul9, Dout => SYNTHESIZED_WIRE_41); b2v_inst41 : dff15 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_40, Dout => SYNTHESIZED_WIRE_42); b2v_inst42 : dff15
41

PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_41, Dout => SYNTHESIZED_WIRE_40); b2v_inst43 : dff15 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_42, Dout => SYNTHESIZED_WIRE_44); b2v_inst44 : add888 PORT MAP(clk => clk, Din1 => SYNTHESIZED_WIRE_43, Din2 => SYNTHESIZED_WIRE_44, Dout => Dout); b2v_inst5 : dff8 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_60, Dout => SYNTHESIZED_WIRE_61); b2v_inst6 : dff8 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_61, Dout => SYNTHESIZED_WIRE_62); b2v_inst7 : dff8 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_62, Dout => SYNTHESIZED_WIRE_63); b2v_inst8 : dff8 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_63,
42

Dout => SYNTHESIZED_WIRE_64); b2v_inst9 : dff8 PORT MAP(clk => clk, clear => clear, Din => SYNTHESIZED_WIRE_64, Dout => SYNTHESIZED_WIRE_50); END

43


搜索更多“论文_EDA设计微波滤波器”

网站地图

All rights reserved Powered by 伤城文章网 5xts.com

copyright ©right 2010-2021。
伤城文章网内容来自网络,如有侵犯请联系客服。zhit325@126.com