8路彩灯循环控制
![8路彩灯循环控制](https://img.360docs.net/img35/01ld2zgpvh2z9fwuv2ba-51.webp)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
黄冈师范学院物理科学与技术学院
EDA课程设计
课题:8路彩灯循环控制
专业年级:电信0702
学号:200722240218
姓名:余涛
指导老师:冯杰
时间:2010年1月8日
一、设计目的:
1、熟练掌握VHDL的设计过程。
2、掌握软件和硬件结合实现功能。
3、了解FPGA/CPLD类芯片的功能及作用。
4、了解和掌握彩灯设计的思想从而为今后的电路设计奠基基础。
二、设计思想:
采用的设计方法是一种高层次的“自顶而下”的全新设计方法,这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。通过对VHDL语言设计普通电路来实现彩灯的控制的电路,从而能够用MAX+PLU SⅡ平台上进行仿真实现功能。
三、功能描述:
此八路彩灯有3种变化,这3种变化可以进行手动切换,三种变化分别为:
1、彩灯自左向右依次点亮。
2、彩灯自左向右逐个点亮。
3、彩灯两边两个先亮,然后同时向中间逐个点亮,随后中间同时向两边熄灭。
四、设计原理:
本实验主要是为了实现了彩灯循环点亮的不同控制,它主要由彩灯循环控制方式和彩灯循环点亮变化方式选择两大部分组成。
1、彩灯循环控制方式的设计,在这里主要是通过实验箱指示灯显示。在电路中以1代表灯亮,以0代表灯灭,由0、1按不同的规律组合代表不同的点亮方式,同时使其选择不同的频率,从而实现多种变化多种频率的花样功能显示。
2、彩灯循环点亮变化方式选择,在这里设计了彩灯三种不同的循环变化方式。我们用状态机来控制不同的点亮方式,从而达到不同的点亮方式随时切换变化。
五、程序设计:
(1)实现功能1:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY caideng1 IS
PORT(CLK:IN STD_LOGIC;
RST:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END caideng1;
ARCHITECTURE a OF caideng1 IS
SIGNAL NUM: INTEGER RANGE 7 DOWNTO 0;
BEGIN
PROCESS(CLK)
BEGIN
IF RST='1' THEN NUM<=0;
ELSIF CLK'EVENT AND CLK='1' THEN NUM<=NUM+1;
END IF;
END PROCESS;
PROCESS(NUM)
BEGIN
CASE NUM IS
WHEN 0 =>Q<="10000000"; WHEN 1 =>Q<="01000000";
WHEN 2 =>Q<="00100000"; WHEN 3 =>Q<="00010000";
WHEN 4 =>Q<="00001000"; WHEN 5 =>Q<="00000100";
WHEN 6 =>Q<="00000010"; WHEN 7 =>Q<="00000001";
WHEN OTHERS =>NULL;
END CASE;
END PROCESS;
END a;
仿真波形:
(2)实现功能2:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY caideng2 IS
PORT(CLK:IN STD_LOGIC;
RST:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END caideng2;
ARCHITECTURE a OF caideng2 IS
SIGNAL NUM: INTEGER RANGE 7 DOWNTO 0;
BEGIN
PROCESS(CLK)
BEGIN
IF RST='1' THEN NUM<=0;
ELSIF CLK'EVENT AND CLK='1' THEN
IF NUM<=7 THEN NUM<=NUM+1;
ELSE NUM<=0;
END IF;
END IF;
END PROCESS;
PROCESS(NUM)
BEGIN
CASE NUM IS
WHEN 0 =>Q<="10000000";
WHEN 1 =>Q<="11000000";
WHEN 2 =>Q<="11100000";
WHEN 3 =>Q<="11110000";
WHEN 4 =>Q<="11111000";
WHEN 5 =>Q<="11111100";
WHEN 6 =>Q<="11111110";
WHEN 7 =>Q<="11111111";
WHEN OTHERS =>NULL;
END CASE;
END PROCESS;
END a;
仿真波形:
(3)实现功能3:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY caideng3 IS
PORT(CLK:IN STD_LOGIC;
RST:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END caideng3;
ARCHITECTURE a OF caideng3 IS
SIGNAL NUM: INTEGER RANGE 7 DOWNTO 0; BEGIN
PROCESS(CLK)
BEGIN
IF RST='1' THEN NUM<=0;
ELSIF CLK'EVENT AND CLK='1' THEN
IF NUM<=7 THEN NUM<=NUM+1;
ELSE NUM<=0;
END IF;
END IF;
END PROCESS;
PROCESS(NUM)
BEGIN
CASE NUM IS
WHEN 0 =>Q<="00000000";
WHEN 1 =>Q<="10000001";
WHEN 2 =>Q<="11000011";
WHEN 3 =>Q<="11100111";
WHEN 4 =>Q<="11111111";
WHEN 5 =>Q<="11100111";
WHEN 6 =>Q<="11000011";
WHEN 7 =>Q<="10000001";
WHEN OTHERS =>NULL;
END CASE;
END PROCESS;
END a;
仿真波形: