北京邮电大学实验报告
实验名称:数字电路与逻辑设计实验报告
学院:信息与通信工程学院
班级: 姓名: 学号: 序号: 日期:
实验三:用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.波形图如下: