FPGA模拟DDS正弦波信号源1

上传人:1666****666 文档编号:36282623 上传时间:2021-10-30 格式:DOC 页数:21 大小:180.50KB
收藏 版权申诉 举报 下载
FPGA模拟DDS正弦波信号源1_第1页
第1页 / 共21页
FPGA模拟DDS正弦波信号源1_第2页
第2页 / 共21页
FPGA模拟DDS正弦波信号源1_第3页
第3页 / 共21页
资源描述:

《FPGA模拟DDS正弦波信号源1》由会员分享,可在线阅读,更多相关《FPGA模拟DDS正弦波信号源1(21页珍藏版)》请在装配图网上搜索。

1、摘要随着科学技术的发展和测量技术的进步,普通的信号发生器已无法满足目前日益发展的电子技术领域的生产调试需要。而DDS技术是一种新兴的直接数字频率合成技术,具有频率分辨率高、频率切换速度快、切换相位连续、输出信号相位噪声低、可编程、全数字化易于集成、体积小、重量轻等优点,因而在雷达及通信等领域具有广泛的应用前景。目前市面上的DDS芯片,价格昂贵、功能固定单一,应用受到限制。本综合实验项目采用基于FPGA的EDA技术设计实现DDS芯片,并可以根据实际需要对其功能进行灵活地修改,配置。关键字:FPGA EDA DDS1 DDS的研究现状及发展趋势在频率合成(FS, Frequency Synthes

2、is)领域中,常用的频率合成技术有模拟锁相环、数字锁相环、小数分频锁相环(fractional-N PLL Synthesis)等,直接数字合成(Direct Digital SynthesisDDS)是近年来新的FS技术。单片集成的DDS产品是一种可代替锁相环的快速频率合成器件。DDS是产生高精度、快速变换频率、输出波形失真小的优先选用技术。DDS以稳定度高的参考时钟为参考源,通过精密的相位累加器和数字信号处理,通过高速D/A变换器产生所需的数字波形(通常是正弦波形),这个数字波经过一个模拟滤波器后,得到最终的模拟信号波形。如图1-1所示,通过高速DAC产生数字正弦数字波形,通过带通滤波器后

3、得到一个对应的模拟正弦波信号,最后该模拟正弦波与一门限进行比较得到方波时钟信号。 DDS系统一个显著的特点就是在数字处理器的控制下能够精确而快速地处理频率和相位。除此之外,DDS的固有特性还包括:相当好的频率和相位分辨率(频率的可控范围达Hz级,相位控制小于0.09),能够进行快速的信号变换(输出DAC的转换速率300百万次/秒)。这些特性使DDS在军事雷达和通信系统中应用日益广泛。其实,以前DDS价格昂贵、功耗大(以前的功耗达Watt级)、DAC器件转换速率不高,应用受到限制,因此只用于高端设备和军事上。随着数字技术和半导体工业的发展,DDS芯片能集成包括高速DAC器件在内的部件,其功耗降低

4、到mW级(AD9851在3.3v时功耗为650mW),功能增加了,价格便宜。因此,DDS也获得广泛的应用:现代电子器件、通信技术、医学成像、无线、PCS/PCN系统、雷达、卫星通信。1.1DDS的系统简介DDS的原理框图如图1所示。图中相位累加器可在每一个时钟周期来临时将频率控制字(TUNING WORD)所决定的相位增量M累加一次,如果记数大于2N,则自动溢出,而只保留后面的N位数字于累加器中。正弦查询表ROM用于实现从相位累加器输出的相位值到正弦幅度值的转换,然后送到DAC中将正弦幅度值的数字量转变为模拟量,最后通过滤波器输出一个很纯净的正弦波信号。 由图可知,一个基本的DDS结构,主要由

5、相位累加器、相位调制器、正弦ROM查找表和DAC构成。图中的相位累加器、相位调制器、正弦ROM查找表是DDS结构中的数字部分,由于具有数控频率合成的功能,又合称为NCO(Numerically Controlled Oscillators)。相位累加器是整个DDS的核心,在这里完成上述原理推导中的相位累加功能。相位调制器接收相位累加器的相位输出,在这里加上一个相位偏移值,主要用于信号的相位调制。正弦查找表ROM是DDS最关键的部分,也是最复杂的部分;设计时首先需要对正弦函数进行采样,接着将采样的结果放到ROM模块的对应存储单元中;每一个地址对应一个数值,输出为10位。为了保证输出数据的稳定性,

6、将ROM的输出数据先寄存在REGOUT中,待下一个始终到来时,再将其输出。整个系统各模块是在同步时钟信号CLK的控制下协调工作的。数模转换器(DAC)的作用是将数字形式的波形幅值转换成所要求合成频率的模拟形式信号。DAC有电压和电流输出两种,其输出的信号并不能真正连续可变,而是以其绝对分辨率为最小单位的,所以其输出实际上是一个阶梯模拟信号。现在,一些器件厂家如美国的AD公司,都在DDS器件的芯片内部集成了DAC,这种结构称为Complete-DDS,大大简化了DDS的系统设计。1.2 DDS的性能特点(1)DDS的频率分辨率在相位累加器的位数N足够大时,理论上可以获得相应的分辨精度,这是传统方

7、法难以实现的。 (2)DDS是一个全数字结构的开环系统,无反馈环节,因此速度极快,一般在毫微秒量级。(3)DDS的相位误差主要依赖于时钟的相位特性,相位误差小。另外,DDS的相位是连续变化的,形成的信号具有良好的频谱,这是传统的直接频率合成方法无法实现的(4)相位变化连续 改变DDS输出频率,实际上改变的每一个时钟周期的相位增量,相位函数的曲线是连续的,只是在改变频率的瞬间其频率发生了突变,因而保持了信号相位的连续性。 (5)输出波形的灵活性只要在DDS内部加上相应控制如调频控制FM、调相控制PM和调幅控制AM,即可以方便灵活地实现调频、调相和调幅功能,产生FSK、PSK、ASK和MSK等信号

8、。另外,只要在DDS的波形存储器存放不同波形数据,就可以实现各种波形输出,如三角波、锯齿波和矩形波甚至是任意的波形。当DDS的波形存储器分别存放正弦和余弦函数表时,既可得到正交的两路输出。 (6)其他优点 由于DDS中几乎所有部件都属于数字电路,易于集成,功耗低、体积小、重量轻、可靠性高,且易于程控,使用相当灵活,因此性价比极高。1.3 DDS的基本参数计算公式 由于相位累加器是N比特的模2加法器,正弦查询表ROM中存储一个周期的正弦波幅度量化数据,所以频率控制字M取最小值1时,每2N个时钟周期输出一个周期的正弦波。所以此时有: f0=fc/2N (1.3.1)式中f0为输出信号的频率,fc为

9、时钟频率,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系统都可以在一个周期内输出足够的点,保

10、证输出波形失真很小。 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表容量在实际工作中难以实现。因此,常使用相位地址高位来寻址,舍

11、去低位的相位截断方法。当然,这种方法会引入一定的噪声,但对于节省的资源来说,这种方法还是值得的。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 isbe

12、gin 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 显示电路正弦信号产生器采用数码管来显示工作状态。为简化设

13、计,显示电路包括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 st

14、d_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”,”

15、0000000”when others;End 10702;接收准备显示的一位数据,该数据采用8421BCD码。输入的8421BCD码译码以后通过可编程逻辑器件的输入/输出管脚送到数码管的输入管脚。输出端口seven_seg的7位数据按照从低到高的顺序依次送到数码管的管脚a_g。2.3键盘电路键盘是一组按键开关的集合。像数码管,键盘也是数字系统的一个关键部件。按键开关具有两个状态,闭合或者断开。这两个状态反映在电压上就是按键开关呈现出高电平或者低电平。如果按键开关呈现高电平表示它断开,那么按键开关呈现低电平表示它闭合,因此通过检测按键开关呈现的电平状态就可以确认按键开关是否被按下。在键盘包含的

16、按键开关较少的情况下,例如只包含4个按键开关,独立式键盘占用的输入/输出管脚数量是可以接受的。具有4个按键的独立式键盘电路如图所示。键盘中的5个按键分别有两个不同的用途:输入数据和刷新DDS的频率状态字。输入数据通过按键KEY0、KEY1、KEY2、KEY3实现。其中按键KEY0用来调整输出信号频率的个位;按键KEY1用来调整输出信号的十位;按键KEY2用来调整输出信号的百位;按键KEY3用来调整输出信号的千位;按键KEY4用来刷新DDS的频率状态字,因此它被称为执行键(ENTER)。在输入数据的过程中,输出信号的频率保持原数值,这时只改变对应的数据存储单元的内容,并利用数码管把当前内容显示出

17、来以方便数据调整。当按下执行键(ENTER),输入的频率值被转换成新的DDS的频率状态字。数据调整键KEY0、KEY1、KEY2、KEY3中的每一个都对应一个存储单元,每按一次按键,该按键对应的存储单元的内容加1.这个过程一直到内容为9,再次按键将使存储单元的内容清零。为避免一次按键导致存储单元的内容变化太大,键盘电路的时钟应该选的较低,例如1Hz。在按键被按下,同时时钟信号的前沿到来时,该按键对应的存储单元的内容加1,利用数码管把当前内容显示出来。当显示的数值为需要的数据时,释放按键。输入的频率值与DDS的频率状态字之间的关系位为:F0=fc*k/2N,在这里,fc=100kHz,相位累加器

18、的位数为N=21.正弦信号产生器的输出信号频率f0与频率控制字K的关系如表所示。输出信号频率f0与频率控制字k的关系输出信号频率f频率控制字k输出信号频率f频率控制字k输出信号频率f频率控制字k输出信号频率f频率控制字k1HZ1010B10HZ1101000B100HZ10000011000B100HZ10100011110101B2HZ10100B20HZ11010001B200HZ100000110001B200HZ101000111101011B3HZ11111B30HZ100111010B300HZ110001001001B300HZ111101011100001B4HZ101001B

19、40HZ110100011B400HZ1000001100010B400HZ1010001111010111B5HZ110100B50HZ1000001100B500HZ1010001111010B500HZ1100110011001100B6HZ111110B60HZ1001110101B600HZ1100010010011B600HZ1111010111000010B7HZ1001001B70HZ1011011110B700HZ1110010101100B700HZ10001111010111000B8HZ1010011B80HZ1101000110B800HZ10000011000100

20、B800HZ10100011110101110B9HZ1011110B90HZ1110101111B900HZ10010011011101B900HZ10111000010100011B设计键盘电路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_seg

21、b,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:

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

23、_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_ramdfre_a:=”0000000000000000000000”;when “0001”=fre_a:=”0000000000000000001010”;when “0010”=fre_a:=”0000000000000000010100”;when “0011”=fre_a:=”00000000000

24、00000011111”;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 c

25、ase;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_

26、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 “001

27、0”=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”;w

28、hen “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:=”000000101000111101

29、0111”;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 pro

30、cess;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:

31、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,

32、%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文

33、件来加载该波形数据。3.3 数/模转换电路系统中的数/模转换器采用BURR-BROWN公司生产的DAC7611数/模转换器芯片。采用该芯片的目的是通过一个完整的设计过程来学习如何进行电路系统设计。DAC7611数/模转换器DAC7611的介绍DAC7611是一种具有串行接口的12位数/模转换器,它的一种典型应用电路所示。该芯片具有片内参考电压源,同时它具有PDIP8的封装形式使得能够用面包板组装电路。DAC7611的串行通信接口包括以下管脚。管脚3(CLK):串行时钟输入。管脚4(SDI):串行数据输入。在串行时钟的上跳沿数据被移入DAC7611内部的串行移位寄存器。管脚5()数/模转换器DA

34、C7611的控制电路设计代码如下: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;

35、-定义状态信号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_

36、t; -时钟同步DAC7611的时钟信号cs=cs_t; -时钟同步DAC7611的片选信号ld -当前状态为状态0next_state=1;-状态调整sdi_t=0;clk_t=0;cs_t=0;ld_t-当前状态为状态1next_state=2; -状态调整sdi_t=d_in(11);clk_t=0;cs_t=0;ld_t-当前状态为状态2next_state=3; -状态调整sdi_t=d_in(11);clk_t=1;cs_t=0;ld_t-当前状态为状态3next_state=4; -状态调整sdi_t=d_in(10);clk_t=0;cs_t=0;ld_t -当前状态为状态4n

37、ext_state=5; -状态调整sdi_t=d_in(10);clk_t=1;cs_t=0;ld_t-当前状态为状态24next_state=25; -状态调整sdi_t=0;clk_t=1;cs_t=1;ld_t-当前状态为状态26next_state=26; -状态调整sdi_t=0;clk_t=1;cs_t=1;ld_tf32b,din=fword,load=clk);-控制字输入u1:adder32b prot map(a=f32b,b=d32b,s=din32b);-加法器u2:reg32b prot map(dout=d32b,din=din32b,load=clk);-累加器

38、内部寄存u3:rom prot map(address=d32b(31 downto 24),q=fout,clock=clk);end;与前面各模块的代码合在一起编译之后,将DDS的核心部分代码生成一个元件,其输入为32位的频率控制字fword,及系统时钟CLK,输出为8位ROM数据输出fout,如图,其后的设计中可以方便的调用该模块。合并后的DDS元件4 系统连调设计信号产生器系统所需要的各种时钟的产生电路。系统可以被划分为两个部分:包括键盘电路和数码管显示电路的人机界面,DDS核电路以及数/模转换器控制代码的产生模块。前者的时钟可以直接由系统时钟通过分频获得;后者不仅需要产生多种频率的时

39、钟信号,而且这些信号之间还需要满足一定的时间关系。为了更好地产生DDS核电路以及数/模转换器控制代码产生模块需要的各种时钟信号,这里再次回顾这部分电路的工作过程:相位累加器接收从键盘电路送来的频率字,在它的时钟信号的作用下完成相位累加;相位累加器的高8位输出作为波形数据表的地址,在该地址信号稳定以后,波形数据表在它的时钟信号的作用下把地址对应的波形数据送出;在波形数据信号稳定以后,DAC7611数/模转换器开始装入控制信号,完成一次控制信号的装入需要26个时钟信号。设计控制时钟产生电路代码如下:library ieee;use ieee.std_logic_1164.all;entity 10

40、705 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 ra

41、nge 0 to 2999999;-定义产生1HZ键盘时钟的分频信号beginprocess(clk_sys)-定义状态产生的进程beginif(clk_sys enent and clk_sys=1) then-判断系统时钟是否有效if(aqi29)then -判断是否产生30个状态aqi=aqi+1; -不到30个状态,状态调整else -到30个状态aqi=0; -状态初始化end if;end if;end process;process(clk_sys,aqi)-定义相位累加器时钟产生的进程beginif(clk_sys enent and clk_sys=1) then-判断系统时

42、钟是否有效if(aqi=0)then -判断是否满足输出时钟条件clk_phses=1; -满足条件,输出时钟else -不满足条件clk_phses=0; -不输出时钟end if;end if;end process;process(clk_sys,aqi) -定义波形数据表读数时钟产生的进程beginif(clk_sysevent and clk_sys=1)then-判断系统时钟是否有效if(aqi=1)then-判断是否满足输出时钟条件clk_data=1;-满足条件,输出时钟else -不满足条件clk_data=0;-不输出时钟end if;end if;end process;

43、process(clk_sys,aqi) -定义波形数据表读数时钟产生的进程beginif(clk_sysevent and clk_sys=1)then-判断系统时钟是否有效if(aqi2)then-判断是否满足输出时钟条件reset_dac=1; -满足条件,输出时钟else -不满足条件reset_dac=0; -不输出时钟end if;end if;end process;process(clk_sys)定义1Hz时钟产生的进程beginif(clk_sysevent and clk_sys=1)then-判断系统时钟是否有效if(bqi2999999)then-判断是否达到分频数bq

44、i=bqi+1;-不到分频数,调整计数clk_lhz=0;-不输出时钟else -达到分频数bqi=0; -计数清零clk_lhz=1;-输出1Hz时钟end if;end if;end process;end 10705;6.2单元电路的组合完成应用系统中各个单元电路的设计和测试之后,这些单元电路就可以被连接在一起。对于基于可编程逻辑器件实现的应用系统,使用原理图输入方式是一种比较方便的方法。为此需要创建一个新工程,把前面已经完成的单元电路的VHDL代码复制到这个新工程的文件夹之中;接着利用菜单“FileCreateUpdateCreate Symbol Files for Current File”即可产生它们对应的原件;然后利用原理图编辑方法建立顶层文件;最后通过编译产生可供仿真和器件编程的相关文件。

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