第 10 章 FPGA在DSP领域中的应用_第1页
第 10 章 FPGA在DSP领域中的应用_第2页
第 10 章 FPGA在DSP领域中的应用_第3页
第 10 章 FPGA在DSP领域中的应用_第4页
第 10 章 FPGA在DSP领域中的应用_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 10 章 FPGA在DSP领域中的应用 加法器、减法器、乘法器和数字滤波器是数字信号处理必用的部件,本章主要描述了快速加法器的设计、快速乘法器的设计和数字滤波器的设计,从而为数字信号处理打下良好的根底。 10.1 快速加法器的设计 加法器是数字系统中的根本逻辑器件,减法器和硬件乘法器都可由加法器来构成。多位加法器的构成有两种方式:并行进位和串行进位方式。并行进位加法器设有进位产生逻辑,运算速度较快;串行进位方式是将全加器级联构成多位加法器。并行进位加法器通常比串行级联加法器占用更多的资源。随着位数的增加,相同位数的并行加法器与串行加法器的资源占用差距也越来越大。因此,在工程中使用加法器时,

2、要在速度和容量之间寻找平衡点。 实践证明,4位二进制并行加法器和串行级联加法器占用几乎相同的资源。这样,多位加法器由4位二进制并行加法器级联构成是较好的折中选择。本设计中的8位二进制并行加法器即是由两个4位二进制并行加法器级联而成的,其电路原理图如图10-1所示。图 10-1 8位加法器的电路原理图 10.1.1 4位二进制并行加法器 1. 加法器原理 我们先来谈谈加法器,一位全加法器的原理很简单,其真值表如表10-1所示,A、B代表输入,Cin代表低位的进位,COUT代表本位向高位进位,S那么代表加和。 一位全加器的原理可用左式表示: COUT=AB+(AB)Cin;S=ABCin. x y

3、 CIN S COUT 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1表10-1 一位全加法器真值表 2. 4位二进制并行加法器的源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER4B IS -4位二进制并行加法器 PORT(CIN4:IN STD_LOGIC; -低位进位 A4:IN STD_LOGIC_VECTOR(3 DOWNTO 0); -4位加数 B

4、4:IN STD_LOGIC_VECTOR(3 DOWNTO 0); -4位被加数 S4: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -4位和 COUT4: OUT STD_LOGIC); -进位输出END ADDER4B;ARCHITECTURE ART OF ADDER4B IS SIGNAL S5:STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL A5,B5: STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN A5=0& A4; -将4位加数矢量扩为5位,为进位提供空间 B5=0& B4; -将4位被加数矢量扩为5位

5、,为进位提供空间 S5=A5+B5+C4 ; S4=S5(3 DOWNTO 0); COUT4CIN8,A4=A8(3 DOWNTO 0),B4=B8(3 DOWNTO0), S4=S8(3 DOWNTO 0),COUT4=SC); U2:ADDER4B -例化(安装)一个4位二进制加法器U2 PORT MAP(CIN4=SC,A4=A8(7 DOWNTO 4),B4=B8(7 DOWNTO 4), S4=S8(7 DOWNTO 4),COUT4=COUT8);END ARCHITECTURE ART; 8位二进制并行加法器的仿真结果如图10-2所示。图10-2 8位二进制加法器的仿真图 10

6、.2.1 设计思路 纯组合逻辑构成的乘法器虽然工作速度比较快,但占用硬件资源多,难以实现宽位乘法器,而基于PLD器件外接ROM九九表的乘法器那么无法构成单片系统,也不实用。这里介绍由8位加法器构成的以时序逻辑方式设计的8位乘法器,如图10-3所示。此乘法器具有一定的实用价值。其乘法原理是:乘法通过逐项位移相加原理来实现,从被乘数的最低位开始,假设为1,那么乘数左移后与上一次和相加;假设为0,左移后以全零相加,直至被乘数的最高位。从图10-3的逻辑图上可以清楚地看出此乘法器的工作原理。 10.2 快速乘法器的设计图10-3 8*8位乘法器电路原理图 图10-3中,ARICTL是乘法运算控制电路,

7、它的START(可锁定于引脚P94)信号的上跳沿与高电平有两个功能,即16位存放器清零和被乘数A7.0向移位存放器SREG8B加载;它的低电平那么作为乘法使能信号。乘法时钟信号从ARICTL的CLK输入。当被乘数加载于8位右移存放器SREG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。 当为1时,与门ANDARITH翻开,8位乘数B7.0在同一节拍进入8位加法器,与上一次锁存在16位锁存器REG16B中的高8位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。而当被乘数移出位为0时,与门全零输出。如此往复,直至8个时钟脉冲后,由ARICTL的控制,乘法运算过程自动中止。ARIE

8、ND输出高电平,以此可点亮一发光管,以示乘法结束。此时REG16B的输出值即为最后乘积。 此乘法器的优点是节省芯片资源,它的核心元件只是一个8位加法器,其运算速度取决于输入的时钟频率。假设时钟频率为100MHz,那么每一运算周期仅需80ns。而假设利用备用最高时钟,即12MHz晶振的MCS-51单片机的乘法指令,进行8位乘法运算,仅单指令的运算周期就长达4s。因此,可以利用此乘法器或相同原理构成的更高位乘法器完成一些数字信号处理方面的运算。 10.2.2 快速乘法器VHDL源程序 1. 选通与门模块的源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENT

9、ITY ANDARITH IS -选通与门模块 PORT (ABIN:IN STD_LOGIC; -与门开关 DIN:IN STD_LOGIC_VECTOR (7 DOWNTO 0); -8位输入 DOUT:OUT STD_LOGIC_VECTOR (7 DOWNTO 0); -8位输出END ANDARITH;ARCHITECTURE ART OF ANDARITH IS BEGIN PROCESS (ABIN,DIN) BEGIN FOR I IN 0 TO 7 LOOP -循环,分别完成8位数据与一位控制位的与操作 DOUT (I)=DIN (I)AND ABIN; END LOOP;

10、END PROCESS;END ART; 选通与门模块仿真结果如图10-4所示。 图10-4 选通与门模块仿真结果 2. 16位锁存器的源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16B IS -16位锁存器 PORT (CLK:IN STD_LOGIC; -锁存信号 CLR:IN STD_LOGIC; -清零信号 D:IN STD_LOGIC_VECTOR (8 DOWNTO 0); -9位数据输入 Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);-16位数据输出END REG16B;ARCHITECTU

11、RE ART OF REG16B IS SIGNAL R16S:STD_LOGIC_VECTOR(15 DOWNTO 0); -16位存放器设置BEGINPROCESS (CLK,CLR) BEGIN IF CLR = 1 THEN R16S= 0000000000000000;-异步复位信号 ELSIF CLKEVENT AND CLK = 1 THEN-时钟到来时,锁存输入值 R16S(6 DOWNTO 0)=R16S(7 DOWNTO 1); -右移低8位 R16S(15 DOWNTO 7)=D; -将输入锁到高9位 END IF; END PROCESS; Q=R16S;END ART

12、;16位锁存器仿真结果如图10-5所示。图10-5 16位锁存器仿真结果 3. 8位右移存放器的源程序DLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; -8位右移存放器ENTITY SREG8B IS PORT (CLK:IN STD_LOGIC; LOAD:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB:OUT STD_LOGIC );END SREG8B;ARCHITECTURE ART OF SREG8B IS SIGNAL REG8: STD_LOGIC_VECTOR(7 DOWNTO 0)

13、; BEGIN PROCESS (CLK,LOAD) IS BEGIN IF CLKEVENT AND CLK= 1 THEN IF LOAD = 1 THEN REG8=DIN; -装载新数据 ELSE REG8(6 DOWNTO 0)=REG8(7 DOWNTO 1);-数据右移 END IF; END IF; END PROCESS; QB= REG8 (0); -输出最低位END ART;8位右移存放器仿真结果如图10-6所示。图10-6 8位右移存放器仿真结果 4. 乘法运算控制器的源程序 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IE

14、EE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARICTL IS -乘法运算控制器 PORT ( CLK:IN STD_LOGIC; START:IN STD_LOGIC; CLKOUT:OUT STD_LOGIC; RSTALL:OUT STD_LOGIC; ARIEND:OUT STD_LOGIC);END ARICTL;ARCHITECTURE ART OF ARICTL IS SIGNAL CNT4B: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN RSTALL=START; PROCESS (CLK,START) BEGIN IF STAR

15、T = 1 THEN CNT4B= 0000; -高电平清零计数器 ELSIF CLKEVENT AND CLK =1 THEN IF CNT4B8 THEN-小于那么计数,等于8说明乘法运算已经结束 CNT4B=CNT4B+1; END IF; END IF; END PROCESS; PROCESS (CLK,CNT4B,START) BEGIN IF START =0 THEN IF CNT4B8 THEN -乘法运算正在进行 CLKOUT =CLK; ARIEND= 0; ELSE CLKOUT = 0; ARIEND= 1;-运算已经结束 END IF; ELSE CLKOUT =C

16、LK; ARIEND= 0; END IF; END PROCESS;END ART;乘法运算控制器的仿真结果如图10-7所示。图10-7 乘法运算控制器的仿真结果 5. 8位乘法器的源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; -8位乘法器顶层设计ENTITY MULTI8X8 IS PORT(CLK:IN STD_LOGIC; START:IN STD_LOGIC;-乘法启动信号,高电平复位与加载,低电平运算 A:IN STD_LOGIC_VECTOR(7 DOWNTO 0); -8位被乘数B:IN STD_LOGIC_VECTOR(7 DOWN

17、TO 0); -8位乘数ARIEND:OUT STD_LOGIC; -乘法运算结束标志位 DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);-16位乘积输出END MULTI8X8;ARCHITECTURE ART OF MULTI8X8 IS COMPONENT ARICTL -待调用的乘法控制器端口定义 PORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC; CLKOUT:OUT STD_LOGIC;RSTALL:OUT STD_LOGIC; ARIEND:OUT STD_LOGIC);END COMPONENT; COMPONENT

18、 ANDARITH -待调用的控制与门端口定义 PORT(ABIN:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR( 7 DOWNTO 0) );END COMPONENT;COMPONENT ADDER8B -待调用的8位加法器端口定义 PORT(C8: IN STD_LOGIC; A8: IN STD_LOGIC_VECTOR(7 DOWNTO 0); B8: IN STD_LOGIC_VECTOR(7 DOWNTO 0); S8: OUT STD_LOGIC_VECTOR(7 DOW

19、NTO 0); CO8: OUT STD_LOGIC);END COMPONENT;COMPONENT SREG8B -待调用的8位右移存放器端口定义 PORT (CLK:IN STD_LOGIC; LOAD:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB:OUT STD_LOGIC );END COMPONENT;COMPONENT REG16B -待调用的16右移存放器端口定义 PORT (CLK:IN STD_LOGIC; -锁存信号 CLR:IN STD_LOGIC; -清零信号 D:IN STD_LOGIC_VECTOR (

20、8 DOWNTO 0); -8位数据输入 Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);END COMPONENT;SIGNAL GNDINT:STD_LOGIC;SIGNAL INTCLK:STD_LOGIC;SIGNAL RSTALL:STD_LOGIC;SIGNAL QB:STD_LOGIC; SIGNAL ANDSD:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL DTBIN:STD_LOGIC_VECTOR(8 DOWNTO 0); SIGNAL DTBOUT:STD_LOGIC_VECTOR(15 DOWNTO 0); BEGIN

21、DOUT=DTBOUT;GNDINTCLK, START=START, CLKOUT=INTCLK, RSTALL=RSTALL, ARIEND=ARIEND); U2:SREG8B PORT MAP(CLK=INTCLK, LOAD=RSTALL, DIN=B, QB=QB);U3:ANDARITH PORT MAP(ABIN=QB,DIN=A,DOUT=ANDSD);U4:ADDER8B PORT MAP(C8=GNDINT,A8=DTBOUT(15 DOWNTO 8), B8=ANDSD, S8=DTBIN(7 DOWNTO 0),CO8 =DTBIN(8);U5:REG16B PORT

22、 MAP(CLK =INTCLK,CLR=RSTALL, D=DTBIN, Q=DTBOUT);END ART;8位乘法器的仿真结果如图10-8所示.图10-8 8位乘法器的仿真结果图10.3 数字滤波器的设计 10.3.1 数字滤波器概述 数字滤波器正在迅速地代替传统的由R、L、C元件和运算放大器组成的模拟滤波器并且日益成为DSP的一种主要处理环节。FPGA也在逐渐取代ASIC和PDSP,用作前端数字信号处理的运算如:FIR滤波、数字滤波器、CORDIC算法或FFT。 数字滤波器是语音与图像处理、模式识别、雷达信号处理、频谱分析等应用中的一种根本的处理部件,它能满足滤波器对幅度和相位特性的严

23、格要求,防止模拟滤波器所无法克服的电压漂移、温度漂移和噪声等问题。 常用的数字滤波器有数字滤波器和数字滤波器。数字滤波器具有精确的线性相位特性,在信号处理方面应用极为广泛,而且可以采用事先设计调试好的数字滤波器来完成设计,例如Altera公司提供的针对Altera系列可编程器件的Megacore,但是需要向Altera公司购置或申请试用版。另外,对于相同的设计指标,滤波器所要求的阶数比滤波器高510倍,本钱较高,而且信号的延迟也较大。滤波器所要求的阶数不仅比滤波器低,而且可以利用模拟滤波器的设计成果,设计工作量相对较小,采用实现的滤波器同样具有多种优越性。滤波器主要有巴特沃斯滤波器、切比雪夫滤

24、波器和椭圆滤波器几种。表10-2给出了以上三种滤波器实现同样性能指标所需的阶数及阻带衰减的比较。 由表10-2可见,椭圆滤波器给出的设计阶数比前两种低,而且频率特性较好,过渡带较窄,但是椭圆滤波器在通带上的非线性相位响应最明显。此处选用椭圆函数滤波器进行设计。 原型阶数阻带衰减/dB巴特沃斯 6 15切比雪夫I型 4 25椭圆函数 3 27表10-2 三种滤波器的性能比较 10.3.2 数字滤波器的原理分析 数字滤波器实际上是一个采用有限精度算法实现的线性非时变离散系统,它的设计步骤为:首先根据实际需要确定其性能指标,再求得系统函数,最后采用有限精度算法实现。 根据需要此处的设计指标为:模拟信

25、号采样频率为2,每周期最少采样20点,即模拟信号的通带边缘频率为100,阻带边缘频率,通带波动不大于通带误差不大于,阻带衰减不小于32。换算为数字域指标为:,32。系统函数的计算采用Matlab软件比较方便,其中有两个现成的函数可以使用:ellipord,函数用来计算数字椭圆滤波器的阶次和3截止频率n,而ellip,函数可以求得直接型椭圆滤波器的各个系数。通过调用以上两个函数计算得到的系统函数为:H (z) = 这是一个四阶系统,Matlab计算出该系统的频率响应如图10-9所示,可见满足设计要求。图 10-9 四阶IIR椭圆滤波器的频率响 如果采用直接型结构实现,需用的乘法器和延迟单元相对较

26、多,而且分子和分母的系数相差较大,需要较多的二进制位数才能实现相应的精度要求。 如果采用二阶节级联实现,一来各根本节的零点、极点可以很方便地单独进行调整,二来可以降低对二进制数位数的要求。给出了一个直接型结构转为级联型结构的文件,利用该函数求得系统函数的级联表达形式为:0.11-0.1041 +0.11 /(1-1.58 +0.6469 )(0.2464-0.426 +0.2464 )/(1-1.7753 +0.892 ) 由上式可以看出,每个二阶节的分子、分母系数差异减少了。值得注意的是,在分配二阶节的增益时,要保证每个节不会发生运算溢出,可以先用软件分析计算来合理安排各节的增益。经过计算,

27、此处采用第一级分配0.,第二级分配0.,可以保证在要求的输入范围,没有数据溢出发生。 10.3.3 数字滤波器系统实现 将第一个二阶节的系统函数表示为差分方程:()0()()2()0()()0()0.0()0().58()() 可以看出,一个二阶节的实现需要五次乘法运算、四次加法运算采用二进制补码将减法运算变为加法运算。两个二阶节共需要十次乘法运算。虽然现在已有上千万门的产品可供选用,但是一般应用时全部采用硬件阵列乘法器毕竟不太适宜,而如果采用串行乘法器进行分时复用,其工作速度也不太理想。 这里采用一个折中的方法实现,即乘加单元的乘法器采用阵列乘法器,而不使用串行乘法器,以提高运算速度。需要注

28、意的是,L的库中乘法运算为无符号数的阵列乘法,所以使用时需要先将两个补码乘数转换为无符号数相乘后,再将乘积转换为补码乘积输出。每个二阶节完成一次运算共需要个时钟周期,而且需采用各自独立的实现两级流水线结构,即每个数据经过两个二阶节输出只需要个时钟周期。 10.3.4 数字滤波器系统原理框图 系统原理框图如图10-10所示,模拟信号经过5510转换为00的二进制数后,送入四阶低通滤波器,处理后输出10位二进制数送7520得到双极性的模拟电压输出。图10-10 数字滤波器系统的原理框图 10.3.5 数字滤波器顶层模块 顶层模块如图10-11所示。主要由一个时序控制模块、两个二阶节模块和构成。模块

29、设计为位二进制补码输入,最高位为补码符号位,次高位8用于防止运算时的溢出。可见该模块实际可以输入位二进制补码数,但5510的输出数据为8位,输入到模块时,将9和8引脚均接地,即输入为正极性电压。图10-11 四阶IIR滤波器的顶层原理图 clr输入端为异步清零端,高电平有效。当输入时钟clk为时,模块产生一个频率为的clkad输出时钟提供给C 5510。输出数据dout为10位二进制补码。和模块构成级联结构。 、模块主要由两个模块构成,一个是数据移位模块,在时钟作用下将差分方程的各、值延迟一个时钟;另一个模块是补码乘加单元,用语言编写,两个乘数先取补后再进行阵列乘法,在时钟控制下完成一次乘加运

30、算,乘积取补后输出,共需要6个时钟。 差分方程的各系数如表10-3所示,采用10位定点纯小数补码表示。 系数 a0 a1 a2 b0 b1 IIR1 01CH 3E6H 01CH 194H 35BH IIR2 03FH 393H 03FH 1C6H 31CH 表10-3 二阶差分方程的系数 10.3.6 数字滤波器的语言程序 另外补码乘加模块中的五个系数定义为常数,以节省硬件资源,并且采用舍入法进行数据处理,尽量提高数据运算精度。程序如下:PORT (CLK_REGBT,CLK_REG: IN STD_LOGIC;X0,X1,X2,Y0,Y1: IN STD_LOGIC_VECTOR(9 DO

31、WNTO 0);Yout: out std_logic_vector(9 downto 0);End smultadd1;Architecture behav of smultadd1 isSIGNAL TAN,TBN,TP2N: STD_LOGIC;SIGNAL CNT: STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL TA,TB,TAA,TBB: STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL TMPA,TMPB: STD_LOGIC_VECTOR(9 DOWNTO 0);SIGNAL TP: STD_LOGIC_VECTOR(18 DOWN

32、TO 0);SIGNAL TPP: STD_LOGIC_VECTOR(22 DOWNTO 0);SIGNAL TMP,P: STD_LOGIC_VECTOR(23 DOWNTO 0);CONSTANT A0: STD_LOGIC_VECTOR(9 DOWNTO 0):= 0000011100;其余常数说明略BEGINTP2N=TAN XOR TBN;- 求补后送阵列乘法器TAA=NOT TA+1 WHEN (TAN=1) ELSE TA;TBB=NOT TB+1 WHEN (TBN=1) ELSE TB;TPP=1 1 1 1 NOT TP + 1 WHEN(TP2N= 1) ELSE TP;

33、TMPN 0);TMPB 0);TA=TMPA(8 DOWNTO 0); TB=TMPB(8 DOWNTO 0);TAN=TMPA9;TBN=TMPB(9);TP=TAA*TBB;P 0) WHEN(TMPB=0000000000) ELSETP2N &TPP;PROCESS (CLK_REG,CLK_REGBT)BEGINIF CLK_REG= 1 THEN CNT=000;YTMP 1);ELSIF (CLK_REGBTEVENT AND CLK_REGBT= 1) THENIF CNT5 THEN CNT=CNT+1;YTMP=YTMP+P;ELSIF (CNT=5) THENIF YT

34、MP(7)= 1 THENYOUT(8 DOWNTO 0)=YTMP (16 DOWNT0 8)+1;YOUT(9)=YTMP(23);ELSE YOUT (8 DOWNTO 0)=YTMP (16 DOWNTO 8);YOUT (9)=YTMP (23);END IF;END IF;END IF;END PROCESS;END BEHAV; 模块的输出数据采用将补码最高符号位直接取反转换为移码后,就可以送到实现双极性信号输出。 10.3.7 数字滤波器系统性能测试 系统性能的测试采用单极性方波周期信号作为输入信号。信号的频率为00,在采样频率为2时,每个周期采样20个点,换算成数字域频率为0,其二次谐波的数字频率为0。输入到5510的信号电压幅度为0,那么经过转换后的输出为00。由于低通滤波器的阻带截止频率选在200,衰减32,由信号理论分析可知,周期方波信号

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论