VHDL实验报告_第1页
VHDL实验报告_第2页
VHDL实验报告_第3页
VHDL实验报告_第4页
VHDL实验报告_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、西安电子科技大学实验报告课程名称硬件描述语言与可编程逻辑器件成绩实验学时16评语: 指导教师: 年 月 日班 级: 学 号: 姓 名: 地 点: E-505 批 次: 第二批 时 间:星期五下午、晚上 实验一 3-8译码器电路设计实验(一)实验名称:3-8译码器电路设计(二)实验目的:1)掌握ISE开发工具的使用,掌握FPGA开发的基本步骤;2)掌握组合逻辑电路设计的一般方法;3)掌握程序下载方法,了解UCF文件的格式;4)初步了解开发板资源,掌握开发板使用方法。重点了解滑动开关和LED显示灯的使用方法。5)理解并掌握VHDL程序的结构,掌握输入输出端口的含义;(三)实验内容:(1)用VHDL

2、实现3-8译码器模块译码器电路如图3-1所示。其功能如表3-1所示。试用VHDL完成该译码器的设计,并在开发板上进行检验。3-8译码器ABCG2BY0Y1Y2Y3Y4Y5Y6Y7图3-1 74x138 3-8译码器G2AG1 表3-1 译码器功能表输入输出G1G2AG2BCBAY7Y6Y5Y4Y3Y2Y1Y00XXXXX00000000X1XXXX00000000XX1XXX000000001000000000000110000100000010100010000001001000110000100010010000010000100101001000001001100100000010011

3、110000000(2)将程序下载到FPGA并进行检验l 资源使用要求:n 用滑动开关SW0SW4作为输入A,B,C,G1;n 滑动开关BTN_EAST,BTN_WEST作为控制端G2A,G2B;n 8个LED灯表示8个输出。l 检验方法:当SW0处于OFF(G1=1)或者SW1处于ON(G2A=1)或者SW2处于ON(G2B=1)位置时,所 有LED灯灭;当SW0处于ON(G1=1),且BTN_EAST,BTN_WEST均处于OFF状态时,反映当前输入的译码输出在LED灯上显示,即当输入为000(滑动开关SW0-SW2处于OFF状态),LED0亮,其它灯灭,等等。(四)实验步骤:1)启动IS

4、E,新建工程文件,编写3-8译码器的VHDL模块;2)新建UCF文件,输入位置约束;3)完成综合、实现,生成下载文件;4)连接开发板USB下载线,开启开发板电源;5)下载到FPGA;6)拨动开关,验证结果是否正确。(五)实验代码: entity decode38 is Port ( A : in STD_LOGIC; B : in STD_LOGIC; C : in STD_LOGIC; G1 : in STD_LOGIC; G2A : in STD_LOGIC; G2B : in STD_LOGIC; Y : out STD_LOGIC_VECTOR (7 downto 0);end dec

5、ode38;architecture Behavioral of decode38 issignal din: std_logic_vector(2 downto 0);begindin <= C&B&A;PROCESS(din,G1,G2A,G2B)beginif (G1='1' AND G2A='0' AND G2B='0') THENcase din iswhen "000" => Y<="00000001"when "001" => Y&l

6、t;="00000010"when "010" => Y<="00000100"when "011" => Y<="00001000"when "100" => Y<="00010000"when "101" => Y<="00100000"when "110" => Y<="01000000"when "1

7、11" => Y<="10000000"when others => Y<="00000000"end case;elsif(G1='0' OR G2A='1' OR G2B='1')THEN Y <= "00000000"else null;end if;end process;end Behavioral;约束性文件NET "A" LOC = "L13" | IOSTANDARD = LVTTL | PU

8、LLUP;NET "B" LOC = "L14" | IOSTANDARD = LVTTL | PULLUP;NET "C" LOC = "H18" | IOSTANDARD = LVTTL | PULLUP;NET "G1" LOC = "N17" | IOSTANDARD = LVTTL | PULLUP;NET "Y<7>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW |

9、 DRIVE = 8;NET "Y<6>" LOC = "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<5>" LOC = "D11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<4>" LOC = "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NE

10、T "Y<3>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<2>" LOC = "E11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<1>" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<

11、;0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "G2A" LOC = "H13" | IOSTANDARD = LVTTL | PULLdown;NET "G2B" LOC = "D18" | IOSTANDARD = LVTTL | PULLdown; 实验二 可逆计数器设计实验 (一)实验名称:八位可逆计数器电路设计(二)实验目的:1)进一步熟练ISE开发工具,巩固FPGA开发的基本步骤

12、;2)掌握设计仿真方法;3)掌握时序逻辑电路设计的一般方法,掌握时钟分频程序设计方法;4)理解VHDL的层次结构设计,掌握原理图输入方法;5)巩固程序下载方法;6)了解开发板时钟资源,以及时钟分频方法。(三)实验内容:本实验分多个模块实现,采用原理图输入方法完成设计输入。(1)实现如下八位可逆计数器可逆计数器电路图及功能表如图4-1和表4-1所示。用VHDL完成该电路模块的设计,并生成原理图。clrenclkY0Y1Y2Y3Y4Y5Y6Y7Up/Dn图4-1 可逆计数器原理图 表4-1 可逆计数器功能表输入输出clrenUp/Dnclk Y7 Y01XXX0000000000XX停止计数011

13、计数器+1操作010计数器-1操作(2)资源使用要求及实现方法:1)用LED0LED7作为计数器输出显示,LED7为高位,LED0为低位;2)SW0为计数方向up/dn控制;3)SW1为计数允许EN控制端;4)BTN_EAST为clr按钮;5)计数时钟频率为1Hz,通过对50Mhz系统时钟分频得到,分频电路独立编写一个模块,如图4-2所示。完成模块设计,并生成原理图;50M clock1Hz clock1/5000000图4-2 1/5000000分频器6)计数器扩展:可以对按键次数进行计数(按键为BTN_SOUTH),即通过SW2选择计数源。即当S='1'时,输出In1,当S

14、='0'时,输出In2。二选一电路如图4-3所示。In1DoutIn2S2选1电路图4-3 二选一电路7)将图4-1图4-3三个模块连接起来,构成一个完整计数器。如图4-4所示。En(SW1)clkY0(LED0)Y3(LED3)Y4(LED4)Y5(LED5)Y6(LED6)Y7(LED7)Up/Dn(SW0)2选1SW2clr(BTN_EAST)BTN_SOUTH1/5000000图4-4 完整的可逆计数器(四) 实验步骤:1)建立工程文件,顶层文件为原理图;2)编写分频模块程序:输入50MHz系统时钟,输出为1Hz计数时钟;3)编写2选1模块,输入为按键、1Hz时钟和开关

15、SW2,输出为计数源;4)编写计数器模块主程序模块;5)在原理图中,将各个模块连接,使用pinhead分配引脚资源;6)对程序进行功能仿真;7)下载程序,进行验证。(五)实验代码:计数器COUNTER:entity COUNTER is Port ( clr : in STD_LOGIC; en : in STD_LOGIC; updown : in STD_LOGIC; clk : in STD_LOGIC; y : out STD_LOGIC_VECTOR (7 downto 0);end COUNTER;architecture Behavioral of COUNTER issigna

16、l sum:STD_LOGIC_VECTOR (7 downto 0):="00000000"begin process(sum,clr,en,updown,clk) beginif(clk'event and clk ='1')then if(clr='1')then sum<="00000000" y<="00000000" elsif(en='0')then y<=sum; elsif(updown='1')then sum<=sum

17、+1; y<=sum; else sum<=sum-1; y<=sum; end if;end if; end process;end Behavioral;分频器FREQ:entity FREQ is Port ( clk50M : in STD_LOGIC; clk1hz : out STD_LOGIC);end FREQ;architecture Behavioral of FREQ isbegin process(clk50M) variable num:INTEGER range 0 to 50000002:=0; begin if(clk50M'event

18、 and clk50M ='1')thennum:=num+1;if(num<25000000)thenclk1hz<='1'elseclk1hz<='0' if (num>50000000)thennum:=0;end if;end if;end if; end process; end Behavioral;2选1数据选择器SEL:entity SEL is Port ( in1 : in STD_LOGIC; in2 : in STD_LOGIC; S : in STD_LOGIC; Dout : out STD_L

19、OGIC);end SEL;architecture Behavioral of SEL isbegin process(in1,in2,S) begin if(S = '0')then Dout <= in1; else Dout <= in2; end if; end process;end Behavioral;顶层文件TOP:entity TOP is Port ( BTN_EAST : in STD_LOGIC; SW1 : in STD_LOGIC; SW0 : in STD_LOGIC; CLK : in STD_LOGIC; BTN_SOUTH :

20、in STD_LOGIC; SW2 : in STD_LOGIC; Y : out STD_LOGIC_VECTOR (7 downto 0);end TOP;architecture Behavioral of TOP isCOMPONENT FREQPORT(clk50M : IN std_logic; clk1hz : OUT std_logic);END COMPONENT;COMPONENT SELPORT(in1 : IN std_logic;in2 : IN std_logic;S : IN std_logic; Dout : OUT std_logic);END COMPONE

21、NT;COMPONENT COUNTERPORT(clr : IN std_logic;en : IN std_logic;updown : IN std_logic;clk : IN std_logic; y : OUT std_logic_vector(7 downto 0);END COMPONENT;signal CLKOUT:STD_LOGIC;signal JIX:STD_LOGIC;beginInst_FREQ: FREQ PORT MAP(clk50M =>CLK ,clk1hz =>CLKOUT);Inst_SEL: SEL PORT MAP(in1 =>C

22、LKOUT,in2 =>BTN_SOUTH,S =>SW2,Dout =>JIX);Inst_COUNTER: COUNTER PORT MAP(clr =>BTN_EAST,en =>SW1,updown =>SW0,clk =>JIX,y =>Y );约束性文件NET "clr" LOC = "L13" | IOSTANDARD = LVTTL | PULLUP;NET "en" LOC = "L14" | IOSTANDARD = LVTTL | PULLUP;

23、NET "updown" LOC = "H18" | IOSTANDARD = LVTTL | PULLUP;NET "Y<7>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<6>" LOC = "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<5>" LOC = &q

24、uot;D11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<4>" LOC = "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<3>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<2>" LOC = "E11"

25、; | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<1>" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "clk" LOC = "C9" | IOSTANDARD = LVC

26、MOS33 ;NET "clk" PERIOD = 20.0ns HIGH 40%;NET "SW2" LOC = "V4" | IOSTANDARD = LVTTL | PULLdown; 实验三 按键抖动消除及验证电路设计(一)实验名称:按键抖动消除及验证电路设计(二)实验目的:1)进一步熟练ISE开发工具,巩固FPGA开发的基本步骤,掌握功能仿真方法;2)了解按键抖动的原因,抖动消除方法;3)掌握状态机的设计方法;4)掌握消除抖动的状态机设计方法;5)巩固程序下载方法。(三)实验内容:(1) 原理简介按键动作发生时,按键的输出会

27、出现不稳定的逻辑0和逻辑1的跳变。该信号直接输入到计数器之类电路,会发生计数错误。如图5-1所示。去抖的目的是根据抖动信号产生如图5-2所示的信号。图5-1 信号抖动(pushbtn) 图5-2 去抖后的信号(key_out)(2) 提示:状态机设计思路设置六个状态:S0,S1,S2,S3,S4,S5。电路启动时,进入复位状态S0,在S0状态下,去抖输出信号key_out为0,时钟信号divclk(频率为2.5Mhz,通过50Mhz系统时钟20分频得到)以一定频率采样按键输入信号pushbtn,如果采样到pushbtn = 0,则停留在S0状态,并继续采样,一旦采样到pushbtn=1,则转入

28、S1延时状态,进行消抖延时(延时可以用计数器来完成,比如50个divclk周期),当延时结束时,Delay_end=1,则转入S2状态,在此状态下,时钟信号divclk以一定频率采样按键输入pushbtn,如果pushbtn = 0则转入S0,否则转入S3;状态S3,S4的转换过程和条件与S2相同,在状态S4下,如果pushbtn=1,则转入S5状态,当进入S5时,表示经过S2,S3,S4三个连续状态检测按键输入pushbtn都为1,则认为按键处于稳定状态,在S5输出按键确认信号key_out =1。同时在状态S5下,时钟信号divclk检测按键输入pushbtn,如果pushbtn = 1,

29、表示按键未释放,继续停留在S5,检测输入信号,如果检测到pushbtn= 0,表示按键已经释放,输出key_out= 0, 返回到状态S0,等待下一次按键操作。S0S5S4S1S2S3(3)完成验证电路设计设计一个按键计数器,通过选择开关,对未去抖的信号和去抖后的信号分别进行计数。验证设计的正确性。完整的原理图如图5-3所示。提示,去抖电路的采样时钟最好通过50Mhz进行分频后产生。去抖状态机模块2选1模块按键选择计数器核心进程Y0(LED0)Y3(LED3)Y4(LED4)Y5(LED5)Y6(LED6)Y7(LED7)Y1(LED1)Y2(LED2)up/dn2.5Mhz分频clr图5-3

30、 完整电路实际设计电路如下图所示:资源使用要求:1)用LED0LED7作为计数输出。资源约束为:NET "y<7>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;NET "y<6>" LOC = "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;NET "y<5>" LOC = "D11" | IOSTANDAR

31、D = LVTTL | SLEW = SLOW | DRIVE = 8 ;NET "y<4>" LOC = "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;NET "y<3>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;NET "y<2>" LOC = "E11" | IOSTANDARD = LVTTL

32、 | SLEW = SLOW | DRIVE = 8 ;NET "y<1>" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;NET "y<0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;2)BTN_SOUTH作为待计数的按键。资源约束为:NET "pushbtn" LOC = "K17" | IOST

33、ANDARD = LVTTL | PULLDOWN; #BTN_SOUTH3)对去抖信号还是直接按键计数选择用SW1开关控制。即当SW1处于1状态,对去抖后的信号计数,否则直接对按键btn_south计数。资源约束为:NET "jitteren" LOC = "L14" | IOSTANDARD = LVTTL | PULLUP ; #SW14)SW0用来控制加1计数还是减1计数,当up/dn = '1'时,加1计数。资源约束为:NET "updown" LOC = "L13" | IOSTANDA

34、RD = LVTTL | PULLUP ; #SW05)BTN_EAST作为计数器清0控制,当按下时,对计数器清0,资源为:NET "clr" LOC = "H13" | IOSTANDARD = LVTTL | PULLDOWN ; #BTN_EAST6)系统时钟为50Mhz,资源为:NET "clk55Mhz" LOC = "C9" | IOSTANDARD = LVCMOS33 ;注:状态机使用对系统时钟进行分频后的时钟信号。(四)实验步骤:1)画出电路的状态转换图;2)编写完整的VHDL程序;3)下载程序,

35、进行验证(五)实验代码: 器件之间的连接图:消抖电路的设计entity xiaoxiao is Port ( clk : in STD_LOGIC; rst : in STD_LOGIC; keyin : in STD_LOGIC; keyout : out STD_LOGIC);end xiaoxiao;architecture Behavioral of xiaoxiao is TYPE states IS (S0,S1,S2,S3,S4,S5); SIGNAL next_state: states;BEGINPROCESS (clk,rst,keyin)variable count:in

36、teger:= 1000; beginIF (rst = '1') THEN next_state <= s0; ELSIF (clk'EVENT AND clk = '1')THEN CASE next_state IS when s0 =>if (keyin = '1')thennext_state <= s1;else null;end if; when s1=>count := count -1;if (count = 0) thencount := 1000;next_state <= s2;els

37、e null;end if;when s2=>if (keyin='0') then next_state <= s0;else next_state <= s3;end if; when s3=>if (keyin='0') then next_state <= s0;else next_state <= s4;end if; when s4=>if (keyin='0') then next_state <= s0;else next_state <= s5; keyout <= &

38、#39;1'end if; when s5=>if (keyin='0') then keyout <= '0' next_state <= s0;end if; end case; end if; End process;end Behavioral;约束性文件NET "clr" LOC = "L13" | IOSTANDARD = LVTTL | PULLUP;NET "updn" LOC = "L14" | IOSTANDARD = LVTTL | P

39、ULLUP;NET "sel" LOC = "H18" | IOSTANDARD = LVTTL | PULLUP;NET "Y<7>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<6>" LOC = "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<5>" LOC =

40、 "D11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<4>" LOC = "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<3>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<2>" LOC = "E11&q

41、uot; | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<1>" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "divclk" LOC = "C9" | IOSTANDARD

42、 = LVCMOS33 ;NET "divclk" PERIOD = 20.0ns HIGH 40%;NET "but" LOC = "V4" | IOSTANDARD = LVTTL | PULLdown; 实验四 两人乒乓球游戏(一)实验名称:两人乒乓球游戏(二)实验目的:1)进一步熟练ISE开发工具,巩固FPGA开发的基本步骤,掌握功能仿真方法;2)巩固状态机的设计方法;3)巩固按键消抖电路设计方法;4)掌握多进程程序设计方法;5)巩固程序下载方法;6)了解开发板时钟资源,以及时钟分频方法。(三)实验内容:(1) 原理简介两人乒

43、乓游戏机用8个发光二极管代表乒乓球台,中间两个发光二极管作为乒乓球网,用点亮的发光二极管按照一定的方向移动来表示球的运动。在游戏机的两侧各设置发球和击球开关,甲乙双方按乒乓球比赛规则来操作开关。当甲方按动发球开关时,靠近甲方的第一个发光二极管亮,然后发光二极管由甲方向乙方依次点亮,代表乒乓球的移动,当球过网后,按照设计者规定的球位乙方就可以击球。若乙方提前击球或者未击到球,则甲方得分。然后重新发球比赛,直到一方达到21分为止,记分清0,重新开始新一局比赛。(2) 提示:状态机设计思路设置七个状态:“等待发球状态”、“第一盏灯亮状态”、“第八盏灯亮状态”、“球向乙移动状态” 、“球向甲移动状态”

44、、“允许甲击球状态” 、“允许乙击球状态”。开始的时候处于“等待发球状态”,若甲发球则状态转移到“第一盏灯亮状态”,若乙发球则转移到“第八盏灯亮状态”。以甲发球为例:若发球后乙没有提前击球(规定球移动到对方第一个发光二极管时允许击球),那么状态机从“第一盏灯亮状态”转移到“球向乙移动状态”,若此时乙依然没有提前击球,状态就转移到“允许乙击球状态”,在此状态下,如果乙击球了,那么状态就转移到“球向甲移动状态”。在“第一盏灯亮状态”、“球向乙移动状态”中,如果乙击球了,就算提前击球,这样甲得分,状态转移到“等待发球状态”等待发球。“球向甲移动状态”之后的过程和前面的过程只不过是甲乙角色的调换而已,

45、状态转移规则一样。状态转换图如图5-1所示。图6-1 乒乓球游戏状态转换图(3)实体设计提示在输入端口上:1)考虑一个异步置位端口reset,用于在系统不正常时回到初始常态;2)两个发球输入端serve1和serve2,逻辑1分别标识甲方和乙方发球;3)两个击球输入端hit1和hit2,逻辑1分别标识甲方和乙方击球;4)一个开始游戏按钮startbtn,处于逻辑1标识可以游戏;5)时钟输入端口clk;输出端口:8个二极管,标识乒乓球台。(4)资源使用要求1)用LED0LED7作为乒乓球台,其中LED3,LED4作为球网,总是点亮;2)BTN_EAST作为开始游戏按钮,按下一次,重新开始游戏;3

46、)BTN_SOUTH,BTN_EAST分别作为甲乙发球按钮;4)SW0作为甲击球开关,SW3作为乙击球开关。击球的动作为ON-OFF。(四)实验步骤:1)画出游戏的状态转换图;2)建立程序工程;3)编写按键去抖进程4)编写状态机进程;5)下载程序,进行验证。(五)实验代码:器件之间的连接图:核心计数器件pingpang:entity pingping is Port ( reset : in STD_LOGIC; clk : in STD_LOGIC; hit1 : in STD_LOGIC; hit2 : in STD_LOGIC; sever : in STD_LOGIC_VECTOR (

47、1 downto 0); start : in STD_LOGIC; light : out STD_LOGIC_VECTOR (7 downto 0);end pingping;architecture Behavioral of pingping istype pingpong is(waitserve,light1on,ballmoveto8,allow2hit,light8on,ballmoveto1,allow1hit);signal state:pingpong;signal i:integer range 0 to 9;signal count1,count2:std_logic

48、_vector(1 to 4):="0000"signal count:std_logic_vector(1 to 8);beginmain:process(clk,reset)beginif (reset='1') then i<=0;count1<="0000"count2<="0000"elsif (clk'event and clk='1')then if(count1="0101"or count2="0101")then co

49、unt<=count1&count2; i<=9;-结束时显示总比分-count1<="0000"count2<="0000" else case state is when waitserve=> -发球状态if (start='1') then case serve iswhen "10"=> i<=1;state<=light1on;when "01"=> i<=8;state<=light8on;when "

50、11"=> i<=0;when others=> i<=0; end case;else count<=count1&count2;i<=9; -暂停时显示当前比分end if; when light1on=> -第一盏灯亮状态 i<=2;if hit2='1' then i<=0; count1<=count1+1;state<=waitserve;else state<=ballmoveto8;end if; when light8on=> -第八盏灯亮状态 i<=7;if

51、 hit1='1' then i<=0; count2<=count2+1;state<=waitserve;else state<=ballmoveto1;end if; when ballmoveto1=> -球向甲方方向移动状态;if hit1='1' then i<=0; count2<=count2+1;state<=waitserve;elsif i=2 then i<=1; state<=allow1hit;else i<=i-1;end if; when ballmoveto8=&

52、gt; -球向乙方方向移动状态;if hit2='1'then i<=0; count1<=count1+1;state<=waitserve;elsif i=7 then i<=8; state<=allow2hit;else i<=i+1;end if; when allow1hit=> -允许甲方击球状态if hit1='1' then i<=2; state<=ballmoveto8; else count2<=count2+1;i<=0; state<=waitserve; end

53、 if; when allow2hit=> -允许乙方击球状态if hit2='1' then i<=7; state<=ballmoveto1;else count1<=count1+1;i<=0; state<=waitserve;end if; end case; end if; end if; end process main;led:process(clk)begin if(clk'event and clk='1')thenif(i=1) then light<="10011000"

54、; ;elsif(i=2) then light<="01011000" ;elsif(i=3) then light<="00111000" ;elsif(i=4) then light<="00011000" ;elsif(i=5) then light<="00011000" ;elsif(i=6) then light<="00011100" ;elsif(i=7) then light<="00011010" ;elsif(i=8

55、) then light<="00011001" ;elsif(i=9) then light<=count;elsif(i=0) then light<="00011000" ;else null;end if;end if;end process led;end Behavioral;2.5M分频器件qwqw:entity qwqw is Port ( clk50m : in STD_LOGIC; clk : out STD_LOGIC);end qwqwarchitecture Behavioral of qwqw isbegin

56、process(clk50m)variable n : INTEGER RANGE 0 to 50000000;beginif (clk50m'event and clk50m='1') thenn:=n+1;if n<=25000000 thenclk<='0'elsif n=50000000 thenn:=0;elseclk<='1'end if;end if;end process;end Behavioral;1HZ分频器件wwww:entity wwww is Port ( clk50m : in STD_LO

57、GIC; clk1 : out STD_LOGIC);end wwww;architecture Behavioral of wwww isbeginprocess(clk50m)variable n : INTEGER RANGE 0 to 20;beginif (clk50m'event and clk50m='1') thenn:=n+1;if n<=10 thenclk1<='0'elsif n=20 thenn:=0;elseclk1<='1'end if;end if;end process;end Beha

58、vioral;消抖器件xiaoxiao:entity xiaoxiao is Port ( clk : in STD_LOGIC; rst : in STD_LOGIC; keyin : in STD_LOGIC; keyout : out STD_LOGIC);end xiaoxiao;architecture Behavioral of xiaoxiao is TYPE states IS (S0,S1,S2,S3,S4,S5); SIGNAL next_state: states;BEGINPROCESS (clk,rst,keyin)variable count:integer:= 1000; beginIF (rst = '1') THEN next_state <= s0; ELSIF (clk'EVENT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论