北邮数电实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京邮电大学实验报告
实验名称:数字电路与逻辑设计实验报告
学院:信息与通信工程学院
班级:
姓名:
学号:
序号:
日期:
实验三:用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<="11111101";
END a;
3.波形图如下:
4.波形分析:由波形图我们可以看出,输入的时钟信号经过分频器后产生了周期为输入信号12倍的时钟信号,实现了分频器的12倍分频功能,同时clear实现的是清零功能,为高电平有效,当输入clear信号时,分频器的输出重新进行周期分频,clear信号之后经过六个周期信号进行一次反转;
接着进行上升沿有效的从0~9的8421十进制计数器,每个计数数字都对应一个七位输出来控制数码管。
四、分块实验分析
1、数码管译码器:
VHDL代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY seg7_1 IS
PORT(
a:IN STD_LOGIC_VECTOR(3 downto 0);
b:OUT STD_LOGIC_VECTOR(6 downto 0);
cat:out std_logic_vector(5 downto 0)
);
end seg7_1;
ARCHITECTURE seg7_1_arch OF seg7_1 IS
BEGIN
PROCESS(a)
BEGIN
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
WHEN OTHERS =>b <="0000000";
END CASE;
END PROCESS;
cat<="111101";
END;
2、8421十进制计数器:
VHDL代码: