《VHDL-彩灯控制电路的设计与实现.doc》由会员分享,可在线阅读,更多相关《VHDL-彩灯控制电路的设计与实现.doc(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateVHDL-彩灯控制电路的设计与实现第四次实验报告总结VHDL 彩灯控制电路的设计与实现一、 实验目的 1进一步了解时序电路设计方法2熟悉状态机的设计方法二、 实验所用仪器及元器件1、 计算机2、 直流稳压电源3、 数字系统与逻辑设计实验开发板三、 实验内容用VHDL语言设计并实现一个彩灯控制(8个发光二极管)电路,仿真并下载验证其功能。彩灯有两种工作模式,可以通过拨码
2、开关或者按键进行切换。(1) 单点移动模式:一个点在8个发光二极管上来回的亮(2) 幕布模式:从中间两个点,同时向两边一次点亮直至全亮,然后再向中间点灭,依次往复四、 设计思路与过程根据实验要求,需要实现在拨码开关或者按键的控制下实现两种状态机的转换。首先,确定输入输出变量:输入:拨码开关a:实现两种模式的转换;时钟clk::提供有效时钟沿; 输出:8维向量b:连接8个发光二极管。其次,确定电路工作状态因为在单点移动模式和幕布模式都要满足灯来回亮,共计工作状态23种:a=0时,实现单点移动模式,工作状态有s0s13共14种状态;a=1时,实现幕布模式,工作状态有s14s22共9种状态。再次,大
3、致确定VHDL编写思路确定好输入输出变量和电路状态后,考虑结构体中需要的进程需要完成以下两个功能分频和实现状态机,故我使用了4个进程。其功能分别如下:P0:分频,将实验板上提供的50MHz的时钟信号,即输入clk分为频率为1Hz的低频信号clk_out,以便观察现象;P1:为当前状态储存的下一状态;P2:当时钟有效沿到来时,当前状态转入下一状态;(P1、P2共同实现状态机的转换)P3:控制LED灯的输出,达到实验要求效果具体程序如下。五、 VHDL程序library ieee;use ieee.std_logic_1164.all;entity light isport ( clk: in s
4、td_logic; a: in std_logic; b:out std_logic_vector(7 downto 0);end light;architecture light_1 of light is type state_type is(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s20,s21,s22); signal current_state,next_state: state_type; signal clk_out:std_logic; signal tmp: integer r
5、ange 0 to ;begin p0:process(clk) -分频器,把50MHz的时钟clk分为1Hz的时钟clk_out begin if clkevent and clk=1 then if tmp= then tmp=0; else tmp=tmp+1; end if; if tmp= then clk_out=1; else clk_out if(a=0) then next_state=s1; else next_state if(a=0) then next_state=s2; else next_state if(a=0) then next_state=s3; else
6、 next_state if(a=0) then next_state=s4; else next_state if(a=0) then next_state=s5; else next_state if(a=0) then next_state=s6; else next_state if(a=0) then next_state=s7; else next_state if(a=0) then next_state=s8; else next_state if(a=0) then next_state=s9; else next_state if(a=0) then next_state=
7、s10; else next_state if(a=0) then next_state=s11; else next_state if(a=0) then next_state=s12; else next_state if(a=0) then next_state=s13; else next_state if(a=0) then next_state=s0; else next_state if(a=1) then next_state=s15; else next_state if(a=1) then next_state=s16; else next_state if(a=1) th
8、en next_state=s17; else next_state if(a=1) then next_state=s18; else next_state if(a=1) then next_state=s19; else next_state if(a=1) then next_state=s20; else next_state if(a=1) then next_state=s21; else next_state if(a=1) then next_state=s22; else next_state if(a=1) then next_state=s14; else next_s
9、tate=s0; end if; end case; end process; p2:process(clk_out) -时钟clk_out作用下的状态转换函数 begin if(clk_outevent and clk_out=1) then current_statebbbbbbbbbbbbbbbbbbbbbbb b b b b b b b b b b b=; END CASE; c=; END PROCESS;END; 实验1仿真波形图 实验3 VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGN
10、ED.ALL;ENTITY count1 IS PORT( clk,clear: IN STD_LOGIC; q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );end count1;ARCHITECTURE a OF count1 IS SIGNAL q_temp: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(clk) BEGIN IF(clkevent and clk=1) THEN IF CLEAR=0 THEN q_temp=0000; ELSIF q_temp=1001 THEN q_temp=0000; ELSE q_temp=q_temp+1; END IF; END IF; END PROCESS; q=q_temp;END a; 实验3仿真波形-