《能智函数发生器eda设计--大学毕设论文.doc》由会员分享,可在线阅读,更多相关《能智函数发生器eda设计--大学毕设论文.doc(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、湖南商学院EDA技术及应用课程设计(实习)报告题目 智能函数发生器 姓 名:黄亚珍学 号:070910051专 业:电子信息工程班 级:电信0702指导教师:陈勇职 称:副教授计算机与电子工程学院2010年1月课程设计(实习)评审表姓 名黄亚珍学 院电子信息工程学 号070910051专业班级电信0702题 目智能函数发生器评审意见评审成绩指导教师签名职称评审时间 年 月 日课程设计(实习)作品验收表题目智能函数发生器参与人员姓 名黄亚珍班 级电信0702学 号070910051设计任务与要求: 作品完成情况:验收情况: 验收教师签名:_ 年 月 日目 录1 设计任务及要求11.1 设计任务1
2、1.2 设计要求12 总体设计方案13 各模块详细设计及实现23.1 下降斜坡信号产生23.1.1 详细设计23.1.2 设计实现23.2 上升斜坡信号产生33.2.1 详细设计33.2.1 设计实现43.3 正弦信号产生43.3.1 详细设计43.3.2 设计实现53.4 阶梯信号产生63.4.1 详细设计63.4.2 设计实现73.5 方波信号产生83.5.1 详细设计83.5.2 设计实现83.6 三角波信号产生93.6.1 详细设计93.6.2 设计实现93.7 信号选择103.7.1 详细设计103.7.2 设计实现113.8 顶层原理图113.8.1 详细设计113.8.2 设计实
3、现124 软件仿真125 硬件实现135.1 引脚锁定135.2 硬件测试146 心得体会156.1 遇到的问题及解决方法156.2 感想15参考文献15附件1623智能函数发生器摘要 自己写关键字 自己写1 设计任务及要求1.1 设计任务 1.2 设计要求2 总体设计方案(自己看书上面有)该设计主要分为8个模块,前6个模块是波形的VHDL描述模块;第七个模块的波形选择模块,也是用VHDL语言进行描述,用于选择何种波形进行最后的输出;最后一个模块是顶层原理图模块,是将前7个模块连接在一起构成完整的只能函数发生器。具体的总体设计方框图如下:顶层原理图波形选择下降斜坡信号方波信号阶梯波信号上升斜坡
4、信号正弦波信号三角波信号图1 总体设计方框图3 各模块详细设计及实现3.1 下降斜坡信号产生3.1.1 详细设计见书3.1.2 设计实现具体VHDL语言描述如下:entity deslope is -实体port (clk,reset:in std_logic; -输入端口定义,为标准逻辑位 q:out std_logic_vector(7 downto 0) -输出端口定义,为8位标准逻辑矢量 );end deslope;architecture behave of deslope is -结构体beginprocess(reset,clk) -进程variable cnt:std_logi
5、c_vector (7 downto 0):=11111111; -定义变量CNTbeginif reset=0 then cnt:=(others=1); -当RESET为0时,输出Q为1elsif clkevent and clk=1 then -当时钟上升沿到来时,判断变量CNT if cnt=00000000 then 是否为0,即降到最地点 cnt:=(others=1); -若CNT为0,则置为全1 else cnt:=cnt-1; -否则,CNT减1 end if;end if;q0); -当RESET为0时,重置为,输出置为0elsif clkevent and clk=1 t
6、hen -当时钟上升沿到来时,判断CNT是否为 if cnt=11111111 then 最大值 cnt:=(others=0); -若CNT为最大值,置为全0 else cnt:=cnt+1; -否则,CNT加1 end if;end if;q=cnt; -将变量CNT赋值给输出Qend process; -进程结束end behave; -结构体结束3.3 正弦信号产生3.3.1 详细设计见书3.3.2 设计实现具体VHDL语言描述如下:entity sinwave is -实体port(clk,reset:in std_logic; -端口定义 q:out integer range 0
7、 to 255); -输出为正整数end sinwave; -实体结束architecture behave of sinwave is -结构体beginprocess(clk,reset) -进程variable cnt:integer range 0 to 63; -定义变量CNT为常数beginif reset=0 then qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq0); -当RESET为0 时,CNT置0elsif clkevent and clk=1 then -当时钟上升沿来到时 if te
8、mp=0 then -标志TEMP为0时,进行CNT赋值 if cnt=11111111 then -CNT到最大值时,置0 cnt:=(others=0); temp:=1; else cnt:=cnt+16; temp:=1; -否则,CNT加16(阶梯常数) end if; -CNT值改变后,标志TEMP置1 else temp:=0; -标志TEMP为其他值时,进行TEMP置0 end if; end if;q=cnt; -将CNT赋值给输出信号Qend process; -进程结束end behave; -结束结构体3.5 方波信号产生3.5.1 详细设计见书。3.5.2 设计实现具
9、体VHDL语言描述如下:entity square is -实体port( clk,reset:in std_logic; -端口定义 q:out std_logic_vector(7 downto 0) );end square; architecture behave of square is -结构体signal temp:std_logic; -定义标志变量TEMPbeginprocess(clk,reset) -进程,敏感信号为CLK,RESETvariable cnt:integer; -定义变量CNT,用于计数beginif reset=0 then temp=0; -RESET
10、有效时,标志TEMP置为0elsif clkevent and clk=1 then -当时钟信号上升沿到来时 if cnt63 then -CNT为64进制计数量,到63时置0 cnt:=cnt+1; -否则CNT加1 else cnt:=0; temp=not temp; -64个时钟周期后,TEMP取反 end if; end if; end process; -进程结束q= 11111111 when temp=1 else -根据TEMP的值来确定输出 00000000;end behave; -结构体结束3.6 三角波信号产生3.6.1 详细设计见书3.6.2 设计实现entity
11、 triangle is -实体port(clk,reset:in std_logic; -端口定义 q:out std_logic_vector(7 downto 0); end triangle;architecture behave of triangle is -结构体beginprocess(clk,reset) -进程variable cnt:std_logic_vector(7 downto 0); -定义计数变量CNTvariable temp:std_logic; -定义标志变量TEMPbeginif reset=0 then cnt:=00000000; -RESET为0时
12、,CNT为0elsif clkevent and clk=1 then -当时钟上升沿到来时 if temp=0 then -TEMP为0时,CNT递减 if cnt=00000001 then cnt:=00000000; temp:=1; -CNT为最小值时,TEMP值1 else cnt:=cnt-1; end if; elsif temp=1 then -TEMP为1时,CNT递增 if cnt=11111110 then cnt:=11111111; temp:=0; -CNT为最大值时,TEMP置0 else cnt:=cnt+1; end if;end if;end if;q=c
13、nt; -将CNT赋值给输出信号Qend process; -进程结束end behave; -结构体结束3.7 信号选择3.7.1 详细设计实体部分主要是端口定义。7个输入信号,一个选择信号CHIOCE,D0至D5为输入端口,是8位的标准逻辑矢量。1个输出信号Q。结构体部分描述实体的功能,根据不同的选择信号CHOICE值的不同将端口D0到D5的值从Q进行输出。这部分用的并行条件赋值语句。3.7.2 设计实现具体VHDL语言描述如下:entity select6 is -实体port(choice:in std_logic_vector(2 downto 0); -端口定义 d0,d1,d2,
14、d3,d4,d5:in std_logic_vector(7 downto 0); q:out std_logic_vector(7 downto 0);end select6;architecture behave of select6 isbegin -根据不同CHOICE的值进行选择输出q0);elsif clkevent and clk=1 then if cnt=11111111 then cnt:=(others=0); else cnt:=cnt+1; end if;end if;q1);elsif clkevent and clk=1 then if cnt=00000000
15、then cnt:=(others=1); else cnt:=cnt-1; end if;end if;q=cnt;end process;end behave;正弦波设计:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sinwave isport(clk,reset:in std_logic; q:out integer range 0 to 255);end sinwave;architecture behave of sinwave isbeginprocess(clk,r
16、eset)variable cnt:integer range 0 to 63;beginif reset=0 then qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq0);elsif clkevent and clk=1 then if temp=0 then if cnt=11111111 then cnt:=(others=0); temp:=1; else cnt:=cnt+16; temp:=1; end if; else temp:=0; end if;end if;q=cnt;end proces
17、s;end behave;方波设计:library ieee;use ieee.std_logic_1164.all;entity square isport( clk,reset:in std_logic; q:out std_logic_vector(7 downto 0) );end square;architecture behave of square is signal temp:std_logic;beginprocess(clk,reset)variable cnt:integer;beginif reset=0 then temp=0;elsif clkevent and c
18、lk=1 then if cnt63 then cnt:=cnt+1; else cnt:=0; temp=not temp; end if;end if; end process;q= 11111111 when temp=1 else 00000000;end behave;三角波设计:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity triangle isport(clk,reset:in std_logic; q:out std_logic_vector(7 downto 0)
19、 ); end triangle;architecture behave of triangle isbeginprocess(clk,reset)variable cnt:std_logic_vector(7 downto 0);variable temp:std_logic;beginif reset=0 then cnt:=00000000;elsif clkevent and clk=1 then if temp=0 then if cnt=00000001 then cnt:=00000000; temp:=1; else cnt:=cnt-1; end if; elsif temp=1 then if cnt=11111110 then cnt:=11111111; temp:=0; else cnt:=cnt+1; end if; end if;end if;q=cnt;end process;end behave;选择模块设计:library ieee;use ieee.std_logic_1164.all;entity select6 isport(choice:in std_logic_vector(2 downto 0); d0,d1,d2,d3,d4,d5:in std_logic_
限制150内