北邮数字电路与逻辑设计实验-实验报告(下)

合集下载

北京邮电大学数字电路实验报告

北京邮电大学数字电路实验报告

北京邮电大学数字电路与逻辑设计实验实验报告实验名称:QuartusII原理图输入法设计与实现学院:北京邮电大学班级:姓名:学号:一.实验名称和实验任务要求实验名称:QuartusII原理图输入法设计与实现实验目的:⑴熟悉用QuartusII原理图输入法进行电路设计和仿真。

⑵掌握QuartusII图形模块单元的生成与调用;⑶熟悉实验板的使用。

实验任务要求:⑴掌握QuartusII的基础上,利用QuartusII用逻辑门设计实现一个半加器,生成新的半加器图像模块。

⑵用实验内容(1)中生成的半加器模块以及逻辑门实现一个全加器,仿真验证其功能,并能下载到实验板上进行测试,要求用拨码开关设定输入信号,发光二级管显示输出信号。

⑶用3线—8线译码器(74L138)和逻辑门实现要求的函数:CBAF+C+=,仿真验证其+BCBAAABC功能,,并能下载到实验板上进行测试,要求用拨码开关设定输入信号,发光二级管显示输出信号。

二.设计思路和过程半加器的设计实现过程:⑴半加器的应有两个输入值,两个输出值。

a表示加数,b表示被加数,s表示半加和,co表示向高位的进位。

⑵由数字电路与逻辑设计理论知识可知b a s ⊕=;b a co •=选择两个逻辑门:异或门和与门。

a,b 为异或门和与门的输入,S 为异或门的输出,C为与门的输出。

(3)利用QuartusII 仿真实现其逻辑功能,并生成新的半加器图形模块单元。

(4)下载到电路板,并检验是否正确。

全加器的设计实现过程:⑴全加器可以由两个半加器和一个或门构成。

全加器有三个输入值a,b,ci ,两个输出值s,co :a 为被加数,b 为加数,ci 为低位向高位的进位。

⑵全加器的逻辑表达式为:c b a s ⊕⊕=b a ci b a co •+•⊕=)(⑶利用全加器的逻辑表达式和半加器的逻 辑功能,实现全加器。

用3线—8线译码器(74L138)和逻辑门设计实现函数CBA A B C A B C A B C F +++=设计实现过程:⑴利用QuartusII 选择译码器(74L138)的图形模块单元。

北京邮电大学数字电路与逻辑设计实验报告.

北京邮电大学数字电路与逻辑设计实验报告.

北京邮电大学数字电路与逻辑设计实验报告学院:xxxx学院姓名:xxx班级:xxxxxxxxxx128学号:xxxxxxxxxx实验一Quartus II原理图输入法设计与实现一、实验目的(1)熟悉用Quartus II原理图输入法进行电路设计和仿真;(2)掌握Quartus II图形模块单元的生成与调用;(3)熟悉实验板的使用。

二、实验所用仪器及元器件(1)计算机;(2)直流稳压电源;(3)数字系统与逻辑设计实验开发板。

三、实验任务要求(1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。

(2)用实验(1)中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。

(3)用3线-8线译码器(74LS138)和逻辑门设计实现函数,仿真验证其功能,并下载到实验板测试。

要求用拨码开关设定输入信号,发光二极管显示输出信号。

四、实验原理图及仿真波形图228328(1)半加器【实验原理图】【仿真波形图】【仿真波形图分析】由波形图可以看出,真值表如下:a b so co 000001101010111由此可得,,满足半加器的设计要求。

(2)全加器428【实验原理图】【仿真波形图】【仿真波形图分析】由波形图可以看出真值表如下:ain bin cin sum cout 00000001100101001101100101115281100111111用分别表示信号ain 、bin 、cin 、sum 和cout ,则可得逻辑表达式为满足全加器的设计要求。

(3)3线-8线译码器实现函数【实验原理图】【仿真波形图】【仿真波形图分析】由波形图可得真值表如下:A B C F00010011010101101000101011001111则逻辑表达式为。

实验二用VHDL设计与实现组合逻辑电路一、实验目的(1)熟悉用VHDL语言设计组合逻辑电路的方法;(2)熟悉用Quartus II文本输入法进行电路设计;(3)熟悉不同的编码及其之间的转换。

北京邮电大学数电实验报告

北京邮电大学数电实验报告

北京邮电大学数字电路与逻辑设计实验发光二极管走马灯的电路设计与实现实验报告学院:信息与通信工程学院班级:27姓名:付莹学号:班内序号:23【实验目的】(1)进一步了解时序电路描述方法;(2)熟悉状态机的设计方法。

【实验所用仪器及元器件】(1)计算机;(2)直流稳压电源;(3)数字系统与逻辑设计实验开发板。

【实验任务要求】设计并实现一个控制8个发光二极管亮灭的电路,仿真验证其功能,并下载到实验板测试。

(1)单点移动模式:一个点在8个发光二极管上来回的亮(2)幕布式:从中间两个点,同时向两边依次点亮直到全亮,然后再向中间点灭,依次往复。

【实验设计思路及过程】(1)设计思路实验要求有两个,一个是单点移动模式,一个是幕布式。

通过CASE-WHEN 语句实现走马灯的变化。

分别定义一个8个变量的数据类型和一个13变量的数据类型,表示一个周期内的灯的变化,并设计一个变量在两种状态间进行切换。

此时,需要把所有状态罗列到case-when中去。

(2)VHDL代码LIBRARY IEEE;USE ABC ISPORT(A,CLK,RESET:IN STD_LOGIC;DENG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END ABC;ARCHITECTURE A OF ABC ISTYPE STATE_TEMP is(s0,s1,s2,s3,s4,s5,s6,s7);TYPE STATE_TEMP1 is(s0,s1,s2,s3,s4,s5,s6,s7,s00,s01,s02,s03,s04,s05);signal STATE:STATE_TEMP;signal STATE1:STATE_TEMP1;BEGINPROCESS(CLK,RESET)BEGINIF RESET='1' THENDENG<="00000000";ELSIF(CLK'EVENT AND CLK='0')THENIF A='0'THEN --KAIMUSHICASE STATE1 ISWHEN s0 => STATE1<=s1;DENG<="";WHEN s1 => STATE1<=s2;DENG<="01000000";WHEN s2 => STATE1<=s3;DENG<="00100000";WHEN s3 => STATE1<=s4;DENG<="00010000";WHEN s4 => STATE1<=s5;DENG<="00001000";WHEN s5 => STATE1<=s6;DENG<="00000100";WHEN s6 => STATE1<=s7;DENG<="00000010";WHEN s7 =>STATE1<=s00;DENG<="00000001";WHEN s00=>STATE1<=s01;DENG<="00000010";WHEN s01=>STATE1<=s02;DENG<="00000100";WHEN s02=>STATE1<=s03;DENG<="00001000";WHEN s03=>STATE1<=s04;DENG<="00010000";WHEN s04=>STATE1<=s05;DENG<="00100000";WHEN s05=>STATE1<=s0;DENG <="01000000";END CASE;ELSECASE STATE ISWHEN s0 => STATE<=s1;DENG<="00011000";WHEN s1 => STATE<=s2;DENG<="00111100";WHEN s2 => STATE<=s3;DENG<="01111110";WHEN s3 => STATE<=s4;DENG<="";WHEN s4 => STATE<=s5;DENG<="01111110";WHEN s5 => STATE<=s6;DENG<="00111100";WHEN s6 => STATE<=s7;DENG<="00011000";WHEN s7 => STATE<=s0;DENG<="00000000";END CASE;END IF;END IF;END PROCESS;END A;【仿真波形及分析】1.仿真波形(1)单点移动式(2)幕布式(3)复位信号2.波形分析(1)单点移动式由图可以看出,当A为0时程序实现单点移动功能,如图所示DENG[7]开始亮,之后依次为DENG[6], DENG[5], DENG[4], DENG[3], DENG[2],DENG[1], DENG[0],然后DENG[1]也开始亮,依此类推,实现了功能要求(2)幕布式由图可以看出,当A为1时,如图所示,先是中间的两个灯DENG[4], DENG[5]亮,然后扩展到四个灯亮DENG[3]至DENG[6]亮,接下来是DENG[2]~DENG[7]亮,最后全亮,接着DENG[2]~DENG[7]亮,继而循环下去。

北邮大二下数电实验报告

北邮大二下数电实验报告

邮电大学数字电路与逻辑设计实验学院:班级::学号:班序号:实验一一、实验名称Quartus II 原理图输出法设计(一)半加器二、实验任务要求用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。

三、设计思路和过程◎设计思路半加器电路是指对两个输入数据位进行加法,输出一个结果位和进位,不产生进位输入的加法器电路,是实现两个一位二进制数的加法运算电路。

数据输入:被加数AI、加数BI数据输出:半加和SO、进位CO◎设计过程(1)列出真值表01 1 010 1 0110 1*表中两个输入是加数AI和BI,输出有一个是和SO,另一个是进位CO。

(2)根据真值表写出输出逻辑表达式该电路有两个输出端,属于多输出组合数字电路,电路的逻辑表达式如下:AI=。

所以,可以用一个两输入异或门和一个两输入与门CO⋅SO⊕BIAI=,BI实现。

◎实验原理图四、仿真波形图及分析根据仿真波形对比半加器真值表,可以确定电路实现了半加器的功能。

但我们也可以发现输出SO出现了静态功能冒险,要消除该冒险可以加入相应的选通脉冲。

(二)全加器二、实验任务要求用实验容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。

三、设计思路和过程◎设计思路全加器与半加器的区别在于全加器有一个低进位CI,从外部特性来看,它是一个三输入两输出的器件。

◎设计过程(1)全加器的真值表如下*其中AI 为被加数,BI 为加数,CI 为相邻低位来的进位数。

输出本位和为SO ,向相邻高位进位数为CO 。

(2)根据真值表写出逻辑表达式:CI BI AI SO ⊕⊕=,BI AI CI BI AI CO ⋅+⋅⊕=)(根据逻辑表达式,可以知道只要在半加器的基础上再加入一个异或门、一个两输入与门和两输入或门即可实现全加器。

◎实验原理图。

北邮数字电路与逻辑设计实验下 节拍器

北邮数字电路与逻辑设计实验下 节拍器

数字电路与逻辑设计实验电子节拍器的设计与实现综合实验报告学院:信息与通信工程学院班级:2013211124姓名:***学号:**********班内序号:062015年11月12日目录一、实验题目和任务要求 (2)(一)实验题目 (2)(二)基本要求 (2)(三)提高要求 (2)二、系统设计 (2)(一)设计思路 (2)(二)总体框图 (3)(三)分块设计 (6)三、仿真波形及波形分析 (6)(一)encode文件仿真 (6)(二)change文件仿真 (7)(三)fangdou文件仿真 (7)四、源程序 (8)(一)connect.vhd (8)(二)beat.vhd (10)(三)change.vhd (12)(四)chw.vhd (12)(五)cnta.vhd (13)(六)cora.vhd (14)(七)encode.vhd (17)(八)fangdou.vhd (18)(九)fenpin.vhd (18)(十)jibenpinlv.vhd (20)(十一)v oice.vhd (21)(十二)x ianshi.vhd (22)五、功能说明及资源利用情况 (23)(一)功能说明 (23)(二)资源占用情况 (24)六、故障及问题分析 (24)七、总结和结论 (25)八、参考文献 (26)一、实验题目和任务要求(一)实验题目电子节拍器的设计与实现,设计并实现一个具有声光显示的电子节拍器。

(二)基本要求1、速度在40~120次/分钟范围内连续可调,通过2个按键进行速度调节,一个用来增加,一个用来减少,当长按按键时,按5次/秒的速度连续增加或减少,用3个数码管显示当前速度。

2、节拍有1/4、2/4、3/4、4/4、3/8、6/8可选,通过一个按键选择,用2个数码管显示。

3、通过一个按键开始和停止打节拍,开始后按照设置好的节拍和速度打节拍。

4、要求有声音和灯光提示,声音要有强弱区别,灯光可用不同颜色的发光二极管表示强弱。

北邮 数字电路与逻辑实验下 电子沙漏的设计与实现

北邮 数字电路与逻辑实验下 电子沙漏的设计与实现

北京邮电大学2014~2015学年第一学期《数字电路与逻辑设计下》实验报告学院:信通院班级:2012211120学号:题目:电子沙漏的设计与实现一.设计课题的任务要求基本要求:1.采用8*8双色点阵先是电子沙漏的开机界面,如图2所示。

其中红色LED代表沙漏的上半部分沙粒VD0~VD15,绿色LED代表沙漏的下半部分VD0’~VD15’。

2.用拨码开关SW1模拟重力感应器。

当SW1为低电平时,沙粒从VD0~VD15向VD0’~VD15’移动;当SW1为高电平时沙粒从VD0’~VD15’向VD0~VD15移动。

3.按键BTN0作为计时启动停止按键,启动后沙粒即可按照SW1设定的方向移动,以SW1为低电平时为例,LED移动的顺序与对应关系如图3的1~16所示(若SW1为高电平,则点阵显示移动顺序为16~1)。

每颗沙粒的移动时间为1秒,当移动到图3的16时,若SW1仍为低电平,则保持沙粒不动,但计时继续,直到SW1的电平发生变化或者BTN0计时停止。

4.设计实现一个60秒计时器,但按键BTN0启动时开始工作,用于在沙粒移动过程中进行及时校准,并用数码管DISP0~DISP1显示计时结果。

提高要求:1.可以调节控制电子沙漏的流动速度。

2.用多种方式呈现电子沙漏界面。

3.自行设定沙漏的移动路径,显示每颗沙粒的移动过程。

4.自接重力感应器,实现真实的电子沙漏功能。

5.自拟其他功能。

二.系统设计1.设计思路我的设计思路大致可以分为两部分,一部分是60s的计时部分,另一部分是沙漏的点阵显示部分,这两个部分看似独立,实际上密不可分,有许多共通之处。

60s计时部分:我们使用上学期学到的知识基本上就可以解决所有问题。

依靠板子上原有的50M HZ的时钟,我们可以设计相应的分频器制作出时间周期为一秒的时钟,这个时钟是整个实验的基础。

利用这个时钟我们可以控制计时器的数字一秒一变,达到计数的效果。

在显示方面,由于我们使用的是八段数码管,其段码与位码在同一时刻只能输入一个,所以我们需要进行快速的扫描,利用人眼的视觉残留效应使我们实际看到的是两位不停跳变的计时器。

北邮大二下数电实验报告

北邮大二下数电实验报告

北京邮电大学数字电路与逻辑设计实验学院:班级:姓名:学号:班内序号:实验一一、实验名称Quartus II 原理图输出法设计(一)半加器二、实验任务要求用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。

三、设计思路和过程◎设计思路半加器电路是指对两个输入数据位进行加法,输出一个结果位和进位,不产生进位输入的加法器电路,是实现两个一位二进制数的加法运算电路。

数据输入:被加数AI、加数BI数据输出:半加和SO、进位CO◎设计过程,输出有一个是和SO,另一个是进位CO。

(2)根据真值表写出输出逻辑表达式该电路有两个输出端,属于多输出组合数字电路,电路的逻辑表达式如下:AICO⋅=。

所以,可以用一个两输入异或门和一个两输入与门SO⊕=,BIBIAI实现。

◎实验原理图四、仿真波形图及分析根据仿真波形对比半加器真值表,可以确定电路实现了半加器的功能。

但我们也可以发现输出SO出现了静态功能冒险,要消除该冒险可以加入相应的选通脉冲。

(二)全加器二、实验任务要求用实验内容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。

三、设计思路和过程 ◎设计思路全加器与半加器的区别在于全加器有一个低进位CI ,从外部特性来看,它是一个三输入两输出的器件。

◎设计过程SO ,向相邻高位进位数为CO 。

(2)根据真值表写出逻辑表达式:CI BI AI SO ⊕⊕=,BI AI CI BI AI CO ⋅+⋅⊕=)(根据逻辑表达式,可以知道只要在半加器的基础上再加入一个异或门、一个两输入与门和两输入或门即可实现全加器。

◎实验原理图四、仿真波形图及分析根据仿真波形对比全加器真值表,可以确定电路实现了全加器的功能。

(三)3线—8线译码器二、实验任务要求用3线—8线译码器(74LS138)和逻辑门设计实现函数CBF+A++=,仿真验证其功能,并下载到实验板测试。

北邮数电实验--打地鼠实验报告

北邮数电实验--打地鼠实验报告

数字电路与逻辑设计实验(下)实验报告课题名称:打地鼠游戏的设计与实现学院:电子工程学院班级:2013211202姓名:学号:目录一.设计课题及任务要求 (4)1.课题名称:打地鼠游戏的设计及实现 (4)二.系统设计 (4)1.设计思路:采用自顶向下的设计原则。

(4)2.整体分析: (4)3.整体设计框图: (4)三.分模块设计 (5)1.分频模块设计 (5)1)需求分析: (5)2)模块代码: (5)3)模块仿真波形 (5)2.倒计时模块: (6)1)功能分析: (6)2)模块代码: (6)3)模块仿真 (7)3.计分模块 (9)1)功能分析:。

(9)2)模块代码: (9)3)模块仿真 (10)4.数码管控制模块 (12)1)功能分析: (12)2)模块代码: (12)5.控制模块 (13)1)功能分析: (13)2)模块代码 (13)3)模块仿真 (13)6.随机地鼠生成模块 (14)1)功能分析: (14)2)模块代码 (14)3)模块仿真: (15)7.点阵显示模块 (16)1)功能分析: (16)2)点阵显示原理:原理图: (16)3)模块代码: (17)4)模块仿真 (18)8.键盘模块 (20)1)功能分析: (20)2)原理分析 (20)3)模块代码: (20)4)模块仿真 (22)9.总体模块 (24)1)元件实例连接分析 (24)2)RTL VIEWS (25)3)部分代码 (26)四.功能说明及资源利用情况 (30)1.功能说明: (30)2.资源利用情况 (30)3.总工程 (30)五.故障及问题分析 (31)1.问题分析: (31)2.解决办法 (31)六.总结和结论 (32)一.设计课题及任务要求1.课题名称:打地鼠游戏的设计及实现2.任务要求:1)设计“打地鼠”游戏,采用8X8双色点阵显示游戏界面,其中游戏边界采用绿色LED显示,随机出现的地鼠采用红色LED显示,游戏有十六个洞穴。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北京邮电大学电路实验中心<数字电路与逻辑设计实验(下)>实验报告班级: xxx 学院: xxx实验室: xxx 审阅教师:姓名(班内序号): xxx 学号: xxx实验时间: xxx评定成绩:目录一、任务要求 (2)1.基本要求 (2)2.提高要求 (2)二、系统设计 (2)1.设计思路 (2)2.总体框图 (4)3.分块设计 (5)(1)分频器模块 (5)(2)4×4键盘输入模块 (5)(3)数码管显示模块 (6)(4)8×8 LED点阵显示模块 (6)(5)LCD液晶屏显示模块 (6)(6)中心模块 (6)三、仿真波形及波形分析 (6)1.分频器模块 (6)2.4×4键盘输入模块 (7)3.数码管显示模块 (7)4.8×8 LED点阵显示模块 (8)5.LCD液晶屏显示模块 (8)6.中心模块 (8)四、源程序 (9)1.分频器模块 (9)2.4×4键盘输入模块 (9)3.数码管显示模块 (11)4.8×8 LED点阵显示模块 (12)5.LCD液晶屏显示模块 (19)6.中心模块 (23)五、功能说明及资源利用情况 (26)六、故障及问题分析 (27)七、总结和结论 (27)一、任务要求本电路可供甲乙二人进行猜拳游戏。

通过不同的按键控制,选择多种出拳方式,显示猜拳的结果,实现猜拳游戏,防止了作弊的可能。

1.基本要求1、甲乙双方各用4×4 键盘中的三个按键模拟“石头”、“剪刀”、“布”,一个按键为“确认”。

4×4 键盘第一行为甲,第二行为乙;2、裁判用4×4 键盘第三行的一个按键模拟“开”,一个按键为“准备”,一个按键为“复位”;3、裁判宣布“准备”后,甲乙双方分别选择出拳方式并确认;4、裁判“开”以后,用点阵的左右三列同时显示甲乙双方的猜拳选择(如下图所示),并用两个数码管显示甲乙的猜拳比分;图1甲“布”,乙“剪刀”;甲“剪刀”,乙“石头”5、猜拳游戏为五局三胜制。

若甲乙双方出拳一致,则比分保持不变,双方重新出拳;6、比赛结束后,用8×8 点阵显示甲乙获胜方;7、复位后游戏重新开始。

2.提高要求1、点阵显示增加游戏开机动画、结束动画;2、为游戏增加音效;3、在LCD1602 液晶屏上显示甲乙双方的猜拳比分;4、自拟其他功能。

二、系统设计1.设计思路本电路分为6个模块,分别是中心模块(包含状态机)、8×8 LED点阵显示模块、数码管显示模块、LCD液晶屏显示模块、4×4键盘输入模块、分频器模块,各模块使用VHDL语言设计,顶层连接使用Quartus II原理图设计。

分频器模块负责将50MHz时钟分成低频信号,供其他模块使用。

中心模块负责读取4×4键盘输入模块的输入,并控制状态机和其他模块的输出显示。

8×8 LED点阵显示模块负责接收中心模块的信号,显示相应的图案。

数码管显示模块和LCD液晶屏显示模块负责接收中心模块的信号,显示比分。

4×4键盘输入模块负责读取键盘输入,并将其输出到中心模块。

2.总体框图图2系统流程图图3逻辑框图图 4 BDF原理图3.分块设计(1)分频器模块输入clkin为50MHz时钟,输出clkout为1KHz时钟,作为中心模块、8×8 LED点阵显示模块、数码管显示模块、4×4键盘输入模块的时钟信号。

(2)4×4键盘输入模块4×4键盘输入模块负责读取键盘输入,并将其输出到中心模块。

输出KBcol为4位二进制信号,是键盘的遍历扫描信号。

输入KBrow为4位二进制信号,是键盘的检测信号。

输出resultout为5位二进制信号,是4×4键盘输入模块所检测出的所按的按键,其中第一位代表键盘按下,后四位用二进制数表示所按的按键。

(3)数码管显示模块数码管显示模块负责接收中心模块的信号,显示比分。

输入A、B分别为2位二进制信号,代表甲、乙的得分。

输出cat为8位二进制信号,控制8个数码管的使能端。

输出disp为7位二进制信号,控制数码管所显示的图案。

(4)8×8 LED点阵显示模块8×8 LED点阵显示模块负责接收中心模块的信号,显示相应的图案。

输入A、B分别为2位二进制信号,代表甲、乙的出拳结果,其中“11”表示甲或乙获胜,显示结束动画。

输入en为点阵的使能端,start为开机动画控制信号。

输出row为8位二进制信号,是点阵的扫描信号。

输出colr为8位二进制信号,是红色点阵的数据信号。

输出colg为8位二进制信号,是绿色点阵的数据信号。

(5)LCD液晶屏显示模块LCD液晶屏显示模块负责接收中心模块的信号,显示比分。

时钟clk直接使用50MHz信号。

输入rst为LCD液晶屏模块的复位信号,输入A、B分别为2位二进制信号,代表甲、乙的得分。

输出rs、en、rw、data_out为LCD液晶屏的控制和数据信号。

(6)中心模块中心模块负责读取4×4键盘输入模块的输入,并控制状态机和其他模块的输出显示。

输入KB为5位二进制信号,是4×4键盘输入模块所检测出的所按的按键。

输出LEDen控制LED点阵模块的使能端,LEDstart为LED点阵模块的开机动画控制信号。

输出LEDA、LEDB分别为2位二进制信号,代表甲、乙的出拳结果,其中“11”表示甲或乙获胜,显示结束动画。

输出DISPA、DISPB分别为2位二进制信号,代表甲、乙的得分。

三、仿真波形及波形分析1.分频器模块分频比太大,不易仿真。

2.4×4键盘输入模块图 5 4×4键盘输入模块仿真模块为时钟下降沿有效,resultout[4]为有按键按下的信号,resultout[0..3]为按下的按键。

仿真中遍历了所有按键的情况,在resultout中对应有16~31的所有情况(没有按顺序)。

在中心模块编写时,考虑了防抖的问题,检测到按下多次按键与按下一次按键的效果相同,所以在此模块中没有必要加入防抖。

3.数码管显示模块图6数码管显示模块仿真时钟clk为‘0’时,DISP7点亮,显示甲的得分,时钟clk为‘1’时,DISP6点亮,显示乙的得分。

输入A、B遍历了甲、乙得分的所有结果,对应disp为数码管的显示,‘~’状态表示0分,‘0’状态表示1分,‘m’状态表示2分,‘y’状态表示3分。

4.8×8 LED点阵显示模块图7 8×8 LED点阵显示模块仿真此模块状态太多,只仿真了部分状态。

输入A、B的‘0’-‘2’状态分别代表石头、剪刀、布,‘3’状态代表甲或乙获胜。

输出colr为甲的出拳结果,colg为乙的出拳结果。

5.LCD液晶屏显示模块此模块使用50MHz信号,不易仿真。

实现功能与数码管显示模块类似。

6.中心模块图8中心模块仿真此模块状态太多,只仿真了部分状态。

仿真中模拟按下了3个按键,第一个是裁判的“准备”键,按键抬起后结束开机动画,进入选手输入状态,LEDen和LEDstart都变为‘0’。

第二个是乙按下“剪刀”(甲默认出“布”),按键抬起后LEDB的信号发生变化。

第一个是裁判的“开”键,按键抬起后结算双方出拳结果,给乙+1分(DISPB),同时显示双方出拳结果,LEDen变为‘1’。

四、源程序1.分频器模块library ieee;use ieee.std_logic_1164.all;entity fenpinqi12 isport( clkin:in std_logic; --时钟信号输入clkout:out std_logic); --时钟信号输出end fenpinqi12;architecture aroneMHZ of fenpinqi12 issignal data:integer range 0 to 24999;signal Q:std_logic;beginprocess(clkin)beginif rising_edge(clkin) then --检测输入时钟上升沿if(data=24999) then --此句为你想要的分频比,data=0,1,2,3,4.......9的分频比为1,2,3,,,10 data<=0;Q<=not Q;elsedata<=data+1;end if;end if;clkout<=Q;end process;end aroneMHZ;2.4×4键盘输入模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY KBcontroller ISPORT(clk:IN STD_LOGIC; --时钟KBcol:OUT STD_LOGIC_VECTOR(0 TO 3); --扫描信号KBrow:IN STD_LOGIC_VECTOR(0 TO 3); --检测信号resultout:OUT STD_LOGIC_VECTOR(4 DOWNTO 0) --检测结果);END KBcontroller;ARCHITECTURE behavioral OF KBcontroller ISsignal temp:INTEGER RANGE 0 TO 3;signal result:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINP1:PROCESS(temp)BEGINIF (clk'event and clk='0') THENCASE temp IS --检测键盘输入结果WHEN 0=>CASE KBrow ISWHEN "0111"=> result<="11111";WHEN "1011"=> result<="11110";WHEN "1101"=> result<="11101";WHEN "1110"=> result<="11100";WHEN OTHERS=> result<="00000";END CASE;WHEN 1=>CASE KBrow ISWHEN "0111"=> result<="11011";WHEN "1011"=> result<="11010";WHEN "1101"=> result<="11001";WHEN "1110"=> result<="11000";WHEN OTHERS=> result<="00000";END CASE;WHEN 2=>CASE KBrow ISWHEN "0111"=> result<="10111";WHEN "1011"=> result<="10110";WHEN "1101"=> result<="10101";WHEN "1110"=> result<="10100";WHEN OTHERS=> result<="00000";END CASE;WHEN 3=>CASE KBrow ISWHEN "0111"=> result<="10011";WHEN "1011"=> result<="10010";WHEN "1101"=> result<="10001";WHEN "1110"=> result<="10000";WHEN OTHERS=> result<="00000";END CASE;WHEN OTHERS=> NULL;END CASE;END IF;resultout<=result;END PROCESS P1;P2:process(clk)beginIF (clk'event and clk='1') THEN --模4计数器,对应键盘的4列IF temp=3 THENtemp<=0;ELSEtemp<=temp+1;END IF;END IF;END PROCESS P2;P3:process(temp)beginCASE temp IS --键盘扫描输出WHEN 0=> KBcol<="1110";WHEN 1=> KBcol<="1101";WHEN 2=> KBcol<="1011";WHEN 3=> KBcol<="0111";WHEN OTHERS=> KBcol<="1111";END CASE;END PROCESS P3;END behavioral;3.数码管显示模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DISPshow ISPORT(clk:IN STD_LOGIC; --时钟A:IN STD_LOGIC_VECTOR(1 DOWNTO 0); --甲的得分B:IN STD_LOGIC_VECTOR(1 DOWNTO 0); --乙的得分disp:OUT STD_LOGIC_VECTOR(0 To 6); --显示内容cat:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --数码管使能END DISPshow;ARCHITECTURE behavioral OF DISPshow ISBEGINP3:process(clk,A,B)variable dispA:STD_LOGIC_VECTOR(0 To 6);variable dispB:STD_LOGIC_VECTOR(0 To 6);beginCASE A IS --将甲得分变为数码管显示信号WHEN "00"=> dispA:="1111110";--0WHEN "01"=> dispA:="0110000";--1WHEN "10"=> dispA:="1101101";--2WHEN "11"=> dispA:="1111001";--3WHEN OTHERS=> dispA:="0000000";END CASE;CASE B IS --将乙得分变为数码管显示信号WHEN "00"=> dispB:="1111110";--0WHEN "01"=> dispB:="0110000";--1WHEN "10"=> dispB:="1101101";--2WHEN "11"=> dispB:="1111001";--3WHEN OTHERS=> dispB:="0000000";END CASE;CASE clk IS --时钟为‘0’时显示甲,时钟为‘1’时显示乙,相当于扫描WHEN '0'=> disp<=dispA; cat<="01111111";WHEN '1'=> disp<=dispB; cat<="10111111";WHEN OTHERS=> disp<="0000000"; cat<="11111111";END CASE;END PROCESS P3;END behavioral;4.8×8 LED点阵显示模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY LEDshow ISPORT(clk:IN STD_LOGIC;--时钟en:IN STD_LOGIC;--使能端A:IN STD_LOGIC_VECTOR(1 DOWNTO 0); --甲的出拳B:IN STD_LOGIC_VECTOR(1 DOWNTO 0); --乙的出拳start:IN STD_LOGIC;--开始动画控制colr:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --红色数据信号colg:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--绿色数据信号row:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --扫描信号END LEDshow;ARCHITECTURE behavioral OF LEDshow ISsignal temp:INTEGER RANGE 0 TO 8;signal temp1:INTEGER RANGE 0 TO 5;signal data:integer range 0 to 249;signal clk_2Hz,Q:STD_LOGIC;signal A0:STD_LOGIC_VECTOR(0 to 7);signal A1:STD_LOGIC_VECTOR(0 to 7);signal A2:STD_LOGIC_VECTOR(0 to 7);signal A3:STD_LOGIC_VECTOR(0 to 7);signal A4:STD_LOGIC_VECTOR(0 to 7);signal A5:STD_LOGIC_VECTOR(0 to 7);signal A6:STD_LOGIC_VECTOR(0 to 7);signal A7:STD_LOGIC_VECTOR(0 to 7);signal B0:STD_LOGIC_VECTOR(7 DOWNTO 0);signal B1:STD_LOGIC_VECTOR(7 DOWNTO 0);signal B2:STD_LOGIC_VECTOR(7 DOWNTO 0);signal B3:STD_LOGIC_VECTOR(7 DOWNTO 0);signal B4:STD_LOGIC_VECTOR(7 DOWNTO 0);signal B5:STD_LOGIC_VECTOR(7 DOWNTO 0);signal B6:STD_LOGIC_VECTOR(7 DOWNTO 0);signal B7:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINP1:PROCESS(clk_2Hz)BEGINif start='0' thenif A="00" then--甲出布A0<="00000000"; A1<="00000000"; A2<="11100000"; A3<="11100000";A4<="11100000"; A5<="11100000"; A6<="00000000"; A7<="00000000";elsif A="01" then--甲出剪刀A0<="00000000"; A1<="00000000"; A2<="00100000"; A3<="11000000";A4<="11000000"; A5<="00100000"; A6<="00000000"; A7<="00000000";elsif A="10" then--甲出石头A0<="00000000"; A1<="00000000"; A2<="01000000"; A3<="11100000";A4<="11100000"; A5<="01000000"; A6<="00000000"; A7<="00000000";elsecase temp1 is--甲获胜,显示动画when 0 =>--显示“甲”A0<="11111110";A1<="10010010";A2<="11111110";A3<="10010010";A4<="11111110";A5<="00010000";A6<="00010000";A7<="00010000";when 1 =>--显示“获”A0<="00101000";A1<="11111110";A2<="10101000";A3<="01001010";A4<="10111110";A5<="01101000";A6<="10101100";A7<="01110010";when 2 =>--显示“胜”A0<="11100100";A1<="10110100";A2<="11111111";A3<="10100100";A4<="11111111";A5<="10100100";A6<="10100100";A7<="10111111";when 3 =>--显示笑脸A0<="00111100";A1<="01000010";A2<="10000001";A3<="10100101";A4<="10000001";A5<="10100101";A6<="01011010";A7<="00111100";when 4 =>--显示笑脸A0<="00111100";A1<="01000010";A2<="10000001";A3<="10100101";A4<="10000001";A5<="10100101";A6<="01011010";A7<="00111100";when 5=>--显示空白A0<="00000000"; A1<="00000000"; A2<="00000000"; A3<="00000000";A4<="00000000"; A5<="00000000"; A6<="00000000"; A7<="00000000";when others=>NULL;end case;end if;if B="00" then--乙出布B0<="00000000"; B1<="00000000"; B2<="00000111"; B3<="00000111";B4<="00000111"; B5<="00000111"; B6<="00000000"; B7<="00000000"; elsif B="01" then--乙出剪刀B0<="00000000"; B1<="00000000"; B2<="00000100"; B3<="00000011";B4<="00000011"; B5<="00000100"; B6<="00000000"; B7<="00000000"; elsif B="10" then--乙出石头B0<="00000000"; B1<="00000000"; B2<="00000010"; B3<="00000111";B4<="00000111"; B5<="00000010"; B6<="00000000"; B7<="00000000"; elsecase temp1 is--乙获胜,显示动画when 0 =>--显示“乙”B0<="11111100";B1<="00000100";B2<="00001000";B3<="00010000";B4<="00100000";B5<="01000001";B6<="10000001";B7<="11111111";when 1 =>--显示“获”B0<="00101000";B1<="11111110";B2<="10101000";B3<="01001010";B4<="10111110";B5<="01101000";B6<="10101100";B7<="01110010";when 2 =>显示“胜”B0<="11100100";B1<="10110100";B2<="11111111";B3<="10100100";B4<="11111111";B5<="10100100";B6<="10100100";B7<="10111111";when 3 =>--显示笑脸B0<="00111100";B1<="01000010";B2<="10000001";B3<="10100101";B4<="10000001";B5<="10100101";B6<="01011010";B7<="00111100";when 4 =>--显示笑脸B0<="00111100";B1<="01000010";B2<="10000001";B3<="10100101";B4<="10000001";B5<="10100101";B6<="01011010";B7<="00111100";when 5 =>--显示空白B0<="00000000"; B1<="00000000"; B2<="00000000";B3<="00000000";B4<="00000000"; B5<="00000000"; B6<="00000000";B7<="00000000";when others => NULL;end case;end if;if A="11" then--显示获胜动画时另一个颜色为空白B0<="00000000"; B1<="00000000"; B2<="00000000"; B3<="00000000";B4<="00000000"; B5<="00000000"; B6<="00000000"; B7<="00000000";elsif B="11" thenA0<="00000000"; A1<="00000000"; A2<="00000000"; A3<="00000000";A4<="00000000"; A5<="00000000"; A6<="00000000"; A7<="00000000";end if;else--显示开机动画B0<="00000000"; B1<="00000000"; B2<="00000000"; B3<="00000000";B4<="00000000"; B5<="00000000"; B6<="00000000"; B7<="00000000";case temp1 is--红色的“start”字样when 0 =>--显示‘s’A0<="00000000";A1<="00111000";A2<="01000100";A3<="01000000";A4<="00111000";A5<="00000100";A6<="01000100";A7<="00111000";when 1 =>--显示‘t’A0<="00000000";A1<="01111100";A2<="00010000";A3<="00010000";A4<="00010000";A5<="00010000";A6<="00010000";A7<="00010000";when 2 =>--显示‘a’A0<="00000000";A1<="00010000";A2<="00101000";A3<="01000100";A4<="01000100";A5<="01111100";A6<="01000100";A7<="01000100";when 3 =>--显示‘r’A0<="00000000";A1<="01111000";A2<="01000100";A3<="01000100";A4<="01111000";A5<="01010000";A6<="01001000";A7<="01000100";when 4 =>--显示‘t’A0<="00000000";A1<="01111100";A2<="00010000";A3<="00010000";A4<="00010000";A5<="00010000";A6<="00010000";A7<="00010000";when others => NULL; --显示空白-- A0<="00000000";-- A1<="00000000";-- A2<="00000000";-- A3<="00000000";-- A4<="00000000";-- A5<="00000000";-- A6<="00000000";-- A7<="00000000";end case;end if;END PROCESS P1;P2:process(clk)beginif en='1' thenIF (clk'event and clk='1') THEN--模8计数器,用于扫描点阵IF temp>=7 THENtemp<=0;ELSEtemp<=temp+1;END IF;END IF;elsetemp<=8;--使能端为0,则不扫描end if;END PROCESS P2;P4:process(clk)beginif rising_edge(clk) then--分频器,分出2Hz的信号,用于动画显示if(data=249) then --此句为你想要的分频比,data=0,1,2,3,4.......9的分频比为1,2,3,,,10 data<=0;Q<=not Q;elsedata<=data+1;end if;end if;clk_2Hz<=Q;end process P4;P5:process(clk_2Hz)beginIF (clk_2Hz'event and clk_2Hz='1') THEN--模6计数器,用于动画显示IF temp1>=5 THENtemp1<=0;ELSEtemp1<=temp1+1;END IF;END IF;END PROCESS P5;P3:process(temp)begin--点阵扫描显示进程CASE temp ISWHEN 0=> colr<=A0; colg<=B0; row<="01111111";WHEN 1=> colr<=A1; colg<=B1; row<="10111111";WHEN 2=> colr<=A2; colg<=B2; row<="11011111";WHEN 3=> colr<=A3; colg<=B3; row<="11101111";WHEN 4=> colr<=A4; colg<=B4; row<="11110111";WHEN 5=> colr<=A5; colg<=B5; row<="11111011";WHEN 6=> colr<=A6; colg<=B6; row<="11111101";WHEN 7=> colr<=A7; colg<=B7; row<="11111110";WHEN OTHERS=> colr<="00000000"; colg<="00000000"; row<="11111111";END CASE;END PROCESS P3;END behavioral;5.LCD液晶屏显示模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY show IS PORT(rst,clk: IN STD_LOGIC; --复位、时钟A:IN STD_LOGIC_VECTOR(1 DOWNTO 0); --甲的得分B:IN STD_LOGIC_VECTOR(1 DOWNTO 0); --乙的得分rs, en, rst_out, sec_out: OUT STD_LOGIC;rw: OUT STD_LOGIC;data_out: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END show;ARCHITECTURE fwm OF show ISTYPE states IS (pause,hold, func_set,dis_on,mode_set,set_ddram1,write_ddram1,set_ddram2,write_char1,write_char2,write_char3,write_char4,write_char5,write_char6,write_char7,write_char8,write_char9,write_char10,write_char11,write_char12,write_char13,write_char14,write_char15,return_home,toggle_e,rst1,rst2,rst3,dis_off,dis_clr);SIGNAL state, n_state: states; ----SIGNAL data_out: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL s0,s1,m0,m1,h0,h1,t0,t1 : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL clk_400Hz, clk_100Hz : STD_LOGIC;SIGNAL temp:STD_LOGIC;TYPE ram IS ARRAY (0 TO 15)OF STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNALram1:ram:=(X"20",X"20",X"20",X"20",X"41",X"3A",X"30",X"20",X"20",X"42",X"3A",X"30",X"20",X"20",X"20" ,X"20"); --显示比分“A:0 B:0”signal stop_out:std_logic;BEGIN rst_out <= NOT rst; sec_out <= s0(0); ----data_out <= data_out WHEN rw = '0' ELSE "ZZZZZZZZ"; -- 设置LCD的数据线为三态数据线PROCESS(clk,rst) --50MHz分频到400HzVARIABLE cnt1: INTEGER RANGE 0 TO 62500;BEGINIF rst='0' THEN cnt1:=0;clk_400Hz<='0';ELSIF clk'EVENT AND clk = '1' THENIF cnt1 < 62500 THEN cnt1 := cnt1 + 1;ELSE cnt1 := 0;clk_400Hz <= NOT clk_400Hz;END IF; END IF;END PROCESS;PROCESS(clk_400Hz) --50MHz分频到400HzBEGINcase A is--修改甲的得分显示when "00"=> ram1(6)<=X"30";when "01"=> ram1(6)<=X"31";when "10"=> ram1(6)<=X"32";when "11"=> ram1(6)<=X"33";when others=> NULL;end case;case B is--修改乙的得分显示when "00"=> ram1(11)<=X"30";when "01"=> ram1(11)<=X"31";when "10"=> ram1(11)<=X"32";when "11"=> ram1(11)<=X"33";when others=> NULL;end case;END PROCESS;PROCESS (clk_400Hz, rst)VARIABLE cnt : INTEGER RANGE 0 TO 16;VARIABLE cnt2 :INTEGER RANGE 0 TO 199;BEGINIF rst = '0' THEN state <=rst1;data_out <= X"38";n_state <= rst2;en <= '1';rs <= '0';rw <= '0';ELSIF clk_400Hz'EVENT AND clk_400Hz = '1' THEN --产生秒脉冲100Hz信号,调试时采用100Hz--IF stop ='1' THEN state<=pause;--END IF;CASE state IS --LCD控制WHEN rst1 => en <= '1';rs <= '0';rw <= '0';data_out <= X"38";state <= toggle_e;n_state <= rst2;--设置功能:8位,两行,5×7WHEN rst2 => en <= '1';rs <= '0';rw <= '0';data_out <= X"38";state <= toggle_e;n_state <= rst3;--设置功能:8位,两行,5×7WHEN rst3 => en <= '1';rs <= '0';rw <= '0';data_out <= X"38";--001 1000state <= toggle_e;n_state <= func_set;--设置功能:8位,两行,5×7,可靠复位WHEN func_set => en <= '1';rs <= '0';rw <= '0';data_out <= X"38";state <= toggle_e;n_state <= dis_off;WHEN dis_off => en <= '1';rs <= '0';rw <= '0';data_out <= X"08";state <= toggle_e;n_state <= dis_clr; --显示控制:显示关,光标关WHEN dis_clr => en <= '1';rs <= '0';rw <= '0';data_out <= X"01";state <= toggle_e;n_state <= dis_on;--清屏WHEN dis_on => en <= '1';rs <= '0';rw <= '0';data_out <= X"0C";state <= toggle_e;n_state <= mode_set;--显示控制:显示开,光标关WHEN mode_set => en <= '1';rs <= '0';rw <= '0';data_out <= X"06";state <= toggle_e;n_state <= set_ddram1;--显示模式:自动增地址,光标右移WHEN set_ddram1 => en <='1';rs<='0';rw<='0';data_out<=X"80";state <= toggle_e;n_state<=write_ddram1;WHEN write_ddram1=>en<='1';rs<='1';rw<='0';data_out<=ram1(cnt)(7 DOWNTO 0);state <= toggle_e;cnt:=cnt+1; --将ram1的15个byte写入ADDRAMIF cnt=16THEN n_state<=return_home;END IF;WHEN return_home => en <= '1';rs <= '0';rw <= '0';data_out <= "11000000";state <= toggle_e;n_state <= set_ddram1;--返回写地址到第一行第一列位置WHEN toggle_e => en <= '0';state <= hold;--en下降沿WHEN hold => state <= n_state; --保持WHEN pause=>en<='0';state <= toggle_e;when others=>NULL;END CASE;END IF;END PROCESS;END fwm;6.中心模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY main ISPORT(clk:IN STD_LOGIC;--时钟LEDen:OUT STD_LOGIC;--LED点阵使能端KB:IN STD_LOGIC_VECTOR(4 DOWNTO 0);--键盘LEDA:OUT STD_LOGIC_VECTOR(1 DOWNTO 0):="00"; --甲的出拳LEDB:OUT STD_LOGIC_VECTOR(1 DOWNTO 0):="00";--乙的出拳DISPA:OUT STD_LOGIC_VECTOR(1 DOWNTO 0):="00"; --甲的得分DISPB:OUT STD_LOGIC_VECTOR(1 DOWNTO 0):="00";--乙的得分LEDstart:OUT STD_LOGIC--开机动画控制);END main;ARCHITECTURE behavioral OF main IStype state_type is(S0,S1,S2,S3);signal temp:state_type:=s0;signal finish:STD_LOGIC:='0';signal change:STD_LOGIC:='0';signal goalA:INTEGER RANGE 0 TO 3:=0;signal goalB:INTEGER RANGE 0 TO 3:=0;signal answerA:INTEGER RANGE 0 TO 3:=0;signal answerB:INTEGER RANGE 0 TO 3:=0;signal confirmA:STD_LOGIC:='0';signal confirmB:STD_LOGIC:='0';BEGINP1:process(clk)--状态机进程beginIF (clk'event and clk='1') THENcase temp is--resetwhen s0 =>if (KB="10010") then temp<=s1;--change<='0';--按下“准备”进入ready状态end if;--readywhen s1 =>if (KB="10110") then temp<=s2;--change<='1'; --按下“开”进入show状态elsif (KB="11110") then temp<=s0;--change<='0'; --按下“复位”进入reset状态end if;--showwhen s2 =>if (finish='0' and KB="10010") then temp<=s1;--change<='0'; --按下“准备”进入ready状态elsif finish='1' then temp<=s3;--change<='0'; --游戏结束,进入end状态elsif (KB="11110") then temp<=s0;--change<='0'; --按下“复位”进入reset状态end if;--endwhen s3 =>if (KB="11110") then temp<=s0;--change<='0'; --按下“复位”进入reset状态end if;when others => temp<=s0;--change<='0';end case;end if;END PROCESS P1;P2:process(clk,goalA,goalB)--输出控制进程beginIF (clk'event and clk='1') THENcase temp iswhen s0 =>--reset状态,显示开始动画answerA<=0;answerB<=0;confirmA<='0';confirmB<='0';finish<='0';LEDen<='1';LEDstart<='1';change<='0';when s1 =>--ready状态change<='0';LEDstart<='0';LEDen<='0';case KB is--检测甲乙的出拳when "10000" =>if confirmA='0' then answerA<=0;end if;--布when "10100" =>if confirmA='0' then answerA<=1;end if;--剪刀when "11000" =>if confirmA='0' then answerA<=2;end if;--石头when "11100" =>confirmA<='1';--按下确认when "10001" =>if confirmB='0' then answerB<=0;end if;when "10101" =>if confirmB='0' then answerB<=1;end if;when "11001" =>if confirmB='0' then answerB<=2;end if;when "11101" =>confirmB<='1'; --按下确认when others => NULL;end case;when s2 =>--show状态,显示出拳结果change<='1';LEDen<='1';LEDstart<='0';if (goalA>=3 or goalB>=3) then--赢三局,游戏结束finish<='1';end if;confirmA<='0';confirmB<='0';when s3 =>--end状态change<='0';LEDen<='1';LEDstart<='0';if KB="11010" then--按下“结果”键,显示获胜方的获胜动画if goalA>=3 thenanswerA<=3;else answerB<=3;end if;end if;when others => NULL;end case;case goalA is--显示得分when 0 => DISPA<="00";when 1 => DISPA<="01";when 2 => DISPA<="10";when 3 => DISPA<="11";when others => NULL;end case;case goalB is--显示得分when 0 => DISPB<="00";when 1 => DISPB<="01";when 2 => DISPB<="10";when 3 => DISPB<="11";when others => NULL;end case;case answerA is--显示出拳when 0 => LEDA<="00";when 1 => LEDA<="01";when 2 => LEDA<="10";when 3 => LEDA<="11";。

相关文档
最新文档