当前位置:文档之家› 北京邮电大学数字电路实验迷宫游戏

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

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

数字电路综合实验报告

学院:信息与通信工程学院

班级:

班内序号:

姓名:

学号:

选作题目:简易迷宫游戏

一、课题的任务要求

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 迷宫游戏的逻辑划分方框图

2、总体框图:

顶层连接图如下:

图2.2 系统顶层设计图

3、分块设计:

1)控制模块(controller)

通过分析控制模块的随着游戏进程的状态变化,可将控制器分为七个状态,分别是

①WaitMsg:待机状态,等待玩家BTN0(进入游戏)的输入,跳转至

ChoModes。

②ChoModes:选择游戏模式状态,等待玩家BTN0(模式1)或BTN1

(模式2)的输入,跳转至ChoLevel。

③ChoLevle:选择游戏难度状态,等待玩家BTN0(难度1)或BTN1

(难度2)的输入,跳转至ChoMaps。

④ChoMaps:选择游戏地图状态,等待玩家BTN0(地图1)、BTN1

(地图2)、BTN2(地图3)、BTN3(随机选择)其中之一的输入,

跳转至Moving。

⑤Moving:游戏状态,等待玩家BTN0(上)、BTN1(下)、BTN2(右)、

BTN3(左)其中之一的输入,通过判断游戏终止条件,如是否时间

到,步数用尽,或到达终点,来转移状态至Win,或Lose。

⑥Win:游戏胜利状态,玩家在规定时间与步数内到达终点,等待玩

家BTN7(复位键)的输入,跳转至WaitMsg。

⑦Lose:游戏失败状态,时间用尽或步数到达上线,等待玩家BTN7

(复位键)的输入,跳转至WaitMsg。

在任何状态下,只要收到BTN7(复位)的信号,状态都会转移到WaitMsg。

对应的逻辑流程图如下:

图2.3 迷宫游戏控制器逻辑流程图

图2.4 controller模块元件图

2)计时兼数码管显示模块(timer)

timer模块受到controller模块的控制,controller模块将传递游戏状态信号、计时控制信号、游戏难度信号以及已走步数信号给timer。timer 模块利用case选择语句对相应的控制信号做出相应。并利用视觉暂留效应,将时间与已走步数显示在数码管上。

图2.5 timer元件图

以下是控制数码管显示的代码,负责同时显示时间和已走步数:

IF cont_display =4 THEN –模为5的计数器,轮流显示5个数字

cont_display<=0;

ELSE

cont_display<= cont_display+1;

END IF;

CASE cont_display IS –通过选择计数器的状态,来显示相应的数字

WHEN 0 =>

con_nixietube<= "101111";nixietube<=nixietube1; --时间的个位

WHEN 1 =>

con_nixietube<= "011111";nixietube<=nixietube2;--时间的十位

WHEN 2 =>

con_nixietube<= "111110";nixietube<=nixietubex; --已走步数的个位

WHEN 3 =>

con_nixietube<= "111101";nixietube<=nixietubey;--已走步数的十位

WHEN 4 =>

con_nixietube<= "111011";nixietube<=nixietubez;--已走步数的百位

END CASE;

3)点阵显示模块(lattice)

Lattice模块同样也受到controller模块的控制,controller模块将传递游戏状态信号,游戏模式信号,游戏地图信号,根据不同的游戏阶段显示出不同的图案。其中迷雾模式的显示是一个小难点,首先通过判断y的值,给相邻两行赋上地图,其他置零,然后判断x的值给相邻两行中的部分元素置零,最后达到只显示坐标点周围一格内有地图的显示的效果。

图2.6 lattice模块元件图

迷雾显示部分代码如下:

CASE y IS ---根据y的取值给临时列向量赋值,只给y临近三列赋值,其他为零,临时列向量最终给输出向量赋值

WHEN 0 =>

colg_tmp0<=colg0;

colg_tmp1<=colg1;

WHEN 1 =>

colg_tmp0<=colg0;

colg_tmp1<=colg1;

colg_tmp2<=colg2;

WHEN 2 =>

colg_tmp1<=colg1;

colg_tmp2<=colg2;

colg_tmp3<=colg3;

WHEN 3=>

colg_tmp2<=colg2;

colg_tmp3<=colg3;

colg_tmp4<=colg4;

WHEN 4=>

colg_tmp3<=colg3;

colg_tmp4<=colg4;

colg_tmp5<=colg5;

WHEN 5=>

colg_tmp4<=colg5;

colg_tmp5<=colg5;

colg_tmp6<=colg6;

WHEN 6=>

colg_tmp5<=colg5;

colg_tmp6<=colg6;

colg_tmp7<=colg7;

WHEN 7=>

colg_tmp6<=colg6;

colg_tmp7<=colg7;

END CASE;

CASE x IS --根据x的值,对横向部分进行处理,只留下x临近三个的值,其他置零。

WHEN 0=>colg_tmp0(7 DOWNTO 2)<="000000";

colg_tmp1(7 DOWNTO 2)<="000000";

colg_tmp2(7 DOWNTO 2)<="000000";

colg_tmp3(7 DOWNTO 2)<="000000";

colg_tmp4(7 DOWNTO 2)<="000000";

colg_tmp5(7 DOWNTO 2)<="000000";

colg_tmp6(7 DOWNTO 2)<="000000";

colg_tmp7(7 DOWNTO 2)<="000000";

WHEN 1=>

colg_tmp1(7 DOWNTO 3)<="00000";

colg_tmp2(7 DOWNTO 3)<="00000";

colg_tmp3(7 DOWNTO 3)<="00000";

colg_tmp4(7 DOWNTO 3)<="00000";

colg_tmp5(7 DOWNTO 3)<="00000";

colg_tmp6(7 DOWNTO 3)<="00000";

colg_tmp7(7 DOWNTO 3)<="00000";

WHEN 2=>colg_tmp0(7 DOWNTO 4)<="0000";colg_tmp0(0)<='0';

colg_tmp1(7 DOWNTO 4)<="0000";colg_tmp1(0)<='0';

colg_tmp2(7 DOWNTO 4)<="0000";colg_tmp2(0)<='0';

colg_tmp3(7 DOWNTO 4)<="0000";colg_tmp3(0)<='0';

colg_tmp4(7 DOWNTO 4)<="0000";colg_tmp4(0)<='0';

colg_tmp5(7 DOWNTO 4)<="0000";colg_tmp5(0)<='0';

colg_tmp6(7 DOWNTO 4)<="0000";colg_tmp6(0)<='0';

colg_tmp7(7 DOWNTO 4)<="0000";colg_tmp7(0)<='0';

WHEN 3=>

colg_tmp0(7 DOWNTO 5)<="000";colg_tmp0(1 DOWNTO 0)<="00";

colg_tmp1(7 DOWNTO 5)<="000";colg_tmp1(1 DOWNTO 0)<="00";

colg_tmp2(7 DOWNTO 5)<="000";colg_tmp2(1 DOWNTO 0)<="00";

colg_tmp3(7 DOWNTO 5)<="000";colg_tmp3(1 DOWNTO 0)<="00";

colg_tmp4(7 DOWNTO 5)<="000";colg_tmp4(1 DOWNTO 0)<="00";

colg_tmp5(7 DOWNTO 5)<="000";colg_tmp5(1 DOWNTO 0)<="00";

colg_tmp6(7 DOWNTO 5)<="000";colg_tmp6(1 DOWNTO 0)<="00";

colg_tmp7(7 DOWNTO 5)<="000";colg_tmp7(1 DOWNTO 0)<="00"; WHEN 4=>

colg_tmp0(7 DOWNTO 6)<="00";colg_tmp0(2 DOWNTO 0)<="000";

colg_tmp1(7 DOWNTO 6)<="00";colg_tmp1(2 DOWNTO 0)<="000";

colg_tmp2(7 DOWNTO 6)<="00";colg_tmp2(2 DOWNTO 0)<="000";

colg_tmp3(7 DOWNTO 6)<="00";colg_tmp3(2 DOWNTO 0)<="000";

colg_tmp4(7 DOWNTO 6)<="00";colg_tmp4(2 DOWNTO 0)<="000";

colg_tmp5(7 DOWNTO 6)<="00";colg_tmp5(2 DOWNTO 0)<="000";

colg_tmp6(7 DOWNTO 6)<="00";colg_tmp6(2 DOWNTO 0)<="000";

colg_tmp7(7 DOWNTO 6)<="00";colg_tmp7(2 DOWNTO 0)<="000"; WHEN 5=>

colg_tmp0(7)<='0';colg_tmp0(3 DOWNTO 0)<="0000";

colg_tmp1(7)<='0';colg_tmp1(3 DOWNTO 0)<="0000";

colg_tmp2(7)<='0';colg_tmp2(3 DOWNTO 0)<="0000";

colg_tmp3(7)<='0';colg_tmp3(3 DOWNTO 0)<="0000";

colg_tmp4(7)<='0';colg_tmp4(3 DOWNTO 0)<="0000";

colg_tmp5(7)<='0';colg_tmp5(3 DOWNTO 0)<="0000";

colg_tmp6(7)<='0';colg_tmp6(3 DOWNTO 0)<="0000";

colg_tmp7(7)<='0';colg_tmp7(3 DOWNTO 0)<="0000";

WHEN 6=>

colg_tmp1(4 DOWNTO 0)<="00000";

colg_tmp2(4 DOWNTO 0)<="00000";

colg_tmp3(4 DOWNTO 0)<="00000";

colg_tmp4(4 DOWNTO 0)<="00000";

colg_tmp5(4 DOWNTO 0)<="00000";

colg_tmp6(4 DOWNTO 0)<="00000";

colg_tmp7(4 DOWNTO 0)<="00000";

WHEN 7=>

colg_tmp0(5 DOWNTO 0)<="000000";

colg_tmp1(5 DOWNTO 0)<="000000";

colg_tmp2(5 DOWNTO 0)<="000000";

colg_tmp3(5 DOWNTO 0)<="000000";

colg_tmp4(5 DOWNTO 0)<="000000";

colg_tmp5(5 DOWNTO 0)<="000000";

colg_tmp6(5 DOWNTO 0)<="000000";

colg_tmp7(5 DOWNTO 0)<="000000";

END CASE;

4)分频模块(div_cl)

系统中的各个模块的输入时钟频率不全部相同,且得满足一定的要求,如点阵显示与数码管显示输入频率不能太高,实验板提供的50Mhz频率太高,需要分频。为了保证控制模块的控制信号能及时被被控制模块接收,控制模块的时钟频率需要小于被控制模块。综合以上考虑,从50MHz的晶振频率分出1Hz供计时器用,500Hz供点阵显示和数码管显示用,50Hz供控制器模块用。

5)防抖模块(anti_shake)

为了稳定玩家的输入信号,需要加入防抖模块。所用到的按键都需要做防抖处理。

图2.7 防抖模块元件图

三、仿真波形及波形分析

每个模块的分频系数不尽相同,不方便对整个系统进行仿真,因此仅对较为重要的控制器模块,计数器及数码管控制模块,点阵控制模块三个模块进行仿真。

a)控制器模块(lattice)的仿真:

输入信号设置:复位键置零,时间终止信号置零,选择地图1(turn_up=‘1’),模式1(turn_up=‘1’),难度1(turn_up=‘1’),进入游戏后,先向左(turn_left=‘1’),后一直向下(turn_down=‘1’)

图3.1 控制器仿真输入信号设置

仿真结果:由下图可看出,输出游戏状态(game_state_out)正常地跳转,从待机状态(000)到选择模式(001),到选择游戏难度(110),到选择地图(010),最后到游戏进行状态(011)。

图3.2 游戏状态输出信号

控制器的状态也正常的跳转,从选择模式状态(ChoModes),到选择难度状态(ChoLevel),再到选择地图状态(ChoMaps),最后到游戏进行状态(Moving)

图3.3 控制器状态跳转

玩家坐标点的变化如下,与控制信号及相应地图保持一致:

图3.4 坐标值变化

在地图1上的运动轨迹如下(坐标原点在右上角):

图3.5 运动轨迹

b)点阵显示模块(lattice)的仿真:

1、进入待机状态,即game_state_in=”000”,如下图

图3.6 输入控制信号game_state_in=”000”

此时应输出设定的待机画面

图3.7 点阵绿色列控制向量

图3.8 点阵行控制向量

2、当进入游戏状态

输入设定为游戏模式为“01”(普通模式),地图为“01”,当前坐标点为x=2,y=2(从0到7),输入游戏状态由设定模式到设定地图最后到游戏进行时:

图3.9 输入信号设置

此时的应输出第一副地图,以及在输出第三行时,输出信号colr为“00000100”,如下图,colg来显示地图(绿色),colr用来显示位置(红色)。

图3.10输出信号

当输入的游戏模式为迷雾模式“10”,此时地图仅显示周围一部分,其他设置不变,此时的输出如下图,可清楚的看到只有坐标点上下左右一格有显示

图3.11 输出信号

c)计时器及数码管显示模块(timer)的仿真:

该模块负责计时以及将时间和已走步数用数码管显示出来。

检查是否能正常输出控制信号,输入信号如下图所示,输入的已走步数为22,不计时状态。

图3.12 输入信号设置

此时的输出应是显示时间为“00”,显示已走步数为“022”.

图3.13 输出信号

四、功能说明及资源利用情况

1、功能说明:

1)开机小动画,游戏胜利小动画以及游戏失败小动画

玩家从待机模式,按下BTN0按键进入选择游戏模式阶段,此间有个小动画(锁打开的渐变过程)。同时,当游戏胜利或失败都有相应的动画显示。

图4.1 待机界面

2)两种游戏模式

①为基本要求中的普通模式。

②迷雾模式,即只能看到相距一格的地图。

图4.2 选择游戏模式界面图4.3 迷雾模式界面

3)两种游戏难度

①限制游戏时间为30s。

②限制游戏时间为20s,限制游戏步数不超过30步。

4)三幅内置地图以及随机选地图功能

图4.4 选择地图界面图4.5 地图1

图4.6 地图2 图4.7 地图3

5)倒计时报警功能

当时间仅剩10秒时,蜂鸣器会发出频率约为1Hz的声音。当仅剩5秒时,蜂鸣器会发出频率约为0.5Hz的声音。

6)能够统计已走步数

在所有模式中都支持统计已走步数,并用数码管显示。

2、资源利用情况:

由上图可得,元器件利用率为76%。

五、故障及问题分析

问题一:点阵显示不正常。

问题描述:点阵显示十分暗。

问题解决:经过询问老师,发现输入频率太高,未经分频就将50MHz 接入,降低频率后显示正常。

问题二:数码管显示不正常。

问题描述:数码管需要显示五个数字,但没办法同时清晰的显示。

问题解决:与问题一的原因类似,输入时钟频率太高,调低频率之后解决了问题。

问题三:点阵显示无法按照预定模式跳转。

问题描述:当游戏从选择游戏模式阶段到选择游戏地图阶段,点阵没有显示相应的选择画面,而是直接跳转到游戏进行时阶段。

问题解决:通过分析,发现点阵显示模块输入的时钟频率远远小于控制模块,导致控制模块发出的控制信号,点阵显示模块没法及时的接受。通过调整两个模块接入的时钟频率,顺利解决了问题。

问题四:timer模块仿真波形毛刺太多

问题解决:通过查阅资料,发现异步模式的代码是造成大量冒险的主要原因,将代码重写成同步的,毛刺就减少到可接受范围了。

六、总结和结论

在这次数电综合实验中,我收获了很多,将上学期的知识运用到了实际,丰富了独立设计一个小系统的经验。

1、自顶向下的程序设计思想

通过老师第一次课的教导以及自己阅读教材,我觉得自顶向下的思想比较适合设计迷宫游戏,于是决定采用这种编程思路。首先分析出整个游戏主要的功能模块,整体把握整个系统的流程,分析出每个功能模块的I/O接口,然后再具体实现每个模块的功能,其中控制模块是最重要的部分,它掌握着整个游戏的流程,先实现控制模块,再去实现其他模块,能让自己对整个程序有个更好的把握。

2、初步明白了硬件编程语言与软件编程语言的区别

这次实验是我第一次运用HDL实现一个小系统,因为之前一直习惯用C++这种高级语言编程,在这次实验中也碰了一些壁。但最后也领悟到了一些区别,首先VHDL中的有些语句是不能综合的,比如除法就不能在硬件上直接实现,也不能用下标带变量的向量直接给输出信号赋值。在自己写的第一版程序中就有许多用到除法的地方,最后只能想办法绕过了除法。其次,硬件编程要考虑时延、冒险等问题。总之硬件编程要时刻关注自己写的代码能不能在硬件上实现以及硬件上的时序问题。

3、增强了仿真能力

老师在第一次课上反复提醒我们软件仿真的重要性,自己在实验过程中深有体会,在每个模块写好之后,我都仔细仿真过了一遍。在第一次下载到板子之后,虽然也出现了些问题,但主要都是分频等比较难用仿真解决的问题。仿真也确实为自己节约了很多花在实验室里的问题。

4、独立设计系统的经验

这次实验的代码量虽然也不过一千多行,但也算积累了自己设计,调试系统的经验,增强了信心以及排除困难的毅力。

七、附录:源程序

考虑到篇幅的问题,仅附上控制器模块的代码,全部代码将在电子版中呈上。Controller模块代码:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.NUMERIC_STD.ALL;

ENTITY controller IS

PORT(

timemsg: IN STD_LOGIC; --timer模块的反馈信号

clk: IN STD_LOGIC;

reset: IN STD_LOGIC; --btn7

turn_up: IN STD_LOGIC; --btn0

turn_down: IN STD_LOGIC; --btn1

turn_right: IN STD_LOGIC; --btn2

turn_left: IN STD_LOGIC; --btn3

--对timer模块的控制信号

cont_time: OUT STD_LOGIC; --0表示停止计时,1表示开始计时

--已走步数

num_step_x: OUT INTEGER RANGE 0 TO 9;

num_step_y: OUT INTEGER RANGE 0 TO 9;

num_step_z: OUT INTEGER RANGE 0 TO 9;

--对lattice模块的控制信号

game_state_out:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);--游戏状态

maps: OUT STD_LOGIC_VECTOR(1 DOWNTO 0); --地图选择

modes: OUT STD_LOGIC_VECTOR(1 DOWNTO 0);--模式xuanze x: OUT INTEGER RANGE 0 TO 7;--玩家位置横坐标

y: OUT INTEGER RANGE 0 TO 7;--玩家位置纵坐标

con_buzzer: OUT STD_LOGIC_VECTOR(2 DOWNTO 0);--蜂鸣器控制信号level: BUFFER STD_LOGIC_VECTOR(1 DOWNTO 0) --游戏难度

);

END controller;

ARCHITECTURE behave OF controller IS

TYPE Con_State IS (WaitMsg,ChoLevel,ChoMaps,ChoModes,Moving,Win,Lose); TYPE Map_Matrix IS ARRAY (0 TO 7)OF STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL state:Con_State;

SIGNAL x_de:INTEGER RANGE 0 TO 7;

SIGNAL y_de:INTEGER RANGE 0 TO 7;

SIGNAL destination:INTEGER RANGE 0 TO 77;

SIGNAL mapmatrix:Map_Matrix;

SIGNAL x_temp:INTEGER RANGE 0 TO 7;

SIGNAL y_temp:INTEGER RANGE 0 TO 7;

SIGNAL num_step_xtmp:INTEGER RANGE 0 TO 9;

SIGNAL num_step_ytmp:INTEGER RANGE 0 TO 9;

SIGNAL num_step_ztmp:INTEGER RANGE 0 TO 9;

SIGNAL random:STD_LOGIC_VECTOR(1 DOWNTO 0);

BEGIN

PROCESS(clk) --

BEGIN

IF FALLING_EDGE(clk)THEN

IF random ="11" THEN

random<="01";

ELSE

random<= random + '1';

END IF;

END IF;

END PROCESS;

PROCESS(clk,reset,state) --initial

VARIABLE mapchoice:STD_LOGIC_VECTOR(1 DOWNTO 0);

VARIABLE con:STD_LOGIC;

BEGIN

IF reset='1' THEN --复位

state<= WaitMsg;

game_state_out<="000";

cont_time<='0';

num_step_xtmp<=0;

num_step_ytmp<=0;

num_step_ztmp<=0;

modes<="00";

ELSIF FALLING_EDGE(clk)THEN

CASE state IS

WHEN WaitMsg => --待机状态

game_state_out<="000";

cont_time<='0';

IF turn_up = '1' THEN

state<=ChoModes;

END IF;

WHEN ChoModes =>--选择游戏模式状态

game_state_out<="001"; --输出游戏状态信号:选择模式阶段

IF turn_up = '1' THEN

modes<="01";

state<=ChoLevel;

ELSIF turn_down = '1'THEN

modes<="10";

state<=ChoLevel;

END IF;

con:='1';

WHEN ChoLevel=> --选择游戏难度状态

game_state_out<="110"; --输出游戏状态信号:选择难度阶段

IF turn_up='1'THEN

level<="01";

state<=ChoMaps;

ELSIF turn_down='1'THEN

level<="10";

state<=ChoMaps;

END IF;

WHEN ChoMaps => --选择游戏地图状态

game_state_out<="010"; --输出游戏状态信号:选择地区阶段

IF turn_up ='1' THEN --map1

mapchoice:="01";

ELSIF turn_down ='1' THEN --map2

mapchoice:="10";

ELSIF turn_right = '1' THEN --map3

mapchoice:="11";

ELSIF turn_left = '1' THEN --随机

IF con='1'THEN

mapchoice:=random; con:='0';

END IF;

ELSE

mapchoice:="00";

maps<="00";

-- state<= ChoMaps;

END IF;

CASE mapchoice IS

WHEN "00" => state<=ChoMaps;

When "01" =>

maps<="01"; -- map1

mapmatrix<=("11111110",

"10000010",

"10111010",

"10101010",

"10101010",

"10100011",

"00111000",

"11111111");

y_temp<=6;

x_temp<=7;

y_de<=6;

x_de<=0;

state<= Moving;

num_step_xtmp<=0;

num_step_ytmp<=0;

num_step_ztmp<=0;

WHEN "10"=>

maps<="10"; -- map2

mapmatrix<=("11111111",

"10001000",

"10100011",

"10111011",

"10001101",

"10100101",

"10110011",

"11111011");

y_temp<=1;

x_temp<=0;

y_de<=7;

x_de<=2;

state<= Moving;

num_step_xtmp<=0;

num_step_ytmp<=0;

num_step_ztmp<=0;

WHEN "11" => -- map3

maps<="11"; -- map3

mapmatrix<=("11110100",

"10000100",

"01011011",

"11011001",

"10010101",

"10011101",

"01000000",

"11111111");

y_temp<=6;

x_temp<=0;

y_de<=0;

x_de<=3;

state<= Moving;

num_step_xtmp<=0;

num_step_ytmp<=0;

num_step_ztmp<=0;

END CASE;

WHEN Moving => --游戏进行时状态

game_state_out<="011"; --playing

cont_time<='1'; --开始计时

con_buzzer<="010";

IF level="10" AND num_step_xtmp=0 AND num_step_ytmp=3 THEN--难度级别2游戏结束条件的判断

state<=Lose;

END IF;

IF timemsg='1' THEN --时间到

state<=Lose;

ELSE -- 根据输入更新玩家的位置,判断是否到达终点并统计已走步数

IF turn_up = '1'THEN

IF y_temp/=7 AND mapmatrix(y_temp+1)(x_temp)='0' THEN

x_temp<=x_temp;y_temp<=y_temp+1;

IF num_step_xtmp=9 THEN

num_step_xtmp<=0;

ELSE

num_step_xtmp<=num_step_xtmp+1;

END IF;

IF num_step_ytmp=9 AND num_step_xtmp=9 THEN

num_step_ytmp<=0;

ELSIF num_step_xtmp=9 THEN

num_step_ytmp<=num_step_ytmp+1;

END IF;

IF num_step_ztmp=9 AND num_step_ytmp=9 AND num_step_xtmp=9 THEN

num_step_ztmp<=0;

state<=Lose;

ELSIF num_step_ytmp=9 AND num_step_xtmp=9 THEN

num_step_ztmp<=num_step_ztmp+1;

END IF;

END IF;

ELSIF turn_down = '1'THEN

IF y_temp/=0 AND mapmatrix(y_temp-1)(x_temp)='0' THEN

x_temp<=x_temp;y_temp<=y_temp-1;

IF num_step_xtmp=9 THEN

num_step_xtmp<=0;

ELSE

num_step_xtmp<=num_step_xtmp+1;

END IF;

IF num_step_ytmp=9 AND num_step_xtmp=9 THEN

num_step_ytmp<=0;

ELSIF num_step_xtmp=9 THEN

num_step_ytmp<=num_step_ytmp+1;

END IF;

IF num_step_ztmp=9 AND num_step_ytmp=9 AND num_step_xtmp=9 THEN

num_step_ztmp<=0;

state<=Lose;

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

数字电路综合实验报告 简易智能密码锁 一、实验课题及任务要求 设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。 基本要求: 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行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。由此可确定按键位置。

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

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

实验一 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 所以,可以用一个两输入异或门和一个两输入与门实现。

北邮通电实验报告

实验3 集成乘法器幅度调制电路 信息与通信工程学院 2016211112班 苏晓玥杨宇宁 2016210349 2016210350

一.实验目的 1.通过实验了解振幅调制的工作原理。 2.掌握用MC1496来实现AM和DSB的方法,并研究已调波与调制信号,载波之间的关系。3.掌握用示波器测量调幅系数的方法。 二.实验准备 1.本实验时应具备的知识点 (1)幅度调制 (2)用模拟乘法器实现幅度调制 (3)MC1496四象限模拟相乘器 2.本实验时所用到的仪器 (1)③号实验板《调幅与功率放大器电路》 (2)示波器 (3)万用表 (4)直流稳压电源 (5)高频信号源 三.实验内容 1.模拟相乘调幅器的输入失调电压调节。 2.用示波器观察正常调幅波(AM)波形,并测量其调幅系数。 3.用示波器观察平衡调幅波(抑制载波的双边带波形DSB)波形。 四.实验波形记录、说明 1.DSB信号波形观察

2.DSB信号反相点观察 3.DSB信号波形与载波波形的相位比较 结论:在调制信号正半周期间,两者同相;负半周期间,两者反相。

4.AM正常波形观测 5.过调制时的AM波形观察(1)调制度为100%

(2)调制度大于100% (3)调制度为30% A=260.0mv B=140.0mv

五.实验结论 我们通过实验了解振幅调制的工作原理是:调幅调制就是用低频调制信号去控制高频振荡(载波)的幅度,使其成为带有低频信息的调幅波。目前由于集成电路的发展,集成模拟相乘器得到广泛的应用,为此本实验采用价格较低廉的MC1496集成模拟相乘器来实现调幅之功能。 DSB信号波形与载波波形的相位关系是:在调制信号正半周期间,两者同相;负半周期间,两者反相。 通过实验了解到了调制度的计算方法 六.课程心得体会 通过本次实验,我们了解了振幅调制的工作原理并掌握了实现AM和DSB的方法,学会计算调制度,具体见实验结论。我们对集成乘法器幅度调制电路有了更好的了解,对他有了更深入的认识,提高了对通信电子电路的兴趣。 和模电实验的单独进行,通电实验增强了团队配合的能力,两个人的有效分工提高了实验的效率,减少了一个人的独自苦恼。

北邮微波实验报告整理版

北京邮电大学信息与通信工程学院 微波实验报告 班级:20112111xx 姓名:xxx 学号:20112103xx 指导老师:徐林娟 2014年6月

目录 实验二分支线匹配器 (1) 实验目的 (1) 实验原理 (1) 实验内容 (1) 实验步骤 (1) 单支节 (2) 双支节 (7) 实验三四分之一波长阻抗变换器 (12) 实验目的 (12) 实验原理 (12) 实验内容 (13) 实验步骤 (13) 纯电阻负载 (14) 复数负载 (19) 实验四功分器 (23) 实验目的 (23) 实验原理 (23) 实验内容 (24) 实验步骤 (24) 公分比为1.5 (25) 公分比为1(等功分器) (29) 心得体会 (32)

201121111x 班-xx 号-xx ——电磁场与微波技术实验报告 实验二 分支线匹配器 实验目的 1.熟悉支节匹配器的匹配原理 2.了解微带线的工作原理和实际应用 3.掌握Smith 图解法设计微带线匹配网络 实验原理 支节匹配器是在主传输线上并联适当的电纳(或者串联适当的电抗),用附加的反射来抵消主传输线上原来的反射波,以达到匹配的目的。 单支节匹配器,调谐时主要有两个可调参量:距离d 和由并联开路或短路短截线提供的电纳。匹配的基本思想是选择d ,使其在距离负载d 处向主线看去的导纳Y 是Y0+jB 形式。然后,此短截线的电纳选择为-jB ,根据该电纳值确定分支短截线的长度,这样就达到匹配条件。 双支节匹配器,通过增加一个支节,改进了单支节匹配器需要调节支节位置的不足,只需调节两个分支线长度,就能够达到匹配(但是双支节匹配不是对任意负载阻抗都能匹配的,即存在一个不能得到匹配的禁区)。 微带线是有介质εr (εr >1)和空气混合填充,基片上方是空气,导体带条和接地板之间是介质εr ,可以近似等效为均匀介质填充的传输线,等效介质电常数为 εe ,介于1和εr 之间,依赖于基片厚度H 和导体宽度W 。而微带线的特性阻抗与其等效介质电常数为εe 、基片厚度H 和导体宽度W 有关。 实验内容 已知:输入阻抗Z 75in ,负载阻抗Z (6435)l j ,特性阻抗0Z 75 ,介质基片 2.55r ,1H mm 。 假定负载在2GHz 时实现匹配,利用图解法设计微带线单支节和双支节匹配网络,假设双支节网络分支线与负载的距离114d ,两分支线之间的距离为21 8 d 。画出几种可能的电路图并且比较输入端反射系数幅度从1.8GHz 至2.2GHz 的变化。 实验步骤 1.根据已知计算出各参量,确定项目频率。 2.将归一化阻抗和负载阻抗所在位置分别标在Smith 圆上。 3.设计单枝节匹配网络,在图上确定分支线与负载的距离以及分支线的长度,根据给定的介质基片、特性阻抗和频率用TXLINE 计算微带线物理长度和宽度。此处应该注意电长度和实际长度的联系。 4.画出原理图,在用微带线画出基本的原理图时,注意还要把衬底添加到图中,将各部分的参数填入。注意微带 分支线处的不均匀性所引起的影响,选择适当的模型。 5.负载阻抗选择电阻和电感串联的形式,连接各端口,完成原理图,并且将项目的频率改为1.8—2.2GHz 。 6.添加矩形图,添加测量,点击分析,测量输入端的反射系数幅值。 7.同理设计双枝节匹配网络,重复上面的步骤。

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

北京邮电大学 数字电路与逻辑设计实验 实验报告 实验名称: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)的图形模块

北京邮电大学通信原理软件实验报告

北京邮电大学实验报告 题目:基于SYSTEMVIEW通信原理实验报告

实验一:验证抽样定理 一、实验目的 1、掌握抽样定理 2. 通过时域频域波形分析系统性能 二、实验原理 低通滤波器频率与m(t)相同 三、实验步骤 1. 要求三个基带信号相加后抽样,然后通过低通滤波器恢复出原信号。 2. 连接各模块完成系统,同时在必要输出端设置观察窗。 3. 设置各模块参数。 三个基带信号的频率从上到下分别设置为10hz、12hz、14hz。 抽样信号频率设置为28hz,即2*14hz。(由抽样定理知,) 将低通滤波器频率设置为14hz,则将恢复第三个信号(其频率为14hz)进行系统定时设置,起始时间设为0,终止时间设为1s.抽样率设为1khz。 3.观察基带信号、抽样后的信号、最终恢复的信号波形

四、实验结果 最上面的图为原基带信号波形,中间图为最终恢复的信号波形,最下面的图为抽样后的信号波形。 五、实验讨论 从实验结果可以看出,正如前面实验原理所述,满足抽样定理的理想抽样应该使抽样后的波形图如同冲激信号,且其包络图形为原基带信号波形图。抽样后的信号通过低通滤波器后,恢复出的信号波形与原基带信号相同。 由此可知,如果每秒对基带模拟信号均匀抽样不少于2次,则所得样值序列含有原基带信号的全部信息,从该样值序列可以无失真地恢复成原来的基带信号。 讨论:若抽样速率少于每秒2次,会出现什么情况? 答:会产生失真,这种失真被称为混叠失真。 六、实验建议、意见 增加改变抽样率的步骤,观察是否产生失真。

实验二:奈奎斯特第一准则 一、实验目的 (1)理解无码间干扰数字基带信号的传输; (2)掌握升余弦滚降滤波器的特性; (3)通过时域、频域波形分析系统性能。 二、实验原理 在现代通信系统中,码元是按照一定的间隔发送的,接收端只要能够正确地恢复出幅度序列,就能够无误地恢复传送的信号。因此,只需要研究如何使波形在特定的时刻无失真,而不必追求整个波形不变。 奈奎斯特准则提出:只要信号经过整形后能够在抽样点保持不变,即使其波形已经发生了变化,也能够在抽样判决后恢复原始的信号,因为信息完全恢复携带在抽样点幅度上。 奈奎斯特准则要求在波形成形输入到接收端的滤波器输出的整个传送过程传递函数满足:,其充分必要条件是x(t)的傅氏变换X ( f )必须满足 奈奎斯特准则还指出了信道带宽与码速率的基本关系。即R B =1/T B =2? N =2B N。 式中R b 为传码率,单位为比特/每秒(bps)。f N 和B N 分别为理想信道的低通截止 频率和奈奎斯特带宽。上式说明了理想信道的频带利用率为R B /B N =2。 在实际应用中,理想低通滤波器是不可能实现的,升余弦滤波器是在实际中满足无码间干扰传输的充要条件,已获得广泛应用的滤波器。 升余弦滤波器的带宽为:。其中,α为滚降系数,0 ≤α≤1, 三、实验步骤 1.根据奈奎斯特准则,设计实现验证奈奎斯特第一准则的仿真系统,同时在必 要输出端设置观察窗。设计图如下

北邮arduino实验报告

电子电路综合实验设计 实验名称: 基于 Arduino 的电压有效值测量电路设计与实现 学院: 班级: 学号: 姓名: 班内序号:

实验 基于Arduino 的电压有效值测量电路设计与实现 一. 摘要 Arduino是一个基于开放原始码的软硬件平台,可用来开发独立运作、并具互动性的电子产品,也可以开发与PC 相连的周边装置,同时能在运行时与PC 上的软件进行交互。为了测量正弦波电压有效值,首先我们设计了单电源供电的半波整流电路,并进行整流滤波输出,然后选择了通过Arduino设计了读取电压有效值的程序,并实现使用此最小系统来测量和显示电压有效值。在频率和直流电压幅度限定在小范围的情况下,最小系统的示数基本和毫伏表测量的值相同。根据交流电压有效值的定义,运用集成运放和设计的Arduino最小系统的结合,实现了运用少量元器件对交流电压有效值的测量。 关键字:半波整流整流滤波 Arduino最小系统读取电压有效值 二. 实验目的 1、熟悉Arduino 最小系统的构建和使用方法; 2、掌握峰值半波整流电路的工作原理; 3、根据技术指标通过分析计算确定电路形式和元器件参数; 4、画出电路原理图(元器件标准化,电路图规范化); 5、熟悉计算机仿真方法; 6、熟悉Arduino 系统编程方法。 三. 实验任务及设计要求 设计实现 Arduino 最小系统,并基于该系统实现对正弦波电压有效值的测量和显示。 1、基本要求 (1)实现Arduino 最小系统,并能下载完成Blink 测试程序,驱动Arduino 数字13 口LED 闪烁; (2)电源部分稳定输出5V 工作电压,用于系统供电; (3)设计峰值半波整流电路,技术指标要求如下:

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实验四连接图

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

北京邮电大学电路实验中心<数字电路与逻辑设计实验(上)> 实 验 报 告 班级: xxx 学院: xxx 实验室: xxx 审阅教师:姓名(班内序号): xxx)学号: 2xxx 实验时间: xxxx 评定成绩:

目录 实验1 Quartus II 原理图输入法设计与实现 (3) 一、实验目的 (3) 二、实验所用器材 (3) 三、实验任务要求 (3) 四、实验原理图 (3) 五、实验仿真波形图及分析 (4) 实验2 用VHDL 设计与实现组合逻辑电路 (5) 一、实验目的 (5) 二、实验所用器材 (5) 三、实验任务要求 (5) 四、VHDL代码 (5) 五、实验仿真波形图及分析 (7) 实验3 用VHDL 设计与实现时序逻辑电路 (8) 一、实验目的 (8) 二、实验所用器材 (8) 三、实验任务要求 (8) 四、模块端口说明及连接图 (8) 五、VHDL代码 (9) 六、实验仿真波形图及分析 (10) 实验4 用VHDL 设计与实现数码管动态扫描控制器 (10) 一、实验目的 (10) 二、实验所用器材 (11) 三、实验任务要求 (11) 四、模块端口说明及连接图 (11) 五、VHDL代码 (11) 六、实验仿真波形图及分析 (15) 故障及问题分析 (16) 总结和结论 (17)

实验1 Quartus II 原理图输入法设计与实现 一、实验目的 (1)熟悉用Quartus II原理图输入法进行电路设计和仿真; (2)掌握Quartus II 图形模块单元的生成与调用; (3)熟悉实验板的使用。 二、实验所用器材 (1)计算机; (2)直流稳压电源; (3)数字系统与逻辑设计实验开发板。 三、实验任务要求 (1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。 (2)用(1)中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。 (3)用3线-8线译码器(74LS138)和逻辑门设计实现函数+CBA,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 四、实验原理图 (1)半加器原理图 (2)全加器原理图

北邮通信原理实验报告

北京邮电大学通信原理实验报告 学院:信息与通信工程学院班级: 姓名: 姓名:

实验一:双边带抑制载波调幅(DSB-SC AM ) 一、实验目的 1、了解DSB-SC AM 信号的产生以及相干解调的原理和实现方法。 2、了解DSB-SC AM 信号波形以及振幅频谱特点,并掌握其测量方法。 3、了解在发送DSB-SC AM 信号加导频分量的条件下,收端用锁相环提取载波的原理及其实现方法。 4、掌握锁相环的同步带和捕捉带的测量方法,掌握锁相环提取载波的调试方法。 二、实验原理 DSB 信号的时域表达式为 ()()cos DSB c s t m t t ω= 频域表达式为 1 ()[()()]2 DSB c c S M M ωωωωω=-++ 其波形和频谱如下图所示 DSB-SC AM 信号的产生及相干解调原理框图如下图所示

将均值为零的模拟基带信号m(t)与正弦载波c(t)相乘得到DSB—SC AM信号,其频谱不包含离散的载波分量。 DSB—SC AM信号的解调只能采用相干解调。为了能在接收端获取载波,一种方法是在发送端加导频,如上图所示。收端可用锁相环来提取导频信号作为恢复载波。此锁相环必须是窄带锁相,仅用来跟踪导频信号。 在锁相环锁定时,VCO输出信号sin2πf c t+φ与输入的导频信号cos2πf c t 的频率相同,但二者的相位差为φ+90°,其中很小。锁相环中乘法器的两个 输入信号分别为发来的信号s(t)(已调信号加导频)与锁相环中VCO的输出信号,二者相乘得到 A C m t cos2πf c t+A p cos2πf c t?sin2πf c t+φ =A c 2 m t sinφ+sin4πf c t+φ+ A p 2 sinφ+sin4πf c t+φ 在锁相环中的LPF带宽窄,能通过A p 2 sinφ分量,滤除m(t)的频率分量及四倍频载频分量,因为很小,所以约等于。LPF的输出以负反馈的方式控制VCO,使其保持在锁相状态。锁定后的VCO输出信号sin2πf c t+φ经90度移相后,以cos2πf c t+φ作为相干解调的恢复载波,它与输入的导频信号cos2πf c t 同频,几乎同相。 相干解调是将发来的信号s(t)与恢复载波相乘,再经过低通滤波后输出模拟基带信号 A C m t cos2πf c t+A p cos2πf c t?cos2πf c t+φ =A c 2 m t cosφ+cos4πf c t+φ+ A p 2 cosφ+cos4πf c t+φ 经过低通滤波可以滤除四倍载频分量,而A p 2 cosφ是直流分量,可以通过隔直

北邮数电实验报告

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

实验三:用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) );

北邮数字电路综合实验报告——交通灯控制器的VHDL实现

数字电路综合实验报告 班级: 姓名: 班内序号: 学号: 日期:

目录 一、实验摘要 (3) 二、实验任务 (3) 1.任务要求 (3) 2.任务解析 (3) 三、实验设计思路 (4) 1.状态转移图 (4) 2.流程图 (5) 3.模块确定 (5) 4.系统框图 (7) 四、程序代码 (7) ⒈主程序 (7) ⒉分频模块 (9) ⒊防抖模块 (10) ⒋交通灯控制模块 (11) ⒌数字译码模块 (14) 五、实验结果 (15) 1.仿真结果 (15) 2.实物结果 (17) 六、所遇问题分析 (17) 七、实验总结 (18)

交通灯控制器的VHDL实现 一、实验摘要 随着交通情况的日益复杂,交通灯在生活中所处的位置也越来越高。本实验就是基于VHDL语言编程实现了十字路口的交通灯控制器。对于交通等控制器的设计是分模块自顶向下的设计思想,软硬件结合来实现本设计。 关键字:交通灯、VHDL、控制器 二、实验任务 1.任务要求 1)南北和东西方向各有一组绿、黄、红灯用于指挥交通,绿灯、黄灯和红灯的持续时间分别为20秒、5 秒和25秒; 2)当有特殊情况(如消防车、救护车等)时,两个方向均为红灯亮,计时停止,当特殊情况结束后,控制 器恢复原来状态,继续正常运行; 3)用两组数码管,以倒计时方式显示两个方向允许通行或禁止通行的时间; 2.任务解析 东西(A车道)和南北(B车道)方向各有一组绿、黄、红灯用于指挥交通(如图1),绿灯、黄灯和红灯的持续时间分别为20 秒、5 秒和25 秒。 图1 十字路口交通灯模型

因此,可以设计如下四个状态,其关系为: 状态 亮灯情况 车辆行驶状况 持续时 间(秒)下一状态A车道B车道 S0 红亮红亮紧急状况,A/B车道均禁止通行~ S1 S1 绿亮红亮A车道通行,B车道禁止通行20 S2 S2 黄亮红亮A车道缓行,B车道禁止通行 5 S3 S3 红亮绿亮A车道禁止通行,B车道通行20 S4 S4 红亮黄亮A车道禁止通行,B车道缓行 5 S1 三、实验设计思路 1.状态转移图 图2 状态转移图

北邮程序设计实验报告

程序设计实践 设 计 报 告 课题名称:邮件客户端学生姓名: 班级: 2 班内序号:16 学号: 2 日期:2014.6.4

1.课题概述 1.1课题目标和主要内容 本课题主要通过MFC的方式,利用SOCKET以及SMTP相关知识,来实现邮件(可携带附件)的定向发送,借此来复习和巩固C++编程的基本思想;学习SOCKET以及SMTP的相关知识,了解复杂网络应用程序的设计方法,并独立完成一个网络应用。 1.2系统的主要功能 1.邮件的发送(不携带附件) 2.邮件的发送(携带附件) 3.邮件接收 2. 系统设计 2.1 系统总体框架 程序的功能由MyEmailClientDlg.cpp,SMTP.cpp,MailMessage.cpp,Base64.cpp, MIMECode.cpp,MIMEContentAgent.cpp,MIMEMessage.cpp,AppOctetStream.cpp, MyEmailClient.cpp,StdAfx.cpp,TextPlain.cpp来实现。其中MIMECode.cpp, MIMEContentAgent.cpp,MIMEMessage.cpp, AppOctetStream.cpp, TextPlain.cpp来对MIME 协议进行封装,Base64.cpp来对Base64编码进行封装,SMTP.cpp是对SMTP协议进行封装,MailMessage.cpp是利用MIME协议对邮件内容的一个处理,最终通过MyEmailClientDlg.cpp 来实现邮件的发送的功能。 2.2 系统详细设计 [1] 模块划分图及描述 协议模块:包括网络应用程序中的各种协议,包括STMP协议,MIME协议等。 处理模块:主要实现对数据的进行编码以及解码。 实现模块:主要内容为邮件发送的具体步骤,相关按钮操作。 [2] 类关系图及描述 协议类:CSMTP, CTEXTPlai, CMIMECode,C MIMEContentAgent,C MIMEMessage, CAppOctetStream, CTextPlain.主要为协议中信息处理的中作用 编码类:Base64, MailMessage.主要为对邮件信息的处理

北邮-数电实验报告

北邮-数电实验报告

数字电路实验报告 学院:信息与通信工程 专业:信息工程 班级: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

北邮网管实验二实验报告

信息与通信工程学院 网络管理 实验报告 专业 班级 姓名 学号

实验一SNMP MIB信息的访问 一、实验目的 本实验的主要目的是学习SNMP服务在主机上的启动与配置,以及用MIB浏览器访问SNMP MIB对象的值,并通过直观的MIB-2树图加深对MIB被管对象的了解。 二、实验内容 1、SNMP服务在主机上的启动和配置; 2、分析MIB-2树的结构; 3、通过get、getNext、set、trap几种操作访问MIB对象的值。 三、实验环境要求 1、硬件要求 CPU:主频233MHz以上处理器。 内存容量:64MB以上。 硬盘空间:50MB或更高。 2、软件要求: Microsoft Windows 95/98/NT/2000操作系统。 AdventNet SNMP Utilities 4版本或更高。 四、实验原理

1、SNMP服务 保护SNMP代理与SNMP管理站之间的通信的方法是给这些代理和管理站指定一个共享的共同体名称。当SNMP管理站向SNMP服务发送查询时,请求方的共同体名称就会与代理的共同体进行比较。若匹配,则表明SNMP管理站已通过身份验证;若不匹配,则表明SNMP 代理认为该请求是“失败访问”尝试,并且可能会发送一条SNMP陷阱消息。 2、SNMP安全控制 管理站和代理之间可以是一对多、多对一和多对多等不同关系。由于一个代理可以收到来自不同管理站的对被管对象的操作命令,因此,要进行被管对象访问控制,需要解决以下三个问题: (1) 认证服务:将对MIB的访问限定在授权的管理站的范围内。 (2) 访问策略:对不同的管理站给予不同的访问权限。 (3) 代管服务:在代管服务中实现托管站的认证服务和访问权限。 SNMP通过共同体的概念来解决上述问题。共同体是一个在代理中定义的本地的概念。代理为每组可选的认证、访问控制和代管特性建立一个共同体。一个代理可以与多个管理站建立多个共同体,同一个管理站可以出现在不同的共同体中。不同的代理也可能会定义相同的共同体名。管理站将共同体名与代理联系起来加以应用。 3、管理信息库(MIB) 网络的所有对象都存在一个叫MIB的数据结构中,在其中,每个

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

北邮数电实验报告-信息

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

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

实验一 一、实验名称和实验任务要求 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码的代码转换器,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号, 发光二极管显示输出信号。

北邮数电实验报告

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

一. 实验一: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

北邮现代通信技术光纤熔接实验报告

信息与通信工程学院现代通信技术实验报告二 题目:光纤的熔接 : 班级: 学号: 序号:

光纤的熔接 一、实验目的 1.了解光纤剥线钳、光纤切割刀和光纤熔接机的原理和使用方法; 2.实际动手完成光纤的熔接; 二、实验容 在老师的演示和指导下完成光纤的熔接。 三、实验仪器介绍 实验仪器:光纤剥线钳、光纤切割刀和光纤熔接机。 其中光纤熔接机组成: 1.光纤的准直与夹紧机构 光纤的准直与夹紧结构由精密V型槽和压板构成。精密V型槽的作用是使一对光纤不产生轴偏移。 2.光纤的对准机构 要对准两条光纤,每条光纤需要6个自由度。将光纤在准直与夹紧机构的一段光纤作为对象分析,并把光纤的放置方向定为Z方向,即有以下6个自由度影响光纤的位置:X,Y,Z三个方向的平移自由度和绕X,Y,Z三个方向旋转的自由度。 3.电弧放电机构 熔接机的电弧放电由两根电极完成。熔接机的放电电流和放电时间均可以调节。 4.电弧放电和电机驱动的控制机构 驱动机构由丝杆和步进电机构成。为了实现光纤的对准过程,使V型槽可以在X、Y、Z 三个方向上平动。 四、实验过程 1.使用光纤剥线钳剥除2cm左右的光纤被覆,光纤剥线钳上有3个钳孔,孔径尺寸由大至 小分别用于剥除光纤的塑料保护层、光纤的被覆以及树脂涂层。在剥除时,注意将光纤置于刀孔正中间,防止光纤折断或扭曲;此外光纤应尽量保持平直,避免过度弯曲裸光纤,从而导致光纤变形影响熔接参数。(剥线钳可以适度倾斜,方便快速剥除被覆)2.用蘸有酒精的脱脂棉擦净光纤,去除光纤表面的被覆残留。擦拭时应注意避免重复污染, 擦拭干净后不能再触碰裸光纤。 3.按步骤用光纤切割刀切断光纤。光纤切割刀的截面如图所示。将清洁后的裸光纤放置在 光纤切割刀中较小的V型槽中(如果固定端有被覆,应置于较大槽),保持光纤与刀片

相关主题
文本预览
相关文档 最新文档