当前位置:文档之家› 多功能信号发生器设计报告.doc

多功能信号发生器设计报告.doc

重庆大学城市科技学院电气学院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 ISPORT( 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 ISSIGNAL FULL: STD_LOGIC;BEGINP_REG: PROCESS(D_CLK)VARIABLE CNT8:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF D_CLK'EVENT AND D_CLK='1' THENIF CNT8="1111" THENCNT8:=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;BEGINIF FULL'EVENT AND FULL='1' THENCNT2:=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 ISPORT (C_CLK,C_RST,C_EN : IN STD_LOGIC;C_OUT : OUT STD_LOGIC_VECTOR(5 DOWNTO 0));END CNT6B;ARCHITECTURE behav OF CNT6B ISSIGNAL CQI : STD_LOGIC_VECTOR(5 DOWNTO 0);BEGINPROCESS(C_CLK,C_RST,C_EN)BEGINIF 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数据:data_rom_c锯齿波的ROM数据:ROM模块的源程序(以正弦波为例,其余以此类推):LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.all;ENTITY data_rom_sin ISPORT( address : IN STD_LOGIC_VECTOR (5 DOWNTO 0);clock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));END data_rom_sin;ARCHITECTURE SYN OF data_rom_sin ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0);COMPONENT altsyncramGENERIC (address_aclr_a : STRING;init_file : STRING;intended_device_family : STRING;lpm_hint : STRING;lpm_type : STRING;numwords_a : NATURAL;operation_mode : STRING;outdata_aclr_a : STRING;outdata_reg_a : STRING;widthad_a : NATURAL;width_a : NATURAL;width_byteena_a : NATURAL);PORT ( clock0 : IN STD_LOGIC ;address_a : IN STD_LOGIC_VECTOR (5 DOWNTO 0);q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));END COMPONENT;BEGINq <= sub_wire0(7 DOWNTO 0);altsyncram_component : altsyncramGENERIC MAP (address_aclr_a => "NONE",init_file => "data_rom_sin.mif",intended_device_family => "Cyclone",lpm_hint => "ENABLE_RUNTIME_MOD=NO",lpm_type => "altsyncram",numwords_a => 64,operation_mode => "ROM",outdata_aclr_a => "NONE",outdata_reg_a => "CLOCK0",widthad_a => 6,width_a => 8,width_byteena_a => 1 )PORT MAP (clock0 => clock,address_a => address,q_a => sub_wire0);END SYN;(4)四输入多路选择器mux四输入多路选择器mux的源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux IS PORT(a,b,c,d: in std_logic_vector(7 downto 0);s: in std_logic_vector(1 downto 0);x:out std_logic_vector(7 downto 0));end mux;architecture archmux of mux isbeginmux4_1: process(a,b,c,d)beginif s="00" then x<=a;elsif s="01" then x<= b;elsif s="10" then x<=c;else x<=d;end if;end process mux4_1;end archmux;四输入多路选择器mux的RTL截图(5)幅度调节单元w幅度调节单元w的源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY W ISPORT( W_IN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);W_MODE: IN STD_LOGIC_VECTOR(1 DOWNTO 0);W_OUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END W;ARCHITECTURE BEHAV OF W ISSIGNAL BUFF:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINW_OUT<=BUFF ;PROCESS( W_IN,W_MODE )BEGINCASE W_MODE ISWHEN "00" => BUFF<=W_IN ;WHEN "01" =>BUFF( 6 DOWNTO 0 )<=W_IN( 7 DOWNTO 1 ) ; BUFF( 7 )<='0';WHEN "10" =>BUFF( 5 DOWNTO 0 )<=W_IN( 7 DOWNTO 2 ) ;BUFF( 7 )<='0';BUFF( 6 )<='0';WHEN OTHERS =>BUFF( 4 DOWNTO 0 )<=W_IN( 7 DOWNTO 3 ) ; BUFF( 7 )<='0';BUFF( 6 )<='0'; BUFF( 5 )<='0';END CASE;END PROCESS;END ARCHITECTURE BEHAV;幅度调节单元w的RTL截图3.总的结构图4.通过逻辑分析仪观察到得波形图四、总结通过本次课程设计既巩固了EDA的一些相关基本知识,又熟悉了QuartusII 软件和相关硬件的相关操作。

相关主题