您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 西安电子科技大学VHDL大作业“程控滤波器设计”
一、设计功能与要求设计并制作程控滤波器,,其组成如图8.108所示。放大器增益可设置;低通或高通滤波器通带、截止频率等参数可设置。1.放大器输入正弦信号电压振幅为10mV,电压增益为40dB,增益10dB步进可调,通频带为100Hz-40kHz,放大器输出电压无明显失真。2.滤波器可设置为低通滤波器,其-3dB截止频率fc在1kHz-20kHz范围内可调,调节的频率步进为1kHz,2fc处放大器与滤波器的总电压增益不大于30dB,RL=1k。3.滤波器可设置为高通滤波器,其-3dB截止频率fc在1kHz-20kHz范围内可调,调节的频率步进为1kHz,0.5fc处放大器与滤波器的总电压增益不大于30dB,RL=1k。4.电压增益与截止频率的误差均不大于10%,有设置参数显示功能。二.设计思路及框图根据设计要求可画出FPGA控制模块的框图如下图所示。输入时钟分频器键盘输入显示参数控制模块低通滤波器高通滤波器放大器输出1输出2输出3控制信号根据FPGA控制模块的框图可设计出如下图所示的FPGA控制核心模块原理,程序见附录。其中,输入端clk接50MHz晶振电路;输入端接高低电平,00时键盘控制低通滤波器,01时键盘控制高通滤波器,10时键盘控制的程控滤波器;输入端接键盘。输出端start接发光二极管,有键值输出时发光二极管显示;输出端接键盘;输出端接数码管a、b、c、d、e、f、g、h;输出端分别接四个共阴极数码管。KEYBOARD是键盘模块,用于设置放大倍数和截止频率;CONTROL是控制模块,用于控制低通滤波器、高通滤波器和程控放大器是否工作,并传送键盘数据;CONTROL1、CONTROL2、CONTROL3模块分别用于控制低通滤波器、高通滤波器的截止频率和放大器的放大倍数。根据设计要求可画出FPGA控制模块的框图如下图所示。系统各个模块介绍:1分频器模块根据设计要求可画出分频器模块的框图如图所示。输入时钟clk进程1进程2输出clk0输出clk1分频器模块框图该模块将MHz50的晶振进行25000和625分频,得到两个不同频率的时钟信号,分别为HzMHzclk1000250002500,HzMHzclk400006252501,其中时钟0clk用来为键盘模块提供时钟信号,而时钟1clk用来为键盘模块和低通滤波器控制模块、高通滤波器控制模块和放大器控制模块提供时钟信号。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityFENisport(clk:instd_logic;clk1,clk0:outstd_logic);endFEN;architecturearchofFENissignalclk_mid0,clk_mid:std_logic;beginprocess(clk)variabledata:integerrange0to25000;beginifclk'eventandclk='1'thenifdata=25000thendata:=0;clk_mid0=notclk_mid0;elsedata:=data+1;endif;endif;clk0=clk_mid0;endprocess;process(clk)variabledata:integerrange0to625;beginifclk'eventandclk='1'thenifdata=625thendata:=0;clk_mid=notclk_mid;elsedata:=data+1;endif;endif;clk1=clk_mid;endprocess;endarch;仿真结果:3.3.2键盘模块根据设计要求可画出键盘模块的框图如图11所示。输入控制信号时钟信号clk0时钟信号clk1加1或减1显示参数低通和高通滤波器放大器加10或减10键值输出键值图11键盘模块框图在时钟信号0clk和1clk作用下,用行列式键盘来产生所需的键值,用]0..1[contro作为控制信号,当其值为'00'或者'01'时,用键盘C键来加1实现高通滤波器和低通滤波器的截止频率的步进,用D键来实现减1操作;当其值为'10'时,用键盘C键来加10实现放大器增益步进,用D键来实现减10操作。从而实现放大倍数和截止频率的调节。同时将输入的数据用数码管进行显示。信号从]0..7[_pdata端口输出。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityKEYBOARDisport(control:instd_logic_vector(1downto0);control_out:outstd_logic_vector(1downto0);clk_1k:instd_logic;clk_40k:instd_logic;key_lie:instd_logic_vector(3downto0);start:outstd_logic;key_hang:outstd_logic_vector(3downto0);data_p:outstd_logic_vector(7downto0);disp_data:outstd_logic_vector(7downto0);disp_sel:outstd_logic_vector(3downto0));end;architecturearchofKEYBOARDissignalint:std_logic;signalclk_sel:std_logic;signalstart_reg:std_logic;signaldisp_sel_reg:std_logic_vector(3downto0);signaldata_l,data_h:std_logic_vector(3downto0);signaldata_tmp:std_logic_vector(3downto0);signalkey_hang_tmp:std_logic_vector(3downto0);signaldisp_data_reg:std_logic_vector(3downto0);signalkey_code:std_logic_vector(7downto0);signaldata_p_reg:std_logic_vector(7downto0);begincontrol_out=control;key_code=key_hang_tmp&key_lie;data_p=data_p_reg;start=start_reg;key_hang=key_hang_tmp;disp_sel=disp_sel_reg;clk_sel=clk_1kand(notint);process(clk_sel,clk_40k,int)variablestate:integerrange0to3;beginifrising_edge(clk_40k)thenint=not(key_lie(3)andkey_lie(2)andkey_lie(1)andkey_lie(0));endif;ifrising_edge(clk_sel)thencasestateiswhen0=key_hang_tmp=1110;state:=1;when1=key_hang_tmp=1101;state:=2;when2=key_hang_tmp=1011;state:=3;when3=key_hang_tmp=0111;state:=0;endcase;endif;endprocess;process(clk_40k,int)variablestate:integerrange0to3;variablecounter:integerrange0to99999;beginifint='0'thenstate:=0;counter:=0;elsifrising_edge(clk_40k)thencasestateiswhen0=data_tmp=data_l;state:=1;when1=casekey_codeiswhen01110111=data_l=0001;data_h=data_tmp;state:=2;when01111011=data_l=0010;data_h=data_tmp;state:=2;when01111101=data_l=0011;data_h=data_tmp;state:=2;when01111110=data_l=0100;--4data_h=data_tmp;state:=2;when10110111=data_l=0101;data_h=data_tmp;state:=2;when10111011=data_l=0110;data_h=data_tmp;state:=2;when10111101=data_l=0111;--7data_h=data_tmp;state:=2;when10110110=data_l=1000;data_h=data_tmp;state:=2;when11010111=data_l=1001;data_h=data_tmp;state:=2;when11011011=data_l=0000;--0data_h=data_tmp;state:=2;when11100111=--Cifcontrol=10then--+10ifdata_h=1001thendata_h=1001;elsedata_h=data_h+1;endif;elsifcontrol=00orcontrol=01then--+1ifdata_h=1001thenifdata_l=1001thendata_h=1001;data_l=1001;elsedata_l=data_l+1;endif;elsifdata_l=1001thendata_l=1000;data_h=data_h+1;elsedata_l=data_l+1;data_h=data_h;endif;endif;state:=2;when11101011=--Difcontrol=10then---10ifdata_h=0000thendata_h=0000;elsedata_h=data_h-1;endif;elsifcontrol=00orcontrol=01then---1ifdata_l=0000anddata_h=0000thendata_l=0000;data_h=0000;elsifdata_l=0000thendata_l=1001;data_h=data_h-1;elsedata_l=data_l-1;data_h=data_h;endif;endif;state:=2;when11101101=--Edata_l=0000;data_l=0000;state:=2;when11101110=--Fdata_l=data_l;data_h=data_h;data_p_reg=data_h&data_l;start_reg='1';state:=2;whenothers=state:=2;endcase;when2=ifcounter=99999thencounter:=0;state:=3;elsecounter:=counter+1;state:=2;endif;when3=start_reg='0';state:=3;endcase;endif;endprocess;process(clk_1k,data_l,da
本文标题:西安电子科技大学VHDL大作业“程控滤波器设计”
链接地址:https://www.777doc.com/doc-2036448 .html