第8章 应用VHDL语言方法设计简易正弦波信号发生器

更新时间:2023-09-27 23:40:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第8章 应用VHDL语言方法设计简易正弦波信号发生器

【要求】

掌握运用VHDL语言设计正弦波形发生器的基本方法 【知识点】

? 理解函数发生器的含义 ? 理解VHDL设计正弦波形发生器 ? 理解FPGA对D/A的接口和控制技术 【重点和难点】

? VHDL设计正弦波形发生器 ? FPGA对D/A的接口和控制技术

§8.1 工作任务的陈述与背景 一、工作任务

用VHDL语言方法设计一个正弦波形发生器。 基本要求:

①学习VHDL设计正弦波形发生器; ②掌握FPGA对D/A的接口和控制技术。

完成波形发生器的设计、仿真测试及实验系统上的硬件测试。 二、任务背景

自20世纪60年代以来信号发生器有了迅速的发展,出现了函数发生器。作为电子系统的重要组成部分,它广泛地应用在电子技术实验、自动控制系统和其他科研领域。早期的信号发生器多采用模拟电子技术,电路形式有采用运放及分离元件构成,也有采用单片集成函数发生器专用芯片。

但采用模拟电路组成的函数信号发生器,一般可靠性较差,频率输出精度、稳定度低,调节不够精确,设计过程复杂、困难,功能不易扩展,尤其对任意波信号产生较为困难,难以满足科研和高精度实验的需要。现代高精度函数发生器设计采用了EDA技术,不但大大缩短了开发研制周期,提高了设计效率,输出信号频率精度和稳定度有很大提升,而目使系统具有结构紧读、设计灵活、实现简单、性能稳定的特点。 本章着重介绍采用EDA技术,应用VHDL语言,在ALTERA公司的QuartusⅡ软件环境下,完成频率可调的正弦波发生器的程序设计过程,并进行逻辑综合、仿真和硬件下载,产生正弦波信号。

§8.2 完成工作任务的引导 一、资讯

要完成本任务,需要了解以下方面的知识。 1.函数(波形)信号发生器的定义和作用

函数(波形)信号发生器能产生某些特定的周期性时间函数波形(C n1,弦波、方波、二角波、锯齿波和脉冲波等)信号,频率范围可从几个微赫到几十兆赫。函数信号发生器在电路实验、设备检测、通信、宙达、导航、宇航等领域中具有十分广泛的用途。本次设计只是简单完成正弦波输出的功能。

2.直接数字合成器DDS ( Direct Digtal Synthesizer)知识

DDS中变要包括频率控制寄存器、高速相位累加器和正弦计算器二个部分,本次设计参考DDS设计电路结构。

? ①频率变化知识。用户通过输入频率控制码来改变输出信号频率。 ? ②相位变化知识。通过相位累加器根据频率控制码在每个时钟周期内进行

相位累加来改变相位值。 ? ③波形信号产生知识。正弦计算器计算数字化正弦波幅度值,再把幅度值

保在芯片的ROM中。通过查表方式扫描数据输出。 3. DAC控制器的知识

DDS芯片输出的一般是数字化的正弦波,因此还需经过高速D/A转换器和低通滤波器才能得到一个可用的模拟频率信号。使用DAC时要考虑DAC的位数和转换时间。常用的低速八位DAC为DAC0832。 二、计划

采用DDS方式设计波形信号发生器,首先要了解DDS的结构和每个部分的功能,如图8-1所示,本次设计在CPLD/FPGA芯片内部由频率控制字、相位累加器、波形数据ROM二个部分构成,在外部把波形数据循环扫描后输出给DAC转换成模拟信号,通过低通滤波器平滑波形最后输出所需波形。设计中着重完成以下部分内容。

? ①完成频率控制器的设计。此设计可以通过计数器、分频器设计原理完

成。 ? ②相位控制设计。对所查表中每个地址进行数据累加,即可改变信号输出

相位。 ? ③计算正弦波各点的幅度离散值。在此设计中我们把一个正弦波分离成

128个点坐标。由于VHDL只适合整数运算,此各离散值由计算器或公式求出,并存储在ROM中。 三、决策

根据图8-1所示的正弦波信号发生器组成框图,分步完成正弦波信号发生器的设计。其设计步骤可参考如下步骤进行。

? ①设计一个分频器,要求能进行频率调整。 ? ②设计一个相位累加器,相位可以前后移位。 ? ③通过计算求出正弦波128个离散幅值,并进行储存。 ? ④将程序下载至FPGA/CPLD芯片,并和DAC0832连接。 ? 四、实施

? 如图8-1所示,完整的正弦波形发生器由3部分组成。 ? 1.频率控制字设计

? 由于一个完整的波形由128个离散坐标点构成,所以要完整生成一个波

形,则输入时钟需要128个脉冲。从而可得知要输出1 Hz的正弦波,需要128 Hz的时钟,也就是输入输出分频比128/1。若对输出信号频率进行控制,可通过对输入时钟分频来改变频率,分频系数可以改变。

? 在下面实例中,“ clk”为芯片时钟输入端,可由品振提供高稳定度、高精度脉冲信号。“d” 和 “f”为分频系数控制脚,当f = “0”时,d脚每来一次脉冲,则分频系数自动加1;相反,若f = \d脚的脉冲数自动减。

? 图8-2为频率控制的仿真图。clk_o为输出脚进过分频后的时钟信号,该信号可以接入到下一级相位控制部分,然后进行相位调节。 ? 如果仿真结果正确,可以将设计的项目生成一个元件符号备用。其步骤是:选择原理图文件为当前文件后,选择菜单命File → Create/LTpdate →Create Symbol Files for Current File即可。本电路生成的元件符号如图8-3所示。

频率控制程序参考:

process(clk)一基准时钟分频

begin

if clk'event and clk='1' then t0<=t0+tl; end if; end process;

-------------------------------------- process(d,f) ---频率控制字 begin

if d'event and d='1' then if f='0' then

tl<=t1+1; else

t1 <=tl-1; end if; end if; end process; Clk_o<=t0(3); 2.相位累加器设计

对于正弦信号发生器,它的输出可以用下式来描述:

(8-1)

其中, 是该信号发生器的输出波形; 指输出信号对应的outout频率。上式的表述对于时间t是连续的,为了用逻辑实现该表达式,必须进行

离散化处理,用基准时钟进行抽样,令正弦信号的相位为

(8-2)

在一个clk周期内,相位的变化为 3)

s?Asin(2?ft) (8-2?foutclkout??2?ftout???2?fT?fclk其中,foot指clk的频率,2π可以理解为“满”相位。为了对其进行数

字量化,把2π切割成 份,由此每个clk周期的相位增量 用量化值 来表示:

(8-4)

(8-5)

?B????2 2?Bff 且 为整数。与式(8-3) ?联立,可得N??Nclk 显然,信号发生器的输出可描述为

2?outf,B???2N?outfclkSout?Asin(?k?1???)?Asin[?(B?k?1?B??)]?Afsin(B?k?1?B??)N2

(8-6) 2? 其中, 指前一个clk周期相位值,同样得出

Nk?1(8-7)

由上面的推导可以看出,只要对相位的量化值进行简单的祟加运

算,就可以得到正弦信号的当前相位值,而用于叠加的相位量量化

值 决定了信号的输出频率 ,并呈现简单的线性关系: (8-8)

B?k?1??2??2时, 就等于 。

fout B???2?fclk相位累加器的输入又可称为频率输入字,事实上当系统基准时钟 为

N 图8-4为生成元件图,clk为系统基准时钟分频后的时钟输入; p为

相位控制字端,每输入一个脉冲,波形前后移一个相位; d 为相位方向控制,当d = \d= \

相位控制仿真图如图8-5所示,当d=“0”时,P输入每个脉冲后,相位地址Y输出量发生改变,地址向后增加2。

相位控制程序参考:

process(clk) --- 相位地址累加进程 begin

if clk'event and clk='1' then tt<=tt+1; else tt<=tt-1; end if; end if; end process; 3.波形数据存储

正弦ROM的查找表完成 的查表转换,在这里可以理解成相位到幅度的转换,它的相位输入是相位调制器的输出,事实上就是ROM的数据值输出送往D/A,转化成模拟信号。ROM中的数据为正弦波信号一个周期的离散值,可以通过相关计算求出。

图 8-7 DAC0821连接示意图

图 8-8 正弦波信号发生器整体结构框图

图 8-9 频率控制仿真图

图 8-10 频率控制仿真图

图 8-11 相位控制仿真1

图 8-12 相位控制仿真图2

图 8-13 部分波形相位对照表

本文来源:https://www.bwwdw.com/article/ya1d.html

Top