1、EDA课程设计题目:智能函数发生器专业:通信工程班级:通信082姓名:谢振峰学号:0810920213一、 设计题目:智能函数发生器设计一个智能函数发生器,能够产生递增、递减、方波、三角波、正弦波及及阶梯波波形,并可通过开关选择输出的波形。二、 设计目标:1) 设计一个智能函数发生器,能够以稳定的频率发生递增斜波、递减斜波、三角波、梯形波,正弦波和方波。2) 设置一个波形选择输入信号,通过此改变该信号可以选择以上各种不同种类的输出函数波形,系统具有复位功能。三、 设计原理:1. 原理图框图如下:递增模块递减模块三角波模块阶梯波模块正弦波模块方波模块选 择 模 块输出信号图1、原理图框图2. 原
2、理图说明本设计采用VHDL语言和原理图设计结合的方法,首先用文本输入法设计了六个波形模块,分别为递增、递减、三角波、梯形、正弦波、方波模块,和一个选择模块。然后进行原理图设计,将各波形模块与选择模块相应的引脚连接,从而完成智能函数发生器的设计。四、 设计内容: 1) 递增模块递增模块是用VHDL语言描述的递增函数,实体部分部分说明三个端口,两个输入端口时钟信号clk、复位信号rst和一个输出端口q。设计思路为:通过设计一个中间变量从0x00到0xFF的递增赋值给输出信号q,从而实现递增数字信号的输出。递增模块仿真图如下:图2、递增模块仿真图2) 递减模块递减模块的实体包含时钟信号输入端口clk
3、和复位信号端口rst,输出信号端口q。设计思路为:通过设计一个中间变量从0xFF到0x00的递减赋值给输出信号q,从而实现递减数字信号的输出。递减模块仿真图如下:图3、递减模块仿真图3) 三角波模块三角波模块的实体包含时钟信号输入端口clk和复位信号端口rst,输出信号端口q。设计思路为:通过设计一个中间变量先从0x00递增到0x7F,然后从0x7F递减到0x00,将中间变量赋值给输出信号q,从而实现一个周期三角波形的输出。三角波模块仿真图如下:图4、三角波模块仿真图4) 阶梯波模块阶梯波模块的实体包含时钟信号输入端口clk和复位信号端口rst,输出信号端口q。设计思路为:通过变量控制使中间变
4、量从00H到FFH之间加10H递增,递增到FFH后复位为00H,从而实现阶梯波形。阶梯波仿真图如下:图5、阶梯波模块仿真图5) 正弦波模块正弦波模块的包含时钟信号输入端口clk和复位信号端口rst,输出信号端口q。设计思路为:取一个正弦波周期64个采样值,设置一个64进制的计数器,每次计数将每个采样值输出到端口q,从而实现正弦波数字波形输出。正弦波仿真图如下:图6、正弦波模块仿真图6) 方波模块方波模块的包含时钟信号输入端口clk和复位信号端口rst,输出信号端口q。设计思路为:设置一个中间变量,将其从0x00递增到0x7F,输出信号端口q输出0x00;中间变量从0x7F递增到0xFF,端口q
5、输出0xFF,再将中间变量复位为0x00,以此循环,从而实现方波输出。方波模块仿真图如下:图7、方波模块仿真图7) 原理图设计如下图8、原理图设计五、 仿真结果图9、仿真结果(一)图10、仿真结果(二)六、 总结本设计完整地实现了课程设计要求,通过输入选择信号,输出指定的波形,并能实现复位功能。通过这次这次智能函数发生器的课程设计,我更加熟悉了学会了使用EDA编程工具软件Quartus II的操作,加深了对VHDL语言的理解,熟练了利用原理图设计电路的方面,体会到了将所学的数字电路知识付诸实践的乐趣。七、 附录1.递增模块源程序library ieee;use ieee.std_logic_1
6、164.all;use ieee.std_logic_unsigned.all;entity increase isport(clk,rst:in std_logic;q:out std_logic_vector(7 downto 0);end increase;architecture behave of increase isbeginprocess(clk,rst)variable temp:std_logic_vector(7 downto 0);beginif rst=0then temp:=00000000;elsif clkevent and clk=1 thenif temp=
7、11111111thentemp:=00000000;elsetemp:=temp+1;end if;end if;q=temp;end process;end behave;2.递减模块源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity decrease isport( clk,rst:in std_logic; q:out std_logic_vector(7 downto 0);end decrease;architecture behave of decrease isbe
8、ginprocess(clk,rst)variable temp:std_logic_vector(7 downto 0);beginif rst=0then temp:=11111111; elsif clkevent and clk=1 then if temp=00000000 then temp:=11111111; else temp:=temp-1; end if;end if; q=temp;end process;end architecture;3.三角波模块源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_lo
9、gic_unsigned.all;entity triangle isport( clk,rst: in std_logic; q:out std_logic_vector(7 downto 0);end triangle;architecture behav of triangle isbeginprocess(clk,rst) variable temp:std_logic_vector(7 downto 0); beginif rst=0 then temp:=00000000; elsif clkevent and clk=1 then temp:=temp+1; if temp=01
10、111111 then q=temp; else q=255-temp; if temp=11111111 then temp:=00000000 ; end if; end if; end if; end process; end architecture;4.阶梯波模块源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity stair isport( clk,rst:in std_logic; q:out std_logic_vector(7 downto 0);end stair
11、; architecture behav of stair isbeginprocess(clk,rst)variable tmp:std_logic_vector(7 downto 0);Begin if rst=0then tmp:=00000000; elsif clkevent and clk=1 then if tmp=11111111 then tmp:=00000000; else tmp:=tmp+16; end if;end if;q=tmp;end process;end behav; 5.正弦波模块源程序library ieee;use ieee.std_logic_11
12、64.all;use ieee.std_logic_unsigned.all;entity sinwave isport (clk,rst:in std_logic;d:out std_logic_vector(7 downto 0);end sinwave;architecture behav of sinwave isbeginprocess(clk,rst)variable num:integer range 0 to 63;beginif rst=0 then ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
13、ddnull;end case;end if;end process;end behav;6.方波模块源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity rectangle isport( clk,rst:in std_logic; q:out std_logic_vector(7 downto 0);end rectangle;architecture behav of rectangle isbeginprocess(clk,rst) variable temp:std_logic_vector(7 downto 0);beginif rst=0then temp:=00000000;elsif clkevent and clk=1 then temp:=temp+1;if temp=01111111 then q=00000000 ; else q=11111111 ;if temp=11111111 then temp:=00000000; end if;end if;end if;end process;end behav;