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

合集下载

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

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

北京邮电大学数字电路与逻辑设计实验实验报告实验名称: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. 将二极管连接到直流电源电路中;2. 通过改变电源电压,观察二极管的正向导通特性;3. 记录不同电压下二极管的导通情况。

实验结果与分析:通过实验,我们发现二极管在正向电压大于其开启电压时会导通,而在反向电压作用下会截止。

这验证了二极管的正向导通特性。

实验二,基本逻辑门的实验。

实验原理:基本逻辑门包括与门、或门、非门等,它们是数字电路的基本组成单元,通过不同的输入信号产生不同的输出信号。

实验步骤:1. 搭建与门、或门、非门的实验电路;2. 分别输入不同的逻辑信号,观察输出信号的变化;3. 记录实验结果。

实验结果与分析:通过实验,我们发现与门、或门、非门在不同的输入信号下产生了不同的输出信号,验证了基本逻辑门的工作原理。

实验三,触发器的实验。

实验原理:触发器是一种存储器件,具有记忆功能,可以存储一个比特的信息。

常见的触发器包括RS触发器、D触发器、JK触发器等。

实验步骤:1. 搭建RS触发器、D触发器、JK触发器的实验电路;2. 分别输入触发信号,观察触发器的输出变化;3. 记录实验结果。

实验结果与分析:通过实验,我们发现不同类型的触发器在接收不同触发信号时,产生了不同的输出变化,验证了触发器的存储功能。

结论:通过本次实验,我们深入理解了数字电路与逻辑设计的基本原理,掌握了数字电路的实际应用技能。

数字电路与逻辑设计是现代电子技术的基础,通过实验的学习,我们将能更好地理解和应用数字电路与逻辑设计的知识,为今后的学习和工作打下坚实的基础。

北邮数电实验报告

北邮数电实验报告

北京邮电大学实验报告实验名称: 数电电路与逻辑设计实验学院:信息与通信工程学院班 级: 姓 名: 学 号: 班内序号:日期:一. 实验一:QuartusII 原理图输入法设计1. 实验名称和实验任务要求(1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块 元。

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

(3)用3线-8线译码器(74LS138)和逻辑门设计实现函数F=A B C +A B C +AB C +A B C 。

2.实验原理图及波形图(1)半加器(2)全加器(3)74LS383.仿真波形图分析(1)半加器:输入为a,b,输出S,CO(进位)。

当ab都为0时,半加和s=0,进位端co=0。

当ab都为1时,半加和s=0,进位端co=1。

当a=1,b=0或a=0,b=1时,半加和s=1,进位端co=0。

(2)全加器:输入a,b,输出S,CO(进位),ci(低进位)。

当a=0,b=0,ci=0,输出s=0,co=0。

当a=0,b=1或a=1,b=0又ci=0,输出s=1,co=0。

当a=0,b=0,ci=1,输出s=1,co=0。

(3)74LS138输入A,B,C,输出为3。

四个输出对应F中的四个最小项,Y0、Y2、Y4、Y7,以实现函数功能。

二.实验二:用VHDL设计与实现组合逻辑电路1.实验名称和实验任务要求(1)用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能。

要求用拨码开关设定输入信号,7段数码管显示输出信号。

(2)用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能。

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

(3)用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个’1’时,输出为’1’,否则输出’0’,仿真验证其功能。

数字电路与逻辑设计实验报告

数字电路与逻辑设计实验报告

竭诚为您提供优质文档/双击可除数字电路与逻辑设计实验报告篇一:北邮数字电路与逻辑设计实验报告北京邮电大学数字电路与逻辑设计实验报告学院:班级:姓名:学号:实验一QuartusII原理图输入法设计与实现一、实验目的:(1)熟悉QuartusII原理图输入法进行电路设计和仿真;(2)掌握QuartusII图形模块单元的生成与调用;(3)熟悉实验板的使用;二、实验所用器材:(1)计算机;(2)直流稳压电源;(3)数字系统与逻辑设计实验开发板。

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

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

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

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

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

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

(2)全加器全加器原理图仿真波形仿真波形图分析:根据仿真波形对比半加器真值表,可以确定电路实现了全加器的功能(2)741383线-8线译码器原理图仿真波形图仿真波形图分析;当且仅当Abc输入为000、010、100、111时,F=1,可知电路实现了函数。

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

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

三、实验任务要求(1)用VhDL语言设计实现一个共阴极7段数码管译码器;(2)用VhDL语言设计一个8421码转余三码的代码转换器;(3)用VhDL语言设计设计一个四位2进制奇校验器。

北邮数电实验报告

北邮数电实验报告

北邮数电实验报告1. 实验目的本实验的目的是通过实际操作和实验验证,加深对数字电路的理解和掌握。

具体实验内容包括: 1. 实现各种基本逻辑电路(与门、或门、非门、异或门等)的电路设计。

2. 学习使用开关和LED灯进行数字信号输入和输出。

3. 掌握数字电路实验中常用的仪器设备的使用方法。

2. 实验器材和环境本实验所使用的器材和环境如下: - FPGA实验箱 - 数字逻辑集成电路(与门、或门、非门、异或门等) - 电源 - 接线板 - 数字电路实验仪器3. 实验步骤3.1 实验准备首先,我们需要将实验所需的器材连接好,包括将数字逻辑集成电路插入到FPGA实验箱上的插槽中,并将电源正确连接。

3.2 电路设计与布线根据实验要求,我们需要设计不同的基本逻辑电路。

比如,要设计一个与门电路,可以通过将两个输入端分别与两个开关连接,将输出端连接到一个LED灯上。

其他的逻辑电路同样可以设计类似的方式。

在设计和布线的过程中,需要注意保持电路的连通性,并避免出现短路等问题。

3.3 输入和输出信号设置根据实验要求,我们需要设置输入和输出信号。

可以通过控制开关的开合状态来设置输入信号,然后观察LED灯的亮灭情况来判断输出信号的状态是否符合预期。

3.4 实验数据记录和分析在实验过程中,我们需要记录每个逻辑电路的输入和输出信号状态,并进行分析。

可以通过绘制真值表或者逻辑门表来记录并分析数据。

4. 实验结果与分析根据实验步骤中记录的数据,我们可以得出实验结果,并进行进一步的分析。

比如,可以通过比对设计的逻辑电路输出和预期输出的差异,来判断实验是否成功完成。

5. 总结与反思通过本次实验,我深入了解和掌握了数字电路的基本原理和实验方法。

通过设计和实验验证,加深了对基本逻辑电路的理解,并熟悉了数字电路实验所使用的仪器设备。

在实验过程中,我遇到了一些问题,比如电路连接错误导致的信号不稳定等,但通过仔细调试和排查,最终解决了这些问题。

数电实验报告北邮(3篇)

数电实验报告北邮(3篇)

第1篇一、实验名称数字电路基础实验二、实验目的1. 熟悉数字电路的基本原理和组成。

2. 掌握常用数字电路元件(如逻辑门、触发器、计数器等)的功能和使用方法。

3. 培养动手能力和实验技能。

三、实验原理数字电路是由逻辑门、触发器、计数器等基本元件组成的。

逻辑门是数字电路的基本单元,用于实现基本的逻辑运算。

触发器是数字电路中的记忆单元,用于存储信息。

计数器是数字电路中的时序单元,用于实现计数功能。

四、实验仪器与设备1. 数字电路实验箱2. 万用表3. 导线4. 74LS00集成电路5. 74LS20集成电路五、实验内容1. 组合逻辑电路分析(1)搭建一个4输入与非门电路,输入端分别为A、B、C、D,输出端为Y。

(2)搭建一个2输入与非门电路,输入端分别为A、B,输出端为Y。

(3)搭建一个4输入与非门电路,输入端分别为A、B、C、D,输出端为Y。

要求输出Y为A、B、C、D的异或运算结果。

2. 触发器应用(1)搭建一个D触发器电路,输入端为D,输出端为Q。

(2)搭建一个JK触发器电路,输入端为J、K,输出端为Q。

(3)搭建一个计数器电路,使用D触发器实现一个4位二进制计数器。

3. 计数器应用(1)搭建一个十进制计数器电路,使用74LS90集成电路实现。

(2)搭建一个任意进制计数器电路,使用74LS90集成电路实现。

(3)搭建一个分频器电路,使用计数器实现。

六、实验步骤1. 根据实验原理和电路图,在实验箱上搭建实验电路。

2. 使用万用表测试电路的各个节点电压,确保电路连接正确。

3. 根据实验要求,输入不同的信号,观察输出结果。

4. 记录实验数据,分析实验结果。

七、实验结果与分析1. 组合逻辑电路分析(1)4输入与非门电路:当A、B、C、D都为0时,Y为1;否则,Y为0。

(2)2输入与非门电路:当A、B都为0时,Y为1;否则,Y为0。

(3)4输入与非门电路:当A、B、C、D中有奇数个1时,Y为1;否则,Y为0。

北邮 数电实验报告

北邮 数电实验报告

北邮数电实验报告北邮数电实验报告数电实验是电子信息科学与技术专业的一门重要课程,通过实验可以帮助学生巩固理论知识,培养实践能力。

本次实验我们进行了基于数字逻辑电路的设计与实现,探索了数字电路的原理和应用。

以下是对本次实验的总结和分析。

1. 实验目的本次实验的主要目的是学习数字逻辑电路的设计与实现,了解数字电路的基本原理和应用。

通过实验,我们可以熟悉数字电路的搭建过程,掌握数字电路的设计方法和测试技巧。

2. 实验原理本次实验主要涉及到的数字逻辑电路有与门、或门、非门、异或门等。

这些逻辑门可以通过逻辑运算实现各种功能,如加法器、减法器、比较器等。

我们需要根据实验要求,设计并搭建相应的数字电路,然后通过示波器等仪器进行测试,验证电路的正确性。

3. 实验步骤首先,我们根据实验要求,设计了一个4位全加器电路。

通过逻辑门的组合,实现了4位二进制数的加法运算。

然后,我们搭建了一个4位比较器电路,用于比较两个4位二进制数的大小关系。

最后,我们设计了一个4位减法器电路,实现了4位二进制数的减法运算。

4. 实验结果通过实验,我们成功搭建了4位全加器、4位比较器和4位减法器电路,并进行了测试。

实验结果表明,我们设计的电路能够正确地完成加法、比较和减法运算,符合预期的逻辑规则。

5. 实验总结通过本次实验,我们深入了解了数字逻辑电路的设计与实现过程。

我们学会了使用逻辑门进行电路设计,并通过实验验证了电路的正确性。

实验过程中,我们也遇到了一些问题,如电路连接错误、示波器读数不准确等。

但通过仔细分析和调试,我们最终解决了这些问题,并取得了满意的实验结果。

6. 实验感想数电实验是一门非常重要的实践课程,通过实验我们不仅巩固了理论知识,还培养了实践能力和解决问题的能力。

在实验过程中,我们需要细心观察、仔细分析,并灵活运用所学的知识。

实验不仅考验了我们的动手能力,还锻炼了我们的思维能力和团队合作精神。

7. 实验的意义数电实验的意义在于将理论知识与实际应用相结合,帮助我们更好地理解和掌握数字电路的原理和应用。

北邮数电实验报告

北邮数电实验报告

数字电路与逻辑设计实验报告一、要求要求:设计制作一个简易计算器,实现最大输入两位十进制数字的加减乘运算。

基本要求:1、实现最大输入两位十进制数字的加减乘运算;八个拨码开关按两位8421bcd码输入。

2、能够实现多次连算(无优先级,从左到右计算结果),如12+34×56-78=2498。

3、最大长度以数码管最大个数为限,溢出报警。

提高要求:1、有正负数区分。

2、实现除法(不能整除时小数保留2位有效数字)。

3、其它扩展功能。

二、系统设计:设计思路:1、将该程序进行分模块设计。

可以将程序分为:主程序、译码模块和防抖模块。

其中,主程序负责将输入的数据进行存储,对数据进行运算,将数据输出到数码上等;防抖模块负责对按键输入的数防抖;译码模块负责对输入的数据进行译码(由8421bcd码转化为十进制的编码)。

2、分模块进行相应模块的编写。

3、对编好的模块进行测试。

4、编写主程序并进行调试。

总体框图:流程图:分块设计:(按实际操作的分块)输入模块:由符号开关和拨码开关构成。

采用序列存储的方式存储相应的输入。

输入译码模块:将输入的符号序列转化成先用状态,以便选取对应的计算方法;将输入的8421bcd码转化成相应的两位十进制数。

数码显示模块:将寄存器内的数进行输出到数码管上。

显示所输入的第一个数以及最后的结果。

计算模块:调用相应的计算方式,对所输入的数进行计算。

防抖模块:在用按键输入时,所得到的信号可能会有抖动,因此加入此抖动电路。

三、仿真波形及波形分析:分析(波形仿真时,为了方便观察,将8421bcd码输入方式,该为了十进制的直接输入方式,并将输出,有原来的数码管显示改成了直接数字显示)由图中可以看出,当输入12 ,按下“确定”,数字就输入到了寄存器中,输入“+”号(对应仿真中的fuhao“100000”),在输入一个数35,按下“确定”,该计算器就件寄存器中的数与第二次输入的数进行相加,得到结果47。

此时该结果又被直接保存到了寄存器中,继续输入运算符“-”(对应仿真中得fuhao“010000”),输入第三个数18,按下“确定”,计算器对其做减法运算,得到结果29,该结果又在寄存器中存储着。

北邮数字电路综合实验电子节拍器

北邮数字电路综合实验电子节拍器

数字电路与逻辑设计实验(下)实验报告课题名称:数字电路与逻辑设计实验(下)学院:xxxxxx班级:xxxxxx姓名:xxxxxx学号:xxxxxx日期:xxxxxx设计课程的任务要求题目七:电子节拍器的设计与实现设计并实现一个具有声光显示的电子节拍器。

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

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

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

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

系统设计1. 设计思路整个电子节拍器可分为大体五个部分:拍速(bpm)产生部分、高低音频生成部分、节拍选择部分、数码管显示部分、声光提示部分。

首先由拍速产生部分生成一个与已选拍速相匹配的时钟和一个代表拍速的6位二进制数,时钟与6位二进制数分别进入节拍选择部分和数码管显示部分;节拍选择部分会根据按键操作生成高电平与低电平比例不同的与拍速同步的信号代表不同的节拍进入声光提示部分,并产生一个代表节拍的3位二进制数进入数码管显示部分;数码管显示部分根据6位二进制数和3位二进制数显示拍速和节拍类型;高低音频生成器生成两种音频分别代表强音与弱音,强音与弱音时钟均进入声光提示部分;声光提示部分根据由节拍选择部分发来的信号与强弱音时钟发出相应的提示声与灯光。

2.数码管显示部分节拍选择部分拍速产生部分声光提示部分高低音频生成部分总体框图3. 分块设计拍速产生器:将6位二进制数的十进制初始定义为40,对加减按键进行计时,计时功能通过一个经过分频的时钟来实现,短加减即改变1,长按即每秒改变5,最后通过一个检测来判断改变后的数值是否在40-120的区间内,若低于40则以40计,高于120以120计,并输出这个6位二进制数;通过计算将6位二进制数计算为相应的分频比并输出这一分频后的时钟(由于节拍器要求八分音符的节拍要求产生的时钟频率为对应拍速频率的二倍)。

北邮大二下 数电实验报告讲解

北邮大二下 数电实验报告讲解

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

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

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

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

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

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

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

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

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

◎设计过程(1)全加器的真值表如下输入输出AI BI CI SO CO0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1*其中AI为被加数,BI为加数,CI为相邻低位来的进位数。

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

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

北邮数电实验下 简易自动售货机 实验报告

北邮数电实验下 简易自动售货机 实验报告

2013~2014第一学期数字电路与逻辑设计实验报告一.设计课题及任务要求1.设计课题:简易自动售货机2.任务要求:设计一个简易的自动售货机,能够完成钱数处理、找零、显示、退币等功能。

基本要求:·用2 个数码管(disp5,disp4)显示钱数,以元为单位。

用3 个按键(btn0,btn1,btn2)分别表示一元、五元、十元,每按一次按键,增加一次相应的钱数,上限99元。

·再用3 个按键(btn3,btn4,btn5)分别对应3 种商品,其中,商品甲售价3 元、商品乙售价8 元、商品丙售价12 元;·买东西时,先输入钱币,再按对应的商品键。

每按一次商品键,钱数要相应地减少, 同时蜂鸣器提示购买成功。

剩余钱数大于3 元可继续按商品键再次购买;当剩余钱数少于3 元时,表示钱数的数码管disp5,disp4 显示为零, 同时用数码管disp0 显示退出的钱数。

·买东西时,按下商品键,若输入的钱数少于商品的价格,表示钱数的数码管disp5, disp4 显示为零,同时用数码管(disp1、disp0)显示退出的钱数,并用蜂鸣器表示购买失败。

·按下商品键时,用数码管disp2 表示当前购买的商品,1 代表商品甲,2 代表商品乙,3 代表商品丙。


·用btn7 做为退出功能键,退出键可以随时按下,按下后,数码管(disp5,disp4)显示为零,同时数码管(disp1、disp0)显示退出的钱数,表示结束购买,钱款全部退出。

提高要求:·用点阵设计显示投币动画、出货动画,购买成功/失败动画;·允许随时输入钱币,购买时,钱款不足有声光报警并等待追加钱币或选择别的商品;二.系统设计1.设计思路根据程序实现的功能,可将其分为分频、防抖、逻辑运算、数码管显示、点阵图形显示五大模块。

将其串联起来即可完成整体功能。

其中,分频模块将芯片50M的时钟信号分为各模块所需的不同频率的时钟。

北邮大二下 数电实验报告

北邮大二下 数电实验报告

北京邮电年夜学之迟辟智美创作数字电路与逻辑设计实验学院:班级:姓名:学号:班内序号:实验一一、实验名称Quartus II 原理图输出法设计(一)半加器二、实验任务要求用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单位.三、设计思路和过程◎设计思路半加器电路是指对两个输入数据位进行加法,输出一个结果位和进位,不产生进位输入的加法器电路,是实现两个一位二进制数的加法运算电路.数据输入:被加数AI、加数BI数据输出:半加和SO、进位CO◎ 设计过程 (1)列出真值表*表中两个输入是加数AI 和BI ,输出有一个是和SO ,另一个是进位CO.(2)根据真值表写出输出逻辑表达式该电路有两个输出端,属于多输出组合数字电路,电路的逻辑表达式如下:BI AI SO ⊕=,BI AI CO ⋅=.所以,可以用一个两输入异或门和一个两输入与门实现. ◎实验原理图四、仿真波形图及分析根据仿真波形比较半加器真值表,可以确定电路实现了半加器的功能.但我们也可以发现输出SO 呈现了静态功能冒险,要消除该冒险可以加入相应的选通脉冲.(二)全加器二、实验任务要求用实验内容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号. 三、设计思路和过程 ◎设计思路全加器与半加器的区别在于全加器有一个低进位CI ,从外部特性来看,它是一个三输入两输出的器件. ◎设计过程(1)全加器的真值表如下*其中AI 为被加数,BI 为加数,CI 为相邻低位来的进位数.输出本位和为SO ,向相邻高位进位数为CO. (2)根据真值表写出逻辑表达式:CI BI AI SO ⊕⊕=,BI AI CI BI AI CO ⋅+⋅⊕=)(根据逻辑表达式,可以知道只要在半加器的基础上再加入一个异或门、一个两输入与门和两输入或门即可实现全加器.◎实验原理图四、仿真波形图及分析根据仿真波形比较全加器真值表,可以确定电路实现了全加器的功能.(三)3线—8线译码器二、实验任务要求用3线—8线译码器(74LS138)和逻辑门设计实现函数CBF++=,仿真验证其功能,并下载到实验板测+AACBABCBAC试.要求用拨码开关设定输入信号,发光二极管显示输出信号.三、设计思路和过程◎设计思路74LS138是一个3线—8线的译码器,其输出为低电平有效,使能端G1为高电平有效,G2、G3为低电平有效,当其中一个为高电平,输出端全部为 1.在中规模集成电路中译码器的几种型号里,74LS138使用最广泛.要实现的函数用最小项暗示如下:F(C,B,A)=∑m(0,2,4,7)只要将相应输出用一个四输入与非门实现即可.◎注意(1)74LS138的输出是低电平有效,故实现逻辑功能时,输出端不成接或门及或非门(因为每次仅一个为低电平,其余皆为高电平);(2)74LS138与前面分歧的是,其有使能端,故使能端必需加以处置,否则无法实现需要的逻辑功能. ◎实验原理图四、仿真波形图及分析当且仅当ABC 输入为000、010、100、111时,F=1;可知电路实现了函数CBA A B C A B C A B C F +++=.实验二一、实验名称VHDL 组合逻辑电路设计(一)奇校验器二、实验任务要求用VHDL 语言设计实现一个4位二进制奇校验器,输入奇数个‘1’时,输出为‘1’,否则输出为‘0’,仿真实现验证其功能,并下载到实验板测试.要求用拨码开关设定输入信号,发光二极管显示输出信号.三、设计思路和过程输入元素:a3,a2,a1,a0 输出元素:b四、VHDL法式LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY hy_check ISPORT(a: IN STD_LOGIC_VECTOR (3 downto 0); b: OUT STD_LOGIC);end hy_check;ARCHITECTURE hy_arch OF hy_check ISPROCESS(a)BEGINCASE a IS WHEN"0000" => b <='0'; WHEN"0001" => b <='1'; WHEN"0010" => b <='1'; WHEN"0011" => b <='0'; WHEN"0100" => b <='1'; WHEN"0101" => b <='0'; WHEN"0110" => b <='0'; WHEN"0111" => b <='1'; WHEN"1000" => b <='1'; WHEN"1001" => b <='0'; WHEN"1010" => b <='0'; WHEN"1011" => b <='1'; WHEN"1100" => b <='0'; WHEN"1101" => b <='1'; WHEN"1110" => b <='1'; WHEN"1111" => b <='0'; END CASE;END PROCESS;五、仿真波形图及分析根据仿真波形比较奇校验码的真值表,可以确定电路实现了奇校验器的功能.(二)数码管译码器二、实验任务要求用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,并下载到实验板测试.要求用拨码开关设定输入信号,7段数码管显示输出信号.三、设计思路和过程输入元素:A3—A0输出元素:B6—B0,C5—C0*真值表由数码管显示的原理确定.四、VHDL法式LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY hy_encoder1 ISPORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0); B:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); C:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); END hy_encoder1;ARCHITECTURE encoder_arch OF hy_encoder1 IS BEGINPROCESS(A)BEGINC<="101111";CASE A ISWHEN"0000"=>B<="1111110";--0 WHEN"0001"=>B<="0110000";--1 WHEN"0010"=>B<="1101101";--2 WHEN"0011"=>B<="1111001";--3 WHEN"0100"=>B<="0110011";--4WHEN"0101"=>B<="1011011";--5WHEN"0110"=>B<="1011111";--6WHEN"0111"=>B<="1110000";--7WHEN"1000"=>B<="1111111";--8WHEN"1001"=>B<="1111011";--9WHEN OTHERS=>B<="ZZZZZZZ";END CASE;END PROCESS;END encoder_arch;五、仿真波形图及分析根据仿真波形比较数码管译码器的真值表,可以确定实现了数码管译码器的功能.(三)8421码到余三码二、实验任务要求用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,并下载到实验板测试.要求用拨码开关设定输入信号,发光二极管显示输出信号..三、设计思路和过程输入数据:A3—A0输出数据:B3—B0*余三码就是在8421码的基础上+3.四、VHDL法式LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY hy_trans1 ISPORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0); B:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END hy_trans1;ARCHITECTURE trans_ex3 OF hy_trans1 IS BEGINPROCESS(A)BEGINCASE A ISWHEN "0000"=>B<="0011";WHEN "0001"=>B<="0100";WHEN "0010"=>B<="0101";WHEN "0011"=>B<="0110";WHEN "0100"=>B<="0111";WHEN "0101"=>B<="1000";WHEN "0110"=>B<="1001";WHEN "0111"=>B<="1010";WHEN "1000"=>B<="1011";WHEN "1001"=>B<="1100";WHEN OTHERS=>B<="ZZZZ";END CASE;END PROCESS;END trans_ex3;五、仿真波形图及分析根据仿真波形比较真值表,可以确定电路实现了8421码到余三码的转换.实验三一、实验名称VHDL时序逻辑电路设计(一)分频器二、实验任务要求用VHDL语言设计实现一个分频输出信号占空比为50%的分频器.要求在Quartus II 平台上设计法式并仿真验证设计.三、设计思路和过程◎设计思路确定分频系数N后,以21-N为计数标准,一旦计数满21-N,输出n Q.◎设计过程选取N=20,以0-4计数,到4取反.输入元素:clk,clear输出元素:clk_out四、VHDL法式LIBRARY IEEE;USE IEEE. STD_LOGIC_1164. ALL;USE IEEE. STD_LOGIC_UNSIGNED. ALL; ENTITY hy_div ISPORT(clk,clear:IN STD_LOGIC;clk_out:OUT STD_LOGIC);END hy_div;ARCHITECTURE a OF hy_div ISSIGNAL tmp:INTEGER RANGE 0 TO 9; SIGNAL clktmp:STD_LOGIC;BEGINPROCESS(clear,clk)BEGINIF clear='0' THENtmp<=0;ELSIF clk'event AND clk='1' THENIF tmp=9 THENtmp<=0; clktmp<=NOT clktmp;ELSE tmp<=tmp+1;END IF;END IF;END PROCESS;clk_out<=clktmp;END a;五、仿真波形图及分析分析仿真波形,可以确定电路实现了20倍分频的功能.(二)十进制计数器二、实验任务要求用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能.三、设计思路和过程◎设计思路满10异步复位.◎设计过程输入元素:clk,clear输出元素:q3,q2,q1,q0四、VHDL法式LIBRARY IEEE;USE IEEE. STD_LOGIC_1164. ALL;USE IEEE. STD_LOGIC_ARITH. ALL; ENTITY hy_count ISPORT(clk,clear:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END hy_count;ARCHITECTURE a OF hy_count ISSIGNAL cn:INTEGER RANGE 0 TO 9; BEGINPROCESS(clk)BEGINIF clear='0' THENcn<=0;elsIF(clk'event AND clk='1') THENIF cn=9 THENcn<=0;ELSE cn<=cn+1;END IF;END IF;END PROCESS;q<=CONV_STD_LOGIC_VECTOR(cn,4);END a;五、仿真波形图及分析分析仿真波形,可以确定电路实现了十进制计数器的功能.(三)十进制计数器的数码管显示二、实验任务要求将2中的8421码十进制计数器下载到实验板测试.要求用按键设定输入信号,发光二极管显示输入信号.三、设计思路和过程◎设计思路此系统中应包括分频器、十进制计数器、数码管译码器.◎设计过程输入元素:ain,bin,cin输出元素:cout(0-6),cat(0-5)四、VHDL法式LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY hy_union ISPORT(ain:IN STD_LOGIC;bin:IN STD_LOGIC;cin:IN STD_LOGIC;cout:OUT STD_LOGIC_VECTOR(6 downto 0); cat:OUT STD_LOGIC_VECTOR(5 downto 0) );end hy_union;ARCHITECTURE zonghe_arch OF hy_union IS COMPONENT div50m——分频器PORT(clk_in : in std_logic;clk_out : out std_logic);END COMPONENT;COMPONENT hy_count——计数器PORT(clk,clear:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(3 downto 0));END COMPONENT;COMPONENT yima——数码管译码器PORT(a:IN STD_LOGIC_VECTOR(3 downto 0);b:OUT STD_LOGIC_VECTOR(6 downto 0);c:OUT STD_LOGIC_VECTOR(5 downto 0));end COMPONENT;SIGNAL d,e:STD_LOGIC;SIGNAL f:STD_LOGIC_VECTOR(3 downto 0);BEGINu1:div50m PORT MAP(clk_in=>ain,clk_out=>d);u2:hy_count PORT MAP(clk=>d,clear=>cin,q=>f);u3:yima PORT MAP(a=>f,b=>cout,c=>cat);END zonghe_arch;实验四一、实验名称数码管扫描显示控制器设计与实现二、实验任务要求用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0、1、2、3、4、5这六个分歧的数字图形到六个数码管上,仿真验证其功能,并下载到实验板测试.三、设计思路和过程◎设计思路多个数码管静态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环依次点亮多个数码管,利用人眼的视觉暂留现象,只要扫描的频率年夜于50Hz,将看不到闪烁现象.当闪烁显示的发光二极管闪烁频率较高时,我们将观察到继续点亮的现象.同理,当多个数码管依次显示,当切换速度足够快时,我们将观察到所有数码管都是同时在显示.一个数码管要稳定显示要求显示频率年夜于50Hz,那么六个数码管则需要50*6=300Hz以上才华看到继续稳定点亮的现象.◎设计过程数据输入:clk,clear数据输出:B(0-6),C(0-5)四、VHDL法式LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY HY ISPORT(clk,clear:IN STD_LOGIC;B:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);C:OUT STD_LOGIC_VECTOR(5 DOWNTO 0));END HY;ARCHITECTURE behave OF HY ISSIGNAL tmp:INTEGER RANGE 0 TO 5;SIGNAL count:STD_LOGIC_VECTOR(5 DOWNTO 0);——count决定哪个数码管有示数SIGNAL f_temp:STD_LOGIC_VECTOR(6 DOWNTO 0); BEGINp1:PROCESS(clk)——排次第BEGINIF clk'EVENT AND clk='1' THENIF tmp=5 THENtmp<=0;ELSEtmp<=tmp+1;END IF;END IF;END PROCESS p1;p2:PROCESS(tmp)——数码管显示数BEGINIF (clear='0')THEN count<="111111";CASE tmp IS——依次逐个输出0-5WHEN 0=>count<="011111";f_temp<="1111110";--0WHEN 1=>count<="101111";f_temp<="0110000";--1WHEN 2=>count<="110111";f_temp<="1101101";--2WHEN 3=>count<="111011";f_temp<="1111001";--3WHEN 4=>count<="111101";f_temp<="0110011";--4WHEN 5=>count<="111110";f_temp<="1011011";--5END CASE;else count<="111111";END IF;END PROCESS p2;C<=count;B<=f_temp;END behave;五、仿真波形图分析波形易知,C确实实现了六个数码管的交替显示,B则控制着各对应管输出0-5相应的数字.数电实验总结【故障和问题分析】故障一:仿真时设置clk脉冲宽度为1us,报错解决法子:经检查发现,未更改end time设置,把end time重置为50us.故障二:下载后,按键没有反应.解决法子:检验相应管脚是否设置正确,检查管脚是否失效,下载把持是否正确.故障三:数码管显示乱码.解决法子:一开始我直接检查代码,检查了好久都没发现毛病,后来换了个实验板,重新下载后就好了.另:实验过程中,唯一的问题是对多输入电路,静态功能冒险还是会存在的,在这种情况下应该加入选通脉冲来消除静态功能冒险.【总结与结论】本学期的四次实验均较为简单,只要认真听讲、细心把持,基本没有太年夜的问题.难点主要是对VHDL语言的学习和对Quartus II软件的熟悉. 起初接触Quartus II,感觉毫无头绪.在预习过课本之后,再结合数字电路理论课上所学的知识,终于有了一些思路.顺着这思路,对所求元件进行了相应的功能设计,然后开始了相应代码的编写.在编写过程中,遇到了很多关于VHDL语言的困扰,经过不竭的调整和适应,终于掌握了相关的语法规则.通过这次实验,我收获最多的还是熟悉了数字电路的设计过程,之前所学习的还是理论上的知识.理论固然重要,但一味纸上谈兵,是不成能掌握实际技能的.希望今后能够多一些类似的实验、实践活动的机会,让我们提高入手能力、培养实用技能.。

  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";。

相关文档
最新文档