EDA技术与VHDL课程设计基于DDS移相信号发生器

上传人:无*** 文档编号:41685229 上传时间:2021-11-22 格式:DOC 页数:32 大小:1.95MB
收藏 版权申诉 举报 下载
EDA技术与VHDL课程设计基于DDS移相信号发生器_第1页
第1页 / 共32页
EDA技术与VHDL课程设计基于DDS移相信号发生器_第2页
第2页 / 共32页
EDA技术与VHDL课程设计基于DDS移相信号发生器_第3页
第3页 / 共32页
资源描述:

《EDA技术与VHDL课程设计基于DDS移相信号发生器》由会员分享,可在线阅读,更多相关《EDA技术与VHDL课程设计基于DDS移相信号发生器(32页珍藏版)》请在装配图网上搜索。

1、EDA技术与VHDL课程设计华东交通大学课程设计移相信号发生器丑小鸭指导老师 高彦丽摘要信号发生器又称信号源,在生产生活实践中应用广泛。在我们各电子实验室是不可少的实验仪器。他能够产生多种波形,如正弦波、三角波、方波、锯齿波等。并且可以选择输出任意频率、幅度、相位的波形。 本设计是采用DDS直接数字频率合成技术来产生各种波形信号,它具有相对带宽很宽,频率转换时间极短,频率分辨率很高,输出相位连续,并且很容易实现频率、相位、幅度的调制。本设计是移相信号发生器具有波形选择,调频、调相、调幅的功能。关键字 DDS 调频 调相 调幅 正弦波 三角波 方波 锯齿波目录摘要1目录2第一章 整体设计论述3第

2、二章 直接数字频率合成技术(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

3、)进行采样分析。本设计输出有两路信号标准信号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来控制波形选择

4、。Q4接高位。同时电路还设计了复位功能低电平复位,将键Q1按下就复位输出为0。设计框图如下: 波形产生原理:1、正弦波原理 采用dds技术,包括基准时钟、相位增量寄存器、相位累加器、波形存储器,乘法器等模块。正弦波将采集的1024点波形数据预先存在ROM单元中,然后在系统标准时钟clk下,按照一定的顺序从定制的ROM单元中读取数据。用频率控制字来控制地址间隔,从而改变频率。用相位控制字来控制初始地址从而控制相位。通过在波形存储器后接乘法器来控制幅度。2、三角波原理 连续加运算到一定值,然后连续进行减运算回到原值,这样反复就是三角波。他通过改变加的数fword的值来改变频率。通过对初值置一个数p

5、word来改变相位。进行相位累加来产生波形。通过对输出的数做乘法来改变幅度。3、方波原理 输出高电平一段时间在让其输出低电平一段时间就可以产生方波了。改变计数间隔可以改变频率。与三角波一样通过置数在进行加法来调相。调幅与三角波一样。4、锯齿波原理 连续加一个数到一定值,然后置0,可以得到一锯齿波。调频,调相,调幅的方法与三角波一样。程序见附录第二章 直接数字频率合成技术(DDS)基本原理DDS技术,是一种新型的频率合成技术和信号产生方法。其电路系统具有较高的频率分辨率,可以实现快速的频率切换,并且在改变时能够保持相位的连续,很容易实现频率、相位、幅度的调制。它是将输出波形的一个完整的周期、幅度

6、值都顺序地存放在波形存储器中,通过控制相位增量产生频率、相位可控制的波形。2.1基本原理DDS电路一般包括基准时钟、相位增量寄存器、相位累加器、波形存储器、D/A转换器和低通滤波器(LPF)等模块。原理框图如下:相位增量寄存器寄存频率控制数据,相位累加器完成相位累加的功能,波形存储器存储波形数据的单周期幅值数据,D/A转换器将数字量形式的波形幅值数据转化为所要求合成频率的模拟量形式信号,低通滤波器滤除谐波分量。整个系统在统一的时钟下工作,从而保证所合成信号的精确。每来一个时钟脉冲,相位增量寄存器频率控制数据与累加寄存器的累加相位数据相加,把相加后的结果送至累加寄存器的数据输出端。这样,相位累加

7、器在参考时钟的作用下,进行线性相位累加,当相位累加器累加满量时就会产生一次溢出,完成一个周期性的动作,这个周期就是DDS合成信号的一个频率周期,累加器的溢出频率就是DDS输出的信号频率。相位累加器输出的数据的高位地址作为波形存储器的地址,从而进行相位到幅值的转换,即可在给定的时间上确定输出的波形幅值。波形存储器产生的所需波形的幅值的数字数据通过D/A转换器转换成模拟信号,经过低通滤波器滤除不需要的分量以便输出频谱纯净的所需信号。信号发生器的输出频率f0可表示为: 上式中为系统时钟,为系统分辨率,N为相位累加器位数即相位控制,M为相位累加器的增量即频率控制字。2.2 DDS的参数确定首先确定系统

8、的分辨率,最高频率,及最高频率下的最少采样点数根据需要产生的最高频率以及该频率下的最少采样点数,由公式 (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,1

9、0跟数据线,10根地址线,其中的数据文件是LUT10X10.mif。reg32b和reg10b分别是32位和10 位寄存器;mux10 b是10位乘法器;pout1和fout1是13位输出,可以分别与两位高速d/a相接,他们分别输出参考信号和可移相正弦信号。Fout1经过了一个移相的10位加法器adder10b。 本电路是在每个时钟周期内,将加法器的值与频率控制字相加,得到当前相位的值,将当前相位的值作为rom的地址,读出rom的正弦波数据。ROM是所生成正弦波形一周期采样1024点的数据值,只需改变FWORD的值而改变地址间隔从而改变频率。频率控制字越大,ROM的地址变化越快,输出频率越大。

10、为了频率变化明显将fword向左移20位在与adder32b相加。对于移相是通过PWORD相位控制字与10位加法器ADDER10B在送入10位寄存器得到当前相位的地址值,从而得到当前相位值。只需改变PWORD的值就可以改变相位。在将从ROM读出的数据通过与一4位数SS相乘控制输出幅度。主要参数 频率控制范围:0255。相位控制范围:0255。输出分辨率:与加法器的位数有关。位数大分辨率高。3.1.2 mif文件的生成本设计定制的正弦波形数据存储器ROM所需的正弦波形数据MIF文件,数据深度是1024、数据类型是十进制数,数据位宽为10位。可以通过MATLABLE来采样取点。这里是通过C语言程序

11、生成的程序。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时

12、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、pwo

13、rd为8位 最终的结果为14位。设计框图如下:程序见附录开始复位?Tmp1=0Tmp2=pf10bClk上升沿?F=0?P=0?Tmp1-1-fwordTmp1+1+fwordTmp2+1+fwordTmp2-1-fwordTmp1>数a?Tmp1<b?Tmp2>a?Tmp2-<b?F=1F=0P=1P=0Pout2=tmp1*ssFout2=tmp2*ss3.2.2 三角波仿真波形具体说明如下: CLK是系统时钟信号,设为100纳秒。FWORD为8位的频率控制字;PWORD为8位的频率控制字;SS为4位控制幅度。Clrn为复位低电平复位。FOUT2为13位移相输出信号

14、;POUT2为13位标准输出信号。 从上图可以看出当FWORD的值为130时,POUT2输出的数的相对间隔大于当FWORD=1时的值。如0与10之间差10,17与34差17。即FWORD越大间隔越大频率也就越大。当PWORD=100时与PWORD=0时比较。FOUT2对POUT2明显相移了。PWORD=100时FOUT2不等于POUT2(fout2=3840,pout2=0)。PWORD=0时FOUT2=POUT2。改变PWORD的值可以改变相位。由图可知(当ss=10时fout2=3840,当ss=1时fout2=17)当改变SS的值输出的幅值也不一样。所以改变ss可以实现调幅。且具有复位功

15、能,低电平复位。每次改变pword的值时需先复位。3.3 方波产生模块3.3.1 基本工作原理输出高电平一段时间在让其输出低电平一段时间就可以产生方波了。具体如下:通过计数来控制是否为高电平还是低电平。设f,若小于512则置1,否则置0.同三角波原理,他也是通过改变加的数fword的值来改变增量从而改变频率。通过对初值置一个数pword来改变相位。这个数是在复位是设置的,而且在每次改变pword是必须复位。最后将得到的10位数乘以四位的ss得到14位的数从而实现调幅。程序设计框图如下:程序见附录3.3.2 方波仿真波形具体说明如下: CLK是系统时钟信号,设为100纳秒。FWORD为8位的频率

16、控制字;PWORD为8位的频率控制字;SS为4位控制幅度。Clrn为复位低电平复位。FOUT3为13位移相输出信号;POUT3为13位标准输出信号。 从上图可以看出当FWORD的值为200时,POUT3输出的数的疏密程度大于当FWORD=50时。即FWORD越大越密频率也就越大。当PWORD=110时与PWORD=0时比较。FOUT3对POUT3明显相移了。PWORD=100时FOUT3不等于POUT3(fout2=1023,pout2=0),它们上下不同步。PWORD=0时FOUT3=POUT3。可以看出改变PWORD的值可以改变相位。由图可知(当ss=10时fout3=3840,当ss=1

17、时fout3=17)当改变SS的值输出的幅值也不一样。所以改变ss可以实现调幅。且具有复位功能,低电平复位。每次改变pword的值时需先复位。3.4 锯齿波设计模块3.4.1基本原理 这里是递增锯齿波,它是通过连续加法运算到某个值时再置0.他是通过频率控制字fword控制加的间隔,来控制频率,fword越大频率也越大。相位是通过给被加数置一个数pword来改变。调相波与标准波不同在于初值不同。标准波是从0开始加。调幅是通过乘法来实现。且具有复位功能,低电平复位。每次改变pword的值时需先复位。设计框图如下 :(程序见附录4)开始复位?Tmp1=0Tmp2=pf10bClk上升沿?Tmp1&g

18、t;a?Tmp2>a?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越大间隔越大频率也就越大

19、。当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位的频率控制

20、字;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是频率控制字的高三

21、位分别锁定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都按下,可看到输出正弦波,再将D

22、K1、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

23、,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,从而改变输

24、出幅度,输出幅度比图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的基础上改变了p

25、word_h,将pword_h5、pword_h6置1其他为0.上下波形相位不一样。图16调幅 在图15的基础上将ss_h2置0,从而改变输出幅度,输出幅度减小锯齿波第五章 心得与体会经过长达两个星期的课程设计,终于在自己的努力奋战下完成了设计。虽然这两个星期没日没夜的在实验室,但是这两星期过得很充实,收获也很多。这次的设计是移相信号发生器,要求产生正弦波、三角波、方波。并且可以进行调频、调相、调幅。在整个设计过程中,学会了很多知识。首先,让我熟练了QUARTUS II软件。1、文件名必须与实体名一样,工程名可以自选。2、若要对某个VHDL文件进行编译、仿真或其他操作必须现将其设为顶层文件。3

26、、仿真波形中信号值的设置要求可以观察明显的现象。其次,学会了用嵌入式逻辑分析仪signaltap II。步骤:1、filenewothers file打开signaltap II编辑窗口。2、调入待测信号,主频时钟信号不可调入。3、参数设置,设工作时钟信号clock时应选主频时钟信号。4、保存、编译下载,每次编译后都要重新下载。5、最后启动分析仪进行分析观察。同时在整个设计过程中,我碰到了许多问题,并解决了。1、刚设计的时候,应载想整个设计的大概而迟迟不知如何下手,最后经同学指点,分模块来做才一一完成。2、整个基本设计都完成后在对波形观察分析时,发现波形不规则而且有好多毛刺。经分析尝试发现是因

27、为在对信号进行引脚锁定时,频率控制字和相位控制字只用了高三位,其他悬空了。将其他没用到的为置0后毛刺少好多,波形也规则了。还有发现在频率较低的情况下,波形很标准。3、在观察调相时,不管仿真波形,还是硬件测试,三角波、方波、锯齿波,不管相位控制字设为多大都没移相,最终在经程序中得知因为每次都是在复位后才置数的。所以在调相前必须先复位再测试。总体来说,在这次设计过程中,给我感触最深的是,学会了电子系统设计的一般方法。在设计过程中应一个模块一模块的完成,一个一个问题的解决,这样所有难题就会迎刃而解。第六章 附录程序附录1 正弦波产生程序library ieee;use ieee.std_logic_

28、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_116

29、4.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

30、 -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 load'event and load='1' thendout<=din;end if; end process;end behav;library ieee;use ieee.std_logic_1

31、164.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 load'event and load='1' thendout<=din;end if; end process;end behav;library iee

32、e;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_1

33、164.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 dds

34、1 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

35、 -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;compo

36、nent 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 f

37、32b,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)&l

38、t;="00"u1:adder32b port map(a=>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(do

39、ut=>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_

40、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,clr

41、n,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=

42、9;0' then tmp1:="0000000000"tmp2:=p10b;-复位elsif clk'event and clk='1' thenif f='0' then if tmp1>"1100000000" then f:='1' else tmp1:=tmp1+1+f5b; end if;-增加else if tmp1<"0000000111" then f:='0' else tmp1:=tmp1-1-f5b; end if;-减

43、小end if;if p='0' then if tmp2>"1100000000" then p:='1' else tmp2:=tmp2+1+f5b; end if;-增加else if tmp2<"0000000111" 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;us

44、e 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;

45、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 d

46、ownto 7):=pword(7 downto 5);p10b(6 downto 0):="0000000"IF CLRN='0' THEN TMP1:="0000000000"tmp2:=p10b; ELSE IF CLK'EVENT AND CLK='1' THENIF TMP1="1111111111" THEN TMP1:="0000000000"-标准波 ELSE TMP1:=TMP1+1+f5b;END IF;IF TMP1<"011111111

47、1"THEN F<='1'ELSE F<='0'END IF;IF TMP2="1111111111" THEN TMP2:="0000000000"-调相 ELSE TMP2:=TMP2+1+f5b;END IF;IF TMP2<"0111111111"THEN p<='1'ELSE p<='0'END IF;END IF;END IF;END PROCESS;PROCESS(CLK,F,p)BEGINIF CLK'EVE

48、NT AND CLK='1' THENIF F='1' THEN q1<="1111111111"-高电平ELSE q1<="0000000000"-低电平END IF;IF p='1' THEN q2<="1111111111"ELSE q2<="0000000000"END IF;end if;POUT3<=q1*SS;-标准波FOUT3<=q2*SS;-调相波END PROCESS;END A;程序附录4LIBRARY IEE

49、E;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY dds4 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);fout4:out std_logic_vector(13 downto 0);pout4:out std_logic_vector(13 downto 0)

50、;end;ARCHITECTURE a OF dds4 ISBEGINPROCESS(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 downto 7):=pword(7 downto 5);p10b(6 downto 0):="0000000&

51、quot;if clrn='0' then tmp1:="0000000000"tmp2:=p10b;-复位elsif clk'event and clk='1' thenif tmp1>"1100000000" then tmp1:="0000000000" else tmp1:=tmp1+1+f5b; end if; -增加 if tmp2>"1100000000" then tmp2:="0000000000"-调相 else tmp2:

52、=tmp2+1+f5b; end if; -增加end if;fout4<=tmp2*ss; -调相波pout4<=tmp1*ss; -标准波end process;end a;程序附录5library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dds is -主程序设为顶层文件port(clk_h,clrn_h: in std_logic; sel:in std_logic_vector(1 downto 0);ss_h:in std_logic_vector(3 downto

53、0);fword_h:in std_logic_vector(7 downto 0);pword_h:in std_logic_vector(7 downto 0);fout_h:out std_logic_vector(13 downto 0);pout_h:out std_logic_vector(13 downto 0);end;architecture one of dds iscomponent dds1 -正弦port(clk: in std_logic;ss:in std_logic_vector(3 downto 0);fword:in std_logic_vector(7 d

54、ownto 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 component;component dds2 -三角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);fo

55、ut2:out std_logic_vector(13 downto 0);pout2:out std_logic_vector(13 downto 0);end component;component dds3 -方波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

56、std_logic_vector(13 downto 0);end component;component dds4 -锯齿波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);fout4:out std_logic_vector(13 downto 0);pout4:out std_logic_vector(13 downto 0);end component;sign

57、al fout11,pout11,fout22,pout22 ,fout33,pout33,fout44,pout44:std_logic_vector(13 downto 0);begin -元件例化u9:dds1 port map(clk=>clk_h,ss=>ss_h,fword=>fword_h,pword=>pword_h,fout1=>fout11,pout1=>pout11);u10:dds2 port map(clk=>clk_h,clrn=>clrn_h,ss=>ss_h,fword=>fword_h,pword=&

58、gt;pword_h,fout2=>fout22,pout2=>pout22);u11:dds3 port map(clk=>clk_h,clrn=>clrn_h,ss=>ss_h,fword=>fword_h,pword=>pword_h,fout3=>fout33,pout3=>pout33);u12:dds4 port map(clk=>clk_h,clrn=>clrn_h,ss=>ss_h,fword=>fword_h,pword=>pword_h,fout4=>fout44,pout4=>

59、pout44);process(sel)-波形选择begin case sel is when"00" =>fout_h<=fout11;pout_h<=pout11;-正弦波 when"01" =>fout_h<=fout22;pout_h<=pout22;-三角波 when"10" =>fout_h<=fout33;pout_h<=pout33;-方波when"11" =>fout_h<=fout44;pout_h<=pout44;-锯齿波 when others => null; end case;end process;end one;32

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!