北邮数电实验——PS2键盘

北邮数电实验——PS2键盘
北邮数电实验——PS2键盘

实验名称:PS2键盘接口设计姓名:金小敏

学号:

班级:

一、实验任务

设计制作一个PS/2 键盘接口控制器。

(a)基本功能

按照PS/2 键盘接口标准设计一个控制器,接收PS/2 键盘发送的数据,用数码

管和8×8 点阵显示接收到的键值。

其中0~9 用数码管显示,A~Z用8×8 点阵显示,接收到其他键值则不显示。

(b)拓展功能

(i)实现显示汉字、符号:按F3显示汉字“中”、按F4显示汉字“国”、按F5显示心型符号;

(ii)实现音乐播放控制:按F1开始播放音乐、按F2停止播放音乐。

二、系统设计

(a)设计思路

系统总的分为输入输出两大部分。输入即为PS2键盘,输出有显示输出:8×8点阵、数码管,声音输出。

根据PS2的协议,PS2按键的输出包含扫描码和断码,本次实验只使用扫描码。将扫描码解码出来后,即可作为不同的判断条件来控制输出。

输出包括数码管显示、点阵显示和声音输出。将其设计为:0~9按键时只有数码管显示对应数字,点阵熄灭;A~Z时只有点阵显示,数码管熄灭;按F1时,开始播放音乐并且点阵显示音乐符号“?”;按F2时,停止播放音乐并且点阵熄灭;按F3时显示汉字“中”;按F4显示汉字“国”;按F5显示“?”。

程序设计为四大模块:解码模块、显示模块、分频模块、音乐模块。

(b)总体框图

(i)系统模块

键盘输入

(ii )状态转移图

(c)分块设计:

(1)PS2解码模块 ①输入输出框图:

位)

ret:选择信号

p_clk:PS2键盘时钟信号 p_dat:PS2键盘数据信号 ②原理及算法:

从键盘/鼠标发送到主机的数据在时钟信号的下降沿当时钟从高变到低的时候被读取从主机发送到键盘/鼠标的数据在上升沿当时钟从低变到高的时候被读取不管通讯的方向怎样键盘/鼠标总是产生时钟信号。一次数据组成为:1位起始位(总为0),8位数据位(低位在前),1位奇校验位,1位停止位(总为1)。

由于本次实验只用到扫描码,所以只要接收第一段数据即可。建立一个process,以p_clk 位触发信号,将其中的8位数据位保存起来即可(起始位、奇校验位、停止位均不解码),由于8位数据是从低到高的顺序,所以在解码时需要进行移位操作。解码完后将8位数据(已经按从高到低排好)作为输出。 (2)显示模块 ①输入输出框图:

datain

ret:选择信号

datain:数据输入(即解码后的数据) clkshow:点阵扫描时钟

col:点阵行控制 row:点阵列控制 a_to_g:数码管段控制 cat: 数码管片选

②原理及算法简介:

由解码模块解码输出的8位数据及时PS2键盘的各个按键的扫描码,按照PS2协议中的关于各个按键的编码即可以对不同的按键进行区分,PS2有3套编码,但是第二套扫编码码最为常用,本次实验所用键盘是按第二套编码。

例如在第二套编码中,“A ”的扫描码编码为1CH 、“1”的扫描码编码为16H ,所以在使用数码管显示0~9时,使用case-when 语句即可。在使用点阵显示26个字母是,使用点阵进行扫描,设计原理如下图结构。

扫描显示26个字母与2个汉字以及2个符号,将他们的扫面数据存放在一个3维数组中,由于编码的量比较大,所以采用软件编码的办法,找了一款“字模”软件,来

进行编码,其中的一些需要人工的修改一下。软件截图如下:

①输入输出框图:

clk :时钟输出(50MHz )

showclk

:分频输出(为8*8点阵扫描分频,音乐模块的多个分频在音乐模块内完成) ②原理及算法简介:

由于点阵显示不需要十分精确的分频,只要满足人的视觉暂留即可,所以采用如下的算法,相对来说比较高效,不需要通过一般地以计数来分频的算法,变该算法的分频为2的幂数分频。程序如下

process(clk)

variable count : std_logic_vector(19 downto 0):=X"00000"; begin

if(rising_edge(clk))then count:=count+1; end if;

clkshow<=count(10); end process;

(4)音乐模块

①输入输出框图:

clk:时钟输入(50MHz ) cs :选择信号

beep :蜂鸣器输出 ②原理及算法简介:

蜂鸣器演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。因此蜂鸣器奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。在音乐中所谓“音调”,其实就是我们常说的“音高”。在音乐中常把中央C 上方的A 音定为标准音高,其频率f=440Hz 。当两个声音信号的频率相差一倍时,也即f2=2f1 时,则称f2 比f1 高一个倍频程, 在音乐中1(do )与1,2(ruai )与.2……正好相差一个倍频程,在音乐学中称它相差一个八度音。在一个八度音内,有12 个半音。以1—i 八音区为例, 12 个半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5 一#5、#5—6、6—#6、#6—7、7—i 。这12 个音阶的分度基本上是以对数关系来划分的如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调

的频率。

采用分频的办法产生不同的频率,再对对应的乐曲进行编码。

例如乐曲《仙剑问情》编码如下(以0,0结束):

MUSIC:RAM:=(13,8,12,8,13,32,13,8,12,8,13,32,13,8,12,8,13,8,16,8,15,8,13,8,12,32,11 ,8,12,8,13,32,13,8,12,8,13,32,13,8,12,8,13,8,17,8,16,8,15,8,13,32,13,8,15,8,16,32, 16,8,21,8,16,32,15,8,13,8,13,8,12,8,12,32,12,32,11,8,12,8,13,32,13,8,15,8,13,32,13 ,8,15,8,13,32,13,8,11,8,11,8,12,8,12,32,12,32,13,8,12,8,13,32,13,8,12,8,13,32,13,8 ,12,8,13,8,16,8,15,8,16,40,21,8,16,40,21,8,15,8,16,8,21,8,17,8,16,8,15,8,13,8,15,8 ,16,32,16,32,16,32,16,8,15,8,16,32,16,32,16,32,13,8,15,8,16,8,21,8,16,32,16,32,16, 32,15,32,15,32,15,32,13,8,15,8,16,32,16,8,21,8,15,40,13,8,12,32,12,32,15,32,12,32, 13,40,16,8,15,32,12,32,13,32,13,32,12,32,13,8,12,8,11,32,11,32,11,32,12,8,11,8,6,3 2,11,32,12,32,13,32,15,40,16,8,13,32,11,32,12,32,12,32,13,32,15,32,16,40,21,8,15,3 2,13,32,12,32,12,32,15,32,12,32,13,40,16,8,15,32,13,32,15,32,15,32,16,32,21,32,22, 32,22,32,16,40,15,8,15,32,15,16,16,32,21,32,23,32,22,32,21,32,15,32,16,32,16,32,16 ,32,0,0)

三、仿真波形及波形分析:

对PS2解码模块进行仿真,输出为数码管的各个段。ps2_data输入为数字2,其扫描码为1EH,即00011110,在串口通信中数据从高到低,所以ps2_data在ps2_clk的第二个下降沿后输入为01111000。

仿真结果如下图所示,输出为a_to_g(7 downto 0)=01011011,数码管输出数字2,仿真结果与实际相符。

在仿真时要将ret先拉高,然后拉低作为开关信号,ps2_clk的第一个下降沿后是起始信号

四、源程序

见附页

五、功能说明:

功能1:实现按键盘阿拉伯数字0~9在数码管上显示如下图:

功能2:实现按PS2键盘字母A~Z在8*8点阵上显示如下图

功能3:实现按PS2按F3、F4、F5在8*8点整上显示汉字图形如下图汉字“中”

汉字“国”

心形符号

功能4:利用PS2键盘的按键控制音乐播放,播放时点阵显示音乐符号“?”,其点阵显示如下图

六、元器件清单及资源利用情况:

(1)此次实验使用了8*8点阵、数码管、PS2键盘、开发板主芯片型号为:EMP11270T144C5。

(2)利用情况:

(i)未增加音乐播放器前宏单元的使用情况

使用宏单元总数为:334个

其中:

分频模块:11个

PS2解码模块:28个

显示模块:295个

(ii)增加了音乐播放器前宏单元的使用情况

使用宏单元总数为:334个

其中:

分频模块:11个

PS2解码模块:28个

显示模块:297个

音乐模块:885个

七、故障及问题分析

问题1:对于PS2的解码的方法的选择,有2种办法,一种是使用比较高的频率去“主动”扫描发送来的数据,另一种办法就是以PS2发送的p_clk为时钟来读取发送来的数据。

解决办法:选择第二种办法,这种办法的代码相对简单,虽然不如前者的精度高,但是还是在可接受范围内的。

问题2:PS2解码时的扫描码保存问题,由于PS2键盘的串行数据一般为3帧,即扫描码和断码,如果只使用一个8位数组的话,其中的内容是变化的,并不是扫描码,如果将断码也解码的话对本次实验来说是不需要的。

解决办法:设置一个计数器以它的值的大小来确定扫描码是否解码完毕,若计数值小于8则代表还未解码完,否则解码完成,将解码结果送至相应数组即可。

问题3:8*8的点阵显示26个字母和一些其他符号,这需要比较大量的编码,如果全采取人工编码的话,工作量比较大且容易出错。

解决办法:使用用字模软件来进行编码,这样不仅节省时间并且编码出来的图形较为美观。

八、实验总结

这次选择PS2键盘解码实验,一方面是由于在本学期的微机原理与接口技术中有关串通信的介绍,想借此机会能将理论实用化,并且在实际当中串行通信用的比较多,虽然具体细节会有所差异但是基本理论是一样的,掌握一种其他的就可以在此基础加以修改后来应用;令一方面原因是键盘在实际应用当中更加经济高效:一般会使用的还有矩阵键盘,以4*4矩阵键盘为例,采用扫描法的话要使用8个IO口,这样才能获得16个按键,但是对硬件的资源占得比较多,“性价比”不高,但是PS2

键盘只需占用2个IO口就可以得到一百多个按键,基本上需要按键的地方,能满足要

求,节省很多资源。

其次是对于模块化编程的一些理解:

模块化编程将要使用的各个功能封装在一个模块中,只需对外提供输入输出接口即可。这样做的好处是能使一个比较大的工程显得条理清楚,各个模块都有自己特定的作用,便于以后查找错误或是对其中的一些功能进行修改。并且使用模块化后,编写的模块可以作为一个很通用的模块去使用,比如这次实验的PS2解码模块、音乐模块等,都可以在以后别的工程中去使用,大大减少了工作量,当然也便于自己平时对程序积累,可以将一些经常的模块保留下来,再使用时只要做简单的修改即可,这就好像日常生活中的汽车零件一样,是很通用的,可以大大提高编程效率。

还有就是对于VHDL语言的一些想法:

VHDL全称是Very-High-Speed Integrated Circuit HardwareDescription Language(超高速集成电路硬件描述语言),为什么会对VHDL语言产生一些“想法”呢?主要是在编程过程中老是摆脱不了C语言的一些思维,很难完全地使用VHDL的思维去解决问题,或者说是不能很熟练地使用VHDL。通过编写这次的实验程序,自己也对两者有了一些理解:VHDL语言是硬件描述语言,也就是说是用来描述电路的,写VHDL的时候有点像搭一个电路,同一个时刻电路的不同部分都可以在运行,比如VHDL中的PROCESS就是并行的。 C语言是软件语言,程序的每一行是按顺序执行下来的,只能一条一条的执行,一个时刻只有一条指令在执行。也就是说编写VHDL时要多应用一些电路,特别是数字电路的思维,比如常用的芯片上的一些片选、时钟和使能等接线的思维就可以用在VHDL的编程之中。

再有就是对于CPLD(或FPGA)和单片机的区别与理解:

暑期电子工艺实习做的是单片机,自己平时也使用过单片机,编写过单片机解码PS2键盘的程序,所以对两者的区别也有了一定的理解:单片机可以理解为集成在单一芯片上的微型计算机系统,在加电后ROM中的程序会像计算机内存中的程序一样得到逐条的执行。CPLD(或FPGA)则是操控层次更低,所以自由度更大的芯片,提供了大量的与非门、或非门等基本数字器件,是十分灵活的。可以这样认为,利用 CPLD (或FPGA)可以自己“编”出一个单片机出来,单片机更像是已经固化的电子器件。当然不能说由此得出谁优谁劣,两者的专长不一,如果在一些简单或是对硬件资源以及速度要求不高的控制场合,选择单片机就比较合适,单片机成本低,并且单片机中已经有中断、位操作等方便的功能,所以开发相对简单。但是由于单片机硬件资源有限速度也不是很高。所以在一些对此要求较高的场合就要考虑别的器件,CPLD (或FPGA)的硬件资源相对丰富,并且运行速度快,在信号处理方面也比较强,是一个不错的选择。

最后就是一些自己体会与感悟。感觉只要坚持下来就会有所结果的,自己的程序是直到验收前一周的周末在开放实验室中调试出来的,确实花了比较多的时间,但是做出来后就很有成就感,收获不小。还有就是要懂得取舍,本来自己对于PS2的解码还要增加按2个键时(比如Ctrl+A)时,8*8点阵以不同的颜色来显示对应字母,但是时间太紧,只有舍弃,将基本功能更好地完善。

附页:

(1)顶层程序:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity myps is

port(

ret : in std_logic;--选择信号

clk : in std_logic;--输入时钟(50MHz)

ps2clk : in std_logic;--PS2键盘时钟信号

ps2data : in std_logic;--PS2键盘数据信号

a_to_g : out STD_LOGIC_VECTOR (0 to 7);--数码管段信号 row:out std_logic_vector(0 to 7);--点阵列输出 col:out std_logic_vector(0 to 7);--点阵行输出

cat:out std_logic_vector(5 downto 0);--数码管片选

MMM:out std_logic--蜂鸣器输出

);

end myps;

architecture Behavioral of myps is

signal clkshow,cs : std_logic;

signal dat : std_logic_vector(7 downto 0);

component divclk is--分频模块声明

port(

clk : in std_logic; ------50MHZ

clkshow : out std_logic

);

end component;

component key is--ps2解码模块声明

port( ret : in std_logic;

p_clk : in std_logic;

p_dat: in std_logic;

SCAN_CODE:out std_logic_vector(7 downto 0)

);

end component;

component disp is--显示模块声明

port( ret : in std_logic;

a_to_g:out std_logic_vector(7 downto 0);

cat:out std_logic_vector(5 downto 0);

row:out std_logic_vector(7 downto 0);

col:out std_logic_vector(7 downto 0);

datain:in std_logic_vector(7 downto 0);

clkshow: in std_logic;

cs:out std_logic

);

end component;

component MUSIC is--音乐模块声明

PORT(CLK:IN STD_LOGIC;

cs :IN STD_LOGIC;

MMM:OUT STD_LOGIC

);

end component;

begin

inst1: divclk port map(clk,clkshow);

inst2: key port map(ret,ps2clk,ps2data,dat);

inst3: disp port map(ret,a_to_g,cat,row,col,dat,clkshow,cs); inst4: MUSIC port map(clk,cs,MMM);

end Behavioral;

(2)分频程序(为8*8点阵扫描分频)

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity divclk is

port(

clk : in std_logic; ------50MHZ

clkshow : out std_logic---分频输出

);

end divclk;

architecture Behavioral of divclk is

begin

process(clk)

variable count : std_logic_vector(19 downto 0):=X"00000"; begin

if(rising_edge(clk))then

count:=count+1;

end if;

clkshow<=count(10);---2^10分频

end process;

end Behavioral;

(3)PS2解码程序

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity key is

port( ret : in std_logic;

p_clk : in std_logic;

p_dat: in std_logic;

SCAN_CODE:out std_logic_vector(7 downto 0)

);

end key;

architecture Beh of key is

signal count: std_logic_vector(3 downto 0);

signal red:std_logic;

signal Trans_Input: std_logic_vector(8 downto 0);

--signal SCAN_CODE:std_logic_vector(7 downto 0);

begin

process

begin

wait until(p_clk'event and p_clk='0');---等待ps_clk的下降沿

if (ret='1') then count <="0000"; ---选择信号为1则不执行解码

red<='0';

else if (p_dat='0' and red='0') then red <='1';

else if (red ='1')then

if count <"1001" then---未解码完毕

count<=count+1;

Trans_Input(7 downto 0)<=Trans_Input(8 downto 1);--移位操作

Trans_Input(8)<=p_dat;

else SCAN_CODE<=Trans_Input(7 downto 0);---将解码好的数据赋予

red <='0'; --- SCAN_CODE

count<="0000";

end if;

end if;

end if;

end if;

end process;

end Beh;

(4)显示模块程序

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity disp is

port( ret : in std_logic;

a_to_g:out std_logic_vector(0 to 7);

row:out std_logic_vector(0 to 7);

col:out std_logic_vector(0 to 7);

cat:out std_logic_vector(5 downto 0);

datain:in std_logic_vector(7 downto 0);

clkshow:in std_logic;

cs:out std_logic

);

end disp;

architecture Beh of disp is

Type Showbuf is Array( 0 to 7 ) of std_logic_vector( 7 downto 0); Type Conbuf is array( 0 to 30) of showbuf;--定义3维数组存放各

---图形

signal I : integer range 0 to 7;---列显示计数器

signal J : integer range 0 to 30;--对应不同字母图形

CONSTANT col_buf:Showbuf := ("01111111","10111111","11011111","11101111","11110111","11111011","11111101","111 11110" );--使相应的列可显示

CONSTANT show : ConBuf :=( --字母A~Z和图形的编码

(

"00000000",--null,使开始时点阵熄灭

"00000000",

"00000000",

"00000000",

"00000000",

"00000000",

"00000000",

"00000000"

),

(

"00011111",--A

"00101000",

"01001000",

"10001000",

"10001000",

"01001000",

"00101000",

"00011111"

),

(

"00000000",--B

"01111110",

"01010010",

"01010010",

"01010010",

"01010010",

"00101010",

"00000100"

),

(

"00000000",--C

"00111100",

"01100110",

"01000010",

"01000010",

"01000010",

"00100010",

"00000100"

),

(

"00000000",--D "01111110", "01000010", "01000010", "01000010", "01100110", "00111100", "00000000" ),

( "00000000",--E "01111110", "01010010", "01010010", "01010010", "01010010", "01010010", "00000000" ),

( "00000000",--F "01111110", "01010000", "01010000", "01010000", "01010000", "01010000", "00000000" ),

( "00000000",--G "00111100", "01100110", "01000010", "01000010", "01001010", "00101100", "00000000" ),

( "00000000",--H "01111110", "00010000", "00010000", "00010000", "00010000", "01111110",

),

( "00000000",--I "00000000", "00000000", "01111110", "00000000", "00000000", "00000000", "00000000" ),

( "00000000",--J "00000100", "00000010", "00000010", "00000010", "00000010", "01111100", "00000000"

),

( "00000000",--K "01111110", "00001000", "00010000", "00101000", "01000100", "01000010", "00000000" ),

( "00000000",--L "01111110", "00000010", "00000010", "00000010", "00000010", "00000010", "00000000" ),

( "00000000",--M "01111110", "01110000",

"00001110", "01110000", "01111110", "00000000" ),

( "00000000",--N "01111110", "01100000", "00010000", "00001000", "00000110", "01111110", "00000000" ),

( "00000000",--O "00111100", "01100110", "01000010", "01000010", "01100110", "00111100", "00000000" ),

( "00000000",--P "01111110", "01001000", "01001000", "01001000", "01001000", "00110000", "00000000" ),

( "00000000",--Q "00111100", "01100110", "01000010", "01000110", "01100010", "00111101", "00000000" ),

(

"00000000",--R "01111110", "01010000", "01010000", "01010000", "01010000", "00111110", "00000000" ),

( "00000000",--S "00100100", "01010010", "01010010", "01010010", "01010010", "00101010", "00001100" ),

( "01000000",--T "01000000", "01000000", "01111110", "01000000", "01000000", "01000000", "00000000" ),

( "00000000",--U "01111100", "00000010", "00000010", "00000010", "00000010", "01111100", "00000000" ),

( "01000000",--V "00110000", "00001100", "00000110", "00000100", "00011000", "00100000",

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

北京邮电大学数字电路与逻辑 设计实验 学院: 班级: 作者: 学号:

实验一 Quartus II原理图输入法设计 一、实验目的: (1)熟悉Quartus II原理图输入法进行电路设计和仿真 (2)掌握Quartus II 图形模块单元的生成与调 (3)熟悉实验板的使用 二、实验所用器材: (1)计算机 (2)直流稳压电源 (3)数字系统与逻辑设计实验开发板 三、实验任务要求 (1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模 块单元。 (2)用(1)中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能, 并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。 (3)用3线-8线译码器(74LS138)和逻辑门设计实现函数 ,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 四、设计思路和过程 (1)半加器的设计 半加器电路是指对两个输入数据位进行加法,输出一个结果位和进位,不产生进位输入的加法器电路。是实现两个一位二进制数的加法运算电路。数据输入AI被加数、BI加数,数据输出SO和数(半加和)、进位C0。 在数字电路设计中,最基本的方法是不管半加器是一个什么样的电路,按组合数字电路的分析方法和步骤进行。 1.列出真值表 半加器的真值表见下表。表中两个输入是加数A0和B0,输出有一个是和S0,另一个是进位C0。

2 该电路有两个输出端,属于多输出组合数字电路,电路的逻辑表达式如下函数的逻辑表达式为:SO=AI⊕BI CO=AB 所以,可以用一个两输入异或门和一个两输入与门实现。

北邮数字电路综合实验报告

数字电路综合实验报告 简易智能密码锁 一、实验课题及任务要求 设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。 基本要求: 1、密码设置:通过键盘进行4 位数字密码设定输入,在数码管上显示所输入数字。通过密码设置确定键(BTN 键)进行锁定。 2、开锁:在闭锁状态下,可以输入密码开锁,且每输入一位密码,在数码管上显示“-”,提示已输入密码的位数。输入四位核对密码后,按“开锁”键,若密码正确则系统开锁,若密码错误系统仍然处于闭锁状态,并用蜂鸣器或led 闪烁报警。 3、在开锁状态下,可以通过密码复位键(BTN 键)来清除密码,恢复初始密码“0000”。闭锁状态下不能清除密码。 4、用点阵显示开锁和闭锁状态。 提高要求: 1、输入密码数字由右向左依次显示,即:每输入一数字显示在最右边的数码管上,同时将先前输入的所有数字向左移动一位。 2、密码锁的密码位数(4~6 位)可调。

3、自拟其它功能。 二、系统设计 2.1系统总体框图 2.2逻辑流程图

2.3MDS图 2.4分块说明 程序主要分为6个模块:键盘模块,数码管模块,点阵模块,报警模块,防抖模块,控制模块。以下进行详细介绍。 1.键盘模块 本模块主要完成是4×4键盘扫描,然后获取其键值,并对其进行编码,从而进行按键的识别,并将相应的按键值进行显示。 键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出高电平,在读入输出的行值时,通常高电平会被低电平拉低,当当前位置为高电平“1”时,没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。由此可确定按键位置。

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

北京邮电大学 数字电路与逻辑设计实验 实验报告 实验名称:QuartusII原理图输入 法设计与实现 学院:北京邮电大学 班级: 姓名: 学号:

一.实验名称和实验任务要求 实验名称:QuartusII原理图输入法设计与实现 实验目的:⑴熟悉用QuartusII原理图输入法进行电路设计和仿真。 ⑵掌握QuartusII图形模块单元的生成与调用; ⑶熟悉实验板的使用。 实验任务要求:⑴掌握QuartusII的基础上,利用QuartusII用逻辑 门设计实现一个半加器,生成新的半加器图像模 块。 ⑵用实验内容(1)中生成的半加器模块以及逻辑门 实现一个全加器,仿真验证其功能,并能下载到实 验板上进行测试,要求用拨码开关设定输入信号, 发光二级管显示输出信号。 ⑶用3线—8线译码器(74L138)和逻辑门实现要求 的函数:CBA F+ C + =,仿真验证其 + B C B A A A B C 功能,,并能下载到实验板上进行测试,要求用拨 码开关设定输入信号,发光二级管显示输出信号。二.设计思路和过程 半加器的设计实现过程:⑴半加器的应有两个输入值,两个输出值。 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)的图形模块

2016年北邮数电实验报告

数字电路与逻辑设计 实验报告 学院:电子工程学院 班级: 姓名: 学号: 班内序号:

目录 (一)实验名称及实验任务要求 (1) (二)模块端口说明及连接图 (2) 1.1实验三(3)模块端口说明 (2) 1.2实验三(3)连接图 (2) 2.1实验四模块端口说明 (2) 2.2实验四连接图 (2) (三)原理图或VHDL代码 (3) 1.实验一(2)原理图 (3) 2.实验三(3)VHDL代码 (4) 3.实验四VHDL代码 (7) (四)仿真波形 (10) 1.实验一(2)仿真波形 (10) 2.实验三(3)仿真波形 (11) 3.实验四仿真波形 (11) (五)仿真波形分析 (11) 1.实验一(2)仿真波形分析 (11) 2.实验三(3)仿真波形分析 (11) 3.实验四仿真波形分析 (11) (六)故障及问题分析 (12) (七)总结和结论 (13)

(一)实验名称及实验任务要求 实验一 名称:QuartusII原理图输入法设计与实现 实验任务要求:EDA基础实验1(1)、(2)、(3)必做,选做VHDL 实现加法器。 实验二 名称:用VHDL设计与实现组合逻辑电路 实验任务要求:四人表决器、8421码转格雷码、数码管译码器(下载测试)。 实验三 名称:用VHDL设计与实现时序逻辑电路 实验任务要求:分频器、8421十进制计数器、将分频器/8421十进制计数器/数码管译码器3个电路进行连接并下载。 实验四 名称:用VHDL设计与实现相关电路 实验任务要求:数码管动态扫描控制器、点阵扫描控制器。

(二)模块端口说明及连接图 1.1实验三(3)模块端口说明 cp:时钟信号输入; rst:8421十进制计数器异步置位; c[6...0]:七段二极管数码管显示; cat[7...0]:数码管显示。 1.2实验三(3)连接图 2.1实验四模块端口说明 cp:时钟信号输入; rst:8421计数器异步复位; lgt[6...0]:七段二极管数码管显示; cat[7...0]:数码管显示。 2.2实验四连接图

北邮数电实验报告

北京邮电大学实验报告 实验名称:数字电路与逻辑设计实验报告 学院:信息与通信工程学院 班级: 姓名: 学号: 序号: 日期:

实验三:用VHDL语言设计与实现逻辑电路 一、实验内容 1. 用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验版测试。要求用按键设定输入信号,发光二极管显示输出信号; 2.用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器,仿真验证其功能; 3.将(1),(2)和数码管译码器3个电路进行连接,并下载到实验板显示计数结果。 二、模块端口说明及连接图 1.分频器 2. 计数器 clk: 时钟输入信号 clk: 时钟信号输入 clear: 复位信号输入 clear: 复位信号输入 clk_out: 时钟分频后的信号输出 q: 计数器的输出 3.数码管显示 b: 数码管的输入信号 seg: 译码显示输出 onoff: 数码管的输出控制

4.连接图 三、实验分析 1.设计思路 本实验将之前的分频器和计数器以及数码管显示模块组合起来,实现了单个数码管现显示0~9,每隔0.5s切换一次显示内容。 COMPONENT div_12实现了时钟分频,将50MHz的单片机晶振时钟进行分频,输出频率2HZ占空比50%的方波时钟,以此时钟作为内部时钟驱动计数器。 COMPONENT jishuqi是一个十进制计数器,NUM从“0000”到“1001”循环变化,模为10。计数器的输出传递给数码管译码显示电路。 COMPONENT seg7_1是数码管译码显示电路,将收到的信号NUM译码并控制数码管的段锁存来控制数码管的显示。 整体来看,div-12提供了分频后2Hz的时钟,驱动计数器计数,计数的结果作为数码管译码显示模块的输入,根据计数器实时的数进行数码管的显示。综合起来就实现了设计的功能。 在进行电路的连接时,可直接在代码中分成三个进程来实现,也可通过为每个模块建立符号,连接电路图来实现。 2. 具体代码如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fenpinjishu IS PORT( clear2 :IN STD_LOGIC; clk1:IN STD_LOGIC; b1:OUT STD_LOGIC_VECTOR(6 downto 0); CAT:OUT STD_LOGIC_VECTOR(7 downto 0) );

数电实验实验报告

数字电路实验报告

实验一 组合逻辑电路分析 一.试验用集成电路引脚图 74LS00集成电路 74LS20集成电路 四2输入与非门 双4输入与非门 二.实验内容 1.实验一 自拟表格并记录: 2.实验二 密码锁的开锁条件是:拨对密码,钥匙插入锁眼将电源接通,当两个条件同时满足时,开锁信号为“1”,将锁打开。否则,报警信号为“1”,则接通警铃。试分析密码锁的密码ABCD 是什么? X1 2.5 V A B C D 示灯:灯亮表示“1”,灯灭表示“0” ABCD 按逻辑开关,“1”表示高电平,“0”表示低电平

ABCD 接逻辑电平开关。 最简表达式为:X1=AB ’C ’D 密码为: 1001 A B C D X1 X2 A B C D X1 X2 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 0 1 0 1 0 0 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 1 三.实验体会: 1.分析组合逻辑电路时,可以通过逻辑表达式,电路图和真值表之间的相互转换来到达实验所要求的目的。 2.这次试验比较简单,熟悉了一些简单的组合逻辑电路和芯片 ,和使用仿真软件来设计和构造逻辑电路来求解。 实验二 组合逻辑实验(一) 半加器和全加器 一.实验目的 1. 熟悉用门电路设计组合电路的原理和方法步骤 二.预习内容 1. 复习用门电路设计组合逻辑电路的原理和方法步骤。 2. 复习二进制数的运算。 3. 用“与非门”设计半加器的逻辑图。 4. 完成用“异或门”、“与或非”门、“与 非”门设计全加器的逻辑图。 5. 完成用“异或”门设计的3变量判奇 电路的原理图。 三.元 件参考 U1A 74LS00D U1B 74LS00D U1C 74LS00D U1D 74LS00D U2A 74LS00D U2B 74LS00D U2C 74LS00D U3A 74LS20D X1 2.5 V X2 2.5 V VCC 5V A B C D

北邮-数电实验报告

北邮-数电实验报告

数字电路实验报告 学院:信息与通信工程 专业:信息工程 班级:2013211125 学号:2013210681 姓名:袁普

②:仿真波形图以及分析 波形图: 波形分析:通过分析ab ci三个输入在8中不同组合下的输出,发现与全加器的真值表吻合,说明实现了全加器的逻辑功能。同时看见波形中出现了毛刺(冒险),这也与事实一致。 ③:故障及问题分析 第一次在做全加器的时候发现找不到已经生成的半加器模块,后来发现是因为在建立工程时这两个项目没有建在同一个文件夹里,在调用的时候就找不到。后来我将全加器工程建在同一个文件夹里解决了此问题。

实验二:用VHDL设计和实现组合逻辑电路 一:实验要求 ①:用VHDL设计一个8421码转换为格雷码的代码转换器,仿真验证其功能。 ②:用VHDL设计一个4位二进制奇校验器,要求在为奇数个1时输出为1,偶数个1时输出为0,仿真验证其功能。 ③:用VHDL设计一个数码管译码器,仿真验证其功能,下载到实验板测试,要求用拨码开关设定输入信号,数码管显示输出信号,并且只使一个数码管有显示,其余为熄灭状态。 二:故障及问题分析 在刚开始实现让一个数码管显示的时候,我本来准备再设置6个输入和输出,通过实验板上的拨码来输入信息分别控制不同的数码管的的开闭状态,但是后来发现这样效率很低而且实验板上的拨码开关数量根本不够。在老师的提醒下,我最终在VHDL里直接增加了一个向量输出”011111”来直接控制cat0~5六个管脚,从而达到了实验的要求。

实验三:用VHDL设计和实现时序逻辑电路 一:实验要求 ①:用VHDL语言设计实现一个8421十进制计数器,要求有高电平复位功能,仿真验证其功能。 ②:用VHDL语言设计实现一个分频系数为12,输出为占空比50%方波的分频器,有高电平复位功能,仿真验证其功能。 ③:将(1),(2)和数码管译码器三个电路进行连接,仿真验证其功能,并下载到实验板进行测试,要求第三个数码管显示数字。二:报告内容 ①实验三(3)模块端口说明及模块代码 模块一:div12为一个有高电平复位功能的分频系数为12的分屏器,其输出是一个占空比50%的方波。此模块输入连接一个时钟输入,即可在输出端得到一个周期更大的方波输出。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity div12 is port( clear,clk:in std_logic; clk_out:out std_logic ); end div12; architecture struct of div12 is signal temp:integer range 0 to 5; signal clktmp:std_logic; begin process(clk,clear) begin if(clear='1') then

北邮数电实验报告

北京邮电大学 实验报告实验名称:数电电路与逻辑设计实验 学院:信息与通信工程学院 班级: 姓名: 学号: 班内序号: 日期:

一. 实验一:Quartus II 原理图输入法设计 1. 实验名称和实验任务要求 (1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块 元。 (2)用(1)中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号入信号。 (3)用3线-8线译码器(74LS138)和逻辑门设计实现函数 F=A B C +A B C +A B C + A B C 。 2. 实验原理图及波形图 (1)半加器 (2)全加器

(3)74LS38 3.仿真波形图分析 (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’,仿真验证其功能。要求用拨码开关设定输入信号,发光二极管显示输出信号。 2.实验代码及波形图 (1)共阴极7段数码管译码器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY GUAN IS 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 GUAN; ARCHITECTURE encoder_arch OF GUAN IS BEGIN PROCESS(A) BEGIN C<="011111"; CASE A IS WHEN"0000"=> B<="1111110";--0 WHEN"0001"=> B<="0110000";--1 WHEN"0010"=> B<="1101101";--2 WHEN"0011"=> B<="1111001";--3 WHEN"0100"=> B<="0110011";--4 WHEN"0101"=> B<="1011011";--5 WHEN"0110"=> B<="1011111";--6 WHEN"0111"=> B<="1110000";--7 WHEN"1000"=> B<="1111111";--8 WHEN"1001"=> B<="1111011";--9

00FF数字原理 北京邮电大学2012年阶段作业及实验汇总

一、判断题(共10道小题,共50.0分) 1.严格地说解码器输出的是PAM信号。 A.正确 B.错误 知识点: 平时作业1 学生答案: [B;] 标准答 案: B; 得分: [5] 试题分 值: 5.0 提示: 2.±127△的样值,各自对应的码字完全相同。 A.正确 B.错误 知识点: 平时作业1 学生答案: [B;] 标准答 案: B; 得分: [5] 试题分 值: 5.0 提示: 3.某位码的判定值与先行码的状态(是“0”还是“1”)有关。 A.正确 B.错误 知识点: 平时作业1 学生答案: [A;] 标准答 案: A; 得分: [5] 试题分 值: 5.0 提示: 4.A律13折线编码器编码位数越大越好。

A.正确 B.错误 知识点: 平时作业1 学生答案: [B;] 标准答 案: B; 得分: [5] 试题分 值: 5.0 提示: 5.A律13折线的量化信噪比高于A律压缩特性的量化信噪比。 A.正确 B.错误 知识点: 平时作业1 学生答案: [B;] 标准答 案: B; 得分: [5] 试题分 值: 5.0 提示: 6.带通型信号的抽样频率若取fs≥2f M会产生折叠噪声。 A.正确 B.错误 知识点: 平时作业1 学生答案: [B;] 标准答 案: B; 得分: [5] 试题分 值: 5.0 提示: 7.PCM通信系统中的D/A变换是A/D变换的反过程。 A.正确 B.错误 知识点: 平时作业1 学生答案: [A;] 标准答 案: A;

得分: [5] 试题分 值: 5.0 提示: 8.参量编码的特点是编码速率低,语声质量高于波形编码。 A.正确 B.错误 知识点: 平时作业1 学生答案: [B;] 标准答 案: B; 得分: [5] 试题分 值: 5.0 提示: 9.时分多路复用的方法不能用于模拟通信。 A.正确 B.错误 知识点: 平时作业1 学生答案: [A;] 标准答 案: A; 得分: [5] 试题分 值: 5.0 提示: 10.模拟信号的幅度和时间均连续。 A.正确 B.错误 知识点: 平时作业1 学生答案: [B;] 标准答 案: B; 得分: [5] 试题分 值: 5.0 提示: 11.

北邮数电实验分析报告-信息

北邮数电实验报告-信息

————————————————————————————————作者:————————————————————————————————日期:

数字电路与逻辑设计实验 姓名*** 学院信息与通信工程学院 专业信息工程 班级*** 学号**** 班内序号***

实验一 一、实验名称和实验任务要求 1.实验内容:QuartusII原理图输入法设计与实现。 2.实验目的: (1)熟悉用QuartusII原理图输入法进行电路设计和仿真。 (2)掌握QuartusII图形模块单元的生成与调用。 (3)熟悉实验板的使用。 3.实验任务要求: (1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图像模块。 (2)用实验内容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板上测试。要求用拨码开关设定输入信 号,发光二极管显示输出信号。 (3)用3线—8线译码器(74LS138)和逻辑门实现函数 F=(/)(/)(/)+(/)(/)+(/)(/)+,仿真验证其功能,并下载到实 验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 二、原理图 半加器模块和逻辑门设计实现的全加器: 三、仿真波形图及分析 电路实现了全加器的功能。全加器是实现两个1位二进制数及低位来的进位相加求得和数及向高位进位的逻辑电路。由其原理可得逻辑表达式:sum=ain⊕bin⊕cin

cout = (ain⊕bin)cin + ain*bin。 列出真值表: 输入输出 ain bin cin cout sum 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 仿真波形对比真值表,可以看出波形图与理论值完全符合。 四、故障及问题分析 1、问题:按照逻辑表达式连接了全加器电路后,仿真波形很乱。 解决方法:思考后知道了应该把输入信号依次设成2的n次方,这样的仿真波形清楚容易分析。 2、问题:把代码下载到板子上的过程中,进行到37%的时候停了,等了2分钟 也没继续下载。 解决方法:再次重连USB尝试下载,手紧握着接线口,下载成功了,分析可能是接线口接触不好。 实验二 一、实验名称和实验任务要求 1.实验内容:用VHDL设计与实现组合逻辑电路。 2.实验目的: (1)熟悉用VHDL语言设计组合逻辑电路的方法。 (2)熟悉用QuartusII文本输入法进行电路设计。 3.实验任务要求: (1)用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个‘1’时,输出为‘1’,否则输出‘0’,仿真验证其功能,并下载到实验板测 试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 (2)用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号, 发光二极管显示输出信号。

北邮电磁场与电磁波演示实验

频谱特性测量演示实验 1.ESPI 测试接收机所测频率范围为: 9KHz—3GHz 2.ESPI 测试接收机的RF输入端口 最大射频信号: +30dbm,最大直流:50v 3.是否直观的观测到电磁波的存在?(回答是/否) 否 4.演示实验可以测到的空间信号有哪些,频段分别为: 广播:531K~1602KHz GSM900:上行:890~915 MHz 下行:935~960 MHz GSM1800:上行:1710~1755 MHz 下行:1805~1850 MHz WCDMA:上行:1920~1980MHz 下行:2110~2170MHz CDMA2000:上行:1920~1980MHz 下行:2110~2170MHz TD-SCDMA:2010~2025MHz 5.课堂演示的模拟电视和数字电视频谱图:如何判断是模拟还是数字电视? 模拟信号以残留边带调幅方式频分复用传输,有明确的载波频率,不同频道的图像有不同的载波频率。模拟信号频谱为:每8MHz带宽即一个频道内,能量集中分布在图像载频上,在该载频附近有一个跳动的峰,为彩色副载波所在,再远一点(在8MHz内)还有一个峰,为伴音副载波的峰。 数字信号:一个数字频道的已调信号像一个抬高了的噪声平台, 均匀地平铺于整个带宽之内, 它的能量是均匀分布在整个限定带宽内的。 6.课堂演示GSM900上下行频谱图,CDMA下行频谱图,3G下行频谱图: GSM900上行:

GSM900下行:

CDMA下行: 3G下行:

7.该频谱仪能检测的频谱范围,是否能观察到WIFI、电磁炉、蓝牙等频谱?(请 分别说明,并指出其频率) 可以 该频谱仪能检测的频谱范围为9KHz—3GHz 所以,能够观察到:WIFI:2.4G 电磁炉:20KHz—30KHz 蓝牙:2.4G 网络参量测量演示实验 1矢量网络分析仪所测频段:300KHz—3GHz 2端口最大射频信号: 10DBM 3矢量网络分析仪为何要校准: 首先,仪器的硬件电路需要校正,即消除仪器分析的系统误差;其次,分析仪的测量精度很大程度上受分析仪外部附件的影响,测试的组成部分如连接电缆和适配器幅度和相位的变化会掩盖被测件的真实响应,必须通过用户校准去除这些附件的影响。 4默认校准和用户校准的区别: 默认校准通过网络分析仪的套包的一系列校准标准来完成,对系统误差进行校准;用户校准时校准标准由用户制定,由用户定义的标准来完成,用于对参考面等进行精确校准。 5使用矢量网络分析仪的注意事项: 1、检查电源: 分析仪加电前,必须确认供电电源插座的保护地线已经可靠接地; 2、供电电源要求: 为防止或减少由于多台设备通过电源产生的相互干扰,特别是大功率设备产生的尖峰脉冲干扰可能造成分析仪硬件的毁坏,最好用220V交流稳压电源为分析仪供电; 3、电源线的选择: 使用随机携带的电源线,更换电源线时,最好使用同类型的电源线;

北邮大二下数电实验报告

邮电大学 数字电路与逻辑设计实验 学院: 班级: : 学号: 班序号:

实验一 一、实验名称 Quartus II 原理图输出法设计 (一)半加器 二、实验任务要求 用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。 三、设计思路和过程 ◎设计思路 半加器电路是指对两个输入数据位进行加法,输出一个结果位和进位,不产生进位输入的加法器电路,是实现两个一位二进制数的加法运算电路。 数据输入:被加数AI、加数BI 数据输出:半加和SO、进位CO ◎设计过程 (1)列出真值表

01 1 0 10 1 0 110 1 *表中两个输入是加数AI和BI,输出有一个是和SO,另一个是进位CO。(2)根据真值表写出输出逻辑表达式 该电路有两个输出端,属于多输出组合数字电路,电路的逻辑表达式如下: AI =。所以,可以用一个两输入异或门和一个两输入与门CO? SO⊕ BI AI =,BI 实现。 ◎实验原理图 四、仿真波形图及分析

根据仿真波形对比半加器真值表,可以确定电路实现了半加器的功能。但我们也可以发现输出SO出现了静态功能冒险,要消除该冒险可以加入相应的选通脉冲。 (二)全加器 二、实验任务要求 用实验容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。 三、设计思路和过程 ◎设计思路 全加器与半加器的区别在于全加器有一个低进位CI,从外部特性来看,它

是一个三输入两输出的器件。 ◎设计过程 (1)全加器的真值表如下 *其中AI 为被加数,BI 为加数,CI 为相邻低位来的进位数。输出本位和为SO ,向相邻高位进位数为CO 。 (2)根据真值表写出逻辑表达式: CI BI AI SO ⊕⊕=,BI AI CI BI AI CO ?+?⊕=)( 根据逻辑表达式,可以知道只要在半加器的基础上再加入一个异或门、一个两输入与门和两输入或门即可实现全加器。 ◎实验原理图

北邮数电综合实验电子沙漏的设计与实现

北京邮电大学数电综合实验报告 实验名称:电子沙漏的设计与实现 学院:信息与通信工程学院 姓名: 班级: 学号: 班内序号:

一、实验设计的基本要求 沙漏是一种古老的计时工具,也是一种玩具。电子沙漏用发光二极管表示沙粒,模拟沙漏的运动过程。电子沙漏会像真正的沙漏一样,上部的沙粒(点亮的发光二极管)一粒一粒往下掉,下部的沙粒一粒一粒堆起来。 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、设计思路 实验比较复杂,故采用分模块设计的思想,将模块分为了分频模块、控制模块、数码管显示模块、8*8点阵显示模块。 由于本实验需要用BTN0按键来控制时间和沙漏的开始运行以及时间的暂停功能,故需要检测输入,此时就要用到防抖模块,防止在按下按键时有多个上升沿产生导致开关并不能完美的发挥作用。 控制模块是用来实现具体的操作的,通过对按下BTN0按键的次数统计,将其分为奇数与偶数两种情况,在奇数时使功能正常运行,在统计为偶数时使时间暂停,以此来实现对此系统的控制。

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

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

北京邮电大学 数字电路与逻辑设计实验 实验报告 实验名称:QuartusII原理图输入 法设计与实现 学院:北京邮电大学 班级: 姓名: 学号:

一.实验名称和实验任务要求 实验名称:QuartusII原理图输入法设计与实现 实验目的:⑴熟悉用QuartusII原理图输入法进行电路设计和仿真。 ⑵掌握QuartusII图形模块单元的生成与调用; ⑶熟悉实验板的使用。 实验任务要求:⑴掌握QuartusII的基础上,利用QuartusII用逻辑 门设计实现一个半加器,生成新的半加器图像模 块。 ⑵用实验内容(1)中生成的半加器模块以及逻辑门 实现一个全加器,仿真验证其功能,并能下载到实 验板上进行测试,要求用拨码开关设定输入信号, 发光二级管显示输出信号。 ⑶用3线—8线译码器(74L138)和逻辑门实现要求 的函数:CBA F+ C + =,仿真验证其 + B C B A A A B C 功能,,并能下载到实验板上进行测试,要求用拨 码开关设定输入信号,发光二级管显示输出信号。二.设计思路和过程 半加器的设计实现过程:⑴半加器的应有两个输入值,两个输出值。 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 ?+?⊕=)(

北邮数电综合实验报告

数字电路与逻辑设计实验题目: 简易出租车计价器 学号: 姓名: 班级: 学院: 时间:2013/11/4

一.设计课题的任务要求 设计一台出租车计价器,不同情况具有不同的收费标准。 基本要求: 1、行驶公里:用时钟2 秒钟表示出租车匀速行驶1 公里,在行车5 公里以内,按起步 价13 元收费,超过5 公里部分,以每公里2 元收费。燃油附加费为每运次1 元。 2、途中等待:用按键控制中途等待,等待少于(包括)5 秒不收费,超过5 秒后每等待3 秒钟加收1 元。 3、用数码管分时显示计费金额、行驶里程和等候时间。字母A 表示当前处于显示计费金额状态,字母B 表示当前处于显示行驶里程状态,字母C 表示当前处于显示等候时间状态。 4、用按键控制出租车空驶、载客状态并用点阵显示空驶、载客状态。 二、系统设计(包括设计思路、总体框图、分块设计) 1、设计思路: 将整个计价器分为控制和计费模块,按键及防抖模块,数码管显示模块,点阵显示模块。其中控制和计费模块作为系统核心,负责给出所有控制和对外显示信号。按键及防抖模块提供输入按键信号,用于状态间切换。数码管用于显示计费金额、里程和等待时间信息。点阵模块用于显示出租车载客和空驶状态。

2、设计框图: 3、分块设计 ①控制和计费模块: 采用状态机的设计方式,根据计费计时方式的不同,分为了S0、S1、S2、S3四个状态,四个状态的含义和状态转移图如图所示:

②按键防抖模块: 如图:按键防抖模块的原理是利用信号延迟,每个防抖模块都有一个输入时钟,每按下一次按键后输出端将产生一个输入时钟宽度的脉冲,输入时钟频率与主控模块中的状态切换扫描时钟频率相同,使状态能够及时的切换。

北京邮电大学数字电路实验迷宫游戏

数字电路综合实验报告 学院:信息与通信工程学院 班级: 班内序号: 姓名: 学号: 选作题目:简易迷宫游戏

一、课题的任务要求 1、基本要求: 1)用8×8点阵进行游戏显示。 2)迷宫游戏如下图所示,采用双色点阵显示,其中红色LED为迷宫墙壁, 绿色LED表示人物。通过BTN0~BTN3四个按键控制迷宫中的人物进 行上下左右移动,使人物从起始点出发,走到迷宫的出口,游戏结束。 3)普通计时模式:通过按键BTN7启动游戏,必须在30秒内找到出口,否 则游戏失败,用两个数码管进行倒计时显示。游戏胜利或者失败均要在 8×8点阵上有相应的画面出现。 4)迷宫中的人物在行走过程中,如果碰到墙壁,保持原地不动。 2、提高要求: 1)多种迷宫地图可以选择。 2)在计时的基础上增加计步的功能,每按一次控制按键步数加1,碰壁不计 算步数,计步结果用数码管显示。 3)为游戏增加提示音乐,在不同时间段采用不同频率的信号控制蜂鸣器发 声报警。 4)增加其他游戏模式。 5)自拟其它功能。 二、系统设计(包括设计思路、总体框图、分块设计) 1、整体设计思路: 通过分析迷宫游戏的特点,将迷宫游戏的实现分为三大核心功能模块,一是控制模块controller,是整个游戏的“枢纽”,负责处理玩家的输入信号,控制整个游戏阶段的跳转,游戏胜负的判断,以及输出相应显示模块的控制信号。二是计时兼数码管显示模块timer,负责倒计时以及倒计时的显示,游戏已走步数的显示,并产生蜂鸣器的控制信号。三是点阵显示模块lattice,通过接收控制模块的控制信号,控制不同游戏模式或状态下的点阵输出。其他次要模块主要为:分频模块,防抖模块,蜂鸣器驱动模块。 迷宫游戏的划分方框图如下: 图2.1 迷宫游戏的逻辑划分方框图

北邮数电实验报告

北京邮电大学 实验报告 实验名称:数电实验学院:信息与通信工程学院 班级: 姓名: 学号: 日期:2015年5月

目录 1、实验一 (4) (1)实验名称和任务要求 (4) (2)原理图 (4) (3)仿真波形及分析 (5) 2、实验二 (5) (1)实验名称和任务要求 (5) (2)VHDL代码 (6) (3)模块连接图 (8) (4)仿真波形及分析 (8) 3、实验三 (9) (1)实验名称和任务要求 (9) (2)VHDL代码 (10) (3)连接VHDL代码 (11) (4)图形模块 (12) (5)仿真波形及分析 (12) (6)端口说明 (13) 4、实验四 (13) (1)实验名称和任务要求 (13) (2)VHDL代码 (13) (3)图形模块 (16)

(4)仿真波形及分析 (18) (5)端口说明 (21) 5、故障及问题分析 (21) 6、总结 (21)

一:实验一 1、实验名称和任务要求 实验名称:Quartus2原理图输入法设计 实验目的: 1、熟悉用Quartus2原理图输入法进行电路设计和仿真 2、掌握Quartus2图形模块单元的生成与调用 3、熟悉实验板的使用 实验内容: 1 、用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图 形模块单元。 2 、用实验内容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真 验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。 3 、用3线-8线译码器(74LS138)和逻辑门设计实现函数 F=/C/B/A+/CB/A+C/B/A+CBA,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 2、原理图 (1)半加器 (2)全加器

数电实验报告

实验2 组合逻辑电路(半加器全加器及逻辑运算) 一、实验目的 1.掌握组合逻辑电路的功能测试。 2.验证半加器和全加器的逻辑功能。 3.学会二进制数的运算规律。 二、实验仪器及材料 1.Dais或XK实验仪一台 2.万用表一台 3.器件:74LS00 三输入端四与非门3片 74LS86 三输入端四与或门1片 74LS55 四输入端双与或门1片 三、预习要求 1.预习组合逻辑电路的分析方法。 2.预习用与非门和异或门构成的半加器、全加器的工作原理。 3.学习二进制数的运算。 四、实验内容 1.组合逻辑电路功能测试。 图2-1 ⑴用2片74LS00组成图2-1所示逻辑电路。为便于接线和检查,在图中要注明芯片编号及各引脚对应的编号。 ⑵图中A、B、C接电平开关,Y1、Y2接发光管显示。 ⑶按表2-1要求,改变A、B、C的状态填表并写出Y1、Y2逻辑表达式。 ⑷将运算结果与实验比较。

(5)实验过程及实验图: 1)连线图: 2)实验图:

(6)实验总结: 用两片74ls00芯片可实现如图电路功能 2.测试用异或门(74LS86)和与非门组成的半加器的逻辑功能。 根据半加器的逻辑表达式可知,半加器Y是A、B的异或,而进位Z是A、B相与, 故半加器可用一个集成异或门和二个与非门组成如图2-2。 图2-2 ⑴在实验仪上用异或门和与门接成以上电路。A、B接电平开关S,Y、Z接电平显示。 ⑵按表2-2要求改变A、B状态,填表。 1)管脚图:

2)实验图 (4)实验总结:用异或门(74LS86)和与非门可组成半加器 3.测试全加器的逻辑功能。 ⑴写出图2-3电路的逻辑表达式。 ⑵根据逻辑表达式列真值表。 ⑶根据真值表画逻辑函数SiCi的卡诺图。

北邮数电实验电子琴

VHDL硬件描述语言程序设计简易电子琴演奏器 姓名:chi

目录 一、设计课题的任务要求 ............................................................. 错误!未定义书签。 二、系统设计................................................................................. 错误!未定义书签。 三、仿真波形及波形分析 ............................................................. 错误!未定义书签。 四、源程序..................................................................................... 错误!未定义书签。 五、功能说明................................................................................. 错误!未定义书签。 六、元器件清单及资源利用情况 ................................................. 错误!未定义书签。 七、故障及问题分析 ..................................................................... 错误!未定义书签。 八、总结和结论 ............................................................................. 错误!未定义书签。

相关文档
最新文档