西电EDA大作业多功能彩灯

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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";

相关文档
最新文档