基于VHDL的八路彩灯控制器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1.任务需求 (2)
2. 总体设计 (2)
2.1 各个花样的状态图 (2)
2.2总体框图 (4)
3. 模块设计 (4)
3.1分频器模块 (4)
3.2花样一模块 (5)
3.3花样二模块 (6)
3.4花样三模块 (8)
3.5顶层设计 (10)
4. 仿真图 (11)
4.1分频器仿真波形 (11)
4.2花样一仿真波形 (11)
4.3花样二仿真波形 (12)
4.4花样三仿真波形 (13)
4.5总体仿真波形 (13)
5.心得体会 (14)
6.参考文献 (15)
1.任务需求
现今生活中,市场上未能吸取顾客的注意,高出各式各样的方法,其中彩灯的装饰便是其中非常普遍的一种。使用彩灯即可起装饰宣传作用,又可以现场气氛,城市也因为众多的彩灯而变得灿烂辉煌。
VHDL语言作为可编程逻辑器件的标准语言描述能力强,覆盖面广,抽象能力强,在实际应用中越来越广泛。在这个阶段,人们开始追求贯彻整个系统设计的自动化,可以从繁重的设计工作中彻底解脱出来,把精力集中在创造性的方案与概念构思上,从而可以提高设计效率,缩短产品的研制周期。整个过程通过EDA工具自动完成,大大减轻了设计人员的工作强度,提高了设计质量,减少了出错的机会。
要求设计一个8路彩灯控制器,要求彩灯可以演示以下花型:
(1)从两边向中间亮,再从中间向两边亮;
(2)实现淡入淡出效果
(3)从左至右逐个亮,在从右到左逐个亮;
2. 总体设计
2.1 各个花样的状态图
当选择花样一时状态图如下:
S0=”ZZZZZZZZ”S1="10000001" S2="01000010" S3="00100100"
S4="00011000" S5="00100100" S6="01000010"
CLR
当选择花样二时状态图如下:
S0=”ZZZZZZZZ ”
S1="00000000" S2="10000000" S3="11000000" S4="11100000" S5="11110000" S6="11111000" S7=”11111100” S8=”11111110” S9="11111111" S10="01111111" S11="00111111" S12="00011111" S13="00001111"
S14="00000111"
S15=”00000011”
S16=”00000001”
当选择花样三时状态图如下:
S0=
”ZZZZZZZZ ”
S1="10000000" S2="01000000" S3="00100000" S4="00010000" S5="00001000" S6="00000100" S7=”00000010” S8=”00000001” S9="00000010" S10="00000100" S11="00001000"
S12="0001000"
S13="00100000"
S14="01000000"
CLR
2.2总体框图
3. 模块设计
3.1分频器模块
--由于机器时钟周期太短,不能满足要求
--此模块实现分频,得到需要的时钟
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;
ENTITY fenpinqi IS
PORT(
CLK:IN STD_LOGIC; --原机器时钟
CLR:IN STD_LOGIC;
CLK1:OUT STD_LOGIC); --分频后的时钟
END fenpinqi;
ARCHITECTURE ART OF fenpinqi IS
SIGNAL CK:STD_LOGIC;
BEGIN
PROCESS(CLK,CLR)IS
VARIABLE TEMP:STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
IF CLR='1' THEN
CK<='0';
TEMP:="000";
ELSIF(CLK'EVENT AND CLK='1')THEN
IF TEMP="111" THEN
TEMP:="000";
CK<=NOT CK;
ELSE
TEMP:=TEMP+'1';
END IF;
END IF;
END PROCESS;
CLK1<=CK;
END ART;
3.2花样一模块
--用分频器分频后的时钟来显示花样实现
--从两边向中间亮,再从中间向两边亮;LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY hy1 IS
PORT(CLK1:IN STD_LOGIC;
CLR:IN STD_LOGIC;
XUAN:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
LED1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END ENTITY hy1;
ARCHITECTURE ART OF hy1 IS
TYPE STATE IS(S0,S1,S2,S3,S4,S5,S6); --设计状态机,实现花样转换SIGNAL CURRENT_STATE:STATE;
SIGNAL LIGHT:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS(CLR,CLK1,XUAN)IS --定义花样(1为灯亮,0为灯灭) CONSTANT L1:STD_LOGIC_VECTOR(7 DOWNTO 0):="10000001";
CONSTANT L2:STD_LOGIC_VECTOR(7 DOWNTO 0):="01000010";
CONSTANT L3:STD_LOGIC_VECTOR(7 DOWNTO 0):="00100100";
CONSTANT L4:STD_LOGIC_VECTOR(7 DOWNTO 0):="00011000";
CONSTANT L5:STD_LOGIC_VECTOR(7 DOWNTO 0):="00100100";
CONSTANT L6:STD_LOGIC_VECTOR(7 DOWNTO 0):="01000010";
BEGIN
IF XUAN="01" THEN
IF CLR='1' THEN
CURRENT_STATE<=S0;
ELSIF(CLK1'EVENT AND CLK1='1')THEN
CASE CURRENT_STATE IS --状态机转换
WHEN S0=> LIGHT<="ZZZZZZZZ"; CURRENT_STATE<=S1;
WHEN S1=> LIGHT<=L1; CURRENT_STATE<=S2;
WHEN S2=> LIGHT<=L2; CURRENT_STATE<=S3;
WHEN S3=> LIGHT<=L3; CURRENT_STATE<=S4;
WHEN S4=> LIGHT<=L4; CURRENT_STATE<=S5;
WHEN S5=> LIGHT<=L5; CURRENT_STATE<=S6;
WHEN S6=> LIGHT<=L6; CURRENT_STATE<=S1;
END CASE;
END IF;
END IF;
END PROCESS;
LED1<=LIGHT;
END ART;
3.3花样二模块
--用分频器分频后的时钟来显示花样实现