基于FPGA的直接数字频率合成器设计_第1页
基于FPGA的直接数字频率合成器设计_第2页
基于FPGA的直接数字频率合成器设计_第3页
基于FPGA的直接数字频率合成器设计_第4页
基于FPGA的直接数字频率合成器设计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、 JIANGSU UNIVERSITY OF TECHNOLOGY FPGA技术实验报告 基于FPGA的直接数字频率合成器设计学 院: 电气信息工程学院 专 业: 电子信息工程 班 级: 姓 名: 学 号: 指导教师: 戴霞娟、陈海忠 时 间: 2015年9月17日 25 目 录1.功能要求22. 方案设计及原理框图22.1 方案设计22.2 原理框图32.2.1输入电路32.2.2FPGA电路32.2.3D/A转换电路43. 硬件电路设计及原理分析43.1 硬件电路图43.2 原理分析53.3 DAC0832转换器53.4 LM358芯片54.程序模块设计、仿真结果及分析64.1顶层模块64

2、.2分频模块64.3 时钟模块104.4正弦波产生模块114.5三角波产生模块134.6方波产生模块154.7锯齿波产生模块174.8波形选择模块195. 软硬件调试205.1软件调试225.2硬件调试226.调试结果说明257.心得体会258.参考文献25附 录261.功能要求 通过本课题训练,使学生掌握使用FPGA实现频率合成的方法。要求学生根据正弦波形发生器的设计实例,举一反三,设计多功能波形发生器。该波形发生器能产生正弦波、方波、三角波、锯齿波和由用户编辑的特定形状波形,并且幅度、频率可调。具体要求如下:基本要求:(1)具有产生正弦波、方波、三角波、锯齿波4种周期性波形的功能。(2)输

3、出波形的频率范围为100HZ200kHZ;至少可以输出8种频率的波形。(3)输出波形幅度不大于5V(峰-峰值),且幅度可调。扩展要求:(1) 在频率范围为100HZ200kHZ内,频率步进间隔100HZ。(2) 输出波形幅度范围05V(峰-峰值),可按步进0.1V(峰-峰值)调整。(3) 用LCD1602显示输出波形的类型、重复频率(周期)和幅度。(4) 用键盘输入编辑生成上述4种波形(同周期)的线性组合波形。(5) 用键盘和其他输入装置产生任意波形。(6) 具有波形存储功能。2. 方案设计及原理框图2.1方案设计 利用FPGA来完成设计,FPGA编程灵活,可以实现三角波、方波、锯齿波和正弦波

4、的数字化处理,将一个周期内的采样点存储起来,生成频率可调的正弦波、方波、锯齿波或者三角波,再通过D/A转换和滤波电路便可得到模拟波形。利用该方法,编程简单,实现灵活。2.2原理框图 数字信号发生器系统主要由输入部分、FPGA部分、D/A转换部分、频率调节和波形转换部分组成。原理框图如下图1:调频3分频器FPGA部分系 统 控 制 器时钟复位波形调频1调频2正弦波三角波方波锯齿波波 形 DA 转 换滤波输出 图1:多功能波形信号发生器原理框图2.2.1输入部分输入部分包含以下功能按键:时钟、复位、波形、调频1、调频2和调频3。(1)时钟:标准的50MHZ时钟输入。(2)复位:低电平复位。(3)波

5、形:为波形输出选择开关,可以选择单波形的输出。(4)调频1,2,3:可以改变正弦波、三角波、方波和锯齿波的频率,总共可以输出8种不同频率。2.2.2FPGA部分 FPGA是整个系统的核心,包括系统控制器、波形数据生成器、加法器、运算/译码、分频器等电路。各部分具体功能如下:系统控制器:控制系统的每个部分状态之间的协调。 分频:分频系数有的固定不变,也有可改变的。 正弦波:通过循环不断地从RAM中依次读取正弦波一个周期在时域上1024个采样点的波形数据送入波形DAC,从而产生正弦波。正弦波的频率取决于读取数据的速度。 三角波:三角波波形是对称的,每边呈线性变化,所以可以根据地址数据做简单运算,就

6、可以得到三角波。 锯齿波:产生单调性锯齿波,因此把地址数据进行左移2位,结果送波形DAC就可。 方波:方波产生有1024个采样点组成,1024个采样点的数据只有“低电平”和“高电平”2种状态。2.2.3波形D/A转换部分 采用具有8位分辨率的D/A转换集成芯片DAC0832作为多种波形发生器的数模转换器。由于多种波形发生器制使用一路D/A转换,因而DAC0832可连续接成单缓冲器方式。另外,因DAC0832是一种电流输出型D/A转换器,要获得模拟电压输出时,需外接运放来实现电流转换为电压。 由于在实际使用中输出波形不仅需要单极性的(0+5V或-50V) 有时还需要双极性的(±5V),

7、因而可用两组运算放大器作为模拟电压输出电路,运放可选用LM358,其片内集成了两个运算放大器。3. 硬件电路设计及原理分析3.1硬件电路图 图2:波形信号发生器硬件电路图3.2原理分析 本设计的工作原理为将要产生的波形数据存入波形存储器 ,然后在参考时钟的作用下 ,对输入的频率数据进行累加 ,并且将累加器的输出一部分作为读取波形存储器的地址 ,将读出的波形数据经D/A转换为相应的模拟电压信号。本研究的重点就是用VHDL来实现DDS的功能 ,能够达到高精度的输出 ,同时标准波形数据生成存放在 ROM 中 ,可以简化运算过程 ,提高运算速度 ,加快反应时间。3.3 DAC0832转换器 DAC08

8、32是双列直插式8位D/A转换器,在电路中DAC0832被接成单缓冲器方式。它的ILE,VCC,8脚与+5V相连,CS,XFER,WR2,WR1,3脚,10脚与GND相连,WR1与CP信号相连。这样DAC0832的8位DAC寄存器始终处于导通状态,因此当CP变成低电平时,数据线上的数据便可直接通过8位DAC寄存器,并有其8位D/A转换器进行转换。 图3: DAC0832芯片引脚图3.4 LM358芯片 LM358是常用的双运,LM358里面包括有两个高增益、独立的、内部频率补偿的双运放,适用于电压范围很宽的单电源,而且也适用于双电源工作方式,它的应用范围包括传感放大器、直流增益模块和其他所有可

9、用单电源供电的使用运放的地方使用。 图4: LM358芯片引脚图4. 程序模块设计、仿真结果分析 波形发生器可以由顶层模块、分频模块、时钟模块、正弦波产生模块、三角波产生模块、方波产生模块和输出波形选择模块组成。4.1顶层模块 顶层文件将已经设计的各个模块联系在一起成为一个整体,实验时使用Quartus9.0编写VHDL程序实现顶层文件设计。顶层文件仿真图如下5: 图5: 顶层文件仿真图4.2分频模块 根据DAC0832 输出控制时序,利用接口电路图,DAC0832是8位的D/A转换器,转换周期为1s,又因为FPGA的系统时钟为50MHz,必须对其进行分频处理,实验使用100分频,实验时使用Q

10、uartus9.0编写VHDL程序生成时钟分频器。VHDL程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY wxm_CLK ISPORT(CLK:IN STD_LOGIC;EN,EN1,EN2:IN STD_LOGIC;CLKOUT:OUT STD_LOGIC);END;ARCHITECTURE BEHAVE OF wxm_CLK ISSIGNAL CNT:STD_LOGIC_VECTOR(19 DOWNTO 0);SIGNAL EN3,EN4,EN5: STD_LOGIC;SI

11、GNAL EN6:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINEN6<=EN3&EN4&EN5;PROCESS(EN)BEGINIF EN'EVENT AND EN='0' THEN IF EN3 ='0' THEN EN3<='1'ELSEEN3<='0'END IF;END IF;END PROCESS;PROCESS(EN1)BEGINIF EN1'EVENT AND EN1='0' THEN IF EN4 ='0' T

12、HEN EN4<='1'ELSEEN4<='0'END IF;END IF;END PROCESS;PROCESS(EN2)BEGINIF EN2'EVENT AND EN2='0' THEN IF EN5 ='0' THEN EN5<='1'ELSEEN5<='0'END IF;END IF;END PROCESS;PROCESS(CLK,EN6)BEGINIF CLK'EVENT AND CLK='1' AND EN6="000&

13、quot; THENIF CNT>4 THENCNT<=(OTHERS=>'0');CLKOUT<='0'ELSIF CNT>2 THENCLKOUT<='1'CNT<=CNT+1;ELSECNT<=CNT+1;END IF;ELSIF CLK'EVENT AND CLK='1' AND EN6="001" THENIF CNT>8 THENCNT<=(OTHERS=>'0');CLKOUT<='0'

14、ELSIF CNT>4 THENCLKOUT<='1'CNT<=CNT+1;ELSECNT<=CNT+1;END IF;ELSIF CLK'EVENT AND CLK='1' AND EN6="010" THENIF CNT>16 THENCNT<=(OTHERS=>'0');CLKOUT<='0'ELSIF CNT>8 THENCLKOUT<='1'CNT<=CNT+1;ELSECNT<=CNT+1;END IF;

15、ELSIF CLK'EVENT AND CLK='1' AND EN6="011" THENIF CNT>30 THENCNT<=(OTHERS=>'0');CLKOUT<='0'ELSIF CNT>15 THENCLKOUT<='1'CNT<=CNT+1;ELSECNT<=CNT+1;END IF;ELSIF CLK'EVENT AND CLK='1' AND EN6="100" THENIF CNT>6

16、2 THENCNT<=(OTHERS=>'0');CLKOUT<='0'ELSIF CNT>31 THENCLKOUT<='1'CNT<=CNT+1;ELSECNT<=CNT+1;END IF;ELSIF CLK'EVENT AND CLK='1' AND EN6="101" THENIF CNT>124 THENCNT<=(OTHERS=>'0');CLKOUT<='0'ELSIF CNT>62 T

17、HENCLKOUT<='1'CNT<=CNT+1;ELSECNT<=CNT+1;END IF;ELSIF CLK'EVENT AND CLK='1' AND EN6="110" THENIF CNT>250 THENCNT<=(OTHERS=>'0');CLKOUT<='0'ELSIF CNT>125 THENCLKOUT<='1'CNT<=CNT+1;ELSECNT<=CNT+1;END IF;ELSIF CLK'

18、;EVENT AND CLK='1' AND EN6="111" THENIF CNT>500 THENCNT<=(OTHERS=>'0');CLKOUT<='0'ELSIF CNT>250 THENCLKOUT<='1'CNT<=CNT+1;ELSECNT<=CNT+1;END IF;END IF;END PROCESS;END;4.3时钟模块 图6VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.S

19、TD_LOGIC_UNSIGNED.ALL;ENTITY CNT1024 ISPORT(CLK:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(9 DOWNTO 0);END;ARCHITECTURE BHV OF CNT1024 ISSIGNAL Q1:STD_LOGIC_VECTOR(9 DOWNTO 0);BEGINPROCESS(CLK)BEGIN IF CLK'EVENT AND CLK='1' THEN Q1<=Q1+1;END IF;END PROCESS;Q<=Q1;END;4.4正弦波产生模块该模块输入信号由时钟(

20、clk)和复位信号(reset)构成,当信号发生器选择信号(sel2.0)为4时,该模块输出端(q9.0)对外输出。模块振幅随时钟的变化阶梯性递增,输出波形参数可以通过程序进行设定。VHDL程序为:LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.all;ENTITY cyy_sin ISPORT(address: IN STD_LOGIC_VECTOR (9 DOWNTO 0);clock: IN STD_LOGIC ;q: OUT STD_LOGIC_VECTOR (9 DOWNTO 0);EN

21、D cyy_sin;ARCHITECTURE SYN OF cyy_sin ISSIGNAL sub_wire0: STD_LOGIC_VECTOR (9 DOWNTO 0);COMPONENT altsyncramGENERIC (clock_enable_input_a: STRING;clock_enable_output_a: STRING;init_file: STRING;intended_device_family: STRING;lpm_hint: STRING;lpm_type: STRING;numwords_a : NATURAL;operation_mode: STRI

22、NG;outdata_aclr_a: STRING;outdata_reg_a: STRING;widthad_a: NATURAL;width_a: NATURAL;width_byteena_a: NATURAL);PORT (clock0: IN STD_LOGIC ;address_a: IN STD_LOGIC_VECTOR (9 DOWNTO 0);q_a: OUT STD_LOGIC_VECTOR (9 DOWNTO 0);END COMPONENT;BEGINq <= sub_wire0(9 DOWNTO 0); altsyncram_component : altsyn

23、cramGENERIC MAP (clock_enable_input_a => "BYPASS",clock_enable_output_a => "BYPASS",init_file => "E:/wxm/wxm_sin.mif",intended_device_family => "Cyclone II",lpm_hint => "ENABLE_RUNTIME_MOD=NO",lpm_type => "altsyncram",numw

24、ords_a => 1024,operation_mode => "ROM",outdata_aclr_a => "NONE",outdata_reg_a => "CLOCK0",widthad_a => 10,width_a => 10,width_byteena_a => 1)PORT MAP (clock0 => clock,address_a => address,q_a => sub_wire0);END SYN;仿真结果:4.5三角波产生模块 该模块输入信号由时钟

25、(clk)和复位信号(reset)构成,当信号发生器选择信号(sel2.0)为2时,该模块输出端(q9.0)对外输出。模块内计数器随时钟先递增后递减,波形随之先递增后递减,输出波形参数可以通过程序进行设定。VHDL程序LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.all;ENTITY cyy_sj ISPORT(address: IN STD_LOGIC_VECTOR (9 DOWNTO 0); clock: IN STD_LOGIC ; q: OUT STD_LOGIC_VECTOR (9 D

26、OWNTO 0);END cyy_sj;ARCHITECTURE SYN OF cyy_sj ISSIGNAL sub_wire0: STD_LOGIC_VECTOR (9 DOWNTO 0);COMPONENT altsyncramGENERIC (clock_enable_input_a: STRING;clock_enable_output_a: STRING;init_file: STRING;intended_device_family: STRING;lpm_hint: STRING;lpm_type: STRING;numwords_a: NATURAL;operation_mo

27、de: STRING;outdata_aclr_a: STRING;outdata_reg_a: STRING;widthad_a: NATURAL;width_a: NATURAL;width_byteena_a: NATURAL);PORT (clock0: IN STD_LOGIC ;address_a: IN STD_LOGIC_VECTOR (9 DOWNTO 0);q_a: OUT STD_LOGIC_VECTOR (9 DOWNTO 0);END COMPONENT;BEGINq <= sub_wire0(9 DOWNTO 0);altsyncram_component :

28、 altsyncramGENERIC MAP (clock_enable_input_a => "BYPASS",clock_enable_output_a => "BYPASS",init_file => "E:/wxm/wxm_sj.mif",intended_device_family => "Cyclone II",lpm_hint => "ENABLE_RUNTIME_MOD=NO",lpm_type => "altsyncram"

29、;,numwords_a => 1024,operation_mode => "ROM",outdata_aclr_a => "NONE",outdata_reg_a => "CLOCK0",widthad_a => 10,width_a => 10,width_byteena_a => 1)PORT MAP (clock0 => clock, address_a => address, q_a => sub_wire0);END SYN;仿真结果:4.6方波产生模块 该模块

30、输入信号由时钟(clk)和复位信号(reset)构成,当信号发生器选择信号(sel2.0)为5时,该模块输出端(q 9.0)对外输出。模块振幅随时钟的变化持续变为高电平 或低电平,输出波形参数可以通过程序进行设定。VHLIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.all;ENTITY cyy_square ISPORT(address: IN STD_LOGIC_VECTOR (9 DOWNTO 0);clock: IN STD_LOGIC ;q: OUT STD_LOGIC_VECTOR (9

31、 DOWNTO 0);END cyy_square;ARCHITECTURE SYN OF cyy_square ISSIGNAL sub_wire0: STD_LOGIC_VECTOR (9 DOWNTO 0);COMPONENT altsyncramGENERIC (clock_enable_input_a: STRING;clock_enable_output_a: STRING;init_file: STRING;intended_device_family: STRING;lpm_hint: STRING;lpm_type: STRING;numwords_a: NATURAL;op

32、eration_mode: STRING;outdata_aclr_a: STRING;outdata_reg_a: STRING;widthad_a: NATURAL;width_a: NATURAL;width_byteena_a: NATURAL);PORT (clock0: IN STD_LOGIC ;address_a: IN STD_LOGIC_VECTOR (9 DOWNTO 0);q_a: OUT STD_LOGIC_VECTOR (9 DOWNTO 0);END COMPONENTBEGINq <= sub_wire0(9 DOWNTO 0);altsyncram_co

33、mponent : altsyncramGENERIC MAP (clock_enable_input_a => "BYPASS",clock_enable_output_a => "BYPASS",init_file => "E:/wxm/wxm_square.mif",intended_device_family => "Cyclone II",lpm_hint => "ENABLE_RUNTIME_MOD=NO",lpm_type => "al

34、tsyncram",numwords_a => 1024,operation_mode => "ROM",outdata_aclr_a => "NONE",outdata_reg_a => "CLOCK0",widthad_a => 10,width_a => 10,width_byteena_a => 1)PORT MAP (clock0 => clock,address_a => address,q_a => sub_wire0);END SYN;仿真结果:4.

35、7锯齿波产生模块VHDL程序:LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.all;ENTITY cyy_jc ISPORT(address: IN STD_LOGIC_VECTOR (9 DOWNTO 0); clock: IN STD_LOGIC ; q: OUT STD_LOGIC_VECTOR (9 DOWNTO 0);END cyy_jc;ARCHITECTURE SYN OF cyy_jc ISSIGNAL sub_wire0: STD_LOGIC_VECTOR (9 DOWNTO

36、0);COMPONENT altsyncramGENERIC (clock_enable_input_a: STRING;clock_enable_output_a: STRING;init_file: STRING;intended_device_family: STRING;lpm_hint: STRING;lpm_type: STRING;numwords_a: NATURAL;operation_mode: STRING;outdata_aclr_a: STRING;outdata_reg_a: STRING;widthad_a: NATURAL;width_a: NATURAL;wi

37、dth_byteena_a: NATURAL);PORT (clock0: IN STD_LOGIC ;address_a: IN STD_LOGIC_VECTOR (9 DOWNTO 0);q_a: OUT STD_LOGIC_VECTOR (9 DOWNTO 0);END COMPONENT;BEGINq <= sub_wire0(9 DOWNTO 0);altsyncram_component : altsyncramGENERIC MAP (clock_enable_input_a => "BYPASS",clock_enable_output_a =&

38、gt; "BYPASS",init_file => "E:/wxm/wxm_jc.mif",intended_device_family => "Cyclone II",lpm_hint => "ENABLE_RUNTIME_MOD=NO",lpm_type => "altsyncram",numwords_a => 1024,operation_mode => "ROM",outdata_aclr_a => "NONE&q

39、uot;,outdata_reg_a => "CLOCK0",widthad_a => 10,width_a => 10,width_byteena_a => 1)PORT MAP (clock0 => clock,address_a => address,q_a => sub_wire0);END SYN;4.8输出波形选择模块VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY cyy_MUX ISPORT(Q1,Q2,Q3,Q4:IN STD_LOGIC_VECTOR(9

40、DOWNTO 0);A1,A0:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(9 DOWNTO 0);END;ARCHITECTURE ONE OF cyy_MUX ISSIGNAL A:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL A2,A3:STD_LOGIC;BEGINPROCESS(A1)BEGINIF A1'EVENT AND A1='0' THEN IF A2='0' THENA2<='1'ELSE A2<='0'END IF;END IF;END PROCESS;PROCESS(A0)BEGINIF A0'EVENT AND A0='0' THEN IF

温馨提示

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

评论

0/150

提交评论