您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 制造加工工艺 > DDS信号源的设计与实现
实验报告实验题目:实验三DDS信号源的设计与实现姓名:学号:指导老师:地点与时间:2012.5.25科研楼A座3042012.5.18科研楼A座304【摘要】:本次实验先利用MATLAB软件制作coe文件,然后利用ISE软件以两种思路编写VHDL程序实现DDS信号源的的设计,在生成bit文件后下载到FPGA板,用Chipsgope软件进行硬件仿真验证,最终生成了正确的波形。一、任务要求1.1实验目的利用FPGA完成DDS信号源的设计与实现。1.2实验任务利用FPGA平台调用IPcore产生DDS正弦波,并用chipscope抓生成的正弦波信号1.3实验要求(1)采用IP设计方法实现DDS信号源的设计;(2)用chipscope显示正弦波形,频率在给定范围内可调,用7段数码管显示生成正弦波的频率值,频率控制字通过拨码开关输入(3)记录数据,撰写实验报告二、实验方案及原理2.1设计原理DDS全称DirectDigitalFrequencySynthesizer(直接数字频率合成),是根据奈奎斯特采样定律,从连续信号的相位出发将一个正弦信号取样、量化、编码,形成一个正弦函数表,存于ROM中。合成时,通过改变相位累加器的频率控制字来改变相位增量。相位增量(步长)不同,一个正弦周期内的采样点数不同。在时钟频率即采样频率不变的情况下,通过相位增量的改变来实现输出频率的改变。对于DDS信号源,它的正弦信号发生器的输出可以用下式来描述:其中outS是指该信号发生器的输出信号波形,outf指输出信号对应的频率。上式的表述对于时间t是连续的,为了用数字逻辑实现该表达式,必须进行离散化处理。用采样时钟clk进行抽样,令正弦信号的相位:在一个clk周期clkT内,相位的增量为:其中clkf指clk的频率,为了相位增量对其进行数字量化,把2切割成2N份,由此每个clk周期的相位增量可用量化值来表述:且k为整数,称k为频率控制字,与前式联合:).π2sin(sinoutouttfAtASoutoutclkclk2πΔ2πffTf22πNkoutclk2Nfkf由上公式可得,所输出信号的频率为:2N为ROM的深度,储存正弦波对于一个周期的图案。k为频率控制字,可以计算得输出频率控制字,送入FPGA中,通过调试,将输出chipscope显示出来。图1频率控制字与频率关系图图1中横坐标是时间轴,纵坐标表示输出信号幅度。红线所取频率控制字是蓝线的2倍,对于固定深度的查找表,红线取得采样点集合是蓝线的1/2。从上图可知,红线所示正弦波频率是蓝线的2倍。2.2DDS设计方案1、总原理图图2DDS的总体原理图2、累加器图2累加器示意图以上是一个相位累加器的示意图,相位累加器的组成=N位加法器+N位寄存器,其作用是在采样时钟的控制下,以相位增量来完成相位的累加。当相位累加器累加满量时就会产生一次溢出保留低N位,完成一个周期性的动作。3、波形存储器ROMoutclk2Nfkfclkout2Nfkf频率预置与调节电路累加器波形存储器D/A转换器低通滤波器KN位N位S(n)D位S(t)fclk加法器寄存器频率控制字KN位N位N位相位量化序列fclk图4ROM结构示意图这个部分的作用是进行波形的相位—幅值转换。对于ROM的N位地址,是把0—360的正弦角度离散成具有2N个样值的序列;而ROM的D位数据位则是2N个样值的对应幅值量化为D位二进制数据。三、具体实验代码先利用matlab生成相应的coe文件,将matlab生成的正弦波数据导入ipcore中,使用查找表,通过输入不同的频率控制字,生成相应的正弦信号。再利用XilinxISEDesignSuite中的ISE新建一个Project,选择好相应的端口与硬件,既可以开始编写top文件。3.1未进行分频的实验代码------------------------------------------------------------------------------------Company:--Engineer:----CreateDate:21:34:5605/25/2012--DesignName:--ModuleName:top-Behavioral--ProjectName:--TargetDevices:--Toolversions:--Description:----Dependencies:----Revision:--Revision0.01-FileCreated--AdditionalComments:------------------------------------------------------------------------------------libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_unsigned.ALL;--Uncommentthefollowinglibrarydeclarationifusing--arithmeticfunctionswithSignedorUnsignedvalues--useIEEE.NUMERIC_STD.ALL;--Uncommentthefollowinglibrarydeclarationifinstantiating--anyXilinxprimitivesinthiscode.--libraryUNISIM;--useUNISIM.VComponents.all;entitytopisPort(clk:inSTD_LOGIC;波形ROM地址数据相位量化序列正弦幅度量化序列N位D位din:inSTD_LOGIC_VECTOR(7downto0);do:outSTD_LOGIC_VECTOR(15downto0));endtop;architectureBehavioraloftopiscomponentROWisport(clka:INstd_logic;addra:INstd_logic_VECTOR(9downto0);douta:OUTstd_logic_VECTOR(15downto0));endcomponent;signalcount:std_logic_vector(4downto0):=00000;signalcnt,k:STD_LOGIC_VECTOR(9downto0);signaldout:STD_LOGIC_VECTOR(9downto0);beginp0:process(clk,count)beginif(clk='1'andclk'event)thencount=count+00001;ifcount=10000thencount=00000;endif;endif;endprocess;p1:process(count,k,din,cnt)begink=00&din;ifcount=00001thencnt=cnt+k;endif;endprocess;dout=cnt;u0:ROWportmap(clka=clk,addra=dout,douta=do);endBehavioral;3.2进行分频的实验代码1、Top文件:------------------------------------------------------------------------------------Company:--Engineer:----CreateDate:15:55:2305/28/2012--DesignName:--ModuleName:top-Behavioral--ProjectName:--TargetDevices:--Toolversions:--Description:----Dependencies:----Revision:--Revision0.01-FileCreated--AdditionalComments:------------------------------------------------------------------------------------libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_unsigned.ALL;--Uncommentthefollowinglibrarydeclarationifusing--arithmeticfunctionswithSignedorUnsignedvalues--useIEEE.NUMERIC_STD.ALL;--Uncommentthefollowinglibrarydeclarationifinstantiating--anyXilinxprimitivesinthiscode.--libraryUNISIM;--useUNISIM.VComponents.all;entitytopisPort(clk:inSTD_LOGIC;din:inSTD_LOGIC_VECTOR(7downto0);dout:outSTD_LOGIC_VECTOR(15downto0));endtop;architectureBehavioraloftopiscomponentROMisport(clka:INstd_logic;addra:INstd_logic_VECTOR(8downto0);douta:OUTstd_logic_VECTOR(15downto0));endcomponent;componentfpisport(clk:instd_logic;clkfp:outstd_logic);endcomponent;signalcnt,k:STD_LOGIC_VECTOR(8downto0);signald0:STD_LOGIC_VECTOR(8downto0);signalclkfp:STD_LOGIC;beginp1:process(clkfp,k,din,cnt)begink=0&din;if(clkfp'eventandclkfp='1')thencnt=cnt+k;endif;endprocess;d0=cnt;u0:ROMportmap(clka=clk,addra=d0,douta=dout);u1:fpportmap(clk=clk,clkfp=clkfp);endBehavioral;2、fp文件:------------------------------------------------------------------------------------Company:--Engineer:----CreateDate:16:44:3905/28/2012--DesignName:--ModuleName:fp-Behavioral--ProjectName:--TargetDevices:--Toolversions:--Description:----Dependencies:----Revision:--Revision0.01-FileCreated--AdditionalComments:------------------------------------------------------------------------------------libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_unsigned.ALL;--Uncommentthefollowinglibrarydeclarationifusing--arithmeticfunctionswithSignedorUnsignedvalues--useIEEE.NUMERIC_STD.ALL;--Uncommentthefol
本文标题:DDS信号源的设计与实现
链接地址:https://www.777doc.com/doc-2909085 .html