基于FPGA的音频处理芯片的设计

 

基于FPGA的音频处理芯片的设计

时间: 2009-01-07 10:00:18 来源:维库电子市场 作者:刘虹 黄涛 徐成

1 引言

随着数字技术日益广泛的应用,以现场可编程门阵列FPGA(Field Programmable Gate Array)[1]为代表的ASIC[2]器件得到了迅速的普及和发展,器件的集成度和速度都在高速增长。FPGA既具有门阵列的高逻辑密度和高可靠性,又具有可编程逻辑器件的用户可编程性,可以减少系统的设计和维护的风险,降低产品成本,缩短设计周期。

目前,信号处理技术、通信技术和多媒体技术的迅猛发展都得益于DSP[3]技 术的广泛应用。但是对于便携式和家用的语音系统而言,基于一般的DSP芯片的设计方案并不理想。首先DSP的芯片成本以及开发成本在现阶段仍然是比较高 的,尤其是芯片成本,远远不及大批量ASIC芯片成本之低。其次便携式的设备对体积要求十分苛刻,限制了一部分DSP芯片的使用,而体积正是ASIC芯片 的优点之一。

本文提出了一种基于FPGA的音频处理芯片的硬件电路实现方案。由于对FIR滤波器的算法进行了改良,所以很大程度上减小了芯片的体积和降低了芯片的功耗。

2 算法研究与改良

2.1 普通FIR滤波算法

   N阶FIR滤波器可以用下面的线性卷积表示:[4]

 

x(n)是输入的音频序列,而y(n)是经过滤波后输出的音频序列,h(k)是N阶滤波器的系数。

简单的实现这个算法,需要N+1 次的乘法和N次的加法。所以至少需要一个硬件乘法器和一个定点或者浮点加法器来实现这个功能。由于音频处理芯片只需要做线性卷积,所以我们不需要采用乘法 器的结构。一般来说,由于乘法器庞大的结构,占用了芯片上的大部分面积,消耗用了大部分功率。而不使用乘法器的结构将会节约可观的芯片面积和功耗。为了实 现这种结构,我们需要改良FIR滤波算法。

2.2 改良滤波算法

首先,将滤波的系数h(k)用二进制表示法(POT,Power of Two)表示:

例如:h(k)=0.1172=2-3-2-7-2-16

我们给出7阶滤波器的一组系数,使用POT表示(精度小于104):

h(0) = 0.3761 = 2-1-2-3+2-10+2-13-2-15

h(1) = 0.3083 = 2-2+2-4-2-8-2-12

h(2) = -0.9424*10-1 = -2-3+2-5-2-11

h(3) = 0.6439*10-1 = 2-4+2-9-2-14

h(4) = -0.3308*10-1 = -2-5-2-9+2-13

h(5) = 0.1663*10-1 = 2-6+2-10+2-15

h(6) = -0.4135*10-2 = -2-8-2-12+2-16

h(7) = 0.1877*10-2 = 2-9-2-14-2-16

n=7时滤波器的输出值y如下:

y = (2-1-2-3+2-10+2-13-2-15) * x(7)

+(2-2+2-4-2-8-2-12) * x(6)

+(-2-3+2-5-2-11) * x(5)

+(2-4+2-9-2-14) * x(4)

+(-2-5-2-9+2-13) * x(3)

+(2-6+2-10+2-15) * x(2)

+(-2-8-2-12+2-16) * x(1)

+(2-9-2-14-2-16) * x(0)

很明显,x(n)的系数全部都是2的负k次幂,所以我们可以把具有相同系数的x(n)合并起来。

y(n)=2-1(...2-1(2-1(2-1u1+u2)+u3)+...)+u16)

uj=xj(1)+ xj(2)+……+ xj(rj)

其中1≤j≤16, xj(i)∈{x(n-k)}, 1≤i≤rj

由前面的系数,可以得到:

U1 = x(n-6)-x(n-7); U2 = -x(n)+x(n-5);

U3 = -x(n-3)-x(n-7); U4 = x(n)+x(n-4);

U5 = -x(n-1)-x(n-6); U6 = -x(n-2);

U7 = x(n)+x(n-5); U8 = x(n-3)-x(n-4)+x(n-7);

U5 = -x(n-1)-x(n-6); U10 = 0;

U11 = x(n-5); U12 = x(n-2)-x(n-4);

U13 = x(n-1)+x(n-3); U14 = -x(n)-x(n-2);

U15 = x(n-1); U16 = x(n);

按照这个算法,先求U1的值,然后将结果右移一位,再将结果与U2的值相加,依此类推,即可得到y(n)。我们使用若干次加法和16次移位操作即可完成FIR滤波,算法的复杂度和功耗都大大地降低。

3 音频处理芯片的设计

3.1 结构概述

在整个音频处理芯片的结构中,我们没有采用任何乘法器,取而代之的是一个加法器和移位器。加法器的结果输出到移位器,移位器的输出再反馈到加法器的输入端,循环运算实现滤波器的功能。

考 虑7阶的FIR滤波器,需要对x进行8次采样,所以输入的数据都应该保存在一个8*16的DataRAM之中(16bit的采样精度)。系数 RAM(ProgramRAM)的大小取决于操作的个数,在上面提到的算法中,一共有28个操作,所以ProgramRAM的大小不能小于28,在这里我 们使用了一个32*6的ProgramRAM,以满足算法需要。

考虑到音频处理芯片的可扩展性,我们在音频处理芯片外设置一个EEPROM用来存放系数,当芯片启动的时候,从EEPROM中将数据转存到ProgramRAM中,以适应不同FIR滤波器的系数,极大地增强了音频处理芯片的可编程性。

音频处理芯片的模块主要包括EEPROM, ProgramRAM, DataRAM,串并转换模块,并串转换模块,地址生成模块,主控制器模块。

3.2 寻址方式描述

在系统启动时,附加的EEPROM储存的系统参数值,包括输入信号在DataRAM中的地址值和相应的标志位(32*6bit) ,依次读入ProgramRAM中去。

其中,Zero,Sign,Shift分别为操作控制

Zero表示不加任何操作数

Sign表示加上负的操作数

Shift表示移位操作

而Virtual Address表示操作数的虚拟地址。

NO

 

Zero

Sign

Shift

Virtual Address

1

x(n-6)

0

0

0

001

2

-x(n-7)

0

1

1

000

3

-x(n)

0

1

0

111

4

x(n-5)

0

0

1

010

5

-x(n-3)

0

1

0

100

6

-x(n-7)

0

1

1

000

7

x(n)

0

0

0

111

8

x(n-4)

0

0

1

011

9

-x(n-1)

0

1

0

110

10

-x(n-6)

0

1

1

001

11

-x(n-2)

0

1

1

101

12

x(n)

0

0

0

111

13

x(n-5)

0

0

1

010

14

x(n-3)

0

0

0

100

15

-x(n-4)

0

1

0

011

16

x(n-7)

0

0

1

000

17

-x(n-1)

0

1

0

110

18

-x(n-6)

0

1

1

001

19

0

1

0

1

000

20

x(n-5)

0

0

1

010

21

x(n-2)

0

0

0

101

22

-x(n-4)

0

1

1

011

23

x(n-1)

0

0

0

110

24

x(n-3)

0

0

1

100

25

-x(n)

0

1

0

111

26

-x(n-2)

0

1

1

101

27

x(n-1)

0

0

1

110

28

x(n)

0

0

1

111

 

Base Address总是指向DataRAM中最早写入的值所在的地址,也就是x(n-7)的地址,而Virtual Address其他值相对于x(n-7)的地址,所以可以得出操作数在DataRAM中实际的地址:

Physical Address=BaseAddress+VirtualAddress

y(n)=2-1(...2-1(2-1(2-1u1+u2)+u3)+...)+u16)中的u1为例

U1 = x(n-6) - x(n-7);

参数设置:C1= x(n-6)=000001

C2=-x(n-7)=011000

※最低的三位表示存储地址

※第4位表示移位标志,C2(4)为1表示计算出U1以后要右移得到2-1* U1

※第5位表示符号位,控制加减运算。C1(5)为0表示加, C2(5)为1表示减

※最高位,也就是第6位在Un=0时为1,这里只有C19(6)1

3.3 端口描述

信号/端口

类型

宽度

功能

Clk

输入

1

系统时钟,16MHz

Reset

输入

1

系统重置,异步低有效。

Load

输入

1

系统启动时,将数据从EPROM中转存到ProgramRam

Data_Clk

输入

1

数据时钟, ADC送入

Data_in

输入

1

采样信号的串行输入

FrameSync

输入

1

Date_in信号的帧控制信号

Data_out

输出

1

数据串行输出

CoeffData

输入

6

来自EEPROM的并行数据

CoeffAddress

输出

5

EEPROM地址信号

CoeffEnable

输出

1

EEPROM使能信号

3.4 模块设计

3.4.1 EEPROM [5]

·EEPROM用来存储系统参数

·EEPROM是32*6bit的存储阵列

·EEPROM的输入是Enable,Address(4 downto 0)

·EEPROM的输出是CoeffData(5 downto 0)

·EEPROM的首单元存放了操作的个数;例如,首单元存放"011100"表示一共有28个操作。

3.4.2 ProgramRAM [6]

·ProgramRAM接收EEPROM中的系统参数

·ProgramRAM是32*6bit的存储阵列

·ProgramRAM的输入是Write,Read,DataIn(5 downto 0),Address(4 downto 0)

·ProgramRAM的输出是Zero,Sign,Shift,DataAddr(2 downto 0)

3.4.3串并转换模块[7] (Serial2Parallel)

·Serial2Parallel接收来自ADC的串行数据、数据时钟和帧同步信号

·Serial2Parallel将串行输入信号转化为16bit的并行信号

·Serial2Parallel的输入是DataClk,DataIn,FrameSync

·Serial2Parallel的输出是DataOut(15 downto 0),DataOutSync

3.4.4并串转换输出模块[7] (Parallel2Serial)

Parallel2Serial将并行信号转化为串行信号

Parallel2Serial的输入是DataIn(15 downto 0),DataClk,FrameSync

Parallel2Serial的输出是DataOut

3.4.5主控制器模块(Main Controller)

·主控制器模块是整个设计的核心,它协调控制着其他各个模块的工作

·主控制器模块是根据操作流程图设计的一个状态机

3.4.6 地址生成模块(AddressGen)

·PhysicalAddress实际上是一个加法器,将VirtualAddress与BaseAddress相加产生读地址

·BaseAddress实际上是一个计数器,IncreaseBase信号控制加1,产生写地址

·MUX选择读地址或者是写地址到DataRAM

4 音频处理芯片的仿真

4.1 仿真波形

4.2 仿真结果

通过程序,对一组输入序列进行了仿真结果比较,所获得的结果如表1所示。

1:仿真结果比较

输入

期望值

仿真结果

01d7

00b1

00B1

01ef

014B

014B

02AF

016e

016E

024f

01a1

01A1

0093

00bc

00BD

00e7

0070

0070

0029

005e

005E

ff55

ffb6

FFB6

fe99

ff52

FF52

fec9

ff28

FF28

0025

ffc7

FFC7

00f7

0074

0074

通过表1可以看出音频处理芯片达到了预期的设计目标,效果良好。

可以看到,期望值和仿真结果在最后一位会有±1的误差,这是由于我们采用的移位算法将最后一位移出时不进行四舍五入造成的。经过计算,这种误差不会影响FIR的精度。

5 结束语

本文设计的音频处理芯片主要实现FIR滤波器功能,可以满足较为简单的语音信号处理的需要。用POT系数表示方法来表示系统参数,用一个加法器和一个移位寄存器实现乘法器的功能,这样在面积功耗上就有相当大的优势。设计过程是采用自顶向下的设计方法。最终的仿真结果符合预期的要求

本Altera FPGA开发板主芯片采用Altera公司高性价比FPGA,CycloneIV系列EP4CE6E22C8N芯片。 硬件资源如下: 采用EPCS4SI8N串行配置芯片,同时支持JTAG和AS模式; 采用50MHz有源晶振,提供系统工作时钟; 采用电源芯片1117‐3.3V,提供3.3V电压输出; 采用电源芯片1117‐2.5V,提供PLL电压; 采用电源芯片1117‐1.2V,提供FPGA内核电压; 采用5V直流电源插座和USB供电方式,两种供电方式方便开发板的使用 采用红色电源指示灯及配置指示灯,准确的提示电源运行状况以及配置情况; 采用自恢复保险丝、肖特基二极管的应用,大大提高了电路的可靠性和安全性; 采用自锁按键电源开关; 一个系统复位按键,为用户提供全局复位信息; 一个重新配置按键,为用户提供重新配置信号; 精心设计分配的I/O口,剩余I/O口全部引入扩展接口插座,方便用户进行二次开发; JTAG下载接口,一般用于测试过程中,对应下载的文件是SOF文件,下载速度快,但是掉电程序丢失; AS下载接口,一般用于固化程序,对应下载的是POF文件,下载速度相对较慢,但是掉电程序不丢失,在日常学习的中建议使用JTAG方式; 4位LED发光二极管(做流水灯,跑马灯,闪烁灯等实验)。 4位带冒号数码管(做动态或静态数码管显示,频率计,秒表等实验)。 一路蜂鸣器(用作发声实验)。 5只独立按键(做按键控制,按键消抖等实验)。 VGA接口(做VGA实验)。 usb转串口通讯电路(做和其他系统的串口通讯实验)。 1602LCD字符型液晶接口(做字符显示实验)。 12864LCD液晶接口(做汉字字符 等显示实验)。 PS/2键盘接口(做PS/2键盘实验)。 时钟芯片(数字钟实验)。 温度传感器(温度测试实验)。 红外(做红外遥控试验) SDRAM(可以做SDRAM实验) 附件内容: CycloneIV FPGA开发板原理图PDF档 CycloneIV FPGA开发板测试程序 CycloneIV FPGA开发板使用手册 FPGA系列学习视频教程和芯片手册
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值