1、 1 波形发生器的设计波形发生器的设计 一一、概述概述 波形发生器是一种常用的信号源, 广泛地应用于电子电路、 自动控制系统和教学实验等 领域。多功能函数信号发生器能够产生锯齿波,三角波和正弦波等多种输出信号。信号产生 的模块有:锯齿波,三角波波,正弦波模块等。这些信号的产生可以有多种方式,如用计数 器直接产生信号输出,或者用计数器产生存储器的地址,在存储器中存放信号的数据。信号 发生器的控制模块是由数据选择器实现对这几种信号的选择。最后将波形数据送入 D/A 转 换器,再用示波器测试 D/A 转换器的输出,就可以观测到这几种波形的输出了。 二二、设计要求设计要求 设计一个波形发生器。具体要求
2、: 设计并实现一个可产生正弦波、三角波和 锯齿波的波形发生器。其工作频率为 60MHz,可产生 1MHz、2MHz、3MHz、 4MHz、5MHz、6MHz、10MHz的正弦波、三角波和锯齿波。所产生波形的幅度、 相位均可调整。 三三、实现原理实现原理 本程序的实现使用查表的方法来实现多波形发生器。先把各个波形的幅度存 入在表格中,以 mif 的格式存放在 LCP_ROM 中,它通过外来控制信号和高速时 钟信号,向波形数据 ROM 发出地址信号,输出波形的频率出发出的地址信号的 速度决定;这样就可以通过控制信号来改变输出的波形和各个波形的输出频率 了。由于输入频率是 60M,所以在表格中存入
3、60 个数据,如果以每一个时钟都 读取每一个数值,则产生 1M 的输出频率,如果要产生 10M 的的输出频率,则 只需要每十个时钟读一个数就可以了。 其它频率也是依照这个方法就可以实现不 同频率的输出了。 (1)电路外观框图 各个端口的功能如下: p10:P 为输出波形幅度调节档,共有四个可调档次。 2 clk:为系统工作时间,输入频率为 60MHz。 en:复位信号,输入端。 fchu20: 输出波形频率选择, 可产生 1MHz、 2MHz、 3MHz、 4MHz、 5MHz、6MHz、 10MHz pword70:相位选择档,可以调节 256 个初始相位档次 xtime10:LCP_ROM
4、 工作选择时钟,并做输出波形选择,可选择输出锯齿波, 三角波和正弦波。 da_out90:波形输出 四四、程序代码程序代码 频率输出选择与调相模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity sin is port(clk:in std_logic; en:in std_logic; fchu:in std_logic_vector(2 downto 0); -fchu 输出频率选择 pword:in std_lo
5、gic_vector( 7 downto 0);-相位调节 0255 z1,z2,z3,z4:out std_logic; addr_rom:buffer std_logic_vector(7 downto 0);-addr_rom 地 址 采 点 , 从 LCP_ROM 相应的地址读取数据 xtime:in std_logic_vector(1 downto 0) -时间触发选择,从那个 LCP_ROM 中调取波形,其选择的波开跟 DA 输出通道是相一致的。 ); end sin ; architecture a of sin is signal s:std_logic_vector(2 d
6、ownto 0); signal temp: integer range 0 to 715827880; signal address: std_logic_vector(7 downto 0); signal fre_count: std_logic_vector(31 downto 0); signal fw: std_logic_vector(31 downto 0); signal pw: std_logic_vector(7 downto 0); signal xx:std_logic_vector(1 downto 0); signal cda:std_logic_vector(1 downto 0); signal fo:std_logic_vector(31 downto 0); begin s=fchu; xx temp temp temp temp temp temp temp temp=71582788; end case; end if; fo=conv_std_logic_vector(temp,32); en