当前位置:文档之家› 任意波形信号发生器

任意波形信号发生器

一、题目要求及分析1.1题目要求任意波形信号发生器利用FPGA器件产生控制信号及数据信号,经DAC0832和TL082转换产生以下波形:1)正斜率斜波;2)正弦波;3)锯齿波;4)任意波形。

用示波器观察输出波形。

硬件电路内容和要求:用DAC0832实现数模转换电路,用TLC082实现电流-电压转换电路,画出电路原理图。

软件设计内容和要求:VHDL编程实现任意波形的信号控制器。

要求可以用开关切换不同的波形数据输出。

1.2题目分析VHDL语言是随着集成电路系统化和高度集成化的发展而逐步发展起来的,是一种用于数字系统的设计和测试的硬件描述语言。

相比传统的电路系统的设计方法,VHDL具有多层次描述系统硬件功能的能力,支持自顶向下和基于库的设计的特点,因此设计者可以不必了解硬件结构。

从系统设计入手,在顶层进行系统方框图的划分和结构设计,在方框图一级用VHDL对电路的行为进行描述,并进行仿真和纠错,然后在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,下载到具体的CPLD器件中去,从而实现可编程的专用集成电路(ASIC)的设计。

在本次课程设计中,函数发生器的设计采用自顶向下的系统设计的方法,通过MAX+plusⅡ开发环境进行编辑、综合、波形仿真,并下载到CPLD器件中,采用模块化的设计,对功能的修改和增加,只要修改VHDL源程序,而不必更改硬件电路。

实现数字系统硬件的软件化。

任意信号发生器体现在它能选择输出四个波形,即正斜率斜波、正弦波、锯齿波、任意波形;还可以改变波形的某些表征参量,从而控制输出的波形。

其主要问题是波形的选择和准备与输出的模拟信号波形相对应的数字信号,前者可以通过外接开关从而选择输出什么样的波形,后者可以通过建立相应波形的数字信号模块得到,然后建立一个信号,用来保存所采点的数据,最后把该信号送给ADC0832的输入数据端口就可以了。

这两个主要问题当然在做的过程中还需要考虑到数据的选择、位宽的大小、管脚的取舍等问题。

二、任意波形信号发生器方案设计2.1系统设计框图与思路1.系统的设计框图利用电子设计自动化(EDA)技术设计的波形信号发生器,与传统的信号发生器相比,具有高稳定度、高精度、高分辨率的优点。

该项目利用Alter 公司的可编程逻辑器件EPF10K10,采用EDA 技术,实现可通过改变时钟频率来调制频率、幅值的多种常用信号。

根据设计要求,多波形信号发生器主要由5部分组成,即时钟信号、波形数据产生器、波形选择器、数/模转换电路、低通滤波电路。

在时钟信号的作用下,由波形选择器选择要输出的波形,波形数据产生器生成频率可变的波形数据数字信号,经数/模转换电路、低通滤波电路,最终输出所需波形信号。

另外,输出波形幅度的调节可通过改变A/D转换芯片电阻网络的基准电压实现。

系统的设计框图如下:图2.1 系统设计框图函数发生器有波形选择开关控制波形的输出,分别能输出正斜率斜波、锯齿波、正弦波、任意波形,考虑程序的容量,每种波形在一个周期内均的取样点不能太多。

2.函数发生器的设计思路本次课程设计采用FPGA作为中心控制逻辑,由于其具有高速和逻辑单元数多的特点,因此可以由FPGA、DAC和I/V运放直接构成信号源发生器的最小系统。

在该方案中通过FPGA控制DAC 并直接向DAC发送数据,这样就提高了所需波形的频率并绕过了通用存储器读取速度慢的特点,再加上外部的开关按钮就能够简单控制波形切换及改变波形的某些表征参量,能够通过编程实现波形的任意性、幅度变化的灵活性等功能。

本次课程设计采用自顶向下的设计方法进行设计,包含顶层文件的设计和底层文件的设计。

顶层的设计是把下层各模块连接起来,采用文本输入的方式,通过元件例化的方法,调用各元件,实现函数发生器的设计。

在顶层的设计中,clk,reset,ob,si,dl为系统的控制信号输入端,Q为数字信号的输出端口:clk为系统时钟信号输入端,reset为系统复位信号,ob,si,dl 是系统波形选择数码开关,通过改变开关的通断可以选择输出的波形;FPGA产生数字信号,并且由Q端口送入ADC0832的输入数据端口,这样数字信号经D/A转换器转换成为模拟信号。

但是DAC0832C 以电流形式输出转换结果,若要得到电压形式的输出结果需另加I/V转换电路,这时可采用运算放大器,这里我们采用TLC082实现电流-电压转换,即可转换成模拟电压信号,输出的波形经过低通滤波电路可以滤除毛刺及干扰信号,这样就可以得到较清晰的波形,可以通过示波器观察所得波形。

底层设计建立基本的模块,实现相应的功能,便于元件例化,包含波形选择、正弦波、正斜率斜波、锯齿波、任意波形等模块: 波形选择模块外接开关,利用开关选择要输出的波形及产生相应的数字信号,以便于送入ADC0832的输入数据端口进行数据转换,从而输出所选择的波形;正弦波模块、正斜率斜波模块、锯齿波模块、任意波形模块分别产生与各自相对应的正弦波的数字信号、正斜率斜波的数字信号、锯齿波的数字信号、任意波形的数字信号等模块,各个波形模块所产生的数字信号送入波形选择器中,以便于波形选择器选择并输出数字信号。

此外,信号的频率和幅值及其他表征参数可通过时钟(CLK)信号的改变来调节。

值得注意的是,波形数据的建立是整个程序设计中最重要的问题。

FPGA输出的数字信号需要经D/A转换器转换成各种波形输出。

而由D/A转换器可知,DAC0832的分辨率是8位,这样,将模拟信号的各种波行在一个周期内平均分成255份,由于已经确定每周期的取样点数为64,即每隔2π/64的间隔取值一次,所取的值为该点对应的波形的值,通过计算可以获得64个取样点的值;也可以通过查表的方法取得64个取样点的值。

3.顶层设计其程序如下。

--------------开始------------------------------ library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;------------------------------------------------------------------------------------------------ entity s_gen isport(clk ,reset: in std_logic;ob,si,dl: in std_logic;cs,wr:out std_logic;Q:out std_logic_vector(7 downto 0)); end entity s_gen;------------------------------------------------------------------------------------------------ architecture behav of s_gen is--------元件定义语句---------------------------- component obl isport(clk,reset:in std_logic;Q:out std_logic_vector(7 downto 0)); end component obl;component sin isport(clk,reset:in std_logic;Q:out std_logic_vector(7 downto 0)); end component sin;component dlt isport(clk,reset:in std_logic;Q:out std_logic_vector(7 downto 0));end component dlt;component chs isport(ob,si,dl: in std_logic;obl,sin,dlt: in std_logic_vector(7 downto 0);Q:out std_logic_vector(7 downto 0));end component chs;----------信号定义----------------------------- signal J,K,L: std_logic_vector(7 downto 0); begin----------启动DAC0832-------------------------- process(clk)isbeginif(clk'event and clk='1') thenif(reset='1') thencs<='1';wr<='1';elsecs<='0';wr<='0';end if;end if;end process;---------元件例化------------------------------u0: obl port map(clk,reset,J);u1: sin port map(clk,reset,K);u2: dlt port map(clk,reset,L);u3: chs port map(ob,si,dl,J,K,L,Q);-----------------------------------------------end architecture behav;-----------结束--------------------------------4.下层设计4.1 正弦波的设计DAC0832的分辨率是8位,这样,将模拟信号的正弦波在一个周期内平均分成255份,由于已经确定每周期的取样点数为64 ,所取的值为该点对应的正弦值,可用加法计数器和译码电路完成。

首先对幅度为1的正弦波的一个周期分为64个采样点,根据正弦波的函数关系计算得到每一点对应的幅度值,然后量化为8位二进制数据,最大值为255,最小值为0,以此得到正弦波波表。

加法计数器生成译码电路的64个输入值,译码电路查波表输出。

4.2 方波的设计由于方波的占空比是50%,且只有两个状态,所以方波的取样比较简单。

即前32个取样点取值为高电平“11111111”,后32个取样点取值为低电平“00000000”就可以了。

通过交替送出全0和全1,并给以32个时钟延时实现,64个时钟为一个周期。

4.3 三角波的设计三角波在一个周期内具有对称性,而且波形是线性的。

该模块可设计一个可逆计数器实现。

设计时设置一变量作为工作状态标志,在此变量为全0时,当检测到时钟的上升沿时进行加同一个数操作,为全1时,进行减同一个数操作。

相关主题