多路彩灯控制器及其VHDL实现

合集下载

用VHDL设计十六路彩灯控制器

用VHDL设计十六路彩灯控制器
EL SE Y< ’1’;
W H EN O f= > IF Q cl= ’0’ TH EN cu rren t- sta te< = Q f;
EL SE K1<‘0’; K2<‘1’; K3< =‘1’; K5< =‘0’; K6< =‘1’; cu rren t- sta te< = Q g;
参考文献
[ 1 ]D So lom on, R R ank in s 著, SQL Server6. 5 开发指南, 清 华大学出版社, 1998: 179- 234
[ 2 ]微软公司著, 希望图书创作室译,M icro soft SQL Server6. 5 T ran sact- SQL 参数手册, 宇航出版社, 1998: 111- 172
A RCH IT ECTU R E con tro ll- a rc O F con tro ll IS
K4< = ’1’; K6< = ’0’;
S IGNAL cu rren t- sta te: sta te: = Q a
END IF;
B EG IN
PRO CESS
B EG IN W A IT U N T IL CL K=‘1‘AND CL K’EV EN T; IF S=‘0’TH EN Y < ‘0’;
EL SE cu rren t- sta te< Q f;
图 2 仿真波形
(下转第 36 页)
·31·
© 1995-2005 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
M icrocom puter Appl ica tion s Vol. 17, No. 5, 2001 开发应用 微型电脑应用 2001 年第 17 卷第 5 期

彩灯控制电路设计与实现(VHDL编程)

彩灯控制电路设计与实现(VHDL编程)

实验名称:彩灯控制电路设计与实现实验任务要求:用VHDL 语言设计并实现一个彩灯控制电路,仿真并下载验证其功能。

彩灯有两种工作模式 ,可通过拨码开关或按键进行切换。

(1)单点移动模式:一个点在8个发光二极管上来回的亮(2)幕布式:从中间两个点,同时向两边依次点亮直至全亮,然后再向中间点灭,依次往复设计思路和过程:可以将两种模式分开设计,再用一个控制钮进行切换。

两种模式本质一样,都是循环点亮灯。

可以用状态机设计。

首先明确设计对象的外部特征,输入信号只有时钟信号cp 和切换按钮此处取a;输出为检测的八个彩灯亮暗。

根据设计对象的操作控制步来确定有限状态机的状态。

取初始状态为s0,第一种模式共有14种状态循环,因而可取状态s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13;第二种模式有八种状态,可共用第一种模式中的前八种状态,即为s0,s1,s2,s3,s4,s5,s6,s7。

根据题目要求的循环可以写出各个状态的下一状态,写完整个循环为止。

切换按钮可以用一个If 来总领。

单点移动模式:S0 S5S13 S7S8 S9 S10 S11 S1 S2 S3 S4S12 S6幕布式:流程图:彩灯电路设计语言:library ieee;use ieee.std_logic_1164.all;entity pmd isport(a,cp:in std_logic; %输入信号deng: out std_logic_vector(7 downto 0) %输出灯信号);end pmd;architecture arch of pmd istype all_state is (s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13);%枚举状态机状态 S0 S7 S6 S1 S5 S4S2 S3signal state:all_state; %状态转换符号begin %开始程序process(cp)beginif (cp'event and cp='1')then %时钟信号开始计数if(a='1')then %单点循环模式case state iswhen s0=> state<=s1;deng<="00000001"; %状态循环when s1=> state<=s2;deng<="00000010";when s2=> state<=s3;deng<="00000100";when s3=> state<=s4;deng<="00001000";when s4=> state<=s5;deng<="00010000";when s5=> state<=s6;deng<="00100000";when s6=> state<=s7;deng<="01000000";when s7=> state<=s8;deng<="10000000";when s8=> state<=s9;deng<="01000000";when s9=> state<=s10;deng<="00100000";when s10=> state<=s11;deng<="00010000";when s11=> state<=s12;deng<="00001000";when s12=> state<=s13;deng<="00000100";when s13=> state<=s0;deng<="00000010";when others =>state<=s0;deng<="00000000";end case;Else %切换为幕布式case state iswhen s0=> state<=s1;deng<="00011000";when s1=> state<=s2;deng<="00111100";when s2=> state<=s3;deng<="01111110";when s3=> state<=s4;deng<="11111111";when s4=> state<=s5;deng<="01111110";when s5=> state<=s6;deng<="00111100";when s6=> state<=s7;deng<="00011000";when s7=> state<=s0;deng<="00000000";when others =>state<=s0;deng<="00000000";end case;end if;end if;end process; end arch;输入波形:添加五十分频后的仿真程序:library ieee;use ieee.std_logic_1164.all;entity cd isport(a,clk:in std_logic;q: out std_logic_vector(7 downto 0));end cd;architecture a of cd istype all_state is (s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13);signal state:all_state;signal cnt : integer range 0 to 24999999; %50分频状态signal clk_tmp : std_logic;beginprocess(clk)Begin %开始运行分频信号if (clk'event and clk='1') thenif cnt=24999999 thencnt<=0;clk_tmp<= not clk_tmp;elsecnt<=cnt+1;end if;end if;if (clk_tmp'event and clk_tmp='1')then %分频后运行彩灯程序if(a='1')thencase state iswhen s1=> state<=s2;q<="00000010";when s2=> state<=s3;q<="00000100";when s3=> state<=s4;q<="00001000";when s4=> state<=s5;q<="00010000";when s5=> state<=s6;q<="00100000";when s6=> state<=s7;q<="01000000";when s7=> state<=s8;q<="10000000";when s8=> state<=s9;q<="01000000";when s9=> state<=s10;q<="00100000";when s10=> state<=s11;q<="00010000";when s11=> state<=s12;q<="00001000";when s12=> state<=s13;q<="00000100";when s13=> state<=s0;q<="00000010";when others =>state<=s0;q<="00000000";end case;elsecase state iswhen s0=> state<=s1;q<="00011000";when s1=> state<=s2;q<="00111100";when s2=> state<=s3;q<="01111110";when s3=> state<=s4;q<="11111111";when s5=> state<=s6;q<="00111100";when s6=> state<=s7;q<="00011000";when s7=> state<=s0;q<="00000000";when others =>state<=s0;q<="00000000";end case;end if;end if;end process;end a;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity cd isport(a,clk:in std_logic;q: out std_logic_vector(7 downto 0));end cd;architecture a of cd istype all_state is (s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13); signal state:all_state;beginprocess(clk)beginif (clk'event and clk='1') thenif(a='1') thencase state iswhen s0=> state<=s1;q<="00000001";when s1=> state<=s2;q<="00000010";when s2=> state<=s3;q<="00000100";when s3=> state<=s4;q<="00001000";when s4=> state<=s5;q<="00010000";when s5=> state<=s6;q<="00100000";when s6=> state<=s7;q<="01000000";when s7=> state<=s8;q<="10000000";when s8=> state<=s9;q<="01000000";when s9=> state<=s10;q<="00100000";when s10=> state<=s11;q<="00010000";when s11=> state<=s12;q<="00001000";when s12=> state<=s13;q<="00000100";when s13=> state<=s0;q<="00000010";when others =>state<=s0;q<="00000000";end case;elsecase state iswhen s0=> state<=s1;q<="00011000";when s1=> state<=s2;q<="00111100";when s2=> state<=s3;q<="01111110";when s3=> state<=s4;q<="11111111";when s4=> state<=s5;q<="01111110";when s5=> state<=s6;q<="00111100";when s6=> state<=s7;q<="00011000";when s7=> state<=s0;q<="00000000";when others =>state<=s0;q<="00000000";end case;end if;end if;end process;end a;故障及问题分析:1.编写这个程序时,很自然地想到用一个输入信号控制两种模式的切换,但把这个输入放在哪里,如何放,开始出现了几种想法。

多路彩灯控制器实验报告

多路彩灯控制器实验报告

多路彩灯控制器目录摘要······················································一课程名称·······························二内容实验·······························三具体要求·······························四方案论证·······························五单元电路·······························六仿真结果·······························七实验小结······························参考文献·······················································一,课程名称多路彩灯控制器二,内容摘要当今时代科技发展日异月新,彩灯作为一种景观应用越来越多。

可编程硬件描述语言VHDL Quartus 循环LED彩灯控制器源代码

可编程硬件描述语言VHDL Quartus 循环LED彩灯控制器源代码

VHDL Quartus 循环LED彩灯控制器源代码--设计一个循环彩灯控制器--该控制器控制红,绿,黄三个发光二极管循环发亮--要求红发光管亮2秒,绿亮3秒,黄亮1秒。

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ASM_LED ISPORT(CLR: IN STD_LOGIC;--清零控制输入CLK: IN STD_LOGIC;--时钟输入LED1:OUT STD_LOGIC;--LED1输出LED2:OUT STD_LOGIC;--LED2输出LED3:OUT STD_LOGIC);--LED3输出END ASM_LED;--实体名称可以省略---------------------------------------------ARCHITECTURE A OF ASM_LED ISTYPE STATE_TYPE IS (S0,S1,S2,S3,S4,S5,S6);--枚举类型,SIGNAL PRESENT_STATE,NEXT_STATE: STATE_TYPE;--定义信号BEGIN----------------------------------P1:PROCESS(CLK,CLR)--进程1,判断时钟端与清零端,从而得到当前状态BEGIN--开始IF CLR='1' THEN --如果清零端有效PRESENT_STATE<=S0;--当前状态就为S0ELSIF CLK'EVENT AND CLK='1' THEN--如果有上升沿到来PRESENT_STATE<=NEXT_STATE;--当前状态就变为下一个状态END IF;END PROCESS P1;---------------------------------------P2:PROCESS(CLK,PRESENT_STATE)--进程2,BEGINCASE PRESENT_STATE ISWHEN S0=>NEXT_STATE<=S1;WHEN S1=>NEXT_STATE<=S2;WHEN S2=>NEXT_STATE<=S3;WHEN S3=>NEXT_STATE<=S4;WHEN S4=>NEXT_STATE<=S5;WHEN S5=>NEXT_STATE<=S6;WHEN S6=>NEXT_STATE<=S1;END CASE;END PROCESS P2;--------------------------------------P3:PROCESS(CLR,PRESENT_STATE)--进程3BEGINIF CLR='1' THEN--如果清零端有效LED1<='0';LED2<='0';LED3<='0';--把灯全部清零ELSECASE PRESENT_STATE ISWHEN S0=>LED1<='0';LED2<='0';LED3<='0';--第一个状态WHEN S1=>LED1<='1';LED2<='0';LED3<='0';--LED1(黄色发光管点亮1秒)WHEN S2=>LED1<='0';LED2<='1';LED3<='0';--LED2(红色发光管点亮2秒)WHEN S3=>LED1<='0';LED2<='1';LED3<='0';--重复1次,所以总共是2秒WHEN S4=>LED1<='0';LED2<='0';LED3<='1';--LED3(绿色发光管点亮3秒)WHEN S5=>LED1<='0';LED2<='0';LED3<='1';--重复1次,所以总共是2秒WHEN S6=>LED1<='0';LED2<='0';LED3<='1';--再重复1次,所以总共是3秒END CASE;END IF;END PROCESS P3;END A;。

多路彩灯控制器及其VHDL实现

多路彩灯控制器及其VHDL实现

多路彩灯控制器及其VHDL实现摘要:本文基于分频器和有限状态机设计了可选择节拍、具有六种循环变换花型功能的多路彩灯控制器,并通过VHDL将其实现。

通过Modelsim得到了仿真波形,达到了预期的要求和功能。

目录一、背景介绍 ............................................. 2 二、设计要求 ............................................. 2 三、设计方案 ............................................. 2 四、方案程序设计 (2)4.1 时序控制模块(SXKZ)程序 ........................................................................... . (3)4.1.1 T触发器单元程序 ........................................................................... ..................... 3 4.1.2 多路选择器单元程序 ........................................................................... ................ 3 4.1.3 总的设计程序 ........................................................................... ............................ 4 4.2 显示控制模块(XSKZ)程序 ........................................................................... ................ 5 4.3 多路彩灯控制器的顶层模块程序 ........................................................................... ........ 6 4.4 测试平台(TESTBENCH)程序 ........................................................................... .. (7)五、仿真结果及分析 (8)5.1 多路彩灯控制器的RTL级 ........................................................................... .................... 8 5.2 多路彩灯控制器TECHNOLOGY图 ........................................................................... .......... 9 5.3 Modelsim仿真波形图 ........................................................................... . (10)六、设计的亮点 (10)一、背景介绍在现代生活中,彩灯作为一种装饰,既可以增强人们的感观,起到广告宣传的作用,又可以增添节日气氛,为人们的生活增添亮丽,用在舞台上增强晚会灯光效果。

自-基于VHDL的多路彩灯控制论文

自-基于VHDL的多路彩灯控制论文

开放实验报告题目:ﻩ基于VHDL的多路彩灯控制系统班级:学号:姓名:指导教师:时间:2010年6月30日基于VHDL的多路彩灯控制系统一、设计目的熟悉VHDL的设计方法,掌握VHDL的设计思想,了解VHDL向芯片的下载和测试,建立完整系统设计的概念。

二、设计要求八路彩灯控制系统设定有四种花样变化,这四种花样可以进行自动切换,且每种花样可以选择不同的频率,可以清零和暂停。

四种花样分别为:1.全亮,全灭,给、一个点亮。

2.从左到右一次点亮。

3.从左到右依次熄灭。

4.从两边向中间再向两边依次点亮。

三、设计原理用VHDL进行设计,首先应该理解,VHDL语言是一种全方位硬件描述语言,包括系统行为级,寄存器传输级和逻辑门级多个设计层次。

应充分利用VHDL“自顶向下”的设计优点以及层次化的设计概念,层次概念对于设计复杂的数字系统是非常有用的,它使得我们可以从简单的单元入手,逐渐构成庞大而复杂的系统。

在电路中以1代表灯亮,以0代表灯灭,由0、1按不同的规律组合代表不同的灯光图案,同时使其选择不同的频率,从而实现多种图案多种频率的花样功能显示。

在该电路中只需简单的修改程序就可以灵活地调整彩灯图案和变化方式。

四、设计方案首先应进行系统模块的划分,规定每一模块的功能以及各个模块之问的接口。

设计方案为:一个四分频输出分频器,一个彩灯花样模式选择器,一个清零控制器,一个暂停控制器。

子模块及其功能:本次设计分为四个子模块,即八路彩灯花样控制器、四频率输出分频器,暂停控制器和清零控制器,其子模块及其功能如下:(1)四频率输出分频器:在本次设计中,我们只设计了四种花样,我们要求这四种花样以不同的频率显示,而只有一个输入的时钟信号,所以我们对所输入的时钟信号进行2分频、4分频、8分频、16分频,得到四种频率信号。

(2)清零控制器,当清零生效时,将每个灯输入低电平。

(3)暂停控制器:通过控制时钟信号来控制电路是否工作,当工作时输入时钟信号,当暂停时输入高电瓶。

利用VHDL语言进行可变速彩灯控制器的设计

利用VHDL语言进行可变速彩灯控制器的设计

利用VHDL语言进行可变速彩灯控制器的设计0 引言硬件描述语言(HDL)是相对于一般的计算机软件语言如C,Pascal 而言的。

HDL 是用于设计硬件电子系统的计算机语言,它描述电子系统的逻辑功能、电路结构和连接方式。

设计者可以利用HDL 程序来描述所希望的电路系统,规定其结构特征和电路的行为方式,然后利用综合器和适配器将此程序变成能控制FPGA 和CPLD 内部结构,并实现相应逻辑功能的门级或更底层的结构网表文件和下载文件。

VHDL(VeryHigh Speed Integrated Circuit Hardware descriptionLangtuage)主要用于描述数字系统的结构、行为、功能和接口。

与其他的HDL 语言相比,VHDL 具有更强的行为描述能力,从而决定了它成为系统设计领域最佳的硬件描述语言。

强大的行为描述能力是避开具体的器件结构。

从逻辑行为上描述和设计大规模电子系统的重要保证。

在文献中作者从不同的角度阐述了EDA 技术的应用,它具有功能强大、描述能力强、可移植性好、研制周期短、成本低等特点,即使设计者不懂硬件的结构,也能进行独立的设计。

本文以Alter 公司提供的Max+PlusⅡ为平台,设计一个可变速的彩灯控制器,可以在不修改硬件电路的基础上,仅通过更改软件就能实现任意修改花型的编程控制方案,实现控制16 只LED 以8 种花型和4 种速度循环变化显示,而且设计非常方便,设计的电路保密性强。

1 设计原理用VHDL 进行设计,首先应该理解,VHDL 语言是一种全方位硬件描述语言,包括系统行为级,寄存器传输级和逻辑门级多个设计层次。

应充分利用VHDL“自顶向下”的设计优点以及层次化的设计概念,层次概念对于设计复杂的数字系统是非常有用的,它使得我们可以从简单的单元入手,逐渐构成庞大。

基于VHDL实现多路彩灯控制器设计应用

基于VHDL实现多路彩灯控制器设计应用

基于VHDL实现多路彩灯控制器设计应用关键词:VHDL 彩灯控制07通信工程本科班沈治文摘要:设计一个彩灯控制程序器。

可以实现四种花型循环变化,有复位开关。

整个系统共有三个输入信号CLK,RST,Sel,八个输出信号控制八个彩灯。

时钟信号CLK脉冲由系统的晶振产生。

各种不同花样彩灯的变换由Sel控制.此彩灯控制系统设定有四种花样变化,这四种花样可以进行切换,四种花样分别为:(1) 彩灯从左到右逐次闪亮。

(2)彩灯从左向右逐次点亮,且亮后不熄灭。

(3) 彩灯两边同时亮两个,然后逐次向中间点亮。

(4) 全部彩灯亮与熄灭交替。

Abstract: The design of a control program Lantern device. Four kinds of flowers can be achieved circulation change, reset switch. The whole system has three input signals CLK, RST, Sel, 8 output signal control 8 lights. The clock signal CLK pulses generated by the system of the crystal. Lanterns of different patterns of transformation controlled by Sel. The lights control system configuration there are four patterns change, four kinds of patterns can be switched, four kinds of patterns are as follows:(1) successive flashing lights from left to right.(2) successive lantern lit from left to right, and the light is not extinguished after.(3) The two bright lights on both sides at the same time, and then successively to the center light.(4) All lights turn bright and quenching在日常生活中,为了增加聚会或是过节氛围,经常要使用到彩灯循环点亮。

EDA课程设计:八路彩灯控制器

EDA课程设计:八路彩灯控制器

EDA课程设计设计题目:基于VHDL的8路彩灯控制器设计一、课程设计的目的1.熟悉QuartusⅡ软件的使用方法,使用VHDL 文本输入设计法进行任务设计。

2.增强自己实际动手能力,独立解决问题的能力。

3.通过课程设计对所学的知识进行更新及巩固.二、课程设计的基本要求本次课程设计是设计一个8路彩灯控制器,能够控制8路彩灯按照两种节拍,三种花型循环变化。

设计完成后,通过仿真验证与设计要求进行对比,检验设计是否正确。

三、课程设计的内容编写硬件描述语言VHDL程序,设计一个两种节拍、三种花型循环变化的8路彩灯控制器,两种节拍分别为0.25s和0.5s。

三种花型分别是:(1)8路彩灯分成两半,从左至右顺次渐渐点亮,全亮后则全灭。

(2)从中间到两边对称地渐渐点亮,全亮后仍由中间向两边逐次熄灭。

(3)8路彩灯从左至右按次序依次点亮,全亮后逆次序依次熄灭。

四、实验环境PC机一台;软件QuartusⅡ6.0五、课程设计具体步骤及仿真结果1、系统总体设计框架结构分频模块:把时钟脉冲二分频,得到另一个时钟脉冲,让这两种时钟脉冲来交替控制花型的速度。

二选一模块:选择两种频率中的一个控制彩灯的花型。

8路彩灯的三种花型控制模块:整个系统的枢纽,显示彩灯亮的情况。

2、系统硬件单元电路设计1.分频模块设计实验程序:library ieee;use ieee.std_logic_1164.all;entity fenpin2 isport( clk:in std_logic;clkk:out std_logic);end fenpin2;architecture behav of fenpin2 isbeginprocess(clk)variable clkk1:std_logic:='0';beginif clk'event and clk='1' then clkk1:= not clkk1;end if;clkk<=clkk1;end process;end behav;RTL电路图:波形图:2.二选一模块设计实验程序:library ieee;use ieee.std_logic_1164.all; entity mux21 isport(a,b,s:in std_logic;y:out std_logic); end mux21;architecture behave of mux21 is beginprocess(a,b,s)beginif s='0' then y<=a;else y<=b;end if;end process;end behave;RTL电路图:波形图:3.8路彩灯的三种花型控制模块设计程序: l ibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity color8 isport(clk,rst :in std_logic;q:out std_logic_vector(7 downto 0)); end;architecture a of color8 issignal s:std_logic_vector(4 downto 0); beginprocess(s,clk)beginif rst='1' then s<="00000";elsif clk'event and clk= '1' thenif s="11111" thens<="00000";else s<=s+1;end if;case s iswhen "00000"=>q<="00000000";when "00001"=>q<="10001000";when "00010"=>q<="11001100";when "00011"=>q<="11101110";when "00100"=>q<="11111111"; when "00101"=>q<="00000000"; when "00110"=>q<="00011000"; when "00111"=>q<="00111100"; when "01000"=>q<="01111110"; when "01001"=>q<="11111111"; when "01010"=>q<="11100111"; when "01011"=>q<="11000011"; when "01100"=>q<="10000001"; when "01101"=>q<="00000000"; when "01110"=>q<="10000000"; when "01111"=>q<="11000000"; when "10000"=>q<="11100000"; when "10001"=>q<="11110000"; when "10010"=>q<="11111000"; when "10011"=>q<="11111100"; when "10100"=>q<="11111110"; when "10101"=>q<="11111111"; when "10110"=>q<="11111110"; when "10111"=>q<="11111100"; when "11000"=>q<="11111000"; when "11001"=>q<="11110000"; when "11010"=>q<="11100000"; when "11011"=>q<="11000000"; when "11100"=>q<="10000000"; when "11101"=>q<="00000000"; when others=>null;end case;end if;end process; end;RTL电路图:波形图:4.综合程序library ieee;use ieee.std_logic_1164.all;entity fenpin2 isport( clk:in std_logic;clkk:out std_logic);end fenpin2;architecture behav of fenpin2 isbeginprocess(clk)variable clkk1:std_logic:='0';beginif clk'event and clk='1' then clkk1:= not clkk1;end if;clkk<=clkk1;end process;end behav;library ieee;use ieee.std_logic_1164.all;entity mux21 isport(a,b,s:in std_logic;y:out std_logic);end mux21;architecture behave of mux21 isbeginprocess(a,b,s)beginif s='0' then y<=a;else y<=b;end if;end process;end behave;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity color8 isport(clk,rst :in std_logic;q:out std_logic_vector(7 downto 0)); end;architecture a of color8 issignal s:std_logic_vector(4 downto 0); beginprocess(s,clk)beginif rst='1' then s<="00000";elsif clk'event and clk= '1' thenif s="11111" thens<="00000";else s<=s+1;end if;case s iswhen "00000"=>q<="00000000";when "00001"=>q<="10001000";when "00010"=>q<="11001100";when "00011"=>q<="11101110";when "00100"=>q<="11111111";when "00101"=>q<="00000000";when "00110"=>q<="00011000";when "00111"=>q<="00111100";when "01000"=>q<="01111110";when "01001"=>q<="11111111";when "01010"=>q<="11100111";when "01011"=>q<="11000011";when "01100"=>q<="10000001";when "01101"=>q<="00000000";when "01110"=>q<="10000000";when "01111"=>q<="11000000";when "10000"=>q<="11100000";when "10001"=>q<="11110000";when "10010"=>q<="11111000";when "10011"=>q<="11111100";when "10100"=>q<="11111110";when "10101"=>q<="11111111";when "10110"=>q<="11111110";when "10111"=>q<="11111100";when "11000"=>q<="11111000";when "11001"=>q<="11110000";when "11010"=>q<="11100000";when "11011"=>q<="11000000";when "11100"=>q<="10000000";when "11101"=>q<="00000000";when others=>null;end case;end if;end process; end;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity balucaideng isport (clk,s,rst:in std_logic;q:out std_logic_vector(7 downto 0)); end;architecture one of balucaideng issignal h0,h1:std_logic;component fenpin2port( clk:in std_logic;clkk:out std_logic);end component;component mux21port(a,b,s:in std_logic;y:out std_logic);end component;component color8port(clk,rst :in std_logic;q:out std_logic_vector(7 downto 0));end component;beginu1: fenpin2 port map(clk=>clk,clkk=>h0);u2: mux21 port map(a=>h0,b=>clk,s=>s;y=>h1); u3: color8 port map(clk=>h1,rst=>rst,q=>q); end;波形图:六、实验总结。

用vhdl设计十六路彩灯控制器程序仿真图报告

用vhdl设计十六路彩灯控制器程序仿真图报告

用v h d l设计十六路彩灯控制器程序仿真图报告-CAL-FENGHAI.-(YICAI)-Company One1课程设计报告题 目 用VHDL 设计十六路彩灯控制器课 程 名 称 创新电子系统设计 院 部 名 称 信息技术学院 专 业 电子信息工程班 级 08电子信息工程(1)班 学 生 姓 名 学 号 课程设计地点 实验楼 课程设计学时 60学时 指 导 教 师金陵科技学院教务处成绩一、课程设计目的与要求 (4)二、课程设计的题目及内容 (4)三、设计过程 (5)3.1 模块设计 (5)3.2时序制电路模块程序及器件原理图 (7)3.3 显示模块电路程序及器件原理图 (9)3.4 顶出模块设计程序及器件原理图 (11)四、设计结果 (12)(1)仿真波形图 (12)①时序控制模块仿真波形: (12)②显示模块仿真波形: (13)③多路彩灯控制仿真波形: (13)(2)管脚连接对应表 (14)(3)硬件实物图 (14)五、总结 (16)一、课程设计目的与要求“创新电子系统设计”课程是专业教学计划中设置的独立实践环节,其主要目的为加强对学生创新意识、创新精神和创新能力的培养,鼓励和倡导学生积极参加学科竞赛、课外科技和科研活动、创造发明活动和各类社会实践活动,提高学生综合素质,促进学生个性发展。

要求学生能在老师的指导下,自主完成一个较复杂综合电子系统设计与制作的全过程,或者通过参加各类各级和通信、电子相关课外科技活动及竞赛得到真正的实战训练。

二、课程设计的题目及内容题目:用VHDL语言设计十六路彩灯控制器内容:1.设计一个多路彩灯控制器,十六种彩灯能循环变化,有清零开关,可以变化彩灯闪动频率即是可以选择快慢两种节拍。

2.整个系统有三个输入信号,分别为控制快慢的信号OPT,复位清零信号CLR,输出信号是16路彩灯输出状态。

系统框图如:图 2.1.1 系统总体框图3.主要模块组成:时序控制电路模块和显示电路模块,时序控制电路是根据输入信号的设置得到相应的输出信号,并将此信号作为显示电路的时钟信号;显示电路输入时钟信号的周期,有规律的输出设定的六种彩灯变化类型。

第2章_多路彩灯控制器的设计与分析教材教学课件

第2章_多路彩灯控制器的设计与分析教材教学课件

第2章 多路彩灯控制器的设计与分析
-- 当CHOSE_KEY="1"时产生基准时钟频率的1/4的时钟信 号,否则产生基准时钟 --频率的1/8的时钟信号 ELSE IF TEMP="111" THEN TEMP:="000"; CLLK<=NOT CLLK ;
ELSE
第2章 多路彩灯控制器的设计与分析
图2.3 显示控制电路XSKZ仿真 图
第2章 多路彩灯控制器的设计与分析
图灯控制器的设计与分析
2.4.2 系统的硬件验证 系统通过仿真后,我们可根据自己所拥有的EDA实
验开发系统进行编程下载和硬件验证。考虑到一般 EDA实验开发系统提供的输出显示资源有限,我们可 将输出适当调整后进行硬件验证。
CLR:IN STD_LOGIC; LED:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END ENTITY XSKZ; ARCHITECTURE ART OF XSKZ IS
第2章 多路彩灯控制器的设计与分析
第2章 多路彩灯控制器的设计与分析
第2章 多路彩灯控制器的设计与分析
第2章 多路彩灯控制器的设计与分析
2.6 系统扩展思路
(1) 在彩灯的快慢节奏的控制上,若去掉快慢节奏控 制开关,如何控制快慢节奏的交替变化。 (2) 设计外围电路:系统用方波信号源、直流工作电 源、彩灯控制的驱动电路。 (3) 若为课程设计,除要求设计调试程序、外围电路 外,还可要求设计、制作整个系统,包括PCB的制作。
TEMP:=TEMP+"1"; END IF; END IF;
END IF; END PROCESS; CLK<=CLLK; END ARCHITECTURE ART;

实验报告循环彩灯控制器

实验报告循环彩灯控制器

湖南科技大学信息与电气工程学院《VHDL语言》课程设计报告题目: VHDL语言课程设计专业:班级:姓名:学号:课程设计任务书一、课程设计的目的:1,通过本次课程设计,熟练掌握MAX-PLUS2的应用,操作,并对VHDL语言的编程做一实践检验,编出程序,并进行仿真,并根据所得仿真图形分析和推断并改进所涉及的程序,让程序在现实生活中得以更贴近的应用。

2,本次操作的命题一是:循环彩灯控制器,本设计的要求是:设计一个循环彩灯控制器,该控制器控制红,绿,黄三个发光管循环点亮。

要求红发光管亮3秒,绿发光管亮2秒,黄发光管亮1秒。

3,本次操作的命题二是:数字显示的秒表,本设计的要求是:设计一块用数码管显示的秒表,能够准确的计时并显示。

最大计时为59秒,最小精确到0.1秒。

二、设计方案的论证:命题一循环彩灯控制器的方案一:在本题中要求控制器可以控制红,绿,黄三个发光管循环点亮,并且要求发光的时间不一样,这样,本质设计思想是循环累加,即时钟信号高电平开始,m值开始累加,CASE m ISWHEN "001"=>dout<="100";WHEN "010"=>dout<="100";WHEN "011"=>dout<="100";WHEN "100"=>dout<="010";WHEN "101"=>dout<="010";WHEN "110"=>dout<="001";WHEN OTHERS=>dout<="111";END CASE;前三个值都将赋值给dout1,也就是红灯发光的三秒,然后两个赋值给绿灯,最后一秒赋值给黄灯。

VHDL实现多路彩灯控制器

VHDL实现多路彩灯控制器

VHDL实现多路彩灯控制器本文介绍应用美国ALTERA公司的MAX+Plus II平台,使用VHDL硬件描述语言实现的多路彩灯控制器。

一、多路彩灯控制器设计原理设计一个彩灯控制程序器。

可以实现四种花型循环变化,有复位开关。

整个系统共有三个输入信号CLK,RST,SelMode,八个输出信号控制八个彩灯。

时钟信号CLK脉冲由系统的晶振产生。

各种不同花样彩灯的变换由SelMode控制.硬件电路的设计要求在彩灯的前端加74373锁存器。

用来对彩灯进行锁存控制。

此彩灯控制系统设定有四种花样变化,这四种花样可以进行切换,四种花样分别为:(1)彩灯从左到右逐次闪亮。

然后从右到左逐次熄灭。

(2)彩灯两边同时亮两个,然后逐次向中间点亮。

(3)彩灯从左到右两个两个点亮,然后从右到左两个两个逐次点亮。

(4)彩灯中间两个点亮。

然后同时向两边散开。

二、多路彩灯控制器的VHDL的实现本控制电路采用VHDL语言设计。

运用自顶而下的设计思想,按功能逐层分割实现层次化设计。

根据多路彩灯控制器的设计原理,将整个控制器分为四个部分,分别对应彩灯的四种变化模式、利用VHDL语言实现该功能程序如下:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_loglc_ARITH.ALL;USE IEEE.std_logic_UNSIGNED.ALL;ENTITY CaiDeng ISport(CLK:IN std_logic;RST:in std_logic;SelMode:in std_logic_vector(1 downto 0);--彩灯花样控制Light:out std_logic_vector(7 downto 0));END CaiDeng;ARCHITECTURE control OF CaiDeng ISSIGNAL clk1ms:std_logic:='0';SIGNAL cnt1:std_logic_vector(3 downto 0):="0000"; SIGNAL ent2:std_logic_vector(1 downto 0):="00"; SIGNAL cnt3:std_logic_vector(3 downto 0):="0000"; SIGNAL cnt4:std_logic_vector(1 downto 0):="00"; BEGINP1:PR0CESS(clk1ms)BEGINif(clk1ms'EVENT AND clk1ms='1')thenif selmode="00" then --第一种彩灯花样的程序if cnt1="1111" thencnt1<="0000";else cnt1<= cnt1+1;end if;case cnt1 iswhen "0000"=>light<="10000000";when "0001"=>light<="11000000";when "0010"=>light<="11100000";when "0100"=>light<="11111000";when "0101"=>light<="11111100";when "0110"=>light<="11111110";when "0111"=>light<="11111111";when "1000"=>light<="11111110";when "1001"=>light<="11111100";when "1010"=>light<="11111000";when "1011"=>light<="11110000";when "1100"=>light<="11100000";when "1101"=>light<="11000000";when "1110"=>light<="10000000";when others=>light<="00000000";end case;elsif selmode="01" then -- 第二种彩灯花样的程序if cnt2="11" thencnt2<="00";else cnt2<= cnt2+1;end if;case cnt2 iswhen "00"=>light<="10000001";when "01"=>light<="11000011";when "11"=>light<="11111111";when others=>light<="00000000";end ease;elsif selmode="10" then --第三种彩灯花样的程序if cnt3="1111" thencnt3<="0000";else cnt3<=cnt3+1;end if;case cnt3 iswhen "0000"=>light<="11000000";when "0001"=>light<="01100000";when "0010"=>light<="00110000";when "0011"=>light<="00011000";when "0100"=>light<="00001100";when "0101"=>light<="00000110";when "0110"=>light<="00000011";when "0111"=>light<="00000110";when "1000"=>light<="00001100";when "1001"=>light<="00011000";when "1010"=>light<="00110000";when "1011"=>light<="01100000";when others=>light<="00000000";end case;elsif selmode="11" then -- 第四种彩灯花样的程序if cnt4="11" thencnt4<="00";else cnt4<= cnt4+1;end if;case cnt4 iswhen "00"=>light<="00011000";when "01"=>light<="00111100";when "10"=>light<="01111110";when "11"=>light<="11111111";when others=>light<="00000000";end ease;end if;end if;END PROCESS P1;P2:PROCESS(clk) --分频进程variable cnt:integer range 0 to 1000;BEGINIF(RST='0')thencnt:=0:ELSIF(clk'EVENT AND clk='1')thenif cnt<999 thencnt:=cnt+1;clk1ms<='0';elsecnt:=0;clk1ms<='1';end if;end if;end PROCESS P2;end control;三、功能仿真及下载验证各模块VHDL程序经过编译优化后,选择合适的目标芯片进行综合、管脚配置。

EDA技术:实验10-彩灯控制器设计与实现

EDA技术:实验10-彩灯控制器设计与实现

LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY counter_32 IS

PORT

(

clk,rst
: IN
std_logic;

count_out
: OUT integer range 0 to 31 );
END counter_32;
ARCHITECTURE cd OF fenpinqi IS
begin
p1:process(clk,rst)
variable a:integer range 0 to 20;

begin
if rst='1' then
clk_4<='0';
----- 复位信号控制部分
else

when 24=>output<="00000001";sm<="0100110";

when 25=>output<="00000010";sm<="0100110";

when 26=>output<="00000100";sm<="0100110";

when 27=>output<="00001000";sm<="0100110";

when 28=>output<="00010000";sm<="0100110";

基于VHDL语言的十六路彩灯控制器设计解读

基于VHDL语言的十六路彩灯控制器设计解读

1 引言VHDL(Very Higll Speed Integrated Circuit Hardware Description Language)即超高速集成电路硬件描述语言。

它是20世纪70年代和80年代初由美国国防部为其超高速集成电VHSIC计划提出的,支持硬件的设计、综合、验证和测试,主要用于描述数字系统的行为、结构、功能和接口[1],也是一种应用较为广泛的HDL语言,能对范围广泛的各种复杂的网络(如电路系统、印刷电路板、芯片、逻辑门等)在不同的抽象级加以描述,而且在整个设计过程中可使用同一种语言。

采用VHDL作为HDL综合设计的优点有:标准语言,即设计者可在不同的环境(例如MAX PLUS II)下进行设计;仿真和综合均可采用同一种语言进行;VHDL中提供的大量的模块资源,简化了设计者的开发工作;由VHDL描述的源文件既是程序软件又可作为设计的文档。

每当夜幕降临,街上的彩灯便发出形态各异、色彩斑斓的耀眼光芒,尤其是节假日,主要干道更是彩灯齐放,烘托出浓厚的节日气氛.现代舞台上彩灯的闪烁越发引人注目,更容易使人陶醉在欢乐的海洋中.彩灯装置多种多样[2],本文在设计中采用EDA技术,应用目前广泛应用的VHDL硬件电路描述语言,实现十六路彩灯控制器的设计,利用MAXPLUS II集成开发环境进行综合、仿真,并下载到CPLD可编程逻辑器件中,完成系统的控制作用。

1.1课程设计背景随着电子技术的发展, 应用系统向着小型化、快速化、大容量、重量轻的方向发展,EDA (Electronic Design Automatic) 技术的应用引起电子产品及系统开发的革命性变革。

VHDL 语言作为可编程逻辑器件的标准语言描述能力强, 覆盖面广,抽象能力强, 在实际应用中越来越广泛。

在这个阶段,人们开始追求贯彻整个系统设计的自动化,可以从繁重的设计工作中彻底解脱出来,把精力集中在创造性的方案与概念构思上,从而可以提高设计效率,缩短产品的研制周期。

基于VHDL的八路彩灯控制器

基于VHDL的八路彩灯控制器

目录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"当选择花样二时状态图如下: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"2.2总体框图3. 模块设计3.1分频器模块--由于机器时钟周期太短,不能满足要求--此模块实现分频,得到需要的时钟LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY fenpinqi ISPORT(CLK:IN STD_LOGIC; --原机器时钟CLR:IN STD_LOGIC;CLK1:OUT STD_LOGIC); --分频后的时钟END fenpinqi;ARCHITECTURE ART OF fenpinqi ISSIGNAL CK:STD_LOGIC;BEGINPROCESS(CLK,CLR)ISVARIABLE TEMP:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINIF CLR='1' THENCK<='0';TEMP:="000";ELSIF(CLK'EVENT AND CLK='1')THENIF TEMP="111" THENTEMP:="000";CK<=NOT CK;ELSETEMP:=TEMP+'1';END IF;END IF;END PROCESS;CLK1<=CK;END ART;3.2花样一模块--用分频器分频后的时钟来显示花样实现--从两边向中间亮,再从中间向两边亮;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY hy1 ISPORT(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 ISTYPE STATE IS(S0,S1,S2,S3,S4,S5,S6); --设计状态机,实现花样转换SIGNAL CURRENT_STATE:STATE;SIGNAL LIGHT:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS(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";BEGINIF XUAN="01" THENIF CLR='1' THENCURRENT_STATE<=S0;ELSIF(CLK1'EVENT AND CLK1='1')THENCASE 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花样二模块--用分频器分频后的时钟来显示花样实现--实现淡入淡出效果LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY hy2 ISPORT(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 ENTITY hy2;ARCHITECTURE ART OF hy2 IS --设计状态机,实现花样转换TYPE STATE IS(S0,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15,S16); SIGNAL CURRENT_STATE:STATE;SIGNAL LIGHT:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS(CLR,CLK1,XUAN)IS --定义花样(1为灯亮,0为灯灭) 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";CONSTANT L6:STD_LOGIC_VECTOR(7 DOWNTO 0):="11111000";CONSTANT L7:STD_LOGIC_VECTOR(7 DOWNTO 0):="11111100";CONSTANT L8:STD_LOGIC_VECTOR(7 DOWNTO 0):="11111110";CONSTANT L9:STD_LOGIC_VECTOR(7 DOWNTO 0):="11111111";CONSTANT L10:STD_LOGIC_VECTOR(7 DOWNTO 0):="01111111";CONSTANT L11:STD_LOGIC_VECTOR(7 DOWNTO 0):="00111111";CONSTANT L12:STD_LOGIC_VECTOR(7 DOWNTO 0):="00011111";CONSTANT L13:STD_LOGIC_VECTOR(7 DOWNTO 0):="00001111";CONSTANT L14:STD_LOGIC_VECTOR(7 DOWNTO 0):="00000111";CONSTANT L15:STD_LOGIC_VECTOR(7 DOWNTO 0):="00000011";CONSTANT L16:STD_LOGIC_VECTOR(7 DOWNTO 0):="00000001"; BEGINIF XUAN="10" THENIF CLR='1' THENCURRENT_STATE<=S0;ELSIF(CLK1'EVENT AND CLK1='1')THENCASE 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<=S7;WHEN S7=> LIGHT<=L7; CURRENT_STATE<=S8;WHEN S8=> LIGHT<=L8; CURRENT_STATE<=S9;WHEN S9=> LIGHT<=L9; CURRENT_STATE<=S10;WHEN S10=> LIGHT<=L10; CURRENT_STATE<=S11;WHEN S11=> LIGHT<=L11; CURRENT_STATE<=S12;WHEN S12=> LIGHT<=L12; CURRENT_STATE<=S13;WHEN S13=> LIGHT<=L13; CURRENT_STATE<=S14;WHEN S14=> LIGHT<=L14; CURRENT_STATE<=S15;WHEN S15=> LIGHT<=L15; CURRENT_STATE<=S16;WHEN S16=> LIGHT<=L16; CURRENT_STATE<=S1;END CASE;END IF;END IF;END PROCESS;LED2<=LIGHT;END ART;3.4花样三模块--用分频器分频后的时钟来显示花样实现--从左至右逐个亮,在从右到左逐个亮LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY hy3 ISPORT(CLK1:IN STD_LOGIC;CLR:IN STD_LOGIC;XUAN:IN STD_LOGIC_VECTOR(1 DOWNTO 0);LED3:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END ENTITY hy3;ARCHITECTURE ART OF hy3 IS --设计状态机,实现花样转换TYPE STATE IS(S0,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14);SIGNAL CURRENT_STATE:STATE;SIGNAL LIGHT:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS(CLR,CLK1,XUAN)IS --定义花样(1为灯亮,0为灯灭) CONSTANT L1:STD_LOGIC_VECTOR(7 DOWNTO 0):="10000000";CONSTANT L2:STD_LOGIC_VECTOR(7 DOWNTO 0):="01000000";CONSTANT L3:STD_LOGIC_VECTOR(7 DOWNTO 0):="00100000";CONSTANT L4:STD_LOGIC_VECTOR(7 DOWNTO 0):="00010000";CONSTANT L5:STD_LOGIC_VECTOR(7 DOWNTO 0):="00001000";CONSTANT L6:STD_LOGIC_VECTOR(7 DOWNTO 0):="00000100";CONSTANT L7:STD_LOGIC_VECTOR(7 DOWNTO 0):="00000010";CONSTANT L8:STD_LOGIC_VECTOR(7 DOWNTO 0):="00000001";CONSTANT L9:STD_LOGIC_VECTOR(7 DOWNTO 0):="00000010";CONSTANT L10:STD_LOGIC_VECTOR(7 DOWNTO 0):="00000100";CONSTANT L11:STD_LOGIC_VECTOR(7 DOWNTO 0):="00001000";CONSTANT L12:STD_LOGIC_VECTOR(7 DOWNTO 0):="00010000";CONSTANT L13:STD_LOGIC_VECTOR(7 DOWNTO 0):="00100000";CONSTANT L14:STD_LOGIC_VECTOR(7 DOWNTO 0):="01000000";BEGINIF XUAN="11" THENIF CLR='1' THENCURRENT_STATE<=S0;ELSIF(CLK1'EVENT AND CLK1='1')THENCASE 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<=S7;WHEN S7=> LIGHT<=L7; CURRENT_STATE<=S8;WHEN S8=> LIGHT<=L8; CURRENT_STATE<=S9;WHEN S9=> LIGHT<=L9; CURRENT_STATE<=S10;WHEN S10=> LIGHT<=L10; CURRENT_STATE<=S11;WHEN S11=> LIGHT<=L11; CURRENT_STATE<=S12;WHEN S12=> LIGHT<=L12; CURRENT_STATE<=S13;WHEN S13=> LIGHT<=L13; CURRENT_STATE<=S14;WHEN S14=> LIGHT<=L14; CURRENT_STATE<=S1;END CASE;END IF;END IF;END PROCESS;LED3<=LIGHT;END ART;3.5顶层设计--将以上几个模块整合起来,实现八路彩灯的花样控制LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY caideng ISPORT(CLK:IN STD_LOGIC;CLR:IN STD_LOGIC;XUAN:IN STD_LOGIC_VECTOR(1 DOWNTO 0);LED:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END ENTITY caideng;ARCHITECTURE ART OF caideng ISCOMPONENT fenpinqi --对分频器模块进行定义PORT(CLK:IN STD_LOGIC;CLR:IN STD_LOGIC;CLK1:OUT STD_LOGIC);END COMPONENT fenpinqi;COMPONENT hy1 --对花样一模块进行定义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 COMPONENT hy1;COMPONENT hy2 --对花样二模块进行定义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 COMPONENT hy2;COMPONENT hy3 --对花样三模块进行定义PORT(CLK1:IN STD_LOGIC;CLR:IN STD_LOGIC;XUAN:IN STD_LOGIC_VECTOR(1 DOWNTO 0);LED3:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END COMPONENT hy3;SIGNAL S:STD_LOGIC; --定义中间变量SIGNAL L1:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL L2:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL L3:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINU1:fenpinqi PORT MAP(CLK,CLR,S); --对分频器模块进行例化U2:hy1 PORT MAP(S,CLR,XUAN,L1); --对花样一模块进行定义U3:hy2 PORT MAP(S,CLR,XUAN,L2); --对花样二模块进行例化U4:hy3 PORT MAP(S,CLR,XUAN,L3); --对花样三模块进行例化LED<=L1 WHEN XUAN="01" ELSE --让LED显示选定的花样L2 WHEN XUAN="10" ELSEL3;END ART;4. 仿真图4.1分频器仿真波形CLK为输入,是机器时钟。

VHDL-彩灯控制电路的设计与实现

VHDL-彩灯控制电路的设计与实现

VHDL 彩灯控制电路的设计与实现一、实验目的1.进一步了解时序电路设计方法2.熟悉状态机的设计方法二、实验所用仪器及元器件1、计算机2、直流稳压电源3、数字系统与逻辑设计实验开发板三、实验内容用VHDL语言设计并实现一个彩灯控制(8个发光二极管)电路,仿真并下载验证其功能。

彩灯有两种工作模式,可以通过拨码开关或者按键进行切换。

(1)单点移动模式:一个点在8个发光二极管上来回的亮(2)幕布模式:从中间两个点,同时向两边一次点亮直至全亮,然后再向中间点灭,依次往复四、设计思路与过程根据实验要求,需要实现在拨码开关或者按键的控制下实现两种状态机的转换。

首先,确定输入输出变量:输入:拨码开关a:实现两种模式的转换;时钟clk::提供有效时钟沿;输出:8维向量b:连接8个发光二极管。

其次,确定电路工作状态因为在单点移动模式和幕布模式都要满足灯来回亮,共计工作状态23种:a=0时,实现单点移动模式,工作状态有s0~s13共14种状态;a=1时,实现幕布模式,工作状态有s14~s22共9种状态。

再次,大致确定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 std_logic;a: in std_logic;b:out std_logic_vector(7 downto 0));end light;architecture light_1 of light istype 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 range 0 to ;beginp0:process(clk) --分频器,把50MHz的时钟clk分为1Hz的时钟clk_out beginif clk'event and clk='1' thenif tmp= thentmp<=0;elsetmp<=tmp+1;end if;if tmp= thenclk_out<='1';elseclk_out<='0';end if;end if;end process;p1:process(current_state,a) --当前状态在开关函数a作用下所储存的下一状态begincase current_state iswhen s0=> if(a='0') then next_state<=s1;else next_state<=s14; end if;when s1=> if(a='0') then next_state<=s2;else next_state<=s14; end if;when s2=> if(a='0') then next_state<=s3;else next_state<=s14; end if;when s3=> if(a='0') then next_state<=s4;else next_state<=s14; end if;when s4=> if(a='0') then next_state<=s5;else next_state<=s14; end if;when s5=> if(a='0') then next_state<=s6;else next_state<=s14; end if;when s6=> if(a='0') then next_state<=s7;else next_state<=s14; end if;when s7=> if(a='0') then next_state<=s8;else next_state<=s14; end if;when s8=> if(a='0') then next_state<=s9;else next_state<=s14; end if;when s9=> if(a='0') then next_state<=s10;else next_state<=s14; end if;when s10=> if(a='0') then next_state<=s11;else next_state<=s14; end if;when s11=> if(a='0') then next_state<=s12;else next_state<=s14; end if;when s12=> if(a='0') then next_state<=s13;else next_state<=s14; end if;when s13=> if(a='0') then next_state<=s0;else next_state<=s14; end if;when s14=> if(a='1') then next_state<=s15;else next_state<=s0; end if;when s15=> if(a='1') then next_state<=s16;else next_state<=s0; end if;when s16=> if(a='1') then next_state<=s17;else next_state<=s0; end if;when s17=> if(a='1') then next_state<=s18;else next_state<=s0; end if;when s18=> if(a='1') then next_state<=s19;else next_state<=s0; end if;when s19=> if(a='1') then next_state<=s20;else next_state<=s0; end if;when s20=> if(a='1') then next_state<=s21;else next_state<=s0; end if;when s21=> if(a='1') then next_state<=s22;else next_state<=s0; end if;when s22=> if(a='1') then next_state<=s14;else next_state<=s0; end if;end case;end process;p2:process(clk_out) --时钟clk_out作用下的状态转换函数beginif(clk_out'event and clk_out='1') thencurrent_state<=next_state;end if;end process;p3:process(current_state) --当前状态所对应的输出函数begincase current_state iswhen s0=>b<="";when s1=>b<="";when s2=>b<="";when s3=>b<="";when s4=>b<="";when s5=>b<="";when s6=>b<="";when s7=>b<="";when s8=>b<="";when s9=>b<="";when s10=>b<="";when s11=>b<="";when s12=>b<="";when s13=>b<="";when s14=>b<="";when s15=>b<="";when s16=>b<="";when s17=>b<="";when s18=>b<="";when s19=>b<="";when s20=>b<="";when s21=>b<="";when s22=>b<="";end case;end process;end light_1;六、仿真波形说明:为了仿真需要,在进行仿真事,将分频部分p0去掉,直接用clk作用进程p2 其中:End time=2msa period time=60usclk period time=2us七、故障及问题分析本次实验整体比较顺利,但仍旧出现了几个问题:开始并未设置分频器,clk的频率为50MHz,这个频率过高,若是直接用于提供时钟,不但不能看清现象,还会因为周期过短(可能会短于电路的延迟时间),导致输出错误。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要:本文基于分频器和有限状态机设计了可选择节拍、具有六种循环变换花型功能的多路彩灯控制器,并通过VHDL将其实现。

通过Modelsim得到了仿真波形,达到了预期的要求和功能。

目录一、背景介绍 (2)二、设计要求 (2)三、设计方案 (2)四、方案程序设计 (2)4.1 时序控制模块(SXKZ)程序 (3)4.1.1 T触发器单元程序 (3)4.1.2 多路选择器单元程序 (3)4.1.3 总的设计程序 (4)4.2 显示控制模块(XSKZ)程序 (5)4.3 多路彩灯控制器的顶层模块程序 (6)4.4 测试平台(TESTBENCH)程序 (7)五、仿真结果及分析 (8)5.1 多路彩灯控制器的RTL级 (8)5.2 多路彩灯控制器TECHNOLOGY图 (9)5.3 Modelsim仿真波形图 (10)六、设计的亮点 (10)一、背景介绍在现代生活中,彩灯作为一种装饰,既可以增强人们的感观,起到广告宣传的作用,又可以增添节日气氛,为人们的生活增添亮丽,用在舞台上增强晚会灯光效果。

随着电子技术的发展,应用系统向着小型化、快速化、大容量、重量轻的方向发展,EDA(Electronic Design Automatic)技术的应用引起电子产品及系统开发的革命性变革。

VHDL语言作为可编程逻辑器件的标准语言描述能力强,覆盖面广,抽象能力强,在实际应用中越来越广泛。

在这个阶段,人们开始追求贯彻整个系统设计的自动化,可以从繁重设计工作中彻底解脱出来,把精力集中在创造性的方案与概念构思上,从而可以提高设计效率,缩短产品的研制周期。

整个过程通过EDA 工具自动完成,大大减轻了设计人员的工作强度,提高了设计质量,减少了出错的机会。

因而我们对此十分感兴趣,希望借助我们学过的VHDL语言并通过学习相关知识能够进行简单的循环彩灯设计。

二、设计要求设计一个16路彩灯控制器,六种花样循环变化,有清零开关(即复位功能),并且可以选择快慢两种节拍。

三、设计方案对设计要求进行分析可知,整个系统共需三个输入信号,即控制彩灯节奏的基准时钟信号CLK_IN,系统清零信号CLR,彩灯节奏快慢选择开关CHOOSE_KEY;应共有16个输出信号,分别用来控制16路彩灯。

我们这里将整个彩灯控制器分为两大部分:时序控制电路SXKZ,用于产生节奏控制信号,选择产生基准频率的1/4和1/8的时钟信号来改变节奏;显示控制电路XSKZ生成变化的花样信号。

四、方案程序设计基于前面叙述的设计方案,VHDL程序也分为两个主要的模块:时序控制模块SXKZ和显示控制模块XSKZ。

4.1 时序控制模块(SXKZ)程序时序控制模块主要包括分频(得到1/4标准主频和1/8标准主频)和频率选择两部分,而分频的基本单元为T触发器,选频为二选一多路选择器,因而该模块的程序包括T触发器单元、多路选择器单元、SXKZ总的设计单元三个单元。

4.1.1 T触发器单元程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;entity T_FF isPort ( clk : in STD_LOGIC;rst : in STD_LOGIC;dout : buffer STD_LOGIC);end T_FF;architecture Behavioral of T_FF isbeginprocess(clk,rst) isbeginif (rst = '1') thendout <= '0';elseif (rising_edge(clk)) thenif dout='1' thendout <= '0';elsif dout = '0' thendout <= '1';end if;end if;end if;end process;end Behavioral;4.1.2 多路选择器单元程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;entity MUX_TWO_ONE isPort ( CHOOSE_KEY : in STD_LOGIC;DAT1 : in STD_LOGIC;DAT2 : in STD_LOGIC;DOUT : out STD_LOGIC);end MUX_TWO_ONE;ARCHITECTURE behave OF MUX_TWO_ONE IS BEGINPROCESS(DAT1,DAT2,CHOOSE_KEY)BEGINCASE CHOOSE_KEY ISWHEN '0' => DOUT <= DAT1;WHEN '1' => DOUT <= DAT2;WHEN OTHERS => DOUT <= '0';END CASE;END PROCESS;END behave;4.1.3 总的设计程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;entity SXKZ isPort ( CHOOSE_KEY : in STD_LOGIC;CLK_IN : in STD_LOGIC;CLR : in STD_LOGIC;clk : out STD_LOGIC);end SXKZ;architecture Behavioral of SXKZ issignal t1,t2,t3 : std_logic;component T_FFPort ( clk : in STD_LOGIC;rst : in STD_LOGIC;dout : out STD_LOGIC);end component;component MUX_TWO_ONEPort ( CHOOSE_KEY : in STD_LOGIC;DAT1 : in STD_LOGIC;DAT2 : in STD_LOGIC;DOUT : out STD_LOGIC);end component;beginu0 : T_FFPORT MAP(CLK_IN,CLR,t1);u1 : T_FFPORT MAP(t1,CLR,t2);u2 : T_FFPORT MAP(t2,CLR,t3);u3 : MUX_TWO_ONEPORT MAP(CHOOSE_KEY,t2,t3,clk);--devide-by-4 when CHOOSE_KEY is 0,devide-by-8 when CHOOSE_KEY is 1end Behavioral;4.2 显示控制模块(XSKZ)程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY XSKZ ISPORT( CLK : IN STD_LOGIC;CLR : IN STD_LOGIC;LED : OUT STD_LOGIC_VECTOR(15 DOWNTO 0));END ENTITY XSKZ;ARCHITECTURE ART OF XSKZ ISTYPE STATE IS (S0,S1,S2,S3,S4,S5,S6);SIGNAL CURRENT_STATE: STATE;SIGNAL FLOWER : STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINPROCESS(CLR,CLK) ISCONSTANT F1 : STD_LOGIC_VECTOR(15 DOWNTO 0) := "0001000100010001";CONSTANT F2 : STD_LOGIC_VECTOR(15 DOWNTO 0) := "1010101010101010" ;CONSTANT F3 : STD_LOGIC_VECTOR(15 DOWNTO 0) := "0011001100110011" ;CONSTANT F4 : STD_LOGIC_VECTOR(15 DOWNTO 0) := "0100100100100100" ;CONSTANT F5 : STD_LOGIC_VECTOR(15 DOWNTO 0) := "1001010010100101" ;CONSTANT F6 : STD_LOGIC_VECTOR(15 DOWNTO 0) := "1101101101100110" ;--DEFINATION OF SIX FLOWERSBEGINIF CLR = '1' THENCURRENT_STATE <= S0;ELSEIF RISING_EDGE(CLK) THENCASE CURRENT_STATE ISWHEN S0 =>FLOWER <= "ZZZZZZZZZZZZZZZZ";CURRENT_STATE <= S1 ;WHEN S1 =>FLOWER <= F1 ;CURRENT_STATE <= S2 ;WHEN S2 =>FLOWER <= F2 ;CURRENT_STATE <= S3 ;WHEN S3 =>FLOWER <= F3 ;CURRENT_STATE <= S4 ;WHEN S4 =>FLOWER <= F4 ;CURRENT_STATE <= S5 ;WHEN S5 =>FLOWER <= F5 ;CURRENT_STATE <= S6 ;WHEN S6 =>FLOWER <= F6 ;CURRENT_STATE <= S1 ;END CASE;END IF;END IF ;END PROCESS;LED <= FLOWER;END ARCHITECTURE ART;4.3 多路彩灯控制器的顶层模块程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;entity DLCDKZ_TOP isPort ( CHOOSE_KEY : in STD_LOGIC;CLK_IN : in STD_LOGIC;CLR : in STD_LOGIC;OUTPUT : out STD_LOGIC_VECTOR (15 downto 0)); end DLCDKZ_TOP;architecture Behavioral of DLCDKZ_TOP isSIGNAL tmp : std_logic;component SXKZPort ( CHOOSE_KEY : in STD_LOGIC;CLK_IN : in STD_LOGIC;CLR : in STD_LOGIC;clk : out STD_LOGIC);end component;component XSKZPORT(CLK : IN std_logic;CLR : IN std_logic;LED : OUT std_logic_vector(15 downto 0));END component;beginu0 : SXKZPORT MAP(CHOOSE_KEY,CLK_IN,CLR,tmp);u1 : XSKZPORT MAP(tmp,CLR,OUTPUT);end Behavioral;4.4 测试平台(TESTBENCH)程序LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY DLCDKZ_TB ISEND DLCDKZ_TB;ARCHITECTURE behavior OF DLCDKZ_TB ISsignal CLK_IN : std_logic;signal CLR : std_logic;signal CHOOSE_KEY : std_logic;SIGNAL OUTPUT : STD_LOGIC_VECTOR (15 downto 0);constant CLK_period : time := 10 ns;COMPONENT DLCDKZ_TOPPort ( CHOOSE_KEY : in STD_LOGIC;CLK_IN : in STD_LOGIC;CLR : in STD_LOGIC;OUTPUT : out STD_LOGIC_VECTOR (15 downto 0));END COMPONENT;BEGINuut: DLCDKZ_TOPPORT MAP(CHOOSE_KEY,CLK_IN,CLR,OUTPUT);CLK_IN_process : processbeginCLK_IN <= '0';wait for CLK_period/2;CLK_IN <= '1';wait for CLK_period/2;end process;CLR_PROCESS : PROCESSBEGINCLR <= '1'; WAIT FOR 10ns;CLR <= '0'; WAIT FOR 150ns;CLR <= '1'; WAIT FOR 10ns;CLR <= '0'; WAIT ;END PROCESS;CHOOSE_KEY_PROCESS : PROCESSBEGINCHOOSE_KEY <= '0'; WAIT FOR 150ns;CHOOSE_KEY <= '1'; WAIT;end process;END behavior;五、仿真结果及分析5.1 多路彩灯控制器的RTL级在XILINX ISE上可以得到总的设计方案的RTL图形,先截图如下:图1. 彩灯控制系统的RTL图形5.2 多路彩灯控制器TECHNOLOGY图在XILINX ISE的SYNTHESIS上得到多路彩灯控制器的TECHNOLOGY框图如下,为了更好地看清技术上的实现,这里给出TECHNOLOGY的完整图(图2)和局部图(图3)。

相关文档
最新文档