EDA技术与VHDL课程设计-基于DDS移相信号发生器.doc_第1页
EDA技术与VHDL课程设计-基于DDS移相信号发生器.doc_第2页
EDA技术与VHDL课程设计-基于DDS移相信号发生器.doc_第3页
EDA技术与VHDL课程设计-基于DDS移相信号发生器.doc_第4页
EDA技术与VHDL课程设计-基于DDS移相信号发生器.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

eda技术与vhdl课程设计华东交通大学课程设计移相信号发生器丑小鸭指导老师 高彦丽摘要信号发生器又称信号源,在生产生活实践中应用广泛。在我们各电子实验室是不可少的实验仪器。他能够产生多种波形,如正弦波、三角波、方波、锯齿波等。并且可以选择输出任意频率、幅度、相位的波形。 本设计是采用dds直接数字频率合成技术来产生各种波形信号,它具有相对带宽很宽,频率转换时间极短,频率分辨率很高,输出相位连续,并且很容易实现频率、相位、幅度的调制。本设计是移相信号发生器具有波形选择,调频、调相、调幅的功能。关键字 dds 调频 调相 调幅 正弦波 三角波 方波 锯齿波目录摘要1目录2第一章 整体设计论述3第二章 直接数字频率合成技术(dds)基本原理52.1基本原理52.2 dds的参数确定6第三章 单元模块设计及仿真波形73.1正弦波设计模块73.2 三角波设计模块83.3 方波产生模块103.4 锯齿波设计模块113.5 整体电路仿真波形13第四章 硬件实验结果144.1引脚锁定144.2 硬件测试结果15第五章 心得与体会21第六章 附录23第一章 整体设计论述 本设计是基于dds技术(直接数字频率合成技术)设计的一个移相信号发生器。能够产生正弦波、三角波、方波、锯齿波四种周期性波形。具有选择波形类别、调频、调相、调幅的功能。设计利用eda硬件在嵌入式逻辑分析仪(singnaltap ii)进行采样分析。本设计输出有两路信号标准信号pout_h(13位)及移相信号fout_h(13位)。频率由8位的频率控制字fword_h控制,控制其取点的步距,最大范围0255倍,频率控制字越大频率越大。相位由8位的相位控制字pword_h控制,最大范围0255,控制他的起始值,相位控制字越大初相越大。幅度由十位乘法器一4位乘数ss所以可以最大增大16倍,ss值越大幅度越大。波形类型的选择采用2位的位选sel来确定当sel=00时输出正弦波这时可以对正弦波进行调频,调相,调幅,当sel=01时输出三角波,当sel=10时输出方波,当sel=11时输出锯齿波。这里利用按键q2、q4来控制波形选择。q4接高位。同时电路还设计了复位功能低电平复位,将键q1按下就复位输出为0。设计框图如下: 波形产生原理:1、正弦波原理 采用dds技术,包括基准时钟、相位增量寄存器、相位累加器、波形存储器,乘法器等模块。正弦波将采集的1024点波形数据预先存在rom单元中,然后在系统标准时钟clk下,按照一定的顺序从定制的rom单元中读取数据。用频率控制字来控制地址间隔,从而改变频率。用相位控制字来控制初始地址从而控制相位。通过在波形存储器后接乘法器来控制幅度。2、三角波原理 连续加运算到一定值,然后连续进行减运算回到原值,这样反复就是三角波。他通过改变加的数fword的值来改变频率。通过对初值置一个数pword来改变相位。进行相位累加来产生波形。通过对输出的数做乘法来改变幅度。3、方波原理 输出高电平一段时间在让其输出低电平一段时间就可以产生方波了。改变计数间隔可以改变频率。与三角波一样通过置数在进行加法来调相。调幅与三角波一样。4、锯齿波原理 连续加一个数到一定值,然后置0,可以得到一锯齿波。调频,调相,调幅的方法与三角波一样。程序见附录第二章 直接数字频率合成技术(dds)基本原理dds技术,是一种新型的频率合成技术和信号产生方法。其电路系统具有较高的频率分辨率,可以实现快速的频率切换,并且在改变时能够保持相位的连续,很容易实现频率、相位、幅度的调制。它是将输出波形的一个完整的周期、幅度值都顺序地存放在波形存储器中,通过控制相位增量产生频率、相位可控制的波形。2.1基本原理dds电路一般包括基准时钟、相位增量寄存器、相位累加器、波形存储器、d/a转换器和低通滤波器(lpf)等模块。原理框图如下:相位增量寄存器寄存频率控制数据,相位累加器完成相位累加的功能,波形存储器存储波形数据的单周期幅值数据,d/a转换器将数字量形式的波形幅值数据转化为所要求合成频率的模拟量形式信号,低通滤波器滤除谐波分量。整个系统在统一的时钟下工作,从而保证所合成信号的精确。每来一个时钟脉冲,相位增量寄存器频率控制数据与累加寄存器的累加相位数据相加,把相加后的结果送至累加寄存器的数据输出端。这样,相位累加器在参考时钟的作用下,进行线性相位累加,当相位累加器累加满量时就会产生一次溢出,完成一个周期性的动作,这个周期就是dds合成信号的一个频率周期,累加器的溢出频率就是dds输出的信号频率。相位累加器输出的数据的高位地址作为波形存储器的地址,从而进行相位到幅值的转换,即可在给定的时间上确定输出的波形幅值。波形存储器产生的所需波形的幅值的数字数据通过d/a转换器转换成模拟信号,经过低通滤波器滤除不需要的分量以便输出频谱纯净的所需信号。信号发生器的输出频率f0可表示为: 上式中为系统时钟,为系统分辨率,n为相位累加器位数即相位控制,m为相位累加器的增量即频率控制字。2.2 dds的参数确定首先确定系统的分辨率,最高频率,及最高频率下的最少采样点数根据需要产生的最高频率以及该频率下的最少采样点数,由公式 (1.2)确定系统时钟的下限值。同时又要满足分辨率计算公式 (1.3)综合考虑决定的值。选定了的值后,则由公式(1.3)可得,据此可确定相位累加器位数n。然后由最高输出频率 推出m,得出相位增量寄存器为s位。第三章 单元模块设计及仿真波形3.1正弦波设计模块3.1.1 正弦波产生原理电路图如下fword是8位频率控制字,控制输出信号的频率;pword是8位相移控制字,控制输出信号的相移量;adder32b和adder10b分别是32位和10位加法器;sin_rom是存放正弦波数据的rom,10跟数据线,10根地址线,其中的数据文件是lut10x10.mif。reg32b和reg10b分别是32位和10 位寄存器;mux10 b是10位乘法器;pout1和fout1是13位输出,可以分别与两位高速d/a相接,他们分别输出参考信号和可移相正弦信号。fout1经过了一个移相的10位加法器adder10b。 本电路是在每个时钟周期内,将加法器的值与频率控制字相加,得到当前相位的值,将当前相位的值作为rom的地址,读出rom的正弦波数据。rom是所生成正弦波形一周期采样1024点的数据值,只需改变fword的值而改变地址间隔从而改变频率。频率控制字越大,rom的地址变化越快,输出频率越大。为了频率变化明显将fword向左移20位在与adder32b相加。对于移相是通过pword相位控制字与10位加法器adder10b在送入10位寄存器得到当前相位的地址值,从而得到当前相位值。只需改变pword的值就可以改变相位。在将从rom读出的数据通过与一4位数ss相乘控制输出幅度。主要参数 频率控制范围:0255。相位控制范围:0255。输出分辨率:与加法器的位数有关。位数大分辨率高。3.1.2 mif文件的生成本设计定制的正弦波形数据存储器rom所需的正弦波形数据mif文件,数据深度是1024、数据类型是十进制数,数据位宽为10位。可以通过matlable来采样取点。这里是通过c语言程序生成的程序。mif文件见附录23.1.3 正弦波产生程序见附录3.1.4 正弦波仿真波形具体说明如下: clk是系统时钟信号,设为100纳秒。fword为8位的频率控制字;pword为8位的频率控制字;ss为4位控制幅度。fout1为移相输出信号;pout1为标准输出信号。 从上图可以看出当fword的值为200时,pout1输出的数的间隔大于当fword=1时的值。如666与806之间差140,5490与5460差30。即fword越大间隔越大频率也就越大。当pword=1时与pword=0时比较。fout1对pout1明显相移了。pword=1时fout1不等于pout1。pword=0时fout1=pout1。改变pword的值可以改变相位。由图可知当改变ss的值输出的幅值也不一样。所以改变ss可以实现调幅。3.2 三角波设计模块3.2.1 基本原理该设计是通过连续加运算到a,然后连续进行减运算回到b,这样反复就是三角波。a=“1100000000”, 只要加到大于a这个数就可以做减运算;b=“0000000111”,当小于b再进行加运算。他通过改变加的数fword的值来改变增量从而改变频率。通过对初值置一个数pword来改变相位。这个数是在复位是设置的,而且在每次改变pword是必须复位。最后将得到的10位数乘以四位的ss得到14位的数从而实现调幅。补充:fword、pword为8位 最终的结果为14位。设计框图如下:程序见附录开始复位?tmp1=0tmp2=pf10bclk上升沿?f=0?p=0?tmp1-1-fwordtmp1+1+fwordtmp2+1+fwordtmp2-1-fwordtmp1数a?tmp1a?tmp2-a?tmp2a?tmp1=tmp1+1+fwordtmp1=0tmp2=tmp2+1+fwordtmp2=0fout4=tmp2*ss 相移波pout4=tmp1*ss标准波3.4.2锯齿波仿真波形clk是系统时钟信号,设为100纳秒。fword为8位的频率控制字;pword为8位的频率控制字;ss为4位控制幅度。clrn为复位低电平复位。fout4为13位移相输出信号;pout4为13位标准输出信号。 从上图可以看出当fword的值为200时,pout4输出的数的相对间隔大于当fword=1时的值。如384与408之间差24,12与24差12。即fword越大间隔越大频率也就越大。当pword=100时与pword=0时比较。fout4对pout4明显相移了。pword=100时fout4不等于pout4(fout4=384,pout4=0)。pword=0时fout2=pout2。改变pword的值可以改变相位。由图可知在频率,相位不变的情况下,当ss=12时fout4=12,当ss=1时fout2=4,改变ss的值输出的幅值也不一样。所以改变ss可以实现调幅。且具有复位功能,低电平复位。每次改变pword的值时需先复位。3.5 整体电路仿真波形具体说明如下: clk_h是系统时钟信号,设为100纳秒。fword_h为8位的频率控制字;pword_h为8位的频率控制字;ss_h为4位控制幅度。clrn_h为复位低电平复位。sel是两位的波形选择位。fout_h为13位移相输出信号;pout_h为13位标准输出信号。 如上图所示:当sel=“00”是输出正弦波,sel=“01”输出三角波,sel=“10”输出方波,sel=“11”输出锯齿波。然后通过fword_h来调频,pword_h 来移相,ss_h来调幅。第四章 硬件实验结果4.1引脚锁定如上图输入输出信号所接引脚为:clk_h系统时钟接pin_152,设为2khz,clrn_h复位信号锁定引脚pin_135,名称位qk1,当按下时复位。(键按下为0,平时为1).fword_h7-5是频率控制字的高三位分别锁定pin-159、pin_158、pin_156,名称分别为dk3、dk2、dk1。(on为0,off为1)pword_h7-5是相位控制字的高三位分别锁定pin-162、pin_161、pin_160,名称分别为dk6、dk5、dk4。ss_h3-2是幅度控制的高2位分别锁定pin-164、pin_163,名称分别为dk8、dk7。sel1-0是波形选择位,分别锁定pin_138 pin_136名称为qk4、qk2。4.2 硬件测试结果 输出结果是通过signaltap ii来观察分析。启动分析仪后,将qk1按下,可以看到输出一直线。当将qk4、qk2都按下,可看到输出正弦波,再将dk1、dk2、dk3置on或off可以改变频率,将dk6、dk5|、dk4置on或off可以改变相位,将dk8、dk7置on或off可以改变输出幅度(结果如图1-4)。将qk4按下可以观察输出三角波,同理将dk1、dk2、dk3置on或off可以改变频率,将dk6、dk5|、dk4置on或off可以改变相位,将dk8、dk7置on或off可以改变输出幅度(结果如图5-8)。若将qk2按下输出方波通过dk1dk8可以调频、调相、调幅(结果如图912)。若不按下qk4、qk2输出锯齿波,结果如图1215。 硬件结果如下:正弦波图1 参照波 pword_h=0 ,将fword_h5dk1置1其他为0,ss_h2、ss_h3都置1图2 调频 只改变fword_h,让其增大,频率比图1要大图3 调相 在图2的基础上改变了pword_h,将pword_h5、pword_h6置1其他为0.上下波形相位不一样。图4调幅 在图3的基础上将ss_h2置0,从而改变输出幅度三角波图5 参照波 pword_h=0 ,将fword_h5dk1置1其他为0,ss_h2、ss_h3都置1图6 调频 只改变fword_h,让其增大,频率比图5要大图7 调相 在图6的基础上改变了pword_h,将pword_h5、pword_h6置1其他为0.上下波形相位不一样。图8调幅 在图7的基础上将ss_h2置0,从而改变输出幅度,输出幅度比图7要小方波图9 参照波 pword_h=0 ,将fword_h5dk1置1其他为0,ss_h2、ss_h3都置1图10 调频 只改变fword_h,让其增大,频率比图9要大图11 调相 在图9的基础上改变了pword_h,将pword_h5、pword_h6置1其他为0.上下波形相位不一样。图12调幅 在图11的基础上将ss_h2置0,从而改变输出幅度,输出幅度减小锯齿波 图13 参照波 pword_h=0 ,将fword_h5dk1置1其他为0,ss_h2、ss_h3都置1图14 调频 只改变fword_h,让其增大,频率比图13要大图15 调相 在图13的基础上改变了pword_h,将pword_h5、pword_h6置1其他为0.上下波形相位不一样。图16调幅 在图15的基础上将ss_h2置0,从而改变输出幅度,输出幅度减小锯齿波第五章 心得与体会经过长达两个星期的课程设计,终于在自己的努力奋战下完成了设计。虽然这两个星期没日没夜的在实验室,但是这两星期过得很充实,收获也很多。这次的设计是移相信号发生器,要求产生正弦波、三角波、方波。并且可以进行调频、调相、调幅。在整个设计过程中,学会了很多知识。首先,让我熟练了quartus ii软件。1、文件名必须与实体名一样,工程名可以自选。2、若要对某个vhdl文件进行编译、仿真或其他操作必须现将其设为顶层文件。3、仿真波形中信号值的设置要求可以观察明显的现象。其次,学会了用嵌入式逻辑分析仪signaltap ii。步骤:1、filenewothers file打开signaltap ii编辑窗口。2、调入待测信号,主频时钟信号不可调入。3、参数设置,设工作时钟信号clock时应选主频时钟信号。4、保存、编译下载,每次编译后都要重新下载。5、最后启动分析仪进行分析观察。同时在整个设计过程中,我碰到了许多问题,并解决了。1、刚设计的时候,应载想整个设计的大概而迟迟不知如何下手,最后经同学指点,分模块来做才一一完成。2、整个基本设计都完成后在对波形观察分析时,发现波形不规则而且有好多毛刺。经分析尝试发现是因为在对信号进行引脚锁定时,频率控制字和相位控制字只用了高三位,其他悬空了。将其他没用到的为置0后毛刺少好多,波形也规则了。还有发现在频率较低的情况下,波形很标准。3、在观察调相时,不管仿真波形,还是硬件测试,三角波、方波、锯齿波,不管相位控制字设为多大都没移相,最终在经程序中得知因为每次都是在复位后才置数的。所以在调相前必须先复位再测试。总体来说,在这次设计过程中,给我感触最深的是,学会了电子系统设计的一般方法。在设计过程中应一个模块一模块的完成,一个一个问题的解决,这样所有难题就会迎刃而解。第六章 附录程序附录1 正弦波产生程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder32b is -32位加法器port (a: in std_logic_vector(31 downto 0); b: in std_logic_vector(31 downto 0); s: out std_logic_vector(31 downto 0); end adder32b;architecture behav of adder32b isbegin s=a+b;end behav;library ieee; -10位加法器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder10b isport (a: in std_logic_vector(9 downto 0); b: in std_logic_vector(9 downto 0); s: out std_logic_vector(9 downto 0); end adder10b;architecture behav of adder10b isbegin s=a+b;end behav;library ieee;use ieee.std_logic_1164.all;entity reg32b is -32位寄存器port (load:in std_logic; din:in std_logic_vector(31 downto 0); dout:out std_logic_vector(31 downto 0);end reg32b;architecture behav of reg32b is begin process(load,din)beginif loadevent and load=1 thendout=din;end if; end process;end behav;library ieee;use ieee.std_logic_1164.all;entity reg10b is -10位寄存器port (load:in std_logic; din:in std_logic_vector(9 downto 0); dout:out std_logic_vector(9 downto 0);end reg10b;architecture behav of reg10b is begin process(load,din)beginif loadevent and load=1 thendout=din;end if; end process;end behav;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mux10b is -乘法器port (c: in std_logic_vector(3 downto 0); d: in std_logic_vector(9 downto 0); s: out std_logic_vector(13 downto 0); end mux10b;architecture behav of mux10b isbegin s=c*d;end behav;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dds1 is -正弦波port(clk: in std_logic;ss:in std_logic_vector(3 downto 0);fword:in std_logic_vector(7 downto 0);pword:in std_logic_vector(7 downto 0);fout1:out std_logic_vector(13 downto 0);pout1:out std_logic_vector(13 downto 0);end;architecture one of dds1 iscomponent reg32b -32位寄存器port (load:in std_logic; din:in std_logic_vector(31 downto 0); dout:out std_logic_vector(31 downto 0);end component;component reg10b -10位寄存器port (load:in std_logic; din:in std_logic_vector(9 downto 0); dout:out std_logic_vector(9 downto 0);end component;component adder32b -32位加法器port (a: in std_logic_vector(31 downto 0); b: in std_logic_vector(31 downto 0); s: out std_logic_vector(31 downto 0); end component;component adder10b -10位加法器port (a: in std_logic_vector(9 downto 0); b: in std_logic_vector(9 downto 0); s: out std_logic_vector(9 downto 0); end component;component sin_rom -正弦波形存储器port (address:in std_logic_vector(9 downto 0); clock:in std_logic; q:out std_logic_vector(9 downto 0);end component;component mux10b -10*4位乘法器port (c: in std_logic_vector(3 downto 0); d: in std_logic_vector(9 downto 0); s: out std_logic_vector(13 downto 0);end component;signal f32b,d32b,din32b:std_logic_vector(31 downto 0);- 定义信号signal p10b,lin10b,sin10b,ptmp1,ftmp1:std_logic_vector(9 downto 0);beginf32b(27 downto 20)=fword;f32b(31 downto 28)=0000;f32b(19 downto 0)=00000000000000000000;-将fword移位p10b(9 downto 2)=pword;p10b(1 downto 0)f32b,b=d32b,s=din32b); -元件例化u2:reg32b port map(dout=d32b,din=din32b,load=clk);u3:sin_rom port map(address=sin10b,q=ftmp1,clock=clk);u4:adder10b port map(a=p10b,b=d32b(31 downto 22),s=lin10b);u5:reg10b port map(dout=sin10b,din=lin10b,load=clk);u6:sin_rom port map(address=d32b(31 downto 22),q=ptmp1,clock=clk);u7:mux10b port map(d=ptmp1,c=ss,s=pout1);u8:mux10b port map(d=ftmp1,c=ss,s=fout1);end one;程序附录2library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dds2 is -三角波port( clk,clrn: in std_logic;ss:in std_logic_vector(3 downto 0);fword:in std_logic_vector(7downto 0);pword:in std_logic_vector(7 downto 0);fout2:out std_logic_vector(13 downto 0);pout2:out std_logic_vector(13 downto 0);end;architecture a of dds2 isbeginprocess(clk,clrn,fword ,pword) -进程variable tmp1,tmp2,p10b: std_logic_vector(9 downto 0); -定义信号variable f,p: std_logic;variable f5b:std_logic_vector(4 downto 0);beginf5b(4 downto 2):=fword(7 downto 5);f5b(1 downto 0):=00;p10b(9 downto 7):=pword(7 downto 5);p10b(6 downto 0):=0000000;if clrn=0 then tmp1:=0000000000;tmp2:=p10b;-复位elsif clkevent and clk=1 thenif f=0 then if tmp11100000000 then f:=1; else tmp1:=tmp1+1+f5b; end if;-增加else if tmp11100000000 then p:=1; else tmp2:=tmp2+1+f5b; end if;-增加else if tmp20000000111 then p:=0; else tmp2:=tmp2-1-f5b; end if;-减小end if;end if;fout2=tmp2*ss;-调幅pout2=tmp1*ss;end process;end a;程序附录3library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dds3 is -方波port( clk,clrn: in std_logic;ss:in std_logic_vector(3 downto 0);fword:in std_logic_vector(7 downto 0);pword:in std_logic_vector(7 downto 0);fout3:out std_logic_vector(13 downto 0);pout3:out std_logic_vector(13 downto 0);end;architecture a of dds3 issignal f,p: std_logic;signal q1,q2: std_logic_vector(9 downto 0);beginprocess(clk,clrn,fword ,pword)variable tmp1,tmp2,p10b: std_logic_vector(9 downto 0);variable f5b:std_logic_vector(4 downto 0);beginf5b(4 downto 2):=fword(7 downto 5);f5b(1 downto 0):=00;p10b(9 do

温馨提示

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

评论

0/150

提交评论