西电EDA大作业多功能彩灯
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA设计报告彩灯控制器
(老师:宗汝)
班级:
学号:
姓名:
一.设计要求
设计能让一排灯(8只)自动改变显示花样的控制系统。可将实验板上的一排发光二极管作为彩灯用。控制器应有两种控制方式:
◆规则变化。变化节拍有0.5秒和0.25秒两种,交替出现,每种节拍可有8种花样,各执行一或二个周期后轮换。
彩灯变化方向有单向移动,双向移动,跳跃移动等。
◆随机变化。变化花样相同,但节拍及花样的转换都随机出现。
二.设计方案
(1).分频模块。要产生快慢两种节拍,则首先需要有分频器模块,0.5秒和0.25秒两种则可选择四分频和八分频。通过按键进行选择切换。则clk为输入时钟信号,需经分频器分频并输入到LED显示电路;clr为复位清零信号,高电平有效,有效时,电路无条件的回到初始状态;OPT为频率快慢选择信号,低电平节奏快,高电平节奏慢;
(2)LED显示模块。经过分频的时钟信号输入LED显示电路中,使电路有规律的输出按照设定的各种花样变化。xuan为选择彩灯变化花样信号,便于改变彩灯花样。而最后就是输出彩灯变化花样led。
三.系统程序设计
分频器模块:
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;
opt:in std_logic;
clkout:out std_logic
);
end FENPINQI;
architecture arc of FENPINQI is
signal clk_tmp: std_logic;
signal counter: std_logic_vector(1 downto 0);
begin
process(clk,clr,opt)
begin
if clr='1' then --清零
clk_tmp<='0';
counter<="00";
elsif clk'event and clk='1' then
if opt='0' then --四分频
if counter="01" then
counter<="00";
clk_tmp<=not clk_tmp;
else
counter<=counter+'1';
end if;
else --八分频
if counter="11" then
counter<="00";
clk_tmp<=not clk_tmp;
else
counter<=counter+'1';
end if;
end if;
end if;
end process;
clkout<=clk_tmp; --输出分频后的信号
end arc;
花样一:--用分频器分频后的时钟来显示花样实现
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.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 HY1;
architecture arc 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
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 arc;
花样二:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity HY2 is
port(
clk1:in std_logic;
clr:in std_logic;
xuan:in std_logic_vector(1 downto 0);
led2:out std_logic_vector(7 downto 0));
end HY2;
architecture arc of HY2 is
type state is(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s 20,s21,s22,s23,s24,s25,s26,s27,s28,s29,s30);
signal current_state:state;
signal light:std_logic_vector(7 downto 0);
begin
process(clr,clk1,xuan)is
constant l1:std_logic_vector(7 downto 0):="00000000";
constant l2:std_logic_vector(7 downto 0):="10000000";
constant l3:std_logic_vector(7 downto 0):="11000000";
constant l4:std_logic_vector(7 downto 0):="11100000";
constant l5:std_logic_vector(7 downto 0):="11110000";