1、 FPGA课程设计题 目:基于FPGA的多通道采样系统设计院 (系):电气工程及其自动化学院 专 业:电子信息工程12-01 20 摘 要本论文介绍了基于FPGA的多通道采样系统的设计。用FPGA设计一个多通道采样控制器,利用VHDL语言设计有限状态机来实现对AD7892的控制。由于FPGA器件的特性是可以实现高速工作,为此模拟信号选用音频信号。由于音频信号的频率是20Hz-20KHz,这样就对AD转换的速率有很高的要求.因为FPGA的功能很强大,所以我们把系统的许多功能都集成到FPGA器件中,例如AD通道选择部分,串并输出控制模块,这样使得整个系统的外围电路简单、系统的稳定性强。FPGA的配
2、置模式选用被动串行模式,这样就增强了系统的可扩展性。输出模式可选择性使得系统的应用相当广泛,串行输出可以用于通信信号的采集,方便调制后发射到远程接受端,远程接收端对采集的数据进行解调;而并行输出模式则可以通过高速存储器将采集的信号放到微机或者其他的处理器上,根据采集的数据进行相应的控制。此系统的缺点是由于FPGA器件配置是基于SRAM查找表单元,编程的信息是保持在SRAM中,但SRAM在掉电后编程信息立即丢失,所以每次系统上电都需要重新配置芯片,这对在野外作业的工作人员很不方便,解决的方法是专用的配置器件来配置FPGA,在每次系统上电的时候会自动把编程信息配置到FPGA芯片中。但设计中没有采用
3、到这种配置方案主要是考虑到专用配置器件的价格问题。本文开始介绍了多通道系统的组成部分,然后分别介绍了各个组成部分的原理和设计方法,其中重点介绍了FPGA软件设计部分。还对当前十分流行的基于FPGA的设计技术作了简单的阐述,最后对系统的调试和应用作了简短的说明。关键词:音频放大;滤波器;FPGA;VHDL;AD7892;有限状态机;目 录摘要 2引言31 题目来源32 研究意义33 多通道采样系统的组成34 方案设计45 单元电路的设计45.1音频放大、滤波部分4(1)音频放大部分 4(2)有源滤波器的设计 45.2 AD采样电路55.3 FPGA控制部分5(1)通道选择模块 6(2)延时模块的
4、设计 6(3)串并输出选择控制 75.4 FPGA的硬件设计 86 软件介绍 87 整机调试87.1 硬件电路的调试步骤8(1)音频放大部分调试 8(2)滤波部分调试 8(3)FPGA硬件电路调试 9(4)AD采样模块调试 9(5) 联机调试98 结论9参考文献10附录11引言FPGA(Field-Programmable Gate Array 现场可编程门阵列)是近年来广泛应用的超大规模、超高速的可编程逻辑器件,由于其具有高集成度(单片集成的系统门数达上千万门)、高速(200MHz以上)、在线系统可编程等优点,为数字系统的设计带来了突破性变革,大大推动了数字系统设计的单片化、自动化,提高了单
5、片数字系统的设计周期、设计灵活性和可靠性。在超高速信号处理和实时测控方面有非常广泛的应用。硬件描述语言HDL是一种用形式化方法描述数字电路和系统的语言。VHDL是硬件描述语言的几种代表性语言的一种。VHDL(Very High Speed Integrated Circuit Hardware Description Language 即超高速集成电路硬件描述语言)主要用于描述数字系统的结构、行为、功能和接口,与其它的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了它成为系统设计领域最佳的硬件描述语言。用VHDL设计的程序,通过综合工具产生网表文件,下载到目标器件,从而生成硬件电路
6、。VHDL还是一种仿真语言,包括行为仿真、功能仿真和时序仿真,给系统设计各个阶段的可行性做出了决策。1 题目来源课程设计库2 研究意义数据采集在现代工业生产以及科学研究中的重要地位日益突出,并且实时高速数据采集的要求也不断提高,在信号测量、图像处理,音频信号处理等一些高速、高精度的测量中,都需要进行高速数据采集。本次设计就是用FPGA实现采样系统,来实现音频信号的数据采集。3 多通道采样系统的组成本系统硬件电路包括FPGA设计的多通道采样控制器和相应的通道选择电路,A/D转换电路,由于采样音频信号,所以需要设计音频的放大和滤波电路。系统组成部分如图2.1所示:通道选择部分音频放大、滤波部分信号
7、1 模拟信号输入 信号2AD转换部分 控制 FPGA控制的通道选择和AD控制部分信号7 控制采样 信号8 数字信号存储输出图2.1 多通道系统的组成4 方案设计用FPGA实现一个3位8进制的计数器,记数脉冲是FPGA锁存AD转换数据的锁存信号,计数器的输出作为数据开关CD4051的地址。用有限状态机来实现对AD7892的控制,这样电路实现比较简单,而且AD7892的采样速率可以达到500KHz,可以实现8个通道同时8路音频信号采集。同时采用FIFO模块,让数字数据先存到队列中,一边往队列中写数据,一边从队列中读数据,这样就对数字数据起了一个高速缓存的作用,更加快了整个系统的运行速度。5 单元电
8、路的设计系统可以分为4个大部分,分别是音频放大、滤波部分,FPGA控制部分,AD采样电路,FPGA硬件电路的设计。其中以FPGA控制部分为主体部分,它涉及到AD采样控制,通道选择控制,串并输出模式选择模块,延时模块以及FIFO模块介绍。这些模块的实现是系统实现的关键。下面分别对系统的这些单元电路做详细的阐述。5.1 音频放大、滤波部分(1)音频放大部分音源采用普通CD输出的音频信号,它产生输出的信号的幅度约有300mV左右,根据设计AD7892的输入电压是10V,选择放大器的放大倍数在10-30之间,通过一个精密可调电阻来调节放大倍数。音频放大芯片NE5532特性是双运放、宽频带、低噪声、转换
9、速率大、电源范围广。(2)有源滤波器的设计在一个实际的电子系统中,输入信号往往因受干扰等原因而含有一些不必要的成份,应设法将干扰衰减到足够小的程度。在其他一些情况,我们需要的信号和干扰信号混在一起,如果这两个信号在频率成分上有较大的差别,就可以用滤波的方法将所需要的信号滤出。为了解决上述问题,可采用滤波电路。滤波器包括电抗性元件L、C构成的无源滤波器、由集成运算放大器组成的有源滤波器、以及晶体滤波器等。本次设计需要的通带频率范围是20Hz-20KHz,如果用有源带通滤波器来实现,考虑到该带通滤波器的上下截止频率之比20000/20=1000,大于一个倍频程,为一个宽带滤波器,所以采用一个低通滤
10、波器和一个高通滤波器级联来实现带通滤波。有源带通滤波电路分成两个部分,高通部分和低通部分,图4.2是20HZ的高通滤波器,图5.3是20KHZ的低通滤波器。图5.2 低通滤波器电路图图5.3 高通滤波器电路图音频信号经过音频放大电路放大后就进入了上图的电路。经过20HZ-20KHZ的带通滤波电路进行滤波。5.2 AD采样电路由于人的耳朵能识别的音频的频率范围是20Hz-20KHz,根据奈魁斯特(NYQUIST)采样定理知道,要使采样后的数字信号能恢复成模拟信号,采样的频率必须是模拟信号的频率的两倍,即本次采样系统的采样频率最低要设计在40KHz,而一般CD格式的音频信号的采样频率是44.1KH
11、z,由于是8路通道的采样,所以AD芯片的最低采样频率应该是44.1KHz8=352.8KHz,所以选择采样频率为500KHz的AD7892。这样我们每个通道的采样频率就是500KHz/8=62.5KHz。5.3 FPGA控制部分(1)通道选择模块通道选择部分是一个二进制模8的计数器,计数器的时钟是AD数字信号的锁存信号,每次锁存数据后,计数器就会一次进行加一操作,CD4051选择下一个通道的音频信号进行采集。在MAX+Plus中用VHDL语言设计图形如下图5.8所示:图5.8 通道选择部分通过CNT0到CNT2来选择相应的通道,CD4051的输出就是最后要进行AD采样的音频信号。例如:若CNT
12、0CNT1CNT2=“000”,则选择第一通道音频信号进行AD采样。这个部分实现的重点是对数字锁存信号记数,计数器的输出作为CD4051的通道选择地址。通道选择部分的主体程序如下:二进制模8计数器signal q:std_logic_vector(2 downto 0); begin counter:process(clk) begin if(clkevent and clk=1) then if q=111 then q=000; else q=q+1; end if;end if;cnt=q; end process;通道选择模块的仿真图如图5.9所示:图5.9 通道模块仿真图(2)延时模
13、块的设计在采样控制部分的状态机中也加入了输出数据编码部分,因为是循环采集8路的模拟信号,而输出为一路输出,这样就需要对输出信号进行标志,方法就是把12位数据转换为16位数据,第一位是0,第二位到第四位是标志位,标志是哪一通道数字信号,如果是串行输出的时候可以让接受方知道是第几通道的数据。又因为数字信号数据锁存信号是比通道选择信号早一个周期,所以要加一个延时模块,这样就可以实现每次锁存了通道的标志位和采样的数据。通过程序来实现对通道选择信号的延时。如果当前选择第3个通道采样,那么通道选择信号就是“011”,在这个通道信号采集完毕后锁存信号就会使计数器进行加1操作,这样通道选择信号就是“100”,
14、而这个时候锁存的数据需要“011”,所以将标志位信号通过“100”的延时一个时钟周期变成“011”即可。VHDL完成可以胜任。延时模块程序主体部分process(in1,in2,in3)begincomin comout comout comout comout comout comout comout comoutcomout=ZZZ; end case;out1=comout(0);out2=comout(1);out3=comout(2); end process;(3)串并输出选择控制从AD控制模块输出的数据是并行16位数据。串行输出的原理是:通过一个16选1的数据选择器连续选择输出的
15、并行16位数据,数据选择器的选择信号是一个对系统时钟记数的二进制模16的计数器输出,这样就可以实现将并行16位数据转换为串行数据。通过外部输入信号P/S可以实现是串行输出还是并行输出,如果P/S是低电平,就选通16选1的选择器,禁止16个与门的输出,此时为串行输出;如果P/S为高电平,则禁止16选1的选择器,同时打开16个与门,此时为并行16位输出。输出模式可选择性使得系统的应用相当广泛,串行输出可以用于通信信号的采集,方便调制后发射到远程接受端,远程接收端对采集的数据进行解调;而并行输出模式则可以通过高速存储器将采集的信号放到微机或者其他的处理器上,根据采集的数据进行相应的控制。5.4 FP
16、GA的硬件设计本次设计选用的FPGA芯片是ALTERA公司的ACEX1K系列的EP1K30TC144-3。由于它的高密度和易于在设计中实现复杂宏函数和存储器,因此可以把一个子系统集成在单一芯片上,EP1K30包括一个嵌入式阵列,这为设计人员提供了有效的嵌入式门阵列和灵活的可编程逻辑。嵌入式阵列是由一系列嵌入式阵列块(EAB)组成的,它能够用来实现各种存储器和复杂逻辑功能;该器件也提供多电压I/O接口操作。它允许器件桥架在不同电压工作的系统中。比如本次系统设计器件的I/O输出就是2.5V,这样不但使FPGA芯片工作安全,也可以让AD7892能工作安全状态。6 软件介绍在实验中主要使用了MAX+P
17、lus、EWB、以及Protel99se三种软件,其中,Max Plus主要完成对FPGA芯片的编程,仿真,芯片引脚锁定以及编程在线配置等操作,EWB主要用于对放大、滤波电路作分析与设计,并以分析为主,尤其是EWB能提供一个虚拟的实验室,可以对电路和系统进行十分逼真的模拟;Protel99se则是整个电路设计PCB的重要工具。现分别对这三种软件进行介绍,其中重点介绍使用MAX+Plus的常用基本设计方法。7 整机调试7.1硬件电路的调试步骤在硬件电路中用到了音频放大、滤波电路,电源稳压电路,AD采样电路,FPGA控制等主要部分,由于电路连线较多而且复杂,采用的方法是分块调试,这样比较容易发现问
18、题和解决问题。这种硬件调试方法在实际应用是比较普遍的。在进行硬件调试之前,首先要检查电路板,看看电路板上的线路是否有短路、虚焊或者是断路的情况,如果有则要修正它,如果没有就可以进行各个模块的调试。(1)音频放大部分调试对音频放大部分调试需要一个函数信号发生源,一个示波器,一个万用表和提供放大器电源的直流稳压电源。首先,给NE5532加上12V的电源,使之工作起来,用万用表检查NE5532除了正负电源引脚的电压,电压接近为零,这表明放大器正常工作,在输入端输入频率为1KHz,幅度为300mV的正弦波,用示波器观察输出端的波形,可以看到输出幅度为5.3V的正弦波,正弦波中包含了很多高频干扰,这是由
19、于周围的干扰在放大器的放大作用,使得干扰成为一个明显波形出现在示波器上,通过滤波器后可以滤掉这些干扰。调节可调电阻,可以观察到输出波形的幅度变化。接上音源,可以看到示波器有不规则波形输出,增大音源的音量可以看到输出波形的幅度也随之增大,只是这不规则波形中混有很多的干扰,通过滤波器后可以滤掉这些干扰。这表明音频放大部分工作正常,达到设计要求。(2)滤波部分调试对滤波部分调试需要一个函数信号发生源,一个示波器,一个万用表和提供放大器电源的直流稳压电源。首先,给LM324加上12V的电源,使之工作起来,用万用表检查LM324除了正负电源引脚的电压,电压接近为零,这表明滤波器的放大器正常工作。输入1K
20、HZ,300mv的正弦波信号,经过音频放大电路放大后得到的1KHZ,5.3V的正弦波信号从输入点进入滤波电路。调试过程中发现示波器中的波形一直有一定高频和低频的干扰,检查电路没有错误,最后判断是电源的干扰,在电源输入端加上一个大电容和一个小电容分别滤掉电源的高频干扰和低频干扰,再调试可以看到完整的正弦波波形。减少输入信号的频率到10HZ,可以看到当频率减到20HZ的时候,输出信号的幅度逐渐变小,这表明高通滤波部分已实现其功能,滤掉小于20HZ的低频干扰;然后慢慢增加输入信号的频率到30KZ左右,可以看当频率大于18KHZ的时候,输出信号的幅度开始减小,达到20KHZ,输出信号幅度衰减到通带内的
21、幅度的75%,大于20KZ后,输出幅度小于通带内幅度一半,达到衰减的目的,这表明低通滤波器也实现了其功能。整个滤波器部分调试完毕,达到设计要求。(3)FPGA硬件电路调试这部分调试是整个调试的主体,包括对有源晶振的调试,配置电路的调试。(4)AD采样模块调试将实现AD采样的状态机程序单独写成一个文件,选择器件和锁定引脚后,配置到FPGA芯片中,模拟信号采用+5V电源,在调试过程中,发现AD采样在工作若干次后,就会出现“死机”现象,分析知道,在采样过程中会出现控制AD开始采样的CONV信号丢失现象,导致AD无限期等待采样开始信号CONV,而状态机又无限期等待采样结束信号EOC,这样就使得状态机进
22、入“死机”状态。解决的方法是加入一段“看门狗”程序,当状态机进入死机状态后,用一个变量判断状态机是否等待超过一个采样周期,如果超过,就复位状态机,使状态机重新进入开始状态。这样就可以解决状态机的“死机”现象了。加入“看门狗”程序后,通过示波器可以看到12位数据的任何一位的电平信号。这样AD采样部分就调试完毕。(5)联机调试联机调试需要实验工具有:示波器,稳压电源,EDA实验台,PC机,ByteBlaster(MV)下载电缆。按照图2.1中各模块连接顺序连接好整个采样系统,分别接上12V的放大器工作电压,5V的AD采样电压和2.5V的FPGA芯片工作电压,把串并选择端口选择串行输出,也即将短路帽
23、短路,这样输入到器件是低电平。将示波器连接到串行输出口,用EDA实验台上的下载电路连接PC机上的打印并行口和硬件电路板上的下载口,可以看到示波器有高低的电平输出。将串并选择端口选为并行输出,也即将短路帽断开,这样输入到器件是高电平,任意选择一位连接到示波器,也可以看到有高低电平输出。通过调试可以证实整个高速多通道采样系统基本实现,联机调试完毕。8 结论 本次设计采用FPGA实现采样系统,从而系统具有高速、稳定、低功耗等特点,音频模拟信号经放大器NE5532放大后,经过8路选择后,进入滤波器进行滤波,滤掉高频干扰信号和低频干扰信号的干扰,然后进入AD7892进行AD采样,采样后的12位数据通过一
24、个FIFO队列存储,最后从FIFO中读出数字信号,在串并输出模式的选择下在示波器上显示出来。本系统基本达到了预期的设计,但还有一些不足之处,例如:在对FIFO队列的读写操作中是通过状态机来实现的,但这样FIFO队列就只起了一个缓存的作用。由于本人水平有限,无法实现其存储后再进行读写的操作,恳请各位老师多多批评指教。多通道采样系统应用十分广泛,特别是在控制系统上的应用,比如说温度,湿度等,通过传感器把模拟信号采集到微机或者控制部分,根据采集的数据来对系统进行相应的控制,同时基于FPGA的多通道采样系统的实现,为一些特殊领域的实时测控提供了一个简单、灵活、可靠的方案.参考文献1 张亦华.数字电路E
25、DA入门VHDL程序实例集M.北京:北京邮电大学出版社,2003.32 李洋.EDA技术实用教程M.北京:机械工业出版社,2004.73 肖蕙蕙.傅晓林.数字电子技术基础M.重庆:重庆大学出版社,2002.104 张凯.VHDL实例剖析M.北京:国防工业出版社,2004.15 姜立东.VHDL语言程序设计及应用(第2版)M.北京:北京邮电大学出版社,2004.6附 录1 各模块程序(1)通道选择模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count is port(clk:i
26、n std_logic; -cnt:out integer range 0 to 7; cnt : out std_logic_vector(2 downto 0); -oc : out std_logic);end count;architecture archcount of count issignal q:std_logic_vector(2 downto 0); begin counter:process(clk) begin if(clkevent and clk=1) then if q=111 then q=000;-oc=1; else q=q+1;-oc=0; end if
27、;end if;cnt=q; end process;end archcount;(2)延时模块library ieee;use ieee.std_logic_1164.all;entity delay isport(in1,in2,in3:in std_logic; out1,out2,out3:out std_logic);end delay;architecture behav of delay issignal comin:std_logic_vector(2 downto 0);signal comout:std_logic_vector(2 downto 0);beginproce
28、ss(in1,in2,in3)begincomin comout comout comout comout comout comout comout comoutcomout=ZZZ; end case;out1=comout(0);out2=comout(1);out3=comout(2); end process;end behav;(3)AD采样控制模块library ieee;use ieee.std_logic_1164.all;entity adcontrol isport(D : in std_logic_vector(11 downto 0); clk,eoc : in std
29、_logic; b0,b1,b2:in std_logic; wr_en,rd_en : out std_logic; lock0,conv,rd,cs: out std_logic; Q : out std_logic_vector(15 downto 0);end entity;architecture behav of adcontrol istype states is(st1,st2,st3,st4,st5,st6,st7,st8);signal current_state,next_state:states:=st1;signal regl1 : std_logic_vector(
30、11 downto 0);signal regl : std_logic_vector(15 downto 0);signal lock : std_logic;beginlock0 next_state next_state next_state if (eoc=1) then next_state = st4; else next_state if (eoc=0) then next_state = st5; else next_state next_state next_state next_state next_state conv=1;cs=1;rd=1;lock=0;wr_en=0
31、;rd_en conv=0;cs=1;rd=1;lock=0;wr_en=0;rd_en conv=1;cs=1;rd=1;lock=0;wr_en=0;rd_en conv=1;cs=1;rd=1;lock=0;wr_en=0;rd_en conv=1;cs=1;rd=1;lock=0; wr_en=0;rd_en conv=1;cs=0;rd=0;lock=1; wr_en=1;rd_en conv=1;cs=1;rd=1;lock=0; wr_en=0;rd_en conv=1;cs=1;rd=1;lock=0;wr_en=0;rd_en conv=1;cs=1;rd=1;lock=0;
32、wr_en=0;rd_en=0; end case; end process com2;com3:process(clk)variable dog_count:integer range 0 to 64;variable com3_num_count:integer range 0 to 16553500; begin if(clkevent and clk=1) then current_state=next_state; -看门狗 if(current_state=st4) thenm_watchdog = s0; end if; if(current_state=st6) thenm_w
33、atchdog 40) then current_state=st1; dog_count:=0; end if;end if; -看门狗 end if; end process com3;latch1:process(lock) begin if lock=1 and lockevent then regl1=D; end if; end process latch1;regl=0&b2&b1&b0®l1;Q=regl1;end behav;(4)串并转换模块部分程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_
34、unsigned.all;entity counter4 is port(clk:in std_logic; cnt4 : out std_logic_vector(3 downto 0) );end counter4;architecture archcount of counter4 issignal q:std_logic_vector(3 downto 0); begin counter:process(clk) begin if(clkevent and clk=1) then if q=1111 then q=0000; else q=q+1; end if;end if;cnt4=q; end process;end archcount;1 FPGA顶层设计图3 电路设计图(1)音频放大(2)滤波器(3)AD7892电路
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100