欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    FPGA模拟DDS正弦波信号源1.doc

    • 资源ID:4139346       资源大小:126KB        全文页数:21页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    FPGA模拟DDS正弦波信号源1.doc

    摘要随着科学技术的发展和测量技术的进步,普通的信号发生器已无法满足目前日益发展的电子技术领域的生产调试需要。而DDS技术是一种新兴的直接数字频率合成技术,具有频率分辨率高、频率切换速度快、切换相位连续、输出信号相位噪声低、可编程、全数字化易于集成、体积小、重量轻等优点,因而在雷达及通信等领域具有广泛的应用前景。目前市面上的DDS芯片,价格昂贵、功能固定单一,应用受到限制。本综合实验项目采用基于FPGA的EDA技术设计实现DDS芯片,并可以根据实际需要对其功能进行灵活地修改,配置。关键字:FPGA EDA DDS1 DDS的研究现状及发展趋势   在频率合成(FS, Frequency Synthesis)领域中,常用的频率合成技术有模拟锁相环、数字锁相环、小数分频锁相环(fractional-N PLL Synthesis)等,直接数字合成(Direct Digital SynthesisDDS)是近年来新的FS技术。单片集成的DDS产品是一种可代替锁相环的快速频率合成器件。DDS是产生高精度、快速变换频率、输出波形失真小的优先选用技术。DDS以稳定度高的参考时钟为参考源,通过精密的相位累加器和数字信号处理,通过高速D/A变换器产生所需的数字波形(通常是正弦波形),这个数字波经过一个模拟滤波器后,得到最终的模拟信号波形。如图1-1所示,通过高速DAC产生数字正弦数字波形,通过带通滤波器后得到一个对应的模拟正弦波信号,最后该模拟正弦波与一门限进行比较得到方波时钟信号。    DDS系统一个显著的特点就是在数字处理器的控制下能够精确而快速地处理频率和相位。除此之外,DDS的固有特性还包括:相当好的频率和相位分辨率(频率的可控范围达Hz级,相位控制小于0.09°),能够进行快速的信号变换(输出DAC的转换速率300百万次/秒)。这些特性使DDS在军事雷达和通信系统中应用日益广泛。其实,以前DDS价格昂贵、功耗大(以前的功耗达Watt级)、DAC器件转换速率不高,应用受到限制,因此只用于高端设备和军事上。随着数字技术和半导体工业的发展,DDS芯片能集成包括高速DAC器件在内的部件,其功耗降低到mW级(AD9851在3.3v时功耗为650mW),功能增加了,价格便宜。因此,DDS也获得广泛的应用:现代电子器件、通信技术、医学成像、无线、PCS/PCN系统、雷达、卫星通信。1.1 DDS的系统简介DDS的原理框图如图1所示。图中相位累加器可在每一个时钟周期来临时将频率控制字(TUNING WORD)所决定的相位增量M累加一次,如果记数大于2N,则自动溢出,而只保留后面的N位数字于累加器中。正弦查询表ROM用于实现从相位累加器输出的相位值到正弦幅度值的转换,然后送到DAC中将正弦幅度值的数字量转变为模拟量,最后通过滤波器输出一个很纯净的正弦波信号。    由图可知,一个基本的DDS结构,主要由相位累加器、相位调制器、正弦ROM查找表和DAC构成。图中的相位累加器、相位调制器、正弦ROM查找表是DDS结构中的数字部分,由于具有数控频率合成的功能,又合称为NCO(Numerically Controlled Oscillators)。相位累加器是整个DDS的核心,在这里完成上述原理推导中的相位累加功能。相位调制器接收相位累加器的相位输出,在这里加上一个相位偏移值,主要用于信号的相位调制。正弦查找表ROM是DDS最关键的部分,也是最复杂的部分;设计时首先需要对正弦函数进行采样,接着将采样的结果放到ROM模块的对应存储单元中;每一个地址对应一个数值,输出为10位。为了保证输出数据的稳定性,将ROM的输出数据先寄存在REGOUT中,待下一个始终到来时,再将其输出。整个系统各模块是在同步时钟信号CLK的控制下协调工作的。数模转换器(DAC)的作用是将数字形式的波形幅值转换成所要求合成频率的模拟形式信号。DAC有电压和电流输出两种,其输出的信号并不能真正连续可变,而是以其绝对分辨率为最小单位的,所以其输出实际上是一个阶梯模拟信号。现在,一些器件厂家如美国的AD公司,都在DDS器件的芯片内部集成了DAC,这种结构称为Complete-DDS,大大简化了DDS的系统设计。1.2 DDS的性能特点(1)DDS的频率分辨率在相位累加器的位数N足够大时,理论上可以获得相应的分辨精度,这是传统方法难以实现的。 (2)DDS是一个全数字结构的开环系统,无反馈环节,因此速度极快,一般在毫微秒量级。(3)DDS的相位误差主要依赖于时钟的相位特性,相位误差小。另外,DDS的相位是连续变化的,形成的信号具有良好的频谱,这是传统的直接频率合成方法无法实现的(4)相位变化连续 改变DDS输出频率,实际上改变的每一个时钟周期的相位增量,相位函数的曲线是连续的,只是在改变频率的瞬间其频率发生了突变,因而保持了信号相位的连续性。 (5)输出波形的灵活性只要在DDS内部加上相应控制如调频控制FM、调相控制PM和调幅控制AM,即可以方便灵活地实现调频、调相和调幅功能,产生FSK、PSK、ASK和MSK等信号。另外,只要在DDS的波形存储器存放不同波形数据,就可以实现各种波形输出,如三角波、锯齿波和矩形波甚至是任意的波形。当DDS的波形存储器分别存放正弦和余弦函数表时,既可得到正交的两路输出。 (6)其他优点 由于DDS中几乎所有部件都属于数字电路,易于集成,功耗低、体积小、重量轻、可靠性高,且易于程控,使用相当灵活,因此性价比极高。1.3 DDS的基本参数计算公式 由于相位累加器是N比特的模2加法器,正弦查询表ROM中存储一个周期的正弦波幅度量化数据,所以频率控制字M取最小值1时,每2N个时钟周期输出一个周期的正弦波。所以此时有: f0=fc/2N (1.3.1)式中f0为输出信号的频率,fc为时钟频率,N为累加器的位数。 更一般的情况,频率控制字是M时,每2N/M个时钟周期输出一个周期的正弦波。所以此时有:f0 = M*fc/2N (1.3.2)式中为f0输出信号的频率,fc为时钟频率,N为累加器的位数,M为频率控制字。 式(1.3.2)为DDS系统最基本的公式之一。由此可以得出: 输出信号的最小频率(分辨率)为:f0min= fc/2N(1.3.3) 输出信号的最大频率为:f0max =Mmax*fc/2N (1.3.4) DAC 每信号周期输出的最少点数为k= 2N /Mmax(1.3.5)当 N 比较大时,对于很大范围内的 M 值,DDS系统都可以在一个周期内输出足够的点,保证输出波形失真很小。 2 DDS主体部分设计整个DDS系统的设计采用层次结构,采用VHDL与原理图输入相结合的方法,下面就各个部分的设计分别介绍。 本设计中采用的频率字为32位,即N=32,ROM为256*8位,故ROM的地址线宽M=8,输出数据线宽L=8. 由于ROM地址线为8位(28=256),而相位累加器的输出为32位,为了保证他们之间的对应,我们将相位累加器的高8位与ROM的地址线相连。这样存在多个相位地址对应同一个ROM地址的情况,如果把相位累加器输出的所有位数全部用来查询ROM,那ROM的容量会非常的大,如此巨大的ROM表容量在实际工作中难以实现。因此,常使用相位地址高位来寻址,舍去低位的相位截断方法。当然,这种方法会引入一定的噪声,但对于节省的资源来说,这种方法还是值得的。2.1 相位累加器其VHDL代码为:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity 10701 is port(clk:in std_logic; fre: in std_logic_vector(31 downto 0); add_pio:out std_logic_vector(9 downto 0);end 10701;architecture 10701 of 10701 isbegin process(clk,fre)variable phase:std_logic _vector(31 downto 0);beginif(clkevent and clk=1)thenphase:=phase+fre;add_pio<=phase(31 downto 22);end if;end process;end 10701;输入端口中clk和fre分别代表相位累加器的时钟和频率字。变量phase代表相位累加器,每来一个时钟完成一次相位累加。相位累加器输出的高10位用作波形数据表的地址,由输出管脚add_pio输出。2.2 显示电路正弦信号产生器采用数码管来显示工作状态。为简化设计,显示电路包括4位数码管.4个数码管电路设计为独立工作,它们各自接收需要显示的数据。准备显示的数据在可编程逻辑器件中进行译码,产生的显示代码被送到7段数码管实现数据的显示。由于3个数码管电路完全一样,下面给出其中一路的VHDL代码,该代码支持共阴极数码管的工作。修改代码中的显示代码,就可很方便地用于共阳极数码管。设计一个共阴极7段数码管显示电路。其VHDL代码为:library ieee;use ieee.std_logic_1164.all;entity 10702 isport(data: in std_logic_vector(3 downto 0); seven_seg:out std_logic_vector(6 downto 0);end 10702;architecture 10702 of 10702 isbeginwith data selectseven_seg<=”0111111”when”0000”, ”0000110”when”0001”,”1011011”when”0010”,”1001111”when”0011”,”1100110”when”0100”,”1101101”when”0101”,”0111101”when”0110”,”0000111”when”0111”,”1111111”when”1000”,”1101111”when”1001”,”0000000”when others;End 10702;接收准备显示的一位数据,该数据采用8421BCD码。输入的8421BCD码译码以后通过可编程逻辑器件的输入/输出管脚送到数码管的输入管脚。输出端口seven_seg的7位数据按照从低到高的顺序依次送到数码管的管脚a_g。2.3键盘电路键盘是一组按键开关的集合。像数码管,键盘也是数字系统的一个关键部件。按键开关具有两个状态,闭合或者断开。这两个状态反映在电压上就是按键开关呈现出高电平或者低电平。如果按键开关呈现高电平表示它断开,那么按键开关呈现低电平表示它闭合,因此通过检测按键开关呈现的电平状态就可以确认按键开关是否被按下。在键盘包含的按键开关较少的情况下,例如只包含4个按键开关,独立式键盘占用的输入/输出管脚数量是可以接受的。具有4个按键的独立式键盘电路如图所示。键盘中的5个按键分别有两个不同的用途:输入数据和刷新DDS的频率状态字。输入数据通过按键KEY0、KEY1、KEY2、KEY3实现。其中按键KEY0用来调整输出信号频率的个位;按键KEY1用来调整输出信号的十位;按键KEY2用来调整输出信号的百位;按键KEY3用来调整输出信号的千位;按键KEY4用来刷新DDS的频率状态字,因此它被称为执行键(ENTER)。在输入数据的过程中,输出信号的频率保持原数值,这时只改变对应的数据存储单元的内容,并利用数码管把当前内容显示出来以方便数据调整。当按下执行键(ENTER),输入的频率值被转换成新的DDS的频率状态字。数据调整键KEY0、KEY1、KEY2、KEY3中的每一个都对应一个存储单元,每按一次按键,该按键对应的存储单元的内容加1.这个过程一直到内容为9,再次按键将使存储单元的内容清零。为避免一次按键导致存储单元的内容变化太大,键盘电路的时钟应该选的较低,例如1Hz。在按键被按下,同时时钟信号的前沿到来时,该按键对应的存储单元的内容加1,利用数码管把当前内容显示出来。当显示的数值为需要的数据时,释放按键。输入的频率值与DDS的频率状态字之间的关系位为:F0=fc*k/2N,在这里,fc=100kHz,相位累加器的位数为N=21.正弦信号产生器的输出信号频率f0与频率控制字K的关系如表所示。输出信号频率f0与频率控制字k的关系输出信号频率f频率控制字k输出信号频率f频率控制字k输出信号频率f频率控制字k输出信号频率f频率控制字k1HZ1010B10HZ1101000B100HZ10000011000B100HZ10100011110101B2HZ10100B20HZ11010001B200HZ100000110001B200HZ101000111101011B3HZ11111B30HZ100111010B300HZ110001001001B300HZ111101011100001B4HZ101001B40HZ110100011B400HZ1000001100010B400HZ1010001111010111B5HZ110100B50HZ1000001100B500HZ1010001111010B500HZ1100110011001100B6HZ111110B60HZ1001110101B600HZ1100010010011B600HZ1111010111000010B7HZ1001001B70HZ1011011110B700HZ1110010101100B700HZ10001111010111000B8HZ1010011B80HZ1101000110B800HZ10000011000100B800HZ10100011110101110B9HZ1011110B90HZ1110101111B900HZ10010011011101B900HZ10111000010100011B设计键盘电路VHDL代码为:Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity 10703 isPort(clk_lhz:in std_logic;-定义时钟输入端口Key_data:in std_logic_vector(3 downto 0);-定义按键输入端口Seven_sega,seven_segb,seven_segc,seven_segd:out std_logic_vector(3 downto 0);-定义显示代码输出端口fre:out std_logic_vector(21 downto 0);-定义频率字输出端口 End 10703;architecture 10703 of 10703 is signal key_rama, key_ramb, key_ramc, key_ramd: std_logic_vector(4 downto 0);beginprocess(clk_lhz,key_data)variable fre_a, fre_b, fre_c, fre_d: std_logic_vector(21 downto 0);beginif(clk_lhzevent and clk_lhz=1)thenif(key_data=”11110”)thenif(key_rama<”1001”)thenkey_rama<= key_rama+1;elsekey_rama<=”0000”end if;end if;if(key_data=”11101”)thenif(key_ramb<”1001”)thenkey_ramb<= key_ramb+1;elsekey_ramb<=”0000”end if;end if;if(key_data=”11011”)thenif(key_ramc<”1001”)thenkey_ramc<= key_ramc+1;elsekey_ramc<=”0000”end if;end if;if(key_data=”10111”)thenif(key_ramd<”1001”)thenkey_ramd<= key_ramd+1;elsekey_ramd<=”0000”end if;end if;if(key_data=”01111”)thencase key_rama iswhen “0000”=>fre_a:=”0000000000000000000000”;when “0001”=>fre_a:=”0000000000000000001010”;when “0010”=>fre_a:=”0000000000000000010100”;when “0011”=>fre_a:=”0000000000000000011111”;when “0100”=>fre_a:=”0000000000000000101001”;when “0101”=>fre_a:=”0000000000000000110100”;when “0110”=>fre_a:=”0000000000000000111110”;when “0111”=>fre_a:=”0000000000000001001001”;when “1000”=>fre_a:=”0000000000000001010011”;when “1001”=>fre_a:=”0000000000000001011110”;when “others=>null;end case;case key_ramb iswhen “0000”=>fre_b:=”0000000000000000000000”;when “0001”=>fre_b:=”0000000000000001101000”;when “0010”=>fre_b:=”0000000000000011010001”;when “0011”=>fre_b:=”0000000000000100111010”;when “0100”=>fre_b:=”0000000000000110100011”;when “0101”=>fre_b:=”0000000000001000001100”;when “0110”=>fre_b:=”0000000000001001110101”;when “0111”=>fre_b:=”0000000000001011011110”;when “1000”=>fre_b:=”0000000000001101000110”;when “1001”=>fre_b:=”0000000000001110101111”;when “others=>null;end case;case key_ramc iswhen “0000”=>fre_c:=”0000000000000000000000”;when “0001”=>fre_c:=”0000000000010000011000”;when “0010”=>fre_c:=”0000000000100000110001”;when “0011”=>fre_c:=”0000000000110001001001”;when “0100”=>fre_c:=”0000000001000001100010”;when “0101”=>fre_c:=”0000000001010001111010”;when “0110”=>fre_c:=”0000000001100010010011”;when “0111”=>fre_c:=”0000000001110010101100”;when “1000”=>fre_c:=”0000000010000011000100”;when “1001”=>fre_c:=”0000000010010011011101”;when “others=>null;end case;case key_ramd iswhen “0000”=>fre_d:=”0000000000000000000000”;when “0001”=>fre_d:=”0000000010100011110101”;when “0010”=>fre_d:=”0000000101000111101011”;when “0011”=>fre_d:=”0000000111101011100001”;when “0100”=>fre_d:=”0000001010001111010111”;when “0101”=>fre_d:=”0000001100110011001100”;when “0110”=>fre_d:=”0000001111010111000010”;when “0111”=>fre_d:=”0000010001111010111000”;when “1000”=>fre_d:=”0000010100011110101110”;when “1001”=>fre_d:=”0000010111000010100011”;when “others=>null;end case;endif;endif;fre<=fre_a+fre_b+fre_c+fre_d;end process;seven_sega<=key_rama;seven_segb<=key_ramb;seven_segc<=key_ramc;seven_segd<=key_ramd;end 10703; 2.4 波形存储器为了实现波形存储器模块,首先需要到ROM内的波形数据文件,即Memory Initialization File(.mif),它的文件格式如下:DEPTH=存储器深度;WIDTH=存储器字宽;ADDRESS_RADIX=地址进制;DATA_RADIX=存储数据进制;以下为存储内容示例,格式:“地址:数据;”,共256个单元,中间省略。CONTENT BEGIN0:127;1:130;2:133;254:121;255:124;END;知道了格式,我们就可以自己编辑需要的mif文件了,对于存储单元较多的ROM,手工编写比较麻烦,可以借助Matlab里生成正弦信号的采样点数据表格,还需要自己添加程序,下面举例说明:先编写一段m文件程序,这里以产生02*pi范围内正弦波幅度之为例。即在02*pi的周期范围内采样256个点,每个点的值用8位二级制数表示。在MATLAB里编写的m文件,保存的文件名为rom_data.miff=(0:1:255);f=round(-128*sin(2*pi*x/256)+127;fid=fopen(rom_data.mif,w);fprintf(fid,%d:%d;n,x,y);fclose(fid);plot(x,y);grid on执行后sin_dat.mif中数据如下:0:127;1:130;2:133;3:136;4:140;5:143;但是这样的数据表格在MAX+plus II/Quartus II软件里还不能直接调用,需要我们自己手动修改,按前面的格式介绍,在最前面加上数据类型声明,如下:DEPTH=256;WIDTH=8;ADDRESS_RADIX=UNS;DATA_RADIX=UNS;CONTENT BEGIN之后,在结尾处还要加上END;至此,我们就得到了所需要的.mif。但这仅仅是ROM的数据文件,还需要编写一个VHDL文件来加载该波形数据。3.3 数/模转换电路系统中的数/模转换器采用BURR-BROWN公司生产的DAC7611数/模转换器芯片。采用该芯片的目的是通过一个完整的设计过程来学习如何进行电路系统设计。DAC7611数/模转换器DAC7611的介绍DAC7611是一种具有串行接口的12位数/模转换器,它的一种典型应用电路所示。该芯片具有片内参考电压源,同时它具有PDIP8的封装形式使得能够用面包板组装电路。DAC7611的串行通信接口包括以下管脚。管脚3(CLK):串行时钟输入。管脚4(SDI):串行数据输入。在串行时钟的上跳沿数据被移入DAC7611内部的串行移位寄存器。管脚5()数/模转换器DAC7611的控制电路设计代码如下:library ieee;use ieee.std_logic_1164.all;entity 10704 isport(reset,clock: in std_logic; -定义复位和时钟信号输入端口d_in: in std_logic_vector(11 downto 0);-定义数据输入端口 sdi,clk,cs,ld:out std_logic);-定义输出信号端口end 10704;architecture 10704 of 10704 issignal current_state,next_state:integer range 0 to 26;-定义状态信号signal sdi_t,clk_t,cs_t,ld_t:std_logic;-定义暂态信号begin -开始电路功能描述reg:process(reset,clock) -时序逻辑电路的实现begin -进程功能描述开始 if(reset=1)then -判断复位信号是否有效current_state<=0; -复位信号有效,当前状态字位Aelsif(clockevent and clock=1)then复位信号无效,判断时钟是否有效current_state<=next_state;-下一个状态字代替当前状态sdi<=sdi_t; -时钟同步DAC7611的数据信号clk<=clk_t; -时钟同步DAC7611的时钟信号cs<=cs_t; -时钟同步DAC7611的片选信号ld<=ld_t; -时钟同步DAC7611的装载信号end if;end process reg;com:process(d_in,current_state) -组合逻辑电路的实现begin -进程功能描述开始case current_state is -选择语句开始when 0=> -当前状态为状态0next_state<=1;-状态调整sdi_t<=0;clk_t<=0;cs_t<=0;ld_t<=1;-生成暂态信号when 1=>-当前状态为状态1next_state<=2; -状态调整sdi_t<=d_in(11);clk_t<=0;cs_t<=0;ld_t<=1; -生成暂态信号when 2=>-当前状态为状态2next_state<=3; -状态调整sdi_t<=d_in(11);clk_t<=1;cs_t<=0;ld_t<=1; -生成暂态信号when 3=>-当前状态为状态3next_state<=4; -状态调整sdi_t<=d_in(10);clk_t<=0;cs_t<=0;ld_t<=1; -生成暂态信号when 4=> -当前状态为状态4next_state<=5; -状态调整sdi_t<=d_in(10);clk_t<=1;cs_t<=0;ld_t<=1; -生成暂态信号。when 24=>-当前状态为状态24next_state<=25; -状态调整sdi_t<=0;clk_t<=1;cs_t<=1;ld_t<=0; -生成暂态信号when 26=>-当前状态为状态26next_state<=26; -状态调整sdi_t<=0;clk_t<=1;cs_t<=1;ld_t<=1; -生成暂态信号end case;end processcom;end 10704;3.4合并上面介绍的仅仅是DDS基本结构框图中的几个基本部件,为了把它们合并成一个整体,还需要编写一段程序定义各个元件的端口连接关系以及完成端口的初始化,如下:Library ieee;-DDS顶层设计Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity DDS_VHDL isPort(clk:in std_logic;Fword:in std_logic_vector(31 downto 0);-频率控制字输入Fout:out std_logic_vector(7 downto 0);-rom输出 End;architecture one of 10702 is DDS_VHDL is component reg32bPort(load:in std_logic;din:in std_logic_vector(31 downto 0); dout:out std_logic_vector(31 downto 0);end component;component adder32bPort(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 romPort(address:in std_logic_vector(7 downto 0);clock:in std_logic; q:out std_logic_vector(7 downto 0);end component;signal f32b,d32b,din32b:std_logic_vector(31 downto 0);signal sin8b:std_logic_vector(7 downto 0);beginu0:reg32b prot map(dout=>f32b,din=>fword,load=>clk);-控制字输入u1:adder32b prot map(a=>f32b,b=>d32b,s=>din32b);-加法器u2:reg32b prot map(dout=>d32b,din=>din32b,load=>clk);-累加器内部寄存u3:rom prot map(address=>d32b(31 downto 24),q=>fout,clock=>clk);end;与前面各模块的代码合在一起编译之后,将DDS的核心部分代码生成一个元件,其输入为32位的频率控制字fword,及系统时钟CLK,输出为8位ROM数据输出fout,如图,其后的设计中可以方便的调用该模块。合并后的DDS元件4 系统连调设计信号产生器系统所需要的各种时钟的产生电路。系统可以被划分为两个部分:包括键盘电路和数码管显示电路的人机界面,DDS核电路以及数/模转换器控制代码的产生模块。前者的时钟可以直接由系统时钟通过分频获得;后者不仅需要产生多种频率的时钟信号,而且这些信号之间还需要满足一定的时间关系。为了更好地产生DDS核电路以及数/模转换器控制代码产生模块需要的各种时钟信号,这里再次回顾这部分电路的工作过程:相位累加器接收从键盘电路送来的频率字,在它的时钟信号的作用下完成相位累加;相位累加器的高8位输出作为波形数据表的地址,在该地址信号稳定以后,波形数据表在它的时钟信号的作用下把地址对应的波形数据送出;在波形数据信号稳定以后,DAC7611数/模转换器开始装入控制信号,完成一次控制信号的装入需要26个时钟信号。设计控制时钟产生电路代码如下:library ieee;use ieee.std_logic_1164.all;entity 10705 isPort(clk_sys:in std_logic;-定义系统时钟输入端口clk_lhz:out std_logic;-定义键盘时钟输出端口clk_phses:out std_logic;-定义相位累加器时钟输出端口clk_data:out std_logic;-定义波形数据表读数时钟输出端口reset_dac:out std_logic);-定义DAC7611复位信号输出端口end 10705;architecture 10705 of 10705 issignal aqi:integer range 0 to 29;-定义30个状态信号signal bqi:integer range 0 to 2999999;-定义产生1HZ键盘时钟的分频信号beginprocess(clk_sys)-定义状态产生的进程beginif(clk_sys enent and clk_sys=1) then

    注意事项

    本文(FPGA模拟DDS正弦波信号源1.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开