多功能信号发生器设计报告.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
重庆大学城市科技学院电气学院EDA课程设计报告
题目:多功能信号发生器
专业:电子信息工程
班级:2006级03班
小组:第12组
学号及姓名:20060075蒋春
20060071冯志磊
20060070冯浩真
指导教师:戴琦琦
设计日期:2009-6-19
多功能信号发生器设计报告
一、设计题目
运用所掌握的VHDL语言,设计一个信号发生器,要求能输出正弦波、方波、三角波、锯齿波,并且能改变其输出频率以及波形幅度,能在示波器上有相应波形显示。
二、课题分析
(1).要能够实现四种波形的输出,就要有四个ROM(64*8bit)存放正弦波、方波、三角波、锯齿波的一个周期的波形数据,并且要有一个地址发生器来给ROM提供地址,ROM给出对应的幅度值。
(2).因为要设计的是个时序电路,所以要实现输出波形能够改变频率,就必须对输入的信号进行分频,以实现整体的频率的改变。
(3).设计要求实现调幅,必须对ROM输出的幅度信息进行处理。最简单易行的方法是对输出的8位的幅度进行左移(每移移位相当于对幅度值行除以二取整的计算),从而达到幅度可以调节的目的。同时为了方便观察,应再引出个未经调幅的信号作为对比。
三、设计的具体实现
1、系统概述
系统应该由五个部分组成:分频器(DVF)、地址发生器(CNT6B)、四个ROM 模块(data_rom_sin、data_rom_sqr、data_rom_tri、data_rom_c)、四输入多路选择器mux、幅度调节单元w。
2、单元电路设计与分析
外部时钟信号经过分频器分频后提供给地址发生器和ROM,四个ROM的输出接在多路选择器上,用于选择哪路信号作为输出信号,被选择的信号经过幅度调节单元的幅度调节后连接到外部的D/A转换器输出模拟信号。
(1)分频器(DVF)
分频器(DVF)的RTL截图
分频器(DVF)的源代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DVF IS
PORT( D_MODE: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
D_CLK: IN STD_LOGIC;
D_OUT: OUT STD_LOGIC);
END DVF;
ARCHITECTURE behav of DVF IS
SIGNAL FULL: STD_LOGIC;
BEGIN
P_REG: PROCESS(D_CLK)
VARIABLE CNT8:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF D_CLK'EVENT AND D_CLK='1' THEN
IF CNT8="1111" THEN
CNT8:=D_MODE;
FULL<='1';
ELSE CNT8:=CNT8+1;
FULL<='0';
END IF;
END IF;
END PROCESS P_REG;
P_DIV:PROCESS(FULL)
VARIABLE CNT2:STD_LOGIC;
BEGIN
IF FULL'EVENT AND FULL='1' THEN
CNT2:=NOT CNT2;
IF CNT2='1' THEN D_OUT<='1'; ELSE D_OUT<='0';
END IF;
END IF;
END PROCESS P_DIV;
END behav;
(2)地址发生器(CNT6B)
地址发生器(CNT6B)的RTL截图
地址发生器(CNT6B)的源代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT6B IS
PORT (C_CLK,C_RST,C_EN : IN STD_LOGIC;
C_OUT : OUT STD_LOGIC_VECTOR(5 DOWNTO 0));
END CNT6B;
ARCHITECTURE behav OF CNT6B IS
SIGNAL CQI : STD_LOGIC_VECTOR(5 DOWNTO 0);
BEGIN
PROCESS(C_CLK,C_RST,C_EN)
BEGIN
IF C_RST = '1' THEN CQI <= (OTHERS =>'0') ; --计数器异步复位
ELSIF C_CLK'EVENT AND C_CLK='1' THEN --检测时钟上升沿
IF C_EN = '1' THEN CQI <= CQI + 1;
END IF;
END IF;
END PROCESS;
C_OUT<=CQI;
END behav;
(3)四个ROM模块
(data_rom_sin、data_rom_sqr、data_rom_tri、data_rom_c)data_rom_sin正弦波的ROM数据:
data_rom_sqr方波的ROM数据:
data_rom_tri三角波的ROM数据: