北邮数电实验报告 下载本文

北京邮电大学实验报告

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

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

班级: 姓名: 学号: 序号: 日期:

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

end fenpinjishu;

ARCHITECTURE a OF fenpinjishu IS COMPONENT div_12 PORT(

clk :IN STD_LOGIC; clk_out:OUT STD_LOGIC );

END COMPONENT; COMPONENT jishuqi PORT(

clk,reset:IN STD_LOGIC;

q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );

END COMPONENT;

COMPONENT seg7_1 PORT(

a:IN STD_LOGIC_VECTOR(3 downto 0); b:OUT STD_LOGIC_VECTOR(6 downto 0) );

END COMPONENT;

SIGNAL na:STD_LOGIC;

SIGNAL nb:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

u1:div_12 PORT MAP(clk_out=>na,clk=>clk1);

u2:jishuqi PORT MAP(reset=clear2,clk=>na,q=>nb); u3:seg7_1 PORT MAP(a=>nb,b=>b1); CAT<=\END a;

3.波形图如下: