EDA课程设计简易信号发生器的设计实现小组成员:XXXXXXXXXXX专业:XXXXX学院:机电与信息工程学院指导老师:XXXXXX完成日期:XX年XX月XX日目录引言 (3)一、课程设计内容及要求 (3)1、设计内容 (3)2、设计要求 (3)二、设计方案及原理 (3)1、设计原理 (3)2、设计方案 (4)(1)设计思想 (4)(2)设计方案 (4)3、系统设计 (5)(1)正弦波产生模块 (5)(2)三角波产生模块 (6)(3)锯齿波产生模块 (6)(4)方波产生模块 (6)(5)波形选择模块 (6)(6)频率控制模块 (6)(7)幅度控制模块 (6)(8)顶层设计模块 (7)三、仿真结果分析 (7)波形仿真结果 (7)1、正弦波仿真结果 (7)2、三角波仿真结果 (8)3、锯齿波仿真结果 (8)4、方波仿真结果 (8)5、波形选择仿真结果 (9)6、频率控制仿真结果 (9)四、总结与体会 (10)五、参考文献 (10)六、附录 (11)简易信号发生器引言信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广范的应用。
它能够产生多种波形,如正弦波、三角波、方波、锯齿波等,在电路实验和设备检验中有着十分广范的应用。
本次课程设计采用FPGA来设计多功能信号发生器。
一、课程设计内容及要求1、设计内容设计一个多功能简易信号发生器2、设计要求(1)完成电路板上DAC的匹配电阻选择、焊接与调试,确保其能够正常工作。
(2)根据直接数字频率合成(DDFS)原理设计正弦信号发生器,频率步进1Hz,最高输出频率不限,在波形不产生失真(从输出1KHz正弦转换为输出最高频率正弦时,幅度衰减不得大于10%)的情况下越高越好。
频率字可以由串口设定,也可以由按键控制,数码管上显示频率傎。
(3)可以控制改变输出波形类型,在正弦波、三角波、锯齿波、方波之间切换。
(4)输出波形幅度可调,最小幅度步进为100mV。
二、设计方案及原理1、设计原理(1)简易信号发生器原理图如下2、设计方案(1)设计思想本设计基于VHDL编程,采用模块化电路进行整合。
系统各模块所需工作时钟信号由输入系统时钟信号经分频后得到,系统时钟输入端应满足输入脉冲信号的要求。
组合波形信号经显示模块输出。
具备幅度和频率可调功能,幅度可通过电位器调整,频率控制模块则是一个简易的计数器,控制步径为100HZ的可调频率,最终送至脉冲发生模块输出脉冲信号,达到设计课题所要求的输出波形频率可调及幅度可调功能。
幅度可调功能由于比较简单,可以在FPGA外部利用硬件电路实现。
(2)设计方案采用DDS(直接数字频率合成器)来设计,设计总体框图如图2所示。
DDS器件采用高速数字电路和高速D/A 转换技术,具有频率转换时间短、频率分辨率高、频率稳定度高、输出信号频率和相位可快速程控切换等优点,所以,我们可以利用DDS具有很好的相位控制和幅度控制功能,另外其数据采样功能也是极具精确和完善的,它可以产生较为精确的任何有规则波形信号,可以实现对信号进行全数字式调制。
用FPGA和DDS实现信号调制,既克服了传统的方法实现带来的缺点,若采用它来编程设计,必定会事半功倍,且使设计趋于理想状态。
DDS的主要参数间的关系如下:频率分辨率=系统时钟频率/2^12;频率控制字(FTW)=f*2^12/T;图2 DDS系统结构框图3、系统设计(1)正弦波产生模块正弦波产生模块由相位累加器和查找表组成,相位累加器用于实现相位的累加并存储其累加结果;查找表由ROM生成,其存储的数据是每一个相位所对应的二进制数字正弦幅傎,在每一个时钟周期内,相位累加器输出序列的高n位对其进行寻址,最后输出为该相位对应的二进制正弦幅傎序列。
ROM及查找表为如下ROM为:查找表为:(2)三角波产生模块(3)锯齿波产生模块(4)方波产生模块以上几个波形的产生也是基于ROM查找表,ROM的六位地址为输入端,输出端是八位,到时钟脉冲的上升沿到来时依次从地址中读出数据,得到相应的波形。
(5)波形选择模块这一模块主要原理是根据一个四选一多路选择器来选择输出四种不同的波形,然后通过一个按键对波形进行循环选择,按下确认按钮后进行波形的调用。
(6)频率控制模块本模块要求频率步进1Hz,最高输出频率不限,在本设计中由20MHz的信号源经分频后得到,根据用户需要的频率,通过编程把频率控制数值传送给各个模块,从而实现频率的控制。
(7)幅度控制模块本模块要求输出波形幅度可调,在0-3.3V之间变动,最小幅度步进100mV。
通过一个乘法电路和一个除法电路实现。
(8)顶层设计模块三、仿真结果及分析1、正弦波仿真波形分析:clk :输入的时钟信号;dout :上升沿到来时,输出正弦波取样点的数值;示波器显示为2、三角波仿真波形分析:Clk :输入的时钟信号;Dout:上升沿到来时,输出三角波的取样值;示波器显示为3、锯齿波仿真波形分析:clk: 输入的时钟信号;dout: 上升沿到来时,输出锯齿波的取样值;示波器显示为4、方波仿真波形分析:clk:输入的时钟信号;dout: 上升沿到来时,输出方波的取样值;示波器显示为5、波形选择仿真波形分析:reset:复位键,可使系统恢复初始状态;a:按键的次数,累加循环;d1:输入对应的是正弦波,可连接到正弦波输出端;d2:输入对应的是方波,可连接到方波输出端;d3:输入对应的是锯齿波,可连接到锯齿波输出端;d4:输入对应的是三角波,可连接到三角波输出端;q:输出选择后的波形;6、频率控制(分频)仿真波形分析:ffclk:晶振的频率;cp:分频后的频率;四、总结及体会通过此次课程设计,让我们深切的体会到自己所学知识的浅薄。
众所周知,EDA技术正在成为现代电子设计技术的核心,利用EDA技术进行电路设计已经成为不可阻挡的趋势。
本设计使用了基于Alter 公司的FPGA系列,采用由Alter公司提供的系统开发工具QuartusⅡ软件进行系统的设计和仿真。
数字信号发生器在实验及工业场所都有着重要的应用,本次实验设计的能够输出四种波形的简易多功能信号发生器,其仿真结果表明本次设计是正确有效的,但由于设计者能力有限,本次设计仍有许多值得改进的地方。
在设计过程当中,遇到了软件操作不熟练,程序编写不规范等诸多问题,通过对问题的总结分析得出,应用软件的主要功能必须熟练操作,才能提高工作效率,需要规范操作的地方必须严格按照使用说明操作,避免由于软件使用不当造成的错误产生。
程序的编写格式必须规范,模块、端口以及信号变量的命名应当反映实际意义,缩进格式工整明了,方便阅读理解,这样有利于程序的编写,有利于分析调试,也有利于程序的重复使用。
总的来说,在这次课程设计过程中我们学到了很多,既复习了以前学过的QuartusⅡ软件,算是对以前学过知识的查缺补漏,又锻炼了我们遇到问题、分析并解决问题的能力,能够有针对性地查找资料,然后加以吸收利用,以提高自己的应用能力,而且还能增长自己见识,补充最新的专业知识。
相信通过此次设计的锻炼,我们对专业知识和技能的掌握将更加牢靠,在今后的工作和学习中,必将使我们受益匪浅,取得应有的优势。
五、参考文献[1]潘松、黄继业,EDA技术实用教程[M],北京:科学出版社,2010.05,338-344.[2]黄仁欣,EDA技术实用教程[M],北京:清华大学出版社,2006.09,199-200.[3]蒋小燕、俞伟钧,EDA技术及VHDL[M],南京:东南大学出版社,2008.12,230-236.六、附录1、正弦波程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned;entity singt isport(clk:in std_logic;dout:out integer range 255 downto 0);end;architecture dacc of singt issignal q :integer range 63 downto 0;signal d :integer range 255 downto 0;signal d1:integer range 255 downto 0;beginprocess(clk)beginif clk'event and clk='1' thenif q<63 then q<=q+1;else q<=0;end if; end if;end process;process(q)begincase q iswhen 00=> d<=255;when 01=> d<=254;when 02=> d<=252;when 03=> d<=249;when 04=> d<=245;when 05=> d<=239;when 06=> d<=233;when 07=> d<=225;when 08=> d<=217;when 09=> d<=207;when 10=> d<=197;when 11=> d<=186;when 12=> d<=174;when 13=> d<=162;when 14=> d<=150;when 15=> d<=137;when 16=> d<=124;when 17=> d<=112;when 18=> d<=99;when 19=> d<=87;when 20=> d<=75;when 21=> d<=64;when 22=> d<=53;when 23=> d<=43;when 24=> d<=34;when 25=> d<=26;when 26=> d<=19;when 27=> d<=3;when 28=> d<=8;when 29=> d<=4;when 30=> d<=1;when 31=> d<=0;when 32=> d<=0;when 33=> d<=1;when 34=> d<=4;when 35=> d<=8;when 36=> d<=03;when 37=> d<=19;when 38=> d<=26;when 39=> d<=34;when 40=> d<=43;when 41=> d<=53;when 42=> d<=64;when 43=> d<=75;when 44=> d<=87;when 45=> d<=99;when 46=> d<=112;when 47=> d<=124;when 48=> d<=137;when 49=> d<=150;when 50=> d<=162;when 51=> d<=174;when 52=> d<=186;when 53=> d<=197;when 54=> d<=207;when 55=>when 56=> d<=225;when 57=> d<=233;when 58=> d<=239;when 59=> d<=245;when 60=> d<=249;when 61=> d<=252;when 62=> d<=254;when 63=> d<=255;when others=>null;end case;if clk'event and clk='1' then d1<=d; end if;end process;dout<=d1;end;2、三角波程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned;entity sanjiaogt isport(clk:in std_logic;dout:out integer range 255 downto 0);end;architecture dacc of sanjiaogt issignal q :integer range 63 downto 0;signal d :integer range 255 downto 0;signal d1:integer range 255 downto 0;beginprocess(clk)beginif clk'event and clk='1' thenif q<63 then q<=q+1;else q<=0;end if; end if;end process;process(q)begincase q iswhen 00=> d<=0;when 01=> d<=4;when 02=> d<=8;when 03=> d<=12;when 04=> d<=16;when 05=> d<=20;when 06=> d<=24;when 07=> d<=28;when 08=> d<=32;when 09=> d<=36;when 10=> d<=40;when 11=> d<=44;when 12=> d<=48;when 13=> d<=52;when 14=> d<=56;when 15=> d<=60;when 16=> d<=64;when 17=> d<=68;when 18=> d<=72;when 19=> d<=76;when 20=> d<=80;when 21=> d<=84;when 22=> d<=88;when 23=> d<=92;when 24=> d<=96;when 25=> d<=100;when 26=> d<=104;when 27=> d<=108;when 28=> d<=112;when 29=> d<=116;when 30=> d<=120;when 31=> d<=124;when 32=> d<=124;when 33=> d<=120;when 34=> d<=116;when 35=>when 36=> d<=108;when 37=> d<=104;when 38=> d<=100;when 39=> d<=96;when 40=> d<=92;when 41=> d<=88;when 42=> d<=84;when 43=> d<=80;when 44=> d<=76;when 45=> d<=72;when 46=> d<=68;when 47=> d<=64;when 48=> d<=60;when 49=> d<=56;when 50=> d<=52;when 51=> d<=48;when 52=> d<=44;when 53=> d<=40;when 54=> d<=36;when 55=> d<=32;when 56=> d<=28;when 57=> d<=24;when 58=> d<=20;when 59=> d<=16;when 60=> d<=12;when 61=> d<=8;when 62=> d<=4;when 63=> d<=0;when others=>null;end case;if clk'event and clk='1' then d1<=d; end if;end process;dout<=d1;end;3、锯齿波程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned;entity juchigt isport(clk:in std_logic;dout:out integer range 255 downto 0);end;architecture dacc of juchigt issignal q :integer range 63 downto 0;signal d :integer range 255 downto 0;signal d1:integer range 255 downto 0;beginprocess(clk)beginif clk'event and clk='1' thenif q<63 then q<=q+1;else q<=0;end if; end if;end process;process(q)begincase q iswhen 00=> d<=0;when 01=> d<=4;when 02=> d<=8;when 03=> d<=12;when 04=> d<=16;when 05=> d<=20;when 06=> d<=24;when 07=> d<=28;when 08=> d<=32;when 09=> d<=36;when 10=> d<=40;when 11=> d<=44;when 12=> d<=48;when 13=> d<=52;when 14=> d<=56;when 15=> d<=60;when 16=> d<=64;when 17=> d<=68;when 18=> d<=72;when 19=> d<=76;when 20=> d<=80;when 21=> d<=84;when 22=> d<=88;when 23=> d<=92;when 24=> d<=96;when 25=> d<=100;when 26=> d<=104;when 27=>when 28=> d<=112;when 29=> d<=116;when 30=> d<=120;when 31=> d<=124;when 32=> d<=128;when 33=> d<=132;when 34=> d<=136;when 35=> d<=140;when 36=> d<=144;when 37=> d<=148;when 38=> d<=152;when 39=> d<=156;when 40=> d<=160;when 41=> d<=164;when 42=> d<=168;when 43=> d<=172;when 44=> d<=176;when 45=> d<=180;when 46=> d<=184;when 47=> d<=188;when 48=> d<=192;when 49=> d<=196;when 50=> d<=200;when 51=> d<=204;when 52=> d<=208;when 53=> d<=212;when 54=> d<=216;when 55=> d<=220;when 56=> d<=224;when 57=> d<=228;when 58=> d<=232;when 59=> d<=236;when 60=> d<=240;when 61=> d<=244;when 62=> d<=248;when 63=> d<=252;when others=>null;end case;if clk'event and clk='1' then d1<=d; end if;end process;dout<=d1;end;4、方波程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned;entity fanggt isport(clk:in std_logic;dout:out integer range 255 downto 0);end;architecture dacc of fanggt issignal q :integer range 63 downto 0;signal d :integer range 255 downto 0;signal d1:integer range 255 downto 0;beginprocess(clk)beginif clk'event and clk='1' thenif q<63 then q<=q+1;else q<=0;end if; end if;end process;begincase q iswhen 00=> d<=255;when 01=> d<=255;when 02=> d<=255;when 03=> d<=255;when 04=> d<=255;when 05=> d<=255;when 06=> d<=255;when 07=> d<=255;when 08=> d<=255;when 09=> d<=255;when 10=> d<=255;when 11=> d<=255;when 12=> d<=255;when 13=> d<=255;when 14=> d<=255;when 15=> d<=255;when 16=> d<=255;when 17=> d<=255;when 18=> d<=255;when 19=> d<=255;when 20=> d<=255;when 21=> d<=255;when 22=> d<=255;when 23=> d<=255;when 24=> d<=255;when 25=> d<=255;when 26=> d<=255;when 27=> d<=255;when 28=> d<=255;when 29=> d<=255;when 30=> d<=255;when 31=> d<=255;when 32=> d<=0;when 33=> d<=0;when 34=> d<=0;when 35=> d<=0;when 36=> d<=0;when 37=> d<=0;when 38=> d<=0;when 39=> d<=0;when 40=> d<=0;when 41=> d<=0;when 42=> d<=0;when 43=> d<=0;when 44=> d<=0;when 45=> d<=0;when 46=> d<=0;when 47=> d<=0;when 48=> d<=0;when 49=> d<=0;when 50=> d<=0;when 51=> d<=0;when 52=> d<=0;when 53=> d<=0;when 54=> d<=0;when 55=> d<=0;when 56=> d<=0;when 57=> d<=0;when 58=> d<=0;when 59=> d<=0;when 60=> d<=0;when 61=> d<=0;when 62=> d<=0;when 63=> d<=0;when others=>null;end case;if clk'event and clk='1' then d1<=d; end if;end process;dout<=d1;end;5、波形选择程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity wav_sel isport( a:in std_logic;reset:in std_logic;d1,d2,d3,d4:in integer range 255 downto 0;q:out integer range 255 downto 0);architecture behav of wav_sel issignal k:integer range 3 downto 0:=0;beginprocess(a,reset)beginif reset='0' then q<=d1;else if a'event and a='1' thenif k<3 then k<=k+1;else k<=0 ;end if;end if;end if;case k iswhen 0=> q<=d1;when 1=> q<=d2;when 2=> q<=d3;when 3=> q<=d4;end case;end process;end behav;6、频率控制程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin isport(ffclk:in std_logic;cp:out std_logic);end;architecture str of fenpin issignal count:integer range 0 to 500;signal clk_data:std_logic;beginprocess(ffclk,count)beginif ffclk'event and ffclk='1' thenif count=50 thencount<=0;clk_data<=not clk_data;else count<=count+1;end if;end if;end process;end str;7、幅度控制程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity fudugt isport (d:in integer range 255 downto 0;temp,reset:in std_logic;fout:out integer range 65535 downto 0);end;architecture behav of fudugt issignal d1:integer range 65535 downto 0;signal k:integer range 255 downto 0:=1;beginprocess(temp)beginif reset='0' then d1<=0;elseif temp'event and temp='1' then k<=k+1; end if;end if;d1<=d*k;end process;fout<=d1;end;8、数码管显示程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;entity display isport(cp1:in std_logic;k:in std_logic_vector(5 downto 0);m:in std_logic_vector(4 downto 0);show:out std_logic_vector(7 downto 0);sel:out std_logic_vector(3 downto 0));end display;architecture behavior of display issignal count:integer range 0 to 3;signal sel_1:std_logic_vector(3 downto 0);signal p0,p1,p2,p3:integer range 0 to 9;signal show1:std_logic_vector(7 downto 0);beginprocess(cp1)beginif(cp1'event and cp1='1')thenif count=3 then count<=0;elsecount<=count+1;end if;end if;end process;process(k,m)begincase k iswhen "000000"=>p0<=0;p1<=0;when "000001"=>p0<=1;p1<=0;when "000010"=>p0<=2;p1<=0;when "000011"=>p0<=3;p1<=0;when "000100"=>p0<=4;p1<=0;when "000101"=>p0<=5;p1<=0;when "000110"=>p0<=6;p1<=0;when "000111"=>p0<=7;p1<=0;when "001000"=>p0<=8;p1<=0;when "001001"=>p0<=9;p1<=0;when "001010"=>p0<=0;p1<=1;when "001011"=>p0<=1;p1<=1;when "001100"=>p0<=2;p1<=1;when "001101"=>p0<=3;p1<=1;when "001110"=>p0<=4;p1<=1;when "001111"=>p0<=5;p1<=1;when "010000"=>p0<=6;p1<=1;when "010001"=>p0<=7;p1<=1;when "010010"=>p0<=8;p1<=1;when "010011"=>p0<=9;p1<=1;when "010100"=>p0<=0;p1<=2;when "010101"=>p0<=1;p1<=2;when "010110"=>p0<=2;p1<=2;when "010111"=>p0<=3;p1<=2;when "011000"=>p0<=4;p1<=2;when "011001"=>p0<=5;p1<=2;when "011010"=>p0<=6;p1<=2;when "011011"=>p0<=7;p1<=2;when "011100"=>p0<=8;p1<=2;when "011110"=>p0<=0;p1<=3;when "011111"=>p0<=1;p1<=3;when "100000"=>p0<=2;p1<=3;when "100001"=>p0<=3;p1<=3;when "100010"=>p0<=4;p1<=3;when "100011"=>p0<=5;p1<=3;when "100100"=>p0<=6;p1<=3;when "100101"=>p0<=7;p1<=3;when "100110"=>p0<=8;p1<=3;when "100111"=>p0<=9;p1<=3;when "101000"=>p0<=0;p1<=4;when "101001"=>p0<=1;p1<=4;when "101010"=>p0<=2;p1<=4;when "101011"=>p0<=3;p1<=4;when "101100"=>p0<=4;p1<=4;when "101101"=>p0<=5;p1<=4;when "101110"=>p0<=6;p1<=4;when "101111"=>p0<=7;p1<=4;when "110000"=>p0<=8;p1<=4;when "110001"=>p0<=9;p1<=4;when "110010"=>p0<=0;p1<=5;when "110011"=>p0<=1;p1<=5;when "110100"=>p0<=2;p1<=5;when "110101"=>p0<=3;p1<=5;when "110110"=>p0<=4;p1<=5;when "110111"=>p0<=5;p1<=5;when "111000"=>p0<=6;p1<=5;when "111001"=>p0<=7;p1<=5;when "111010"=>p0<=8;p1<=5;when "111011"=>p0<=9;p1<=5;when "111100"=>p0<=0;p1<=6;when "111101"=>p0<=1;p1<=6;when "111110"=>p0<=2;p1<=6;when "111111"=>p0<=3;p1<=6;when others=>p0<=0;p1<=0; end case;case m iswhen "00000"=>p2<=0;p3<=0;when "00001"=>p2<=1;p3<=0;when "00010"=>p2<=2;p3<=0;when "00011"=>p2<=3;p3<=0;when "00101"=>p2<=5;p3<=0;when "00110"=>p2<=6;p3<=0;when "00111"=>p2<=7;p3<=0;when "01000"=>p2<=8;p3<=0;when "01001"=>p2<=9;p3<=0;when "01010"=>p2<=0;p3<=1;when "01011"=>p2<=1;p3<=1;when "01100"=>p2<=2;p3<=1;when "01101"=>p2<=3;p3<=1;when "01110"=>p2<=4;p3<=1;when "01111"=>p2<=5;p3<=1;when "10000"=>p2<=6;p3<=1;when "10001"=>p2<=7;p3<=1;when "10010"=>p2<=8;p3<=1;when "10011"=>p2<=9;p3<=1;when "10100"=>p2<=0;p3<=2;when "10101"=>p2<=1;p3<=2;when "10110"=>p2<=2;p3<=2;when "10111"=>p2<=3;p3<=2;when "11000"=>p2<=4;p3<=2;when "11001"=>p2<=5;p3<=2;when "11010"=>p2<=6;p3<=2;when "11011"=>p2<=7;p3<=2;when "11100"=>p2<=8;p3<=2;when "11101"=>p2<=9;p3<=2;when "11110"=>p2<=0;p3<=3;when "11111"=>p2<=1;p3<=3;when others=>p2<=0;p3<=0;end case;end process;process(count)begincase count iswhen 0=>sel_1<="1110";when 1=>sel_1<="1101";when 2=>sel_1<="1011";when 3=>sel_1<="0111";end case;end process;process(sel_1)beginif(sel_1(0)='0')thencase p0 iswhen 0=>show1<="11000000";when 1=>show1<="11111001";when 2=>show1<="10100100";when 3=>show1<="10110000";when 4=>show1<="10011001";when 5=>show1<="10010010";when 6=>show1<="10000010";when 7=>show1<="11111000";when 8=>show1<="10000000";when 9=>show1<="10010000";when others=>show1<=null; end case;elsif(sel_1(1)='0')thencase p1 iswhen 0=>show1<="11000000";when 1=>show1<="11111001";when 2=>show1<="10100100";when 3=>show1<="10110000";when 4=>show1<="10011001";when 5=>show1<="10010010";when 6=>show1<="10000010";when 7=>show1<="11111000";when 8=>show1<="10000000";when 9=>show1<="10010000";when others=>show1<=null; end case;elsif(sel_1(2)='0')thencase p2 iswhen 0=>show1<="11000000";when 1=>show1<="11111001";when 2=>show1<="10100100";when 3=>show1<="10110000";when 4=>show1<="10011001";when 5=>show1<="10010010";when 6=>show1<="10000010";when 7=>show1<="11111000";when 8=>show1<="10000000";when 9=>show1<="10010000";when others=>show1<=null; end case;elsif(sel_1(3)='0')thencase p3 iswhen 0=>show1<="11000000";when 1=>show1<="11111001";when 2=>show1<="10100100";when 3=>show1<="10110000";when 4=>show1<="10011001";when 5=>show1<="10010010";when 6=>show1<="10000010";when 7=>show1<="11111000";when 8=>show1<="10000000";when 9=>show1<="10010000";when others=>show1<=null;end case;end if;end process;process(cp1)beginif cp1'event and cp1='1' thensel<=sel_1;show<=show1;end if;end process;end behavior;9、按键程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity kchoose isport(key2,clk:in std_logic;k:out std_logic_vector(5 downto 0));end;architecture str of kchoose issignal q1,q2,cp: std_logic;signal count: integer range 0 to 2048;signal clk_data: std_logic;signal imp: std_logic;signal cc: std_logic_vector(5 downto 0);beginprocess(clk,count)beginif clk'event and clk='1' thenif count=2048 thencount<=0;clk_data<=not clk_data;else count<=count+1;end if;end if;cp<=clk_data;end process;process(cp)beginif cp'event and cp='1' thenq2<=q1;q1<=key2;end if;end process;imp<=q1 and not q2;process(imp)beginif imp'event and imp='1' thenif cc="111111" thencc<="000000";else cc<=cc+1;end if;end if;end process;k<=cc;end str;10、顶层模块程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned;entity xuanzegt isport(fclk,p1,p2,reset1:in std_logic;dout:out integer range 65535 downto 0);end;architecture beh of xuanzegt iscomponent fenpinport(ffclk:in std_logic;cp:out std_logic);end component;component fudugtport (d:in integer range 255 downto 0;temp,reset:in std_logic;fout:out integer range 65535 downto 0);end component;component wav_selport( a,reset:in std_logic;d1,d2,d3,d4:in integer range 255 downto 0;q:out integer range 255 downto 0);end component;component singtport(clk:in std_logic;dout:out integer range 255 downto 0);end component;component fanggtport(clk:in std_logic;dout:out integer range 255 downto 0);end component;component juchigtport(clk:in std_logic;dout:out integer range 255 downto 0);end component;component sanjiaogtport(clk:in std_logic;dout:out integer range 255 downto 0);end component;signal w,x,y,z,v:integer range 255 downto 0;signal f:std_logic;beginu1:singt port map (dout=>w,clk=>f);u2:fanggt port map (dout=>x,clk=>f);u3:juchigt port map (dout=>y,clk=>f);u4:sanjiaogt port map (dout=>z,clk=>f);u5:wav_sel port map (d1=>w,d2=>x,d3=>y,d4=>z,q=>v,a=>p1,reset=>reset1);u6:fudugt port map (temp=>p2,d=>v,fout=>dout,reset=>reset1);u7:fenpin port map (ffclk=>fclk,cp=>f);end;。