




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE26PAGE27第10章信号产生器的设计目标通过本章的学习,读者应掌握以下知识:应用系统设计的基本步骤设计报告的撰写目的设计报告的结构传统信号产生器的设计方案直接数字合成(DirectDigitalSynthesis,DDS)技术利用可编程逻辑器件实现直接数字合成技术的优点如何把一个应用系统分解成一系列基本电路单元电路技术指标对应用系统技术指标的影响如何用一系列基本电路组成应用系统系统测试方案的制定系统设计总结引言学习的目的在于应用,同时边工作边学习也是一种非常有效的学习方法,因为具体工作的需求将为学习提出一个明确的目标。在完成一个应用系统的设计以后,设计者还应该向用户提供一份设计报告。设计报告详细地描述了应用系统的设计过程。对于一个学生来说,撰写设计报告的过程还是不断发现问题,解决问题的过程。如果你想说服用户,那么你必须首先说服自己。一份完整的设计报告通常包括摘要、关键词、设计要求、方案论证、系统设计、单元电路设计、系统连调、实验数据分析、总结以及参考文献等部分。摘要部分通常利用100~200个字对所设计的系统进行介绍;关键词更加简练,它利用3~5个词对所设计的系统特点进行描述。除过摘要和关键词部分,本章通过全数字化信号产生器设计这样一个设计实例对设计报告其它部分的撰写方法进行介绍。在学习撰写设计报告的同时,读者也将学习如何使用前面的知识完成应用系统设计。本章介绍的设计报告撰写格式为一种推荐格式。无论采用什么样的设计报告撰写格式,设计报告都必须清晰地描述应用系统的设计过程。引言10.1.1传统的信号产生器设计方案在现代电子系统中,经常需要产生稳定的重复信号,例如模拟电路中的正弦波信号或者数字电路中的方波信号。传统的信号产生器通常是首先产生所需要频率的正弦波信号,然后利用比较器再获得同样频率的方波信号。正弦信号产生原理以及相关电路组成的内容在《高频电子线路》课程中有详细的介绍。按照正弦信号产生器中频率选择电路的构成,它们可以被划分为LC正弦信号产生器、RC正弦信号产生器以及晶体正弦信号产生器。对于LC正弦信号产生器和RC正弦信号产生器,适当地设计频率选择电路中的电感、电容或者电阻的数值,信号产生器就可以产生所要求工作频率的信号。如果频率选择电路中的电感、电容或者电阻使用可调电感、可调电容或者电位器来代替,通过调整这些可调器件,正弦信号产生器的工作频率可以方便地被调整。这两种电路结构简单、价格便宜,它们获得广泛的应用,但是这两种电路的频率稳定度不高,通常约为10-3量级。晶体正弦信号产生器具有较高的频率稳定度,通常可以达到10-6量级,但是它的工作频率取决于晶体的谐振频率。在需要改变晶体正弦信号产生器工作频率时,电路中用于频率选择的晶体必须被更换。如果既要求信号产生器的工作频率稳定,又要求能够通过调整电路参数的方法来调整工作频率,传统的方法为采用基于锁相环(PLL)技术和非线性器件频率变换技术的频率合成器,但是这样的频率合成器的电路结构非常复杂。10.1.2基于微处理器和数字/模拟转换器的设计方案使用微处理器控制数字/模拟转换器也可以产生所需要的信号波形。这种方法不仅可以产生正弦波信号,而且还可以产生任意信号波形。把希望形成的信号波形通过采样和量化可以产生波形数据,这些数据被放置在存储器之中。工作时,利用微处理器把这些波形数据送到数字/模拟转换器就能够获得所需要的信号波形。由于这时产生的信号是由微处理器的程序控制来实现,微处理器的工作又由它的时钟电路控制,因此电路产生的信号将具有与时钟电路同样的频率稳定度,即可以达到与晶体信号产生器相同的频率稳定度。如果希望调整输出信号的频率,这时可以通过在程序中添加具有延时功能的指令或者子程序来实现。使用微处理器控制数字/模拟转换器产生所需要的信号波形解决了输出信号的频率稳定度和频率可调整性问题,同时还能产生任意信号波形,并且电路结构也不复杂。这种方法的缺点是输出信号的频率较低,输出信号频率的调整精度也较低。例如使用MCS51系列单片机,单片机时钟电路的频率选为12MHz,数字/模拟转换器使用DAC0832,采用查表的方法输出一个函数值将需要14个机器周期,即14us。如果产生正弦信号,正弦波的数字波形表用36个点来描述一个完整的正弦波,这样所产生的正弦信号的最小周期为504us,即最高频率约1984Hz。系统产生的正弦信号频率的调整可以通过在程序中添加具有延时功能的指令或者子程序来实现。在产生一个正弦函数值的过程中增加一句空操作指令NOP可以实现1us的最小延时,这时系统产生一个正弦函数值则需要15个机器周期,即15us。产生一个完整正弦波则需要540个机器周期,即540us,对应的信号频率约1851Hz。添加1us延时前后的工作频率变化的绝对值为:Δf=1984–1851=133(Hz)工作频率变化的相对值为:Δf/fo=133/1984=6.7%综上所述,采用单片机控制数字/模拟转换器的电路结构可以提高工作频率的稳定度,并且可以对工作频率进行调整,但是输出信号最高频率的数值以及频率调整的精度不能令人满意。直接数字合成技术直接数字合成(DirectDigitalSynthesis,DDS)是一种应用数字技术来产生信号波形的方法。DDS技术建立在采样定理的基础上,它首先对需要产生的信号波形进行采样和量化,然后存入存储器作为待产生信号波形的数据表。在输出信号波形时,从数据表中依次读出数据,产生数字化的信号,这个信号再通过DAC转换成所需的模拟信号波形。当改变信号波形数据表中的数据,就可以产生不同的信号波形。相对于其他信号波形产生技术,DDS技术具有输出信号的采样频率固定、全数字化、易于控制、可编程、输出相位连续和信号频率转换时间短等优点。基于DDS技术产生信号波形的原理图如图10.1所示。图10.1DDS技术产生信号波形原理图在图10.1所示的DDS技术产生信号波形的原理图中,信号波形数据表中的数据为正弦信号波形数据,因此它可以产生正弦信号波形。DDS技术的核心是相位累加器,它类似一个计数器。每来一个参考时钟信号,相位累加器的输出就增加一个步长的相位增加量,相位增加量的大小由频率控制字来确定。正弦信号波形数据表包含正弦信号一个周期的幅度——相位信息。从数据表中读出相位累加器输出相位值对应的幅度数据,再通过数字/模拟转换器将该数据转换成所需的模拟信号波形输出。相位累加器的相位累加为循环迭加,这样使得输出信号的相位是连续的。相位累加器进行线性相位累加,相位累加到一个周期时产生一次计数溢出,这个溢出率即为输出信号的频率。频率控制字内的相位增加量越大,完成一个周期所需要的时间越短,相位累加器的溢出率越高,输出信号的频率越高。以上这些与使用单片机控制数字/模拟转换器来产生正弦信号的方法类似。设相位累加器的位数为N,频率控制字内的相位增量为K,参考时钟频率为fc,则DDS系统输出信号的频率f0为:f0=fc×K/2N (10-1)输出信号的频率分辨率△f0为:f0=fc/2N (10-2)如果一个相位累加器的位数N=32,参考时钟频率为fc=125MHz,当相位增量K=1时,输出信号频率f0最低,其值约为0.03Hz,这个值也是输出信号的频率分辨率△f0;当相位增量K=231时,输出信号频率f0最高,其值可达62.5MHz。由于参考时钟频率固定,因此输出信号中谐波频率固定,所以在整个频段内只需要一个低通滤波器来滤除输出信号中的谐波干扰。DDS系统的工作类似于数字分频电路,输出信号的频率稳定度等于参考时钟的频率稳定度,即可以达到晶体的频率稳定度。信号波形的数据表包含以相位为地址的一个周期待产生信号数字幅度信息,每个地址对应于待产生信号中0°~360°范围内的一个相位点。数据表中的数字幅度信息量受数字/模拟转换器分辨率的限制,通常信号波形数据表的地址位数低于相位累加器的位数,所以取相位累加器的部分高位输出做数据表的地址输入。这里以相位累加器的位数N=32,数据表的地址位为12位,即信号波形的存储点数为4096点来说明。在相位增量K选择不同的数值时,作为数据表地址输入的相位累加器高位输出变化不相同,相位累加器的累加结果所产生的影响也不相同。当所选择的相位增量K>219时,相位累加器每累加一次,用作数据表地址输入的相位累加器输出的高12位将发生变化,这样输出一个完整周期的波形点数就少于4096点。当相位增量K<219时,用作数据表地址输入的相位累加器输出的高12位可能不发生变化,甚至是在几个连续时钟作用下相位累加器输出的高12位都不发生变化,重复输出一个同样的波形幅度数据,这样输出一个完整周期的波形点数就大于4096点。在相同参考时钟频率下,输出一个完整周期的波形点数的变化使得信号输出周期/频率发生改变。恰当地选择相位增量K的值,就可以获得所需要的输出信号频率。使用键盘输入相位增量的信息就可以实现输出信号频率的调整。方案论证实现一种系统功能或者技术指标一般具有多种可行的设计方案,每一种设计方案都具有它自己的优点和缺点。方案论证的过程是一个折中的过程,设计者需要在所能实现的系统功能、技术指标的精度、成本和所需要的技术条件的支持等方面进行权衡。制作一个基于DDS技术的信号产生器可以通过购买专门的芯片、利用微处理器或者使用可编程逻辑器件等方法来完成。不同的方法具有不同的优点。下面分别对这三种方法进行讨论,通过对它们优缺点的比较,使我们能够更加深入地了解这个技术。10.3.1DDS信号产生器芯片目前多家公司正在生产着多种DDS信号产生器芯片,这些芯片各有特点,其中ADI公司的产品具有一定的代表性。AD9850是ADI公司生产的一种DDS信号产生器芯片,它的功能方框图如图10.2所示。图10.2AD9850的功能方框图AD9850把DDS技术和高速数字/模拟转换器结合在一起,形成一个全数字化、可编程的信号产生器。在一个精确的参考时钟源的控制下,它可以产生一个频谱较纯、频率/相位可编程的模拟正弦信号。这个正弦信号可以被直接用作信号源,它也可以通过AD9850芯片内部的比较器转换成方波信号输出。AD9850的频率控制字为32位;相位控制字为5位;时钟最高频率为125MHz;输出频率调节速率达每秒23M次。AD9850的相位控制字为5位,因此它的输出信号相位能按180°、90°、45°、22.5°、11.25°和上述数值的任意组合值来变化。当采用125MHz的时钟频率时,AD9850的频率分辨率为0.0291Hz,最高输出频率为62.5MHz。AD9850的工作电压为3.3V~5.0V。它的包装形式采用28脚SSOP形式,不能使用面包板来组成电路,必须专门制作印制电路板。它的管脚排列如图10.3所示。图10.3AD9850的管脚排列图AD9850的工作控制可由向它送入40位控制/数据字来实现,工作控制的内容包括输出频率和相位的调整以及使芯片进入/退出低功耗状态控制。控制/数据字可以通过并行或者串行装载的方式送入AD9850。并行装载时,AD9850利用管脚D0~D7组成8位并行数据总线输入数据。40位控制/数据字分5次装入,每次装入8位。每字节的8位数据在管脚W_CLK上信号的上升沿的作用下被装入AD9850。在5个管脚W_CLK上的脉冲信号作用下,40位控制/数据字被装入AD9850。接着在管脚FQ_UD上的脉冲信号上升沿的作用下,AD9850的工作状态被刷新。数据装载的时序图如图10.4所示。图10.4并行数据装载的时序图串行装载时,AD9850的D7引脚和W_CLK引脚组成它的同步串行接口。40位控制/数据字通过AD9850的D7引脚在W_CLK引脚的脉冲信号上升边沿作用下分40次装入。W0在前,W39在后,依次装入。完成40位控制/数据字的装载后,FQ_UD引脚的脉冲信号上升沿刷新AD9850的工作状态,同时复位寄存器指针,准备下一次40位控制/数据字的装入。串行数据装载的时序图如图10.5所示。图10.5AD9850的串行装载时序图并行装载速度快,正弦信号产生器的输出频率调节速率高,40位控制/数据字的装入只需要5个W_CLK信号周期,但是需要8根数据线。串行装载电路简单,AD9850与控制电路之间的连线仅3条,而且作为信号产生器通常也不需要非常高的输出频率调节速率,因此在设计中,AD9850常采用串行装载。使用DDS信号产生器芯片的最大优点是输出信号频率较高,缺点是用户不能修改输出信号波形。利用微处理器实现DDS信号产生器利用微处理器能够实现如图10.1所示的DDS原理图这样的电路结构,即实现相位累加器、希望产生波形的数据表以及数字/模拟转换器的控制时序。输出信号的频率分辨率△f0为:f0=fSYS/2N (10-3)这里fSYS应该是输出一个模拟电压的最高频率,N是相位累加器的位数。相位累加器的位数越多,输出信号的频率分辨率越好,也就是输出信号的频率可以被调整的越准确。如果使用的微处理器数据位数低于相位累加器的位数,这时可以通过多次运算来完成相位累加。例如使用具有8位数据位数的MCS51单片机实现32相位累加器,这时可以通过4次加法运算完成相位累加,每次完成8位数据的加法运算,高字节的加法运算还应该考虑低字节的进位如果希望产生的输出信号为正弦信号,由奈奎斯特定律可知这时输出信号的最高频率f0max为:f0max=fSYS/2 (10-4)利用微处理器完成加法运算需要读取数据、进行运算、再把运算结果送到目标单元。由于微处理器工作的顺序性,因此这时的相位累加频率将比微处理器的时钟频率低得多。这种情况在微处理器数据位数低于相位累加器的位数时更加严重,因为这时需要多次运算才能完成相位累加。综上所述,从原理来说,利用微处理器能够实现DDS技术的电路结构,并能产生所需要的任意信号波形,但是输出信号的最高频率受到很大的限制。使用具有高数据位数和高时钟频率的微处理器在一定程度上可以克服这个缺点,但这将导致成本提高。10.3.3利用可编程逻辑器件实现DDS信号产生器微处理器程序执行的顺序性限制了它的工作速度,可编程逻辑器件的并行工作能力使它在需要高速工作的场合非常适用。利用可编程逻辑器件也能够实现如图10.1所示的DDS原理图这样的电路结构,即实现相位累加器、希望产生波形的数据表以及数字/模拟转换器的控制时序。相位累加器可以使用VHDL代码非常容易地实现,具体代码如代码示例10.1。代码示例10.1:--代码示例10.1--相位累加器的VHDL语言描述LIBRARY ieee; --打开IEEE库USE ieee.std_logic_1164.ALL; --打开STD_LOGIC_1164包集USE ieee.std_logic_unsigned.ALL; --打开STD_LOGIC_unsigned包集ENTITYl1001IS --定义实体PORT(clk:INSTD_LOGIC; --定义时钟输入端口 fre:INSTD_LOGIC_vector(31DOWNTO0);--定义32位频率字 add_pio:OUTSTD_LOGIC_vector(9DOWNTO0)); --定义波形数据表10位地址端口END l1001; --实体结束语句ARCHITECTUREl1001OFl1001IS --定义结构体BEGIN --开始电路功能描述 PROCESS(clk,fre) --定义描述相位累加器的进程VARIABLEphase:STD_LOGIC_VECTOR(31DOWNTO0); --定义32位相位累加器 BEGIN --开始进程 IF(clk'EVENTANDclk='1')THEN --判断时钟是否有效 phase:=phase+fre; --实现相位累加 add_pio<=phase(31DOWNTO22); --截取相位累加器高10位产生波形数 --据表的10位地址 ENDIF; --条件结束语句 ENDPROCESS; --进程结束语句ENDl1001; --结构体结束语句在代码示例10.1中,输入端口fre代表进入相位累加器的频率字。变量phase代表相位累加器,每来一个时钟完成一次相位累加。相位累加器输出的高10位用来做波形数据表的地址,由输出管脚add_pio的输出。如果使用EPF10K10LC84-4作为目标器件,代码示例10.1编译以后需要占用12%的逻辑单元(LogicElements,LE)。该代码示例的仿真波形如图10.6所示,完成一次相位累加以及输出所产生的10位波形数据表地址最少需要15ns,对应的最高的参考时钟频率fc可达66MHz。图10.6相位累加器工作仿真波形图ALTERA公司的可编程逻辑器件包括复杂可编程逻辑器件(CPLD)和现场可编程门阵列(FPGA),前者例如EPM7128SLC84-15芯片,后者例如EPF10K10LC84-4芯片。对于代码示例10.1,使用这两种器件没有区别。如果考虑所使用的可编程逻辑器件同时实现波形数据表,那么使用现场可编程门阵列(FPGA)更加合适,因为这种器件具有内部嵌入式阵列块(EmbeddedArrayBlock,EAB),这些内部嵌入式阵列块可以作为内部的各种存储器使用。FPGA的这种特点是CPLD所不具备的,在使用CPLD时,形成存储器是很困难的。在第8章介绍了利用QuartusⅡ开发软件提供的参数可调整模块(LPM)定制只读存储器(ROM)的方法。EPF10K10LC84-4芯片的内部嵌入式阵列块具有6144位,如果希望产生波形的数据表需要256字节,每字节10位,将需要2560位,占内部嵌入式阵列块资源的42%。使用EPF10K10LC84-4作为目标器件,只读存储器的仿真波形如图10.7所示。只读存储器完成一次数据读取至少需要40ns,因此这时对应的最高参考时钟频率fc可达25MHz。图10.7波形数据表仿真波形图综上所述,利用可编程逻辑器件也能够实现如图10.1所示的DDS原理图这样的电路结构。虽然从波形数据表读取数据的时间大于完成一次相位累加需要的时间,但是这比常用的数字/模拟转换器的转换时间小得多。利用可编程逻辑器件实现DDS信号产生器所产生的最高输出信号频率比使用微处理器高,但是仍然低于DDS专用芯片。系统设计系统设计的目的是使复杂问题简单化。通过系统设计这个过程,设计者可以把应用系统划分成一系列子系统。每个子系统实现一种独立的功能,这样不仅可以简化电路的设计,而且方便多个设计者合作完成设计工作。应用可编程逻辑器件的应用系统设计包括硬件电路设计和软件程序设计两部分,因此系统设计也对应地包括这两个部分。10.4.1硬件电路的系统设计基于ALTERA公司的现场可编程门阵列(FPGA)器件EPF10K10LC84-4设计的正弦信号产生器硬件电路组成框图如图10.8所示。它包括显示电路、键盘电路、DDS核电路、数字/模拟转换器电路、模拟信号放大电路和低通滤波器。图10.8正弦信号产生器硬件电路组成框图图10.8所示的正弦信号产生器的输出频率由键盘控制。由于输出信号频率包含多位数据,因此在使用键盘输入信息的过程之中,输出信号频率需要保持不变。当所有信息输入完成之后,通过按下执行键(ENTER),刷新DDS核的输入频率字,使得输出信号频率发生相应的变化。显示电路在这里也是既被用来显示输出信号的频率值,也被用来显示键盘电路的调整过程。小型系统的显示电路常采用数码管或者液晶显示器件。前者电路简单;后者不仅可以显示数据,而且可以显示字符。为简化设计,这里采用数码管。DDS核电路包括相位累加器和希望产生波形的数据表,这部分使用现场可编程门阵列来实现。现场可编程门阵列不仅实现DDS核电路,而且实现键盘输入的处理、显示数据的译码以及数字/模拟转换器的控制时序。由波形的数据表输出的数据波形通过数字/模拟转换器的控制代码送到数字/模拟转换器DAC7611,产生需要的正弦信号。DAC7611是一种具有串行同步接口的12位数字/模拟转换器,使用该器件电路简单,但是它的转换速率对输出信号的最高频率有影响。数字/模拟转换器输出的正弦信号是由许多小台阶来模拟产生的,基于DDS原理的信号源,无论它的工作频率如何,这些小台阶的周期都是一个确定值,因此一个上限频率确定的低通滤波器可以被用来滤除输出信号中的谐波分量。电路中所使用运算放大器的频带宽度需要被仔细考虑以满足输出频率范围的要求。由于随着工作频率的提高,运算放大器的放大倍数将下降,因此需要选择具有足够工作频率范围的运算放大器器件。另外,通过合适地选择运算放大器的器件型号还可以同时实现低通滤波器的作用。由于本书的目的是介绍可编程逻辑器件的使用,因此在下一节的单元电路设计中只介绍与现场可编程门阵列器件有关的电路设计,即显示电路、键盘电路、相位累加器、波形的数据表以及数字/模拟转换器的控制,运算放大器和低通滤波器的设计将不被涉及,有兴趣的读者请参考其它资料。系统代码框图图10.9正弦信号产生器的系统代码框图在图10.9所示正弦信号产生器的系统代码框图中,键盘识别模块用来完成按键有效的识别,并产生相应的按键有效信号。由于输入的频率包括多位有效数字,键盘输入处理模块需要识别当前正在调整的数位,并根据具体情况调整对应数位的数值。输入的信号频率值采用十进制,单位为Hz。这个频率值一方面被送到显示模块,一方面被送到译码模块。在显示模块中,这个频率值也要进行译码,转换成对应的显示代码,用来驱动多位七段数码管。在译码模块中,这个频率值将被转换为对应的频率字送到相位累加器。频率数值到对应的频率字的转换包括两个过程:输入频率的多位有效数字被合成为一个数据;十进制数制到二进制数制的转换。控制时钟有效时,频率字中的数据加入相位累加器。相位累加器循环累加,进位将被丢弃。它的溢出率即为输出信号的频率,改变频率字就可以改变这个溢出率,从而实现输出信号频率的调整。为提高输出信号频率的分辨率,相位累加器的位数高于波形数据表的地址位数,因此需要截取相位累加器输出的部分高数据位来产生需要的地址。波形数据表输出其地址对应的波形数据到数字/模拟转换器控制模块。在数字/模拟转换器控制模块中,波形数据被编入控制时序中,结合其它所需要的控制信息一起以串行同步的数据传输方式被送到数字/模拟转换器。单元电路设计10.5.1数字/模拟转换器系统中的数字/模拟转换器芯片采用美国BURR-BROWN公司生产的DAC7611数字/模拟转换器芯片。采用该芯片并没有特殊的理由,只是作者经常使用这种芯片。另外这里并没有一个必须要达到的技术指标,我们的目的是通过一个完整的设计过程来学习如何进行应用系统设计。在第七章的第五节已经对DAC7611数字/模拟转换器进行了介绍。这个介绍包括芯片管脚、电路连接、技术指标、控制时序以及实现控制时序的VHDL代码。实现控制时序的VHDL代码如代码示例7.6所示。完成硬件电路设计和软件编程,还需要对单元的工作情况进行测试。对于DAC7611数字/模拟转换器电路的测试包括数字/模拟转换的精度和速率两个方面。前者的不理想将导致模拟信号的失真,后者的不理想将限制模拟信号的最高频率。■DAC7611的转换精度转换精度的测量可以通过把代码示例7.6下载到现场可编程门阵列(FPGA)器件EPF10K10LC84-4之中来实现。时钟信号clock可以由信号产生器或者晶体振荡器产生,这里时钟信号频率采用1MHz。复位信号reset和数据d_in由开关或者利用导线直接连接可编程逻辑器件的相关管脚到电源端或者接地端来产生。输出信号sdi、clk、cs和ld与DAC7611数字/模拟转换器的相关管脚连接。每次测量数据时,首先通过开关或者利用导线完成待转换数据的设置,然后产生高电平的复位信号,取掉复位信号之后将启动数字/模拟转换过程,最后在DAC7611数字/模拟转换器的输出端测量模拟电压。实测结果如表10.1所示。表10.1DAC7611数字/模拟转换器的输出电压输入数据输出电压理想值(mV)输出电压实测值(mV)绝对误差(mV)相对误差(%)000H011200H51251530.59400H1024102840.39600H1536154260.39800H2048205020.10A00H25602570100.39C00H3072308080.26E00H3584359060.17FFFH4095409720.05产生一次高电平的复位信号,代码示例7.6将执行一次。完成一次数字/模拟转换,然后等待下一次的高电平复位信号。表10.1所示的实测结果可以用来分析产生信号波形的失真。由于篇幅的关系,表10.1只给出9个点的实测结果。如果希望分析所产生信号波形的失真情况,应根据分析要求的精度来决定需要测量的点数,利用给定的数字量和实测的模拟量将可以获得数字/模拟转换器的传输特性。■DAC7611的转换速率由图7.8所示的数字/模拟转换器DAC7611的工作时序图可以看出,它的工作可以分为两步:接收数据和完成数字/模拟转换。接收数据采用串行同步接口,每来一个时钟,接收一位数据。从DAC7611的数据手册得到,时钟最小周期为60ns,完成12位数据需要720ns。完成数字/模拟转换比较慢,这个过程需要7us。数据接收和数字/模拟转换是相互独立的,在信号产生器设计中数字/模拟转换器需要连续工作,因此可以把数据接收需要的时间和数字/模拟转换需要的时间设置为相等。DAC7611最大转换速率测量可以通过向它传送循环迭加的数据来实现,这时数字/模拟转换器将输出锯齿波。逐渐加大系统的时钟信号频率,由观察输出信号的波形是否失真可以获得完成数字/模拟转换的最小时间,即数字/模拟转换的速率。最大转换速率测量代码包括3部分:代码示例7.6所示的DAC7611控制时序VHDL代码模块、DAC7611输入数据产生代码模块以及控制上述两个部分协调工作的控制代码模块。代码示例7.6所示的DAC7611控制时序VHDL代码完成一次包括发送数据和启动数字/模拟转换的完整过程至少需要26个状态,或者需要26个输入时钟。为简化代码设计以及测量数据的处理,控制DAC7611时序产生代码模块和输入数据产生代码模块两个部分协调工作的控制代码模块使用30个输入时钟为一个工作周期。控制代码模块在每个周期开始的前几个时钟产生正脉冲,这个正脉冲用作DAC7611的复位信号reset和输入数据产生代码模块的计数信号。复位信号reset结束的时候,输入数据产生代码模块已经完成数据调整,控制DAC7611时序产生代码模块把这个数据发送到数字/模拟转换器。输入数据产生代码模块包含12位加法计数器,在控制代码模块产生的正脉冲作用下完成加法,加数的数值取决于每个锯齿波周期包含的阶梯数。控制代码模块产生的正脉冲频率就是数字/模拟转换速率,这个速率为时钟频率的三十分之一。时钟信号频率从1MHz开始往上调,当调节到4MHz时发现示波器上显示的锯齿波出现失真。按照前面的描述,计算出DAC7611的最高数字/模拟转换速率为140KHz。根据前面介绍的DDS理论,使用DAC7611数字/模拟转换器来产生正弦波的最高频率为70KHz。事实上,产生一个完整周期的正弦波信号至少需要30个输出点,这样这时产生的正弦波最高频率约为5KHz。10.5.2波形数据表ALTERA公司的现场可编程门阵列(FPGA),例如EPF10K10LC84-4芯片,具有内部嵌入式阵列块(EmbeddedArrayBlock,EAB),它们可以作为存储波形数据表的存储器使用。在第8章介绍了利用QuartusⅡ开发软件提供的参数可调整模块(LPM)定制只读存储器(ROM)的方法。这里主要讨论如何选择存储器需要的字数和每个字的位数。由表10.1所示的DAC7611数字/模拟转换器的输出端模拟电压测量结果可以看出,输出模拟电压的实测数值与理想数值之间存在着误差,这个误差的最大值为10mV。由最大绝对误差可以确定存储器中每个被存储数据的位数,因为理论上数据的位数越多,数据越准确,但是实际工作中如果器件的精度达不到则并不能获得希望的指标,同时无效的数据位将浪费存储器的资源。DAC7611为12位数字/模拟转换器,理想情况下,当输入的数字量为000H时,它的模拟输出电压为0V;当输入的数字量为FFFH时,它的模拟输出电压为4.095V,即它的最大模拟输出电压为4.095V。输入的数字量每改变1位,输出的模拟电压改变1mV。由于输出模拟电压的实测数值与理想数值之间具有10mV的最大绝对误差,所以DAC7611输入数据的低3位对输出模拟电压的影响是不确定的。考虑到输出模拟电压的实测数值与理想数值之间存在的误差,波形数据表中每个存储单元采用10位。这10位数据被传送到DAC7611数字/模拟转换器的高10位,数字/模拟转换器的低2位可以赋为0。合理地选择每个数据占用的数位可以节约存储器的资源,同样合理地选择波形数据表中的字数也可以在保证输出信号波形质量的同时也尽量地节约存储器的资源。本设计需要产生正弦信号波形,我们希望波形数据表中相邻波形数据的变化量小于数字/模拟转换器的最小分辨率。由于正弦信号在0°附近变化率最大,波形数据表中的数据具有10位,正弦数据的幅度值对应9位,因此利用下式可以确定最小角度分辨率。SIN△θ=1/512 (10.5)由(10.5)解得△θ为0.112°。EPF10K10LC84-4芯片的内部嵌入式阵列块具有6144位,如果希望产生波形的数据表中每个数据具有10位,那么可以存储610个数据,这时对应的最小角度分辨率为:360°/610=0.59°由于EPF10K10LC84-4芯片的内部嵌入式阵列块资源的限制,它达不到需要的要求,这将影响输出模拟信号的质量。解决这个问题的方法可以采用具有更多内部嵌入式阵列块资源的芯片。如前所述,这里的主要目的是介绍应用系统的设计方法和设计报告的撰写方法,因此本设计波形数据表中的字数选为256,对应的波形数据表中数据的最小角度分辨率为1.4°,需要的地址线宽度为8位。使用EPF10K10LC84-4作为目标器件,利用QuartusⅡ开发软件提供的参数可调整模块(LPM)定制具有256字,每字10位的只读存储器(ROM)。该存储器完成一次数据读取约需要40ns,这时的最高参考时钟频率fc可达25MHz,这个时钟频率比140KHz的DAC7611最高数字/模拟转换速率高得多。10.5.3相位累加器代码示例10.1给出一个具有32位的相位累加器的代码举例,它的输出地址宽度为10位。本小节重点讨论讨论相位累加器位数的选取。相位累加器的位数决定输出模拟信号的频率分辨率:f0=fc/2N (10.6)如果设计的信号产生器采用3个数码管显示工作频率,例如显示的工作频率范围是1Hz~999Hz,那么需要的频率分辨率只要达到0.1Hz就可以满足要求。如前所述,DDS信号源包括相位累加器、波形数据表以及数字/模拟转换器。使用EPF10K10LC84-4作为目标器件,参考图10.6,完成一次相位累加需要15ns,即它的时钟频率最高可达66MHz。波形数据表完成数据读取的最高参考时钟频率可达25MHz,DAC7611数字/模拟转换器的最高频率为140KHz。DAC7611数字/模拟转换器的工作速度限制了系统的工作速度。由于普通电子器件供应商提供的晶体工作频率种类有限,这里选取参考时钟频率fc为100KHz,如果选择30个工作状态完成一次模拟电压输出,那么使用3MHz的晶体即可。输出信号的频率分辨率△f0为0.1Hz,由式(10.6)可以计算出需要的相位累加器位数N为22位即可满足要求。通过修改代码示例10.1中代表频率字、相位累加器以及输出波形数据表地址的位数就可以获得满足本设计的相位累加器的VHDL代码。10.5.4显示电路正弦信号产生器采用数码管来显示工作状态。为简化设计,显示电路包括3位数码管,用来显示1Hz~999Hz的输出信号频率。数码管有共阴极和共阳极两种类型。前者在使用时管脚COM应接低电平,当数码管其余的某个管脚接高电平,则该管脚对应的发光段被点亮;后者在使用时管脚COM应接高电平,当数码管其余的某个管脚接入低电平,则该管脚对应的发光段被点亮。数码管的管脚a~g可以直接与可编程逻辑器件的输入/输出管脚连接或者通过一个限流电阻再与可编程逻辑器件的输入/输出管脚连接。如果数码管的管脚a~g通过一个限流电阻再与可编程逻辑器件的输入/输出管脚连接,那么管脚COM可以直接与电源或者地连接;如果数码管的管脚a~g直接与可编程逻辑器件的输入/输出管脚连接,那么管脚COM必须通过一个限流电阻再与电源或者地连接。显示电路不使用数码管的小数点,数码管的管脚dp可以开路。采用数码管的管脚a~g中的每一个管脚通过一个限流电阻再与可编程逻辑器件的输入/输出管脚连接的方法在显示不同字符的时候亮度一致,但是需要7个限流电阻;采用管脚COM通过一个限流电阻与电源或者地连接的方法,只需要一个限流电阻,但是在显示不同字符的时候亮度不一致。限流电阻被用来防止电流过大损坏电路器件。由于不同型号的发光二极管的技术参数不同,应根据具体情况来确定限流电阻的阻值,限流电阻的取值范围是100Ω~1kΩ。为保证电路的安全,限流电阻开始可以选取大一些,如果数码管的亮度不够,再逐渐减小限流电阻的值,直到数码管的亮度满足要求。三个数码管电路设计为独立工作,它们各自接收需要显示的数据。准备显示的数据在可编程逻辑器件中进行译码,产生的显示代码被送到7段数码管实现数据的显示。由于三个数码管电路完全一样,下面给出其中一路的VHDL代码,该代码支持共阴极数码管的工作。修该代码中的显示代码,代码示例10.2可以很方便地用于支持共阳极数码管的工作。代码示例10.2:--代码示例10.2--共阴极7段数码管显示的VHDL语言描述LIBRARY ieee; --打开IEEE库USE ieee.std_logic_1164.ALL; --打开STD_LOGIC_1164包集ENTITYl1002IS --定义实体PORT(data:INSTD_LOGIC_vector(3DOWNTO0);--定义显示数据输入端口 seven_seg:OUTSTD_LOGIC_vector(6DOWNTO0)); --定义显示代码输出端口END l1002; --实体结束语句ARCHITECTUREl1002OFl1002IS --定义结构体BEGIN --开始电路功能描述 WITHdataSELECT --显示数据到显示代码的转换 seven_seg<=“0111111”WHEN“0000”, “0000110”WHEN“0001”, “1011011”WHEN“0010”, “1001111”WHEN“0011”, “1100110”WHEN“0100”, “1101101”WHEN“0101”, “1111101”WHEN“0110”, “0000111”WHEN“0111”, “1111111”WHEN“1000”, “1101111”WHEN“1001”, “0000000”WHENOTHERS;ENDl1002; --结构体结束语句代码示例10.2接收准备显示的一位数据,该数据采用BCD码。输入的BCD码译码以后通过可编程逻辑器件的输入/输出管脚送到数码管的输入管脚。输出端口seven_seg的7位数据按照从低到高的顺序依次送到数码管的管脚a~g。完成代码示例10.2的调试以后,该代码段可以形成一个符号,在原理图编辑中利用这个符号实现三个数码管的显示电路。10.5.5键盘电路键盘是一组按键开关的集合。像数码管一样,键盘也是应用系统的一个关键部件。按键开关具有2个状态,闭合或者断开。这2个状态反映在电压上就是按键开关呈现出高电平或者低电平。如果按键开关呈现高电平表示它断开,那么按键开关呈现低电平表示它闭合,因此通过检测按键开关呈现的电平状态就可以确认按键开关是否被按下。常用的键盘有独立式键盘和矩阵式键盘。前者电路结构和软件结构都比较简单,但是每一个按键开关需要占用一个输入/输出管脚。后者电路结构和软件结构都比较复杂,但是占用较少的输入/输出管脚,例如一个3×3的矩阵式键盘包含9个按键开关,只需要6个输入/输出管脚;一个4×4的矩阵式键盘包含16个按键开关,只需要8个输入/输出管脚。在键盘包含的按键开关较少的情况下,例如只包含4个按键开关,独立式键盘占用的输入/输出管脚数量是可以接受的。具有4个按键的独立式键盘电路如图10.10所示。图10.10独立式键盘电路在图10.10所示的电路中,4个按键开关分别与4个不同的输入/输出管脚相连接。这里的按键开关采用常开开关,即在没有执行按键动作的时候,开关是断开的。当某个开关断开时,对应的输入/输出管脚通过一个限流电阻与电源VCC相连接,这时该管脚输入高电平。合理选择限流电阻的阻值使得流入可编程逻辑器件的电流被限制在要求的范围之内,并且当开关闭合时对电源进行保护。限流电阻的推荐值为10kΩ。当某个按键开关被按下,对应的输入/输出管脚被接地,这时该管脚的输入是低电平。键盘中的4个按键分别扮演2个不同的用途:输入数据和刷新DDS的频率状态字。输入数据通过按键KEY0、KEY1和KEY2实现,其中按键KEY0被用来调整输出信号频率的个位;按键KEY1被用来调整输出信号频率的十位;按键KEY2被用来调整输出信号频率的百位。按键KEY3被用来刷新DDS的频率状态字,因此它被称作为执行键(ENTER)。在输入数据的过程中,输出信号的频率保持原数值,这时只改变对应的数据存储单元的内容,并利用数码管把当前内容显示出来以方便数据调整。当按下执行键(ENTER),输入的频率值被转换成新的DDS的频率状态字。数据调整键KEY0、KEY1和KEY2中的每一个都对应一个存储单元,每按一次按键,该按键对应的存储单元的内容加一。这个过程一直到内容为9,再次按键将使得存储单元的内容清零。为避免一次按键导致存储单元的内容变化太大,键盘电路的时钟应该选得较低,例如1Hz。在按键被按下,同时时钟信号的前沿到来时,该按键对应的存储单元的内容加一,利用数码管把当前内容显示出来。当显示的数值为需要的数据时,释放按键。输入的频率值与DDS的频率状态字之间的关系为:f0=fc×K/2N在这里,fc=100KHz;相位累加器的位数为N=21。正弦信号产生器的输出信号频率f0与频率控制字K的关系如表10.2所示。表10.2输出信号频率f0与频率控制字K的关系输出信号频率fo频率控制字K输出信号频率fo频率控制字K输出信号频率fo频率控制字K1Hz1010B10Hz1101000B100Hz10000011000B2Hz10100B20Hz11010001B200Hz100000110001B3Hz11111B30Hz100111010B300Hz110001001001B4Hz101001B40Hz110100011B400Hz1000001100010B5Hz110100B50Hz1000001100B500Hz1010001111010B6Hz111110B60Hz1001110101B600Hz1100010010011B7Hz1001001B70Hz1011011110B700Hz1110010101100B8Hz1010011B80Hz1101000110B800Hz10000011000100B9Hz1011110B90Hz1110101111B900Hz10010011011101B正弦信号产生器的输出信号频率f0与频率控制字K的关系表可以实现译码电路。当执行键(ENTER)被按下时,首先分别由数据调整键KEY0、KEY1和KEY2中对应存储单元中的数据通过查表获得对应的频率字;然后把这3个频率字相加,获得输出信号频率要求的频率字。键盘部分的VHDL代码如代码示例10.3所示。代码示例10.3:--代码示例10.3--键盘部分的VHDL语言描述LIBRARY ieee; --打开IEEE库USE ieee.std_logic_1164.ALL; --打开STD_LOGIC_1164包集USE ieee.std_logic_unsigned.ALL; --打开STD_LOGIC_unsigned包集ENTITYl1003IS --定义实体 PORT(clk_1hz:INSTD_LOGIC; --定义时钟输入端口 key_data:INSTD_LOGIC_VECTOR(3DOWNTO0); --定义按键输入端口 seven_sega,seven_segb,seven_segc:OUTSTD_LOGIC_VECTOR(3DOWNTO0); --定义显示代码输出端口 fre:OUTSTD_LOGIC_VECTOR(21DOWNTO0)); --定义频率字输出端口END l1003; --实体结束语句ARCHITECTUREl1003OFl1003IS --定义结构体 SIGNALkey_rama,key_ramb,key_ramc:STD_LOGIC_VECTOR(3DOWNTO0); BEGIN --开始电路功能描述 PROCESS(clk_1hz,key_data) --定义键盘处理的进程 VARIABLEfre_a,fre_b,fre_c:STD_LOGIC_VECTOR(21DOWNTO0); --定义输出频率每1位对应频率字 BEGIN --开始进程 IF(clk_1hz'EVENTANDclk_1hz='1')THEN--判断时钟是否有效 IF(key_data="1110")THEN --判断按键key0是否按下 IF(key_rama<"1001")THEN --判断对应的存储器内容是否小于9 key_rama<=key_rama+1; --小于9,内容加1 ELSE key_rama<="0000"; --不小于9,内容清0 ENDIF; --条件结束语句 ENDIF; --条件结束语句 IF(key_data="1101")THEN --判断按键key1是否按下 IF(key_ramb<"1001")THEN --判断对应的存储器内容是否小于9 key_ramb<=key_ramb+1; --小于9,内容加1 ELSE key_ramb<="0000"; --不小于9,内容清0 ENDIF; --条件结束语句 ENDIF; --条件结束语句 IF(key_data="1011")THEN --判断按键key2是否按下 IF(key_ramc<"1001")THEN --判断对应的存储器内容是否小于9 key_ramc<=key_ramc+1; --小于9,内容加1 ELSE key_ramc<="0000"; --不小于9,内容清0 ENDIF; --条件结束语句 ENDIF; --条件结束语句 IF(key_data="0111")THEN --判断按键key3是否按下 CASEkey_ramaIS --把输入数据转换成对应的频率字 WHEN"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"; WHENOTHERS=>NULL; ENDCASE; --选择结束语句 CASEkey_rambIS --把输入数据转换成对应的频率字 WHEN"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"; WHENOTHERS=>NULL; ENDCASE; --选择结束语句 CASEkey_ramcIS --把输入数据转换成对应的频率字 WHEN"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"; WHENOTHERS=>NULL; ENDCASE; --选择结束语句 ENDIF; --条件结束语句 ENDIF; --条件结束语句 fre<=fre_a+fre_b+fre_c; --产生输出频率对应的频率字 ENDPROCESS; --进程结束语句 seven_sega<=key_rama; --输出工作频率个位数据 seven_segb<=key_ramb; --输出工作频率十位数据 seven_segc<=key_ramc; --输出工作频率百位数据ENDl1003; --结构体结束语句图10.11为代码示例10.3的仿真波形图。该图描述了逐次按下按键KEY0、KEY1、KEY2和KEY3代码示例10.3的工作情况。当按下数据调整键时,对应的数据存储器内容被调整,该内容以BCD码的形式送出;当按下执行键(ENTER)时,3个数据调整键对应的数据存储器内容分别被转换成频率字,接着把这3个频率字通过相加形成要求的输出信号频率对应的频率字。如果按住数据调整键,每来一个时钟信号的前沿,该数据调整键对应的数据存储器内容加1,利用这种方法可以较快地调整输出频率。由于输出信号的频率是通过数码管进行观察,因此时钟频率不能太高。图10.11代码示例10.3仿真波形图系统连调10.6.1各种时钟的产生本小节设计信号产生器系统所需要的各种时钟的产生电路。系统可以被划分为两个部分:包括键盘电路和数码管显示电路的人机界面;DDS核电路以及数字/模拟转换器控制代码的产生模块。前者的时钟可以直接由系统时钟通过分频获得;后者不仅需要产生多种频率的时钟信号,而且这些信号之间还需要满足一定的时间关系。为了更好地产生DDS核电路以及数字/模拟转换器控制代码的产生模块需要的各种时钟信号,这里再次回顾这部分的工作过程:相位累加器接收从键盘电路送来的频率字,在它的时钟信号的作用下完成相位累加;相位累加器的高8位输出作为波形数据表的地址,在该地址信号稳定以后,波形数据表在它的时钟信号的作用下把地址对应的波形数据送出;在波形数据信号稳定以后,DAC7611数字/模拟转换器开始装入控制信号,完成一次控制信号的装入需要26个时钟信号。由于DAC7611数字/模拟转换器完成一次转换的时间远大于其它部分所需要的时间,这里首先确定它的工作速度。为方便晶体的选择,这里采取100KHz的数字/模拟转换速率。考虑到完成一次数字/模拟转换需要26个时钟信号,因此选择系统时钟clk_sys频率为3MHz,周期为333ns。以系统时钟为基准,30个状态为一个循环产生各种时钟信号。每个状态循环的第0个状态的1个周期产生相位累加器的时钟信号;第1个状态的1个周期产生波形数据表读取数据的时钟信号;第0个状态到第2个状态的3个周期产生DAC7611数字/模拟转换器控制代码的复位信号。当数字/模拟转换器控制代码的复位信号变为低电平以后,在系统时钟clk_sys的作用下,DAC7611数字/模拟转换器开始装入控制信号。控制时钟产生电路的VHDL代码如代码示例10.4所示。代码示例10.4:--代码示例10.4--控制时钟产生电路的VHDL语言描述LIBRARY ieee; --打开IEEE库USE ieee.std_logic_1164.ALL; --打开STD_LOGIC_1164包集ENTITYl1004IS --定义实体 PORT(clk_sys:INSTD_LOGIC; --定义系统时钟输入端口 clk_1hz:OUTSTD_LOGIC; --定义键盘时钟输出端口 clk_phses:OUTSTD_LOGIC; --定义相位累加器时钟输出端口 clk_data:OUTSTD_LOGIC; --定义波形数据表读数时钟输出端口 reset_dac:OUTSTD_LOGIC); --定义DAC7611复位信号输出端口END l1004; --实体结束语句ARCHITECTUREl1004OFl1004IS --定义结构体 SIGNALaqi:INTEGERRANGE0TO29; --定义30个状态信号 SIGNALbqi:INTEGERRANGE0TO2999999; --定义产生1Hz键盘时钟的分频信号 BEGIN --开始电路功能描述 PROCESS(clk_sys) --定义状态产生的进程BEGIN --开始进程 IF(clk_sys'EVENTANDclk_sys='1')THEN --判断系统时钟是否有效 IF(aqi<29)THEN --判断是否产生30个状态 aqi<=aqi+1; --不到30个状态,状态调整 ELSE --到30个状态 aqi<=0; --状态初始化 ENDIF; --条件结束语句 ENDIF; --条件结束语句ENDPROCESS; --进程结束语句PROCESS(clk_sys,aqi) --定义相位累加器时钟产生的进程BEGIN --开始进程 IF(clk_sys'EVENTANDclk_sys='1')THEN --判断系统时钟是否有效 IF(aqi=0)THEN --判断是否满足输出时钟条件 clk_phses<=‘1’; --满足条件,输出时钟 ELSE --不满足条件 clk_phses<=‘0’; --不输出时钟ENDIF; --条件结束语句 ENDIF; --条件结束语句ENDPROCESS; --进程结束语句PROCESS(clk_sys,aqi) --定义波形数据表读数时钟产生的进程BEGIN --开始进程 IF(clk_sys'EVENTANDclk_sys='1')THEN --判断系统时钟是否有效 IF(aqi=1)THEN --判断是否满足输出时钟条件 clk_data<=‘1’; --满足条件,输出时钟 ELSE --不满足条件 clk_data<=‘0’; --不输出时钟ENDIF; --条件结束语句 ENDIF; --条件结束语句ENDPROCESS; --进程结束语句PROCESS(clk_sys,aqi) --定义波形数据表读数时钟产生的进程BEGIN --开始进程 IF(clk_sys'EVENTANDclk_sys='1')THEN --判断时钟是否有效 IF(aqi<2)THEN --判断是否满足输出时钟条件 reset_dac<=‘1’; --满足条件,输出时钟 ELSE --不满足条件 reset_dac<=‘0’; --不输出时钟ENDIF; --条件结束语句 ENDIF; --条件结束语句ENDPROCESS; --进程结束语句PROCESS(clk_sys) --定义1Hz时钟产生的进程BEGIN --开始进程 IF(clk_sys'EVENTANDclk_sys='1')THEN --判断系统时钟是否有效 IF(bqi<2999999)THEN --判断是否达到分频数 bqi<=bqi+1; --不到分频数,调整计数 clk_1hz<=‘0’; --不输出时钟 ELSE --达到分频数 bqi<=0; --计数清零 clk_1hz<=‘1’; --输出1Hz时钟 ENDIF; --条件结束语句 ENDIF; --条件结束语句ENDPROCESS; --进程结束语句ENDl1004
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西省丰城四中2025年高三下第一次模拟考试化学试题含解析
- 天津滨海汽车工程职业学院《电工电子综合实践》2023-2024学年第二学期期末试卷
- 银川能源学院《口腔颌面外科学实验一》2023-2024学年第二学期期末试卷
- 岳西县2024-2025学年数学四下期末教学质量检测模拟试题含解析
- 伊犁职业技术学院《儿童歌曲伴奏与弹唱》2023-2024学年第二学期期末试卷
- 山西经贸职业学院《基础化学实验Ⅱ》2023-2024学年第二学期期末试卷
- 宁夏银川市名校2025年初三数学试题第一次联合调考3月联考试题含解析
- 南京航空航天大学金城学院《基因组与蛋白质组学》2023-2024学年第二学期期末试卷
- 西南科技大学《机场工程概论》2023-2024学年第二学期期末试卷
- 江西应用技术职业学院《跨文化交际》2023-2024学年第二学期期末试卷
- 2025年上半年江苏宿迁经济技术开发区人力资源限公司招聘12人易考易错模拟试题(共500题)试卷后附参考答案
- 《ABO血型鉴定》课件
- 【五年级下册语文】 第六单元习作《神奇的探险之旅》
- 2025届新高考生物冲刺易错知识点梳理
- 《孔雀鱼组》课件
- 2024年河南质量工程职业学院高职单招职业技能测验历年参考题库(频考版)含答案解析
- 《习近平法治思想概论(第二版)》 课件 11.第十一章 坚持依法治国、依法执政、依法行政共同推进法治国家、法治政府、法治社会一体建设
- 2024版编剧网络剧保密及收益分配协议3篇
- 2025年道德与法治二轮专题复习课件:生命安全与健康教育
- 2024年全国“纪检监察”业务相关知识考试题库(附含答案)
- 湖南长沙长郡中学2025届高考英语二模试卷含解析
评论
0/150
提交评论