当前位置:文档之家› 北邮数电综合实验报告

北邮数电综合实验报告

数字电路与逻辑设计实验题目: 简易出租车计价器

学号:

姓名:

班级:

学院:

时间: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四个状态,四个状态的含义和状态转移图如图所示:

②按键防抖模块:

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

③点阵显示模块:

点阵模块主要用于显示出租车的空载和载客状态。空载时显示汉字“空”,载客时显示标志“X”。输出信号lie和com分别连接到点阵控制的行和列。En是由计费控制模块给出的空载/载客信号。

④数码管显示模块

数码管主要用于显示计费、里程、等待时间信息。clk_shu连接1kHz 时钟扫描信号,s0~s6用于接收计费控制模块输出的各个数码管显示

的数字。Weixuan和duanxuan

控制数码管的位选和段选信号。

⑤时钟分频模块

将50MHz片上时钟分频为1Hz、1kHz、200Hz时钟信号,其中1Hz

用于计费和计时。200Hz用于按键防抖和状态切换。1kHz用于数码管和点阵的扫描。

三、仿真波形及波形分析

①数码管显示模块:

下图是固定s0~s6为数字951413后的仿真波形,由于S1位在程序中没有用到,于是将其始终置为高电平(灭),实际输出应为9 1413。

如图所示:weixuan信号每隔6个时钟周期扫描一次,扫描频率为166Hz足以使人眼产生连续显示的感觉。观察duanxuan信号,在圆圈处应显示数字“1”,duanxuan为0000110正是“1”的段选码。说明数码管能将s0~s6传输的数字正确的显示。

②按键防抖模块

如图,keyin输入一个持续时间约为0.1s的按键信号并用高频时钟模拟抖动,keyout输出一个时钟周期(5ms)的高电平。

③时钟分频模块:

由于分频比例太高,仿真到1s需要花费大量时间,故只仿真到20ms,观察1kHz和200Hz信号如下:

④点阵显示模块:

将en置高电平,输出应为X,如图,显示正确。

⑤计费计时模块:

等待模式:如图在2S和3S间分别按start-stop和pause进入s2模式,初始计费为14(起步费+燃油费),2s(即等待3s)后计费变为15。而在切换至s1后outen信号置高电平使点阵显示“X”。

结束和清零:

如图,再次按Start-stop后停止计费,按clear后计时计费清零

行驶状态:

5s内为14元,之后每2s 加2元,计费正常。

四、源程序

计费和控制模块:

Mytaxi.vhd

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity mytaxi is

port ( signal clk1k,clk1,clk5ms:in std_logic;

--频率为1kHz,1Hz,5ms的信号

start_stop:in std_logic; --开始-结束信号

pause:in std_logic; --等待-重新行驶信号

clear:in std_logic; --清零信号

t0:out integer range 0 to 13; --与数码管连接

t1:out integer range 0 to 13;

t2:out integer range 0 to 9;

t3:out integer range 0 to 9;

t4:out integer range 0 to 9;

t5:out integer range 0 to 9;

outen:out std_logic);--点阵控制信号

end mytaxi;

architecture behav of mytaxi is

signal sec1:integer range 0 to 5; --秒计数十位

signal sec0:integer range 0 to 9; --秒计数个位

signal m1:integer range 0 to 5; --分的十位计数器

signal m0:integer range 0 to 9; --分的个位计数器

signal c2,c1,c0:integer range 0 to 9; --费用计数器

signal k2,k1,k0:integer range 0 to 9; --公里计数器

signal v:integer range 0 to 5:=1; --车速

signal fei:integer range 0 to 999;--费用计数器

signal bai,shi,ge:integer range 0 to 9;--费用计数百位,十位,个位

type state_type is (s0, s1, s2, s3); --状态列表

signal state : state_type;

begin

process(clk5ms,start_stop,pause,clear) --状态切换进程begin

if clear= '1' then

state <= s0;

elsif (rising_edge(clk5ms)) then

case state is

when s0=>

if start_stop = '1' then

state <= s1;

else

state <= s0;

end if;

when s1=>

if start_stop='1' then

state <= s3;

elsif pause = '1' then

state <= s2;

else

state <= s1;

end if;

when s2=>

if start_stop = '1' then

state <= s3;

elsif pause = '1' then

state <= s1;

else

state <= s2;

end if;

when s3=>

if clear= '1' then

state <= s0;

else

state <= s3;

end if;

end case;

end if;

end process;

jishi:process(clk1) --计时,计费进程variable cntk:integer range 0 to 5;

variable cntf1:integer range 0 to 5;

variable cntf11:integer range 0 to 5;

variable cntf2:integer range 0 to 5;

variable cntf22:integer range 0 to 2;

variable cntx:integer range 0 to 6:=0;

begin

if clk1'event and clk1='1' then

case state is

when s2=> --等待模式

outen<='1'; --点阵显示载客

if cntf2>4 then --等待超过5s进行计费

if cntf22=2 then cntf22:=0; --每3s加1元

fei<=fei+1;

else cntf22:=cntf22+1;

end if;

else cntf2 :=cntf2+1;

end if;

if sec0=9 then sec0<=0; --此语句完成秒计数

if sec1=6 then sec1<=0;

if m0=9 then m0<=0; --此语句完成分计数

if m1<=6 then m1<=0;

else m1<=m1+1;

end if;

else m0<=m0+1;

end if;

else sec1<=sec1+1;

end if;

else sec0<=sec0+1;

end if;

bai<=fei/100; --将费用重新计算成三位便于显示shi<=(fei/10) mod 10;

ge<=fei mod 10;

when s1=> --行驶模式

outen<='1';--点阵显示载客

if cntk=v then cntk:=0; --2s一公里

if k0=9 then k0<=0;

if k1=9 then k1<=0;

if k2=9 then k2<=0; --公里计数

else k2<=k2+1;

end if;

else k1<=k1+1;

else k0<=k0+1;

fei<=fei+2; --每公里2元

end if;

else cntk:=cntk+1;

end if;

if cntf1=v then cntf1:=0;

if cntf11>4 then fei<=fei+2; --超过5公里开始计费

else cntf11:=cntf11+1;

end if;

else cntf1:=cntf1+1;

end if;

bai<=fei/100;

shi<=(fei/10) mod 10;

ge<=fei mod 10;

when s0=> --按下clear后各项数字清零outen<='0';

cntf1:=0;cntf11:=0;cntf2:=0;cntf22:=0;cntk:=0;

fei<=14;

bai<=0;shi<=0;ge<=0;

sec1<=0;sec0<=0;

m1<=0;m0<=0;k1<=0;k0<=0;k2<=0;

outen<='0';

end case;

if cntx=6 then cntx:=0;

else cntx:=cntx+1;

end if;

case cntx is --数码管分时显示when 2=>

t0<=10;t1<=0;t2<=0;t3<=bai;t4<=shi;t5<=ge;

when 4=>

t0<=11;t1<=0;t2<=0;t3<=k2;t4<=k1;t5<=k0;

when 6=>

t0<=12;t1<=0;t2<=m1;t3<=m0;t4<=sec1;t5<=sec0;

when others=>t1<=0;

end case;

end if;

end process jishi;

end;

数码管:shumaguan.vhd

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY shumaguan IS

PORT(clk_shu:IN STD_LOGIC;

--BUTTON:IN STD_LOGIC;

s0:in integer range 0 to 13; --各个数码管的数字s1:in integer range 0 to 13;

s2:in integer range 0 to 9;

s3:in integer range 0 to 9;

s4:in integer range 0 to 9;

s5:in integer range 0 to 9;

weixuan:OUT STD_LOGIC_VECTOR(5 downto 0);--位选

duanxuan:OUT STD_LOGIC_VECTOR(6 downto 0)—段选);

END shumaguan;

ARCHITECTURE ACE OF shumaguan IS

SIGNAL CNT6:INTEGER RANGE 0 TO 5;

SIGNAL C:integer range 0 to 13;

BEGIN

P1:process(CNT6)

BEGIN

CASE CNT6 IS --位选扫描

WHEN 0 => weixuan <= "111110" ;

WHEN 1 => weixuan<= "111111" ;

WHEN 2 => weixuan<= "111011" ;

WHEN 3 => weixuan<= "110111" ;

WHEN 4 => weixuan<= "101111" ;

WHEN 5 => weixuan<= "011111" ;

WHEN OTHERS => NULL;

END CASE ;

END PROCESS P1;

P2:process(clk_shu)

BEGIN

IF clk_shu'EVENT AND clk_shu= '1' THEN--实现模6计数器if CNT6= 5 then

CNT6<= 0;

else

CNT6<=CNT6 + 1;

end if;

END IF;

END PROCESS P2;

P3:process(CNT6)

begin

case CNT6 is

when 0=>C<=s0; --扫描到的数码管赋值when 1=>C<=s1;

when 2=>C<=s2;

when 3=>C<=s3;

when 4=>C<=s4;

when 5=>C<=s5;

end case;

end process P3;

P4:process(C)

BEGIN

CASE C IS --段选赋值

WHEN 0=> duanxuan<= "1111110";

WHEN 1=> duanxuan <= "0110000";

WHEN 2=> duanxuan <= "1101101";

WHEN 3=> duanxuan <= "1111001";

WHEN 4=> duanxuan <= "0110011";

WHEN 5=> duanxuan <= "1011011";

WHEN 6=> duanxuan <= "1011111";

WHEN 7=> duanxuan <= "1110000";

WHEN 8=> duanxuan <= "1111111";

WHEN 9=> duanxuan <= "1111011";

WHEN 10=> duanxuan <= "1110111";

WHEN 11=> duanxuan <= "0011111";

WHEN 12=> duanxuan <= "0001101";

WHEN OTHERS =>NULL ;

END CASE ;

END PROCESS P4;

END ACE;

分频:div50m.vhd

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity div50m is

port(clk_in : in std_logic;

北邮数电实验报告

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

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

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

北京邮电大学 数字电路与逻辑设计实验 发光二极管走马灯的电路设计与实现实验报告 学院:信息与通信工程学院 班级:27 姓名:付莹 学号: 班内序号:23

【实验目的】 (1)进一步了解时序电路描述方法; (2)熟悉状态机的设计方法。 【实验所用仪器及元器件】 (1)计算机; (2)直流稳压电源; (3)数字系统与逻辑设计实验开发板。 【实验任务要求】 设计并实现一个控制8个发光二极管亮灭的电路,仿真验证其功能,并下载到实验板测试。 (1)单点移动模式:一个点在8个发光二极管上来回的亮 (2)幕布式:从中间两个点,同时向两边依次点亮直到全亮,然后再向中间点灭,依次往复。 【实验设计思路及过程】 (1)设计思路 实验要求有两个,一个是单点移动模式,一个是幕布式。通过CASE-WHEN 语句实现走马灯的变化。分别定义一个8个变量的数据类型 和一个13变量的数据类型,表示一个周期内的灯的变化,并设计一个变 量在两种状态间进行切换。此时,需要把所有状态罗列到case-when中 去。 (2)VHDL代码 LIBRARY IEEE; USE ABC IS PORT( A,CLK,RESET:IN STD_LOGIC; DENG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ABC; ARCHITECTURE A OF ABC IS TYPE 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; BEGIN PROCESS(CLK,RESET) BEGIN IF RESET='1' THEN DENG<="00000000"; ELSIF(CLK'EVENT AND CLK='0')THEN IF A='0'THEN --KAIMUSHI CASE STATE1 IS WHEN 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; ELSE CASE STATE IS WHEN 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 / 13简易贪食蛇游戏机 学院:信息与通信工程 专业: 班级: 姓名: 学号: 班内序号:

简易贪食蛇游戏机 一.设计课题的任务要求 基本任务: 用一个 8×8 点阵做为基本显示屏,4 个连续移动的的发光点表示一条蛇,用任意 出现的一个亮点表示老鼠,用4 个排成一条线的发光点表示“墙”,用四个按键控制蛇的 运动方向,完成贪食蛇游戏,蛇撞“墙”、边或者游戏时间到,则游戏结束。 1. 老鼠出现的地方是随机的,在某个地点出现的时间是5 秒钟,如果5 秒钟之内没 有被吃掉,它就会在其它地方出现; 2. 用数码管显示得分情况和游戏的剩余时间,每吃掉一只老鼠就加一分; 提高要求: 1. 游戏时间和速度可以手动设置。 2. 增加游戏难度或自拟其它功能。 二.系统设计 1.设计思路 当复位键置为1时, 8*8点阵也初始化为全不亮,每来一个时钟脉冲就对8*8点阵进行一次扫描,并依次点亮四个蛇身点、一个老鼠点、四个墙点,由于扫描频率远远超出人眼所能分辨的范围,故人眼看来蛇身是连续的。在数码管上显示得分与倒计时情况。 用四个按键分别控制蛇的运动方向“上下左右”,每次按键时通过和蛇原来的运动方向进行比较来控制蛇接下来的运动方向。当蛇撞墙、出界、游戏时间到时游戏结束,点阵全亮。每当蛇吃到一个老鼠时则自动加一分并重设老鼠位置。老鼠存活5秒钟时重设老鼠位置。用M序列发生器实现老鼠位置的随机变化。 2.总体框架图: 复位开关方向输入按键3.逻辑划分框图

4.

6.分块电路设计 ⑴点阵显示模块 此模块采用频率为1Mhz的时钟clk3。 每来一个时钟就对整个8*8点阵全部扫描一次,当某个点的行为低电平,列为高电平时被点亮。由于蛇身有4个移动的点,墙有4个固定的点以及一个老鼠的亮点,那么一共有9个点需要在8*8点阵上显示。所以我将时钟用point分成9个周期,每个周期扫描一个点。clk3频率很高,虽然是逐点扫描,但由于视觉暂留我们看到的是9个点同时亮。 当复位信号clear置为1时,点阵全不亮。当结束信号over置为1时,点阵全亮。 ⑵数码管显示模块 当一个数码管要稳定显示需要频率不小于50hz,总共4个数码管,需要采用500hz 的时钟clk2. 用cat信号对数码管进行片选,用seven信号储存7个管脚的电平。共有4个数字需要显示,用数组shownum储存分数与游戏时间。用state变量将时钟clk2分成4个周期,每个周期显示state对应的shounum(state)。复位信号clear置为1时,数码管全不亮。 ⑶控制器 倒记时和老鼠5秒换位置要分频出1赫兹的一个clk1。并且1赫兹的频率十分适合蛇的移动,所以我将clk1信号作为了蛇移动的触发信号。 复位信号clear=1将蛇的位置、方向、老鼠位置、墙的位置、游戏时间、分数等初始化。 ①蛇身的移动。用4个点表示蛇,从蛇尾开始,依次等于前一个蛇身点坐标。 ②蛇头的移动 按照状态转移图编写程序。实际编写时我将对出界情况的判断加了进去。 给定dir时,若出界,游戏结束。若否,当蛇头方向direction不和输入值dir 正好相反时,蛇头步进,将dir的值赋给蛇头当前方向direction;当蛇头方向 direction和输入值dir正好相反时,若蛇头出界,游戏结束,若不出界,蛇头按 照原来的direction方向步进。 ③重设老鼠位置 设置一个重设老鼠标志setrat。当老鼠存活时间满5s或蛇吃到老鼠时,将setrat 标志置为1,否则为0.当setrat=1时,用M序列发生器随机重设老鼠位置。当重 设后的老鼠和墙的位置重合时,修改老鼠位置。 ⑷分频器和外界输入方向寄存器 EPM1270T144C5数电实验开发板的时钟clk频率为50Mhz。控制器需要一个频率为1hz的时钟clk1,数码管显示需要一个频率为500hz的时钟clk2,点阵显示需要一个频率为1Mhz的时钟clk3.由于游戏结束时只有数码管需要保持显示结束时的时间和分数,所以当over置为1时,clk1和clk3的分频器停止,只有clk2的分频器继续工作。 外界输入的方向用key表示,key值为“1000”、“0100”、“0010”、“0001”时分别表示上、下、左、右。将输入的方向值赋给dir。dir设置为两位二进制变量:“00” 表示“上”,“01”表示“下”,“10”表示“左”,“11”表示“右”。 三.仿真波形及波形分析 为方便仿真,将时钟clk改为1Mhz,将clk3改为100khz,将点阵显示、数码管显示的时钟频率都改为clk,将控制模块显示的时钟改为clk3。

北邮 数电实验报告

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

实验一:QuartusⅡ原理图输入法设计与实现 一:实验要求 ①:用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。 ②:用实验一生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。 ③:用3线—8线译码器和逻辑门设计实现函数F,仿真验证其功能,下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 二:报告内容 ①:实验一(2)的原理图 用两个已经生成的半加器图形模块单元和一个双输入或门即可实现全加器

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

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

北邮 数电综合实验报告 简易计算器

数电综合实验设计实验名称:简易计算器 学院:电子工程学院 班级:2013211 学号:201321**** 姓名:** 班内序号:**

数电综合实验设计 (1) 实验名称:简易计算器 (1) 一、任务要求 (1) 1.所选课题 (1) 2.基本要求 (1) 3.提高要求 (1) 二、系统设计 (1) 1.设计思路 (1) 2.总体框图 (2) 3.分块设计 (2) 三、仿真波形及波形分析 (3) 1.分频部分 (3) 2.计算部分仿真 (3) 四、源程序 (4) 五、功能说明及资源利用情况 (19) 1.功能说明 (19) 2.资源利用情况 (20) 六、故障及问题分析 (20) 七、实验总结 (20)

一、任务要求 1.所选课题 简易计算器 2.基本要求 1.利用4×4小键盘作为输入,包括:数字0-9清除键,等号键及“+”“-”“*”运算符号; 2.实现输入为99以内自然数的加、减、乘运算; 3.能够实现多次连续计算(无优先级,从左到右计算结果),如:12+34×2-78=14; 4.最大结果为99999,溢出报警; 5.用数码管显示输入的数字和结果,最左侧的数码管用来表示数字的正负,其他五位数 码管表示结果;结果的绝对值大于99999时,数码管显示“Error”。 3.提高要求 1.实现输入为9999以内自然数的加,减法; 2.实现除法运算,不能除尽时保留1位有效数字; 3.能够区分运算优先级(先乘除,后加减),如12+34×2=80; 4.自拟其他功能。 二、系统设计 1.设计思路 1.根据实验的要求,将程序分成几个模块,包括分频模块、输入译码模块(其中包含防 抖模块)、计算模块、显示模块。 2.分频模块负责将板子上的原始时钟经分频得到其他模块需要的时钟;输入译码模块负 责从键盘读入相应的数值和符号;计算模块负责根据读入的数值和符号进行相应的计算,并得出计算结果;显示模块负责判断数值的大小是否超出范围,以及数值的正负,并控制数码管显示相应的结果。 3.根据所分的模块进行相应的编写。 4.最后,进行各个模块之间的连接。

北邮数电实验报告

北邮数电实验报告 北邮数电实验报告 一、引言 数电实验是电子信息类专业学生必修的一门实验课程,通过实践操作,帮助学生巩固理论知识,培养实际动手能力。本次实验旨在通过设计和搭建一个简单的数字电路,来理解数字电路的基本原理和工作方式。 二、实验目的 本次实验的目的是设计一个4位二进制加法器,实现两个4位二进制数的相加运算。通过实验,我们可以加深对于数字电路的理解,掌握数字电路的设计和搭建方法。 三、实验原理 1. 二进制加法器 二进制加法器是一种用于计算二进制数相加的数字电路。它由若干个逻辑门和触发器组成,可以实现二进制数的加法运算。在本次实验中,我们将设计一个4位二进制加法器,即可以计算两个4位二进制数的相加结果。 2. 逻辑门 逻辑门是数字电路中常用的基本元件,用于实现逻辑运算。常见的逻辑门有与门、或门、非门、异或门等。在本次实验中,我们将使用与门和异或门来构建4位二进制加法器。 四、实验步骤 1. 设计4位二进制加法器的电路图 根据实验要求,我们需要设计一个能够计算两个4位二进制数相加的电路。首

先,我们可以将两个4位二进制数分别用D0~D3和E0~E3表示,其中D0和 E0分别为最低位。然后,我们需要使用与门和异或门来实现加法器的功能。通 过逻辑运算,我们可以得到每一位的和以及进位。最后,将每一位的和连接起来,即可得到最终的结果。 2. 搭建电路 根据电路图,我们可以开始搭建实验电路。首先,将所需的逻辑门和触发器连 接起来,形成一个完整的电路。然后,将所需的输入信号和电源连接到电路上。最后,使用示波器等工具检查电路的工作状态,确保电路正常运行。 3. 进行实验测试 在搭建好电路后,我们可以进行实验测试。首先,将两个4位二进制数的输入 信号连接到电路上。然后,通过观察输出信号,判断电路是否正确计算了两个 二进制数的相加结果。如果输出信号与预期结果一致,说明电路设计和搭建成功。 五、实验结果与分析 在进行实验测试后,我们可以得到实验结果。通过观察输出信号,我们可以判 断电路是否正确计算了两个二进制数的相加结果。如果输出信号与预期结果一致,说明电路设计和搭建成功。如果输出信号与预期结果不一致,说明电路存 在问题,需要进一步检查和调试。 六、实验总结 通过本次实验,我们深入了解了数字电路的基本原理和工作方式。通过设计和 搭建一个4位二进制加法器,我们掌握了数字电路的设计和搭建方法。通过实 验测试,我们可以验证电路的正确性,并对电路进行进一步优化和改进。

北邮大二下数电实验报告

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

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

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

北邮数电实验报告

北京邮电大学 实验报告实验名称: 数电电路与逻辑设计实验学院:信息与通信工程学院 班 级: 姓 名: 学 号: 班内序号: 日期: 一. 实验一:QuartusII 原理图输入法设计 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码的代码转换器,仿真验证其功能。要求用拨码开关设定输入信号,发光二极管显示输出信号。

北邮数电综合实验报告

北邮数电综合实验报告 北邮数电综合实验报告 一、实验目的与背景 数电综合实验是北邮电子信息工程专业的重要实践环节,旨在通过实际操作, 巩固和应用学生在数字电路、模拟电路、通信原理等相关课程中所学到的理论 知识。本实验报告将对数电综合实验的内容、过程和结果进行详细描述和分析。 二、实验内容 本次数电综合实验的主要内容为设计一个数字电子钟。该电子钟具备显示时间、日期、闹钟功能,并能实现闹钟的设置、开关控制等基本操作。实验中,我们 需要使用数字集成电路、显示模块、按键开关、时钟模块等元件进行电路设计 和搭建。 三、实验过程 1. 硬件设计与连接 根据实验要求,我们首先进行电路设计。根据数字电子钟的功能需求,我们需 要选取适当的集成电路和模块。通过分析电路原理图,我们将各个模块进行连接,保证信号的正确传递和控制。 2. 软件编程与调试 在硬件连接完成后,我们需要进行软件编程。通过使用C语言或者Verilog等 编程语言,我们可以实现数字电子钟的各项功能。在编程过程中,我们需要考 虑到时钟频率、显示模块的控制、按键开关的响应等因素。 3. 实验调试与测试 完成软件编程后,我们需要进行实验调试和测试。通过连接电源,观察电子钟

的各项功能是否正常工作。如果发现问题,我们需要进行调试,找出问题所在,并进行修复。 四、实验结果与分析 经过实验调试和测试,我们成功实现了数字电子钟的设计和搭建。该电子钟能 够准确显示时间和日期,并能根据用户的设置进行闹钟的开关和响铃。通过实 验过程,我们对数字电路的原理和应用有了更深入的理解。 五、实验心得与收获 通过参与数电综合实验,我深刻体会到了理论与实践的结合的重要性。在实验中,我们需要将课堂上所学的知识应用到实际中,通过实际操作来巩固和加深 对知识的理解。同时,实验中也锻炼了我们的动手能力和解决问题的能力。 在实验过程中,我们还学会了团队合作的重要性。在设计和搭建电路的过程中,我们需要相互配合,互相帮助,共同解决问题。通过与同学们的合作,我们不 仅解决了实验中遇到的各种问题,还加深了与同学们的交流和友谊。 最后,数电综合实验为我们提供了一个实践的平台,让我们能够将理论知识与 实际操作相结合,更好地理解和掌握所学的知识。通过实验,我们不仅提高了 自己的专业技能,也培养了自己的创新意识和解决问题的能力。 六、总结 数电综合实验是北邮电子信息工程专业的重要实践环节,通过实际操作,巩固 和应用学生在数字电路、模拟电路、通信原理等相关课程中所学到的理论知识。通过实验,我们不仅提高了自己的专业技能,也培养了自己的创新意识和解决 问题的能力。数电综合实验是我们专业学习的重要一环,对我们未来的学习和 工作都具有重要意义。希望通过这次实验,我们能够更好地理解和掌握所学的

北邮数电实验报告信息

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

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

北邮数电实验报告 双色点阵显示控制器

数字电路与逻辑设计 实验设计方案 题目:双色点阵显示控制器 一、设计思路 ⏹基本要求: 1.固定红色显示一个汉字或图形,显示亮度4级可调,用一个btn 按钮实现亮度调节,亮度变化视觉效果要尽量明显。 2.用从红到绿8级渐变色显示一个固定汉字或图形。 3.分别用单字循环显示、左右滚动显示、上下滚动显示三种显示方式 单色显示四个汉字或图形,显示过程中,显示方式用一个btn按键 进行切换。 4.显示的图形或汉字要尽量饱满美观。 ⏹提高要求: 1.滚动显示过程中实现四种显示颜色的自动变换,颜色变化视觉效果

要尽量明显。 2.自拟其它功能。 二、系统设计 总体框图 方框图(模块划分)

ASM图

MDS图

三、仿真波形及仿真分析 1.时钟分频 分析:这个进程组用于产生不同频率的时钟用于不同用途的时钟信号,图中所表达的也是如此,不同频率的时钟信号。 对于lightness信号来说,它是一个低分频的,可控占空比的信号,图中所示为占空比为80%时的信号。 2.防抖

分析:Mode_in和intensity_in信号有短时间的抖动现象,在经过防抖之后,短时间的抖动并不会影响mode和intensity信号。 Mode_in和intensity_in信号有长时间的高电平,这会使控制电路既要检测上升沿又要检测下降沿。经过防抖程序之后,将控制信号mode和intensity处理成脉冲信号,这样控制电路只需检测是否有正脉冲就可以了。 3.状态控制与亮度调节 分析:每当mode信号有一个正脉冲时,state就变化一次。每当intensity信号有一个正脉冲时,lightness就改变一次占空比。 4.颜色改变

北邮数电实验报告4人表决器_北邮电子-数电综合实验报告.doc

北邮数电实验报告4人表决器_北邮电子-数电综 合实验报告 数字电路综合实验设计 简易出租车计价器的设计与实现 学院:电子工程学院班级: 201103 学号: 20110876 姓名:孙月鹏班内序号: 04 摘要 本文介绍了利用Quartus II综合性PLD/FPGA开发软件,在MAXII 数字逻辑实验开发板上实现简易出租车计价器功能的设计与实现方法。本方案采用自上而下的设计理念,将整体电路按照功能划分为分频、计数、控制、数码管显示电路、点阵显示电路等若干模块,模块内用VHDL 语言完成逻辑设计,模块间用原理图进行连接,使整体可实现计费、计时等功能。 关键字:可编程器件模块化设计出租车计价器 VHDL 语言 一、设计任务要求 基本要求: 1.行驶公里:用时钟2秒钟表示出租车匀速行驶1公里。在行车5公里以内,按起步价13元收费,超过5公里部分,以每公里2元收费。燃油附加费每运次1元。 2.途中等待:用按键控制中途等待,等待少于(包括)5秒不收费,超过5秒后没等待3秒钟加收1元。 3.用数码管分时显示计费金额、行驶里程和等候时间。字母A 表示当

前处于显示计费金额状态,字母B 表示当前处于显示行驶里程状态,字母C 表示当前处于显示等候时间状态。 4.用按键控制出租车空驶、载客状态。 提高要求: 1.用点阵滚动显示收费单据。 2.具有夜间模式,基本单价加收20%的费用。出租车收费以元为单位,元以下四舍五入。 3.出租车行驶速度可调可控。 4.多人乘车,分段计价。 5.自拟其他功能。 二、设计思路与结构框图 1. 设计思路 图1 结构框图 由结构框图可以分析得出,该系统的的主体是计数控制器。该系统由外部控制载客控制信号和等待控制信号,以时钟信号的翻转为计数依据,完成对时间、里程和费用的计数,并将结果通过数码管译码电路显示出来。该系统的控制信号可由拨码或按键输入,时钟由开发板内部时钟分频得出,输出有点阵输出和数码管输出。因此,可将系统分为分频器、计数控制器、数码管译码和显示以及点阵显示四部分。并以此得出系统的逻辑框图如下: 图2 逻辑框图 2. 控制器部分的状态转移图 该控制器一共有三个基本状态:空驶状态、载客状态和等待状态。分

北邮数电综合实验报告

数字电路与逻辑设计实验题目: 简易出租车计价器 学号: 姓名: 班级: 学院: 时间: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.1基本要求: 1)固定红色显示一个汉字或图形,显示亮度4级可调,用一个btn按钮实现亮度调

节,亮度变化视觉效果要尽量明显。 2) 用从红到绿8级渐变色显示一个固定汉字或图形。 3) 分别用单字循环显示、左右滚动显示、上下滚动显示三种显示方式单色显示四个汉字或图形,显示过程中,显示方式用一个btn 按键进行切换。 4) 显示的图形或汉字要尽量饱满美观。 1.2提高要求: 1) 滚动显示过程中实现四种显示颜色的自动变换,颜色变化视觉效果要尽量明显。 2) 自拟其它功能。 2系统设计 2.1设计思路 本实验采用自顶向下设计法:从整个系统功能出发,按一定原则将系统划分为若干子系统,再将每个子系统分为若干功能模块,然后实现所要求的的功能。总体是通过分频、按键控制、扫描控制等模块实现上述功能,通过占空比来改变色彩,实现八级渐变色,通过扫描频率的改变和信号的占空比实现亮度的调节,通过行扫描和列扫描的不同实现左右滚动显示和上下滚动显示。由于按键动作的时刻和按下的时间长短是随机的,并且存在由开关簧片反弹导致的电平抖动,所以还要为每个按键开关设置一个消抖和同步电路,这样才能保证按键的准确性。 2.2总体设计框图 1)总体结构框图 2)ASM 图 选择汉字或图形 选择显示模式 选择亮度 显示不同的文字或者图案

no yes yes no yes no yes no 如图所示:开始由按键选择模式,是单个渐变色显示,还是循环显示,还是可改变亮度显示,在执行的同时检查是否按下reset 键,如果reset 键被按下,那么将对系统进行复位。 选择图形或文 字 选择显示方式 case1? case2? csae3 左右滚动显示 上下滚动显示 四种颜色自动变换 循环显示 点阵屏显示 循环显示? 调亮显示? 固定红色 调节亮度 从红到绿八 级变色 开始

北邮数电综合实验-简易钢琴游戏实验报告

北京邮电大学 数电综合实验报告 实验名称:简易钢琴游戏 学院:信息与通信工程 姓名: 班级: 学号: 班内序号:

目录: 一:设计课题的任务要求 (1) 二:系统设计 (2) 2.1 设计思路 (2) 2.2 总体框图 (3) 2.3 分块设计 (3) 三:仿真波形及波形分析 (4) 3.1 分频模块仿真 (4) 3.2 点阵仿真 (5) 3.3 数码管仿真 (7) 3.4 总体仿真及分析 (8) 四:源程序(略) (9) 五:功能说明及资源利用情况 (9) 5.1 时钟功能 (9) 5.2 点阵及LED指示灯 (9) 5.3 数码管 (9) 5.4 总体功能及资源利用情况 (9) 六:故障及问题分析 (10) 七:总结和结论 (10)

一:设计课题的任务要求 任务:设计制作一个简易钢琴游戏机 1、用8×8 点阵进行游戏显示 2、BTN1~BTN7 七个按键模拟钢琴演奏时的“1 2 3 4 5 6 7”七个音符。点阵的第一列对应音符“1”,第二列对应音符“2”,依此类推,低中高音自定。 3、光点在点阵第一行随机出现,逐点下落,下落速度为0.2 秒/行,如图1 所示。 图1 光点下落示意图 4、在光点下落到点阵最后一行之前的过程中,如果按下与该列点阵相应的音符键,该光点消失,蜂鸣器演奏相应的音符声音,计分器加1。如果在光点下落到最后一行依然没有进行相应的按键操作,该光点消失,计分器不加分。计分器由数码管显示。 5、每隔1 秒在点阵的不同列的第一行出现一个光点,如图2 所示。 图2 点阵随机光点示意图

6、游戏时间为30 秒,数码管倒计时显示。 提高要求: 1、光点在点阵某行随机出现,然后逐点下落。 2、下落速度随机变化。 3、光点按照存储的乐曲顺序和速度的出现。 4、自拟其它功能。 提示:根据声乐知识,产生音乐的两个因素是音乐频率的持续时间,音乐的十二平均率规定,每两个八音度之间的频率相差一倍,在两个八音度之间,又可分为12个半音。每两个半音的频率比为4。另外,音名A(乐谱中的低音6)的频率为440HZ,音名B到C之间,E到F之间为半音,其余为全音。由此可以计算出乐谱中从低音1到高音1之间每个音名的频率如下表所示: 音名频率(Hz)音名频率(Hz)音名频率(Hz) 低音1 261.63 中音1 523.25 高音1 1046.50 低音2 293.67 中音2 587.33 高音2 1174.66 低音3 329.63 中音3 659.25 高音3 1381.51 低音4 349.23 中音4 698.46 高音4 1396.92 低音5 391.99 中音5 783.99 高音5 1567.98 低音6 440 中音6 880 高音6 1760 低音7 439.88 中音7 987.76 高音7 1975.52 二:系统设计 2.1 设计思路 实验板原始时钟信号为25MHZ,可通过程序中不同的分频系数产生不同频率的输出,将分频后的频率对应实验板上的蜂鸣器接口,就能触发蜂鸣器发出对应的音阶,通过按下BTN1-BTN7七个按钮,来演奏乐谱,当按键正确时,对应LED灯亮,数码管及光点的显示通过扫描实现 2.2 总体框图

北邮数电实验报告

数字电路与逻辑设计实验报告 一、要求要求: 设计制作一个简易计算器,实现最大输入两位十进制数字的加减乘运算。 基本要求: 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,该结果又在寄存器中存储着。继续后续输入相应符号,相应数字可以继续进行相应的计算,只要结果在(-99999,99999)之间,就可以一直进行计算。 四、源程序: 主程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_SIGNED.ALL; Entity lzjisuanqi is port( cat: OUT STD_LOGIC_VECTOR(5 DOWNTO 0); digital:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); clk:in std_logic; beep:out std_logic; num:in std_logic_vector(7 downto 0); fuhao:in std_logic_vector(5 downto 0) ); end entity lzjisuanqi; architecture lz of lzjisuanqi is component transform port(cin:in std_logic_vector(7 downto 0);

2021年北邮数电综合实验报告

点阵赛车游戏 学院: 信息与通信工程学院专业: 通信工程 班级: 姓名: 学号: 班内序号:

一、设计课题任务要求 用8×8点阵进行5秒倒计时显示, 当5秒倒计时结束后, 点阵显示赛道和赛车初始位置, 赛车游戏开始, 并开始计时, 用两个数码管显示时间。用红色表示赛道, 黄色表示赛车初始位置, 箭头表示赛车行进方向。用BTN1~BTN3三个按键分别控制赛车左移、前进、右移, 最终使赛车在不碰撞赛道情况下走完全程, 游戏结束, 点阵显示“V”图案, 数码管显示走完全程所花费时间。当游戏时间超出59秒, 或者赛车在行进过程中碰撞赛道, 游戏失败, 点阵显示“X”图案。经过按键BTN0进行复位, 控制点阵返回到初始状态。 二、系统设计 1、设计思绪 这个过程乍一看蛮复杂, 不过当我经过仔细分析后发觉, 我代码能够根据这个游戏运行过程来写。这个游戏分为4个状态, 即倒计时, 运行, 成功和失败。倒计时部分依据不一样数字在点阵上位置很轻易设计出来, 运行部分便是初始化赛道, 赛车位置, 然后用按键来控制赛车运动, 在这个过程中要不停判定赛车是否撞墙和抵达终点, 假如抵达终点便进入第三个状态, 成功, 即显示“V”; 若果撞墙便进入第四个状态, 失败, 即显示“X”。在游戏运行同时数码管还要计时。 2、总体框图 (1)系统结构图

(2)ASM 图 译码显示器 分频器 控制器 计时器 赛道及赛车 CP RESET BTN1 BTN2 BTN3 开启 N Y 是否碰到边界 是否抵达终点 显示“V ” 显示“×” 计时 移动 是否复位是否复位 Y N N Y N Y N

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