数字电路与逻辑设计
实验报告
学院: 班级: 班内序号: 学号: 姓名:
一、实验名称和实验任务要求
1、 实验目的
实验一: (1) 学会用QuartusII原理图输入法进行电路设计和仿真。 (2) 掌握QuartusII图形模块单元的生成和调用。 (3) 学会实验板的使用。 (4) 加深对半加器、全加器电路原理的理解。 实验二: (1) 学会用VHDL语言设计组合电路的方法。 (2) 学会用QuartusII文本输入法进行电路设计。 (3) 加深对数码管译码器、编码转换和奇偶校验电路原理的理解。 实验三:
(1)学会用VHDL语言设计时序电路的方法。
(2)学会用QuartusII文本输入法进行电路设计。 (3)加深对计数器设计及分频器原理的理解。
(4)学会用VHDL语言对结构体的行为、数据流和结构进行描述。 实验四: (1) 学会用VHDL语言对状态机进行描述。 (2) 掌握多个数码管动态扫描显示的原理及设计方法。
2、 实验任务要求
实验一: QuartusII 原理图输入法设计与实现 (1) 用逻辑门设计一个半加器,仿真验证其功能,并生成新的半加器图形
模块单元。
(2) 用(1)生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其
功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。
实验二: (1) 用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,
并下载到实验板测试。要求用拨码开关设定输入信号,7段数码管显示输出信号。
(2) 用VHDL语言设计实现一个8421BCD码转换为余3码的代码转换器,仿
真验证其功能。
(3) 用VHDL语言设计实现一个4位二进制奇偶校验器,输入奇数个‘1’
时,输出为‘1’,否则输出‘0’,仿真验证其功能。
实验三: (1) 用VHDL语言设计实现一个带异步复位的8421BCD码十进制计数器,仿
真验证其功能。
(2) (3)
用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器,仿真验证其功能。
用VHDL语言将(1)、(2)和数码管译码器3 个电路进行连接,仿真验证其功能,并下载到实验板测试。
实验四: (1) 用VHDL语言设计实现六个数码管串行扫描电路,要求同时显示0、1、
2、3、4、5这六个不同的数字图形到6个数码管上,仿真验证其功能,并下载到实验板测试。
(2) 用VHDL语言设计实现六个数码管滚动显示电路。
①循环左移动,始终点亮六个数码管,左进右出。状态为:012345->123450->234501->345012->450123->501234->012345
②向左滚动,用全灭的数码管填充右边,直至全部变灭,然后再依次从右边一个一个地点亮。状态为:
012345->12345X->2345XX->345XXX->45XXXX->5XXXXX->XXXXXX->XXXXX0->XXXX01->XXX012->XX0123->X01234->012345,其中‘X’表示数码管不显示。
二、 实验三(3)和实验四模块端口说明及连接图
1、 实验三(3)模块端口说明
entity cc is port(
clkin: in std_logic; --连接后电路的输入时钟 clearin: in std_logic; -- 连接后电路的复位输入 bout: out std_logic_vector (6 downto 0);-- 连接后电路的输出 cat:outstd_logic_vector(5 downto 0));-- 确定电路某数码管亮 end cc;
component div12
port(clk : in std_logic;-- 12分频器的时钟输入
clkout : out std_logic);-- 12分频器的输出 end component; component count10 port(
clk : in std_logic-- 10进制计数器的的时钟输入 clear : in std_logic;-- 10进制计数器的复位输入 cnt : out std_logic_vector(3 downto 0));
-- 10进制计数器的二进制输出
end component; component cnt4 port(
a : in std_logic_vector (3 downto 0);-- 数码管译码器的输入 b : out std_logic_vector (6 downto 0));-- 数码管译码器的输出 end component;
signal c : std_logic;
signal d : std_logic_vector (3 downto 0); begin
cat<=\
u1 : div12 port map(clk=>clkin, clkout=>c);
u2 :count10 port map(clk=>c, clear=>clearin, cnt=>d); u3 : cnt4 port map(a=>d, b=>bout); end;
端口说明:将12分频器输入时钟作为连接后电路输入时钟,
将10进制计数器的复位输入作为连接后图形的复位输入, 将数码管译码器的输出作为连接后图形的输出, 将12分频器输出连接10进制计数器时钟输入, 将10进制计数器输出连接数码管译码器输入。
2、 实验三(3)连接图:
3、 实验四模块端口说明:
(1)数码管串行扫描电路
clk:instd_logic; --输入时钟
cat:outstd_logic_vector(5 downto 0);--确定某数码管亮 y:out std_logic_vector(6 downto 0); --输出 signal count:integer range 0 to 5; --6进制计数,在各个数码管之间进行切换 signalcounter:integer range 0 to 2500 --实现快速扫描的计数器。
(2)数码管滚动显示电路
clk:instd_logic;--点亮某个数码管的时钟输入 y:out std_logic_vector(6 downto 0);--输出
cat:outstd_logic_vector(5 downto 0); --确定某数码管亮 signal count1: integer range 0 to 5;
--每一次扫描的计数器,使六个管“同时”点亮
signal count2: integer range 0 to 5;
--实现循环左滚动的计数器,共六个状态
signal clk2:std_logic;
--实现循环左滚动的时钟
signaltmp: integer range 0 to 5000000;
--实现滚动点亮的计数器
signalcounter:integer range 0 to 25000;
--实现快速扫描的计数器
三、 实验一(2)、实验三(3)和实验四的原理图或
VHDL 代码
1、 实验一(2)原理图
2、 实验三(3)VHDL代码
library IEEE;
use IEEE.std_logic_1164.all; useIEEE.std_logic_unsigned.all; useIEEE.std_logic_arith.all; entity cc is
port(clkin,clearin: in std_logic;
bout: out std_logic_vector (6 downto 0); cat:outstd_logic_vector(5 downto 0)); end cc;
architecturecc_arch of cc is component div12
port(clk : in std_logic; clkout : out std_logic); end component; component count10
port(clk,clear : in std_logic;
cnt : out std_logic_vector(3 downto 0)); end component; component cnt4
port(a : in std_logic_vector (3 downto 0); b : out std_logic_vector (6 downto 0));