循环彩灯课程设计程序

时间:2024.3.31

湖南科技大学信息与电气工程学院

VHDL课程设计报告

专    业:      电子信息工程      

班    级:          一班          

姓    名:        崔 永 康        

学    号:       1104030115       

指导老师:       罗 朝 辉          

             

           

   课程设计任务书

1、课程设计的目的。

     本设计的任务是熟悉支持VHDL语言的软件,如Max Plus 2,quartus等,利用这一类软件使用VHDL语言进行设计编译仿真。本次设计的主要目的:

   1、使我们熟练掌握相关软件Max Plus 2及quartus的使用操作。能对VHDL语言程序进行编译及调试,以及通过计算机仿真,得到正确的仿真波形图,并根据所得仿真波形图分析判断并改进所设计的电路。

   2、在成功掌握软件操作基础上,让学生将所学数字电路的基础课知识与VHDL语言的应用型知识结合起来并与实际设计,操作联系起来,即“理论联系实际”。要求学生自主设计电路,编写程序,鼓励新思路,新方法,新观点。

   3、完成可编程器件与VHDL语言课程设计,掌握设计语言技术的综合应用性。通过对课程的设计、仿真、调试来具体完成。

   4、熟悉系统的分析和设计方法,合理掌握选用集成电路的方法,初步接触EDA技术,为以后本专业的学习奠定良好的基础。

2、设计方案的论证。

彩灯控制器电路是整个设计的核心,它控制整个设计的输出效果也就是图案的样式变化。在电路中用1代表灯亮,用O代表灯灭,由0,1按不同的规律组合代表不同的灯光图案,同时使其选择不同的频率,以实现多种图案及多种频率的花样功能显示。该程序充分证明了用VHDL设计电路的灵活性,即可以通过改变程序中输出变量的位数来改变彩灯的数目。

    彩灯控制器的第1种花样为彩灯从右到左,然后从左到右逐次点亮,全灭全亮,第2种花样为彩灯两边同时亮1个逐次向中间移动再散开;第3种花样为彩灯两边同时亮2个逐次向中间移动再散开个花样自动变换,循环往复。

 

3、设计仿真及结果分析。

LIBRARY  IEEE;

USE  IEEE.STD_LOGIC_1164.ALL;

USE  IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY colorlight IS

PORT(clk,clr:IN STD_LOGIC;

    red,green,yellow:OUT STD_LOGIC);

END ENTITY  colorlight;

ARCHITECTURE  example OF colorlight  IS

SIGNAL dout:STD_LOGIC_VECTOR(2  DOWNTO 0);

SIGNAL m:STD_LOGIC_VECTOR(2  DOWNTO 0);

BEGIN

red<=dout(2);

green<=dout(1);

yellow<=dout(0);

PROCESS(clk) IS

BEGIN

IF(clr='1') THEN

m<="001";

     ELSIF(clk'EVENT AND clk='1') THEN

         IF(m="110") THEN

             m<="001";

    ELSE

       m<=m+1;

    END IF;

    CASE m IS

        WHEN "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;

END IF;

END PROCESS;

END ARCHITECTURE;

仿真分析:

根据程序,clk为时钟脉冲。Clr设为高电平有效,根据要求以及程序的响应。红色灯亮三秒,即持续三个时间脉冲,绿色灯亮2秒,即持续两个时钟脉冲,黄色灯亮疫苗 。就一个时钟脉冲。如图所示,仿真正确。

实验二:

1秒计数模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY second IS

PORT( clk1,reset1:STD_LOGIC;

                 enmin:OUT STD_LOGIC;

                 daout1:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

END ENTITY second;

ARCHITECTURE fun OF second IS

SIGNAL count:STD_LOGIC_VECTOR(6 DOWNTO 0);

  BEGIN                         daout1<=count;

  PROCESS(clk1,reset1)

   BEGIN

    IF(reset1='0')THEN count<="0000000";

     ELSIF(clk1'event and clk1='1')then 

      

         IF(count<16#3C#)then 

         IF(count="0111011")then  

               enmin<='1';

              count<="0000000";

          ELSE  

            count<=count+1;

          enmin<='0';

          END IF;

   

     END IF;             

    END IF;                           

END PROCESS;

END fun;

仿真结果:

仿真分析:根据程序,对秒进行简单计数,当计数达60时,计数器清零,向enmin进位,并开始新的计时。如此循环,实现对秒计数的仿真。如图所示

2分计数模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY minute IS

  PORT(clk2,reset2:IN STD_LOGIC; 

                   enhour:OUT STD_LOGIC;

                    daout2:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

END ENTITY minute ;

ARCHITECTURE fun OF minute IS

 SIGNAL count :STD_LOGIC_VECTOR (6 DOWNTO 0);

 BEGIN                         --enmin_2由clk调制后的手动调时脉冲信号串

  daout2<=count;

 PROCESS(clk2,reset2)

   BEGIN

     IF(reset2='0') THEN --若reset为0,则异步清零

        count<="0000000";

     ELSIF(clk2'event and clk2='1')THEN  --否则,若clk上升沿到

     

         IF(count <16#3C#) THEN  --又若count小于16#60#,即60        

           IF(count="0111011") THEN--又若已到59D

              enhour<='1'; --则置进位为1

              count<="0000000"; --count复0

           ELSE             

   count<=count+1; --若count未到59D,则加7,即作"加6校正"

    enhour<='0';

           END IF; --使前面的16#60#的个位转变为8421BCD的容量

    END IF; --END IF(reset='0')

    END IF;

 END process;

END fun;

仿真结果:

仿真分析,与秒计时原理一样。只是输出端的改变,clk仍为时钟信号,上升沿有效。

3.时计数模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY hour IS

  PORT(clk3,reset3:IN STD_LOGIC;        

             daout3:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

END ENTITY hour ;

ARCHITECTURE fun OF hour IS

 SIGNAL count :STD_LOGIC_VECTOR (6 DOWNTO 0);

 BEGIN                       

  daout3<=count;

 PROCESS(clk3,reset3)

   BEGIN

     IF(reset3='0') THEN --若reset为0,则异步清零

        count<="0000000";

     ELSIF(clk3'event and clk3='1')THEN  --否则,若clk上升沿到

     

         IF(count <16#18#) THEN  --又若count小于16#60#,即24       

           IF(count="0010111") THEN--又若已到23

              count<="0000000"; --count复0

           ELSE             

              count<=count+1;

           END IF; --使前面的16#60#的个位转变为8421BCD的容量

    END IF;

    END IF;

 END process;

END fun;

仿真结果:

仿真分析:时计数,所计数的量程不同,原理大致与以上两个模块一样。仿真如图

4顶层模块设计

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY shizhong IS

PORT( clk,reset:STD_LOGIC;

    out1,out2,out3:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

END ENTITY shizhong;

ARCHITECTURE fun OF shizhong IS

--SIGNAL count:STD_LOGIC_VECTOR(6 DOWNTO 0);

component second

 port(clk1,reset1:in std_logic;

    enmin:out std_logic;

    daout1:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

end component;

component minute

 port(clk2,reset2:in std_logic;

    enhour:out std_logic;

    daout2:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

end component;

component hour

 port(clk3,reset3:in std_logic;

    daout3:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

end component;

signal a,b:std_logic;

begin

u1 : second port map(clk1=>clk,reset1=>reset,daout1=>out1,enmin=>a);

u2 : minute port map(clk2=>a,reset2=>reset,daout2=>out2,enhour=>b);

u3 : hour port map(clk3=>b,reset3=>reset,daout3=>out3);

end ARCHITECTURE fun;

仿真波形:

仿真分析:时钟计数器是有三个模块共同组合达到所需要仿真的功能。在本次仿真中需要将以上三个模块组合起来。运用component语句,实现秒计进分,分计进时。这样便实现日常的时钟表的工作,达到仿真,实现仿真目的。仿真结果如上图。

4、设计及仿真中的体会。

在设计与仿真中,由于对软件的不了解,操作也不熟练,经常会出现找不到自己想要的。尤其在仿真中,对信号的输入,以及调试要得到预期的结果都有些不太明白。但最后通过向他人求助解决了这个这些问题。设计过程中调试的时候发现不能进行调试,后来经过学习和查阅资料发现程序文件名的后缀应为“.vhd”,并且文件名应该与程序中命名 的实体名一致,否则都会造成程序段不能编译调试成功,后来,把这些都改正之后发现程序还是调试不了,在确认程序设计思想及逻辑都没有问题之后,更加百思不得其解,也没有出什么明显的语法错误,慢慢琢磨了很久之后还是不清楚,后来突然发现原来自己少些了一个库文件的调用“USE IEEE.STD_LOGIC_UNSIGNED.ALL;”,添加之后便能正常运行了。

所以要想学号这门语言,必须要多练习,才能够很好的掌握。

5、对本次课程设计的体会和建议。

本次数字系统仿真与VHDL课程设计的课程设计时间主要是20##年1月9日至17日这两周时间。主要的设计任务是将本学期VHDL硬件描述语言与数字逻辑电路设计和上学期所学的数字电路中所学的知识运用的实践中去,提高自己在理论与实践的相结合能力,进一步掌握本专业的各项知识,为以后的专业学习打下良好的基础。从一些基础掌握一些本专业所学的知识了解一些基础的实验工具如quartus的使用,本次的设计基本达到预期的效果,得出设计的结果。但本次数字系统仿真与VHDL课程设计也存在着一些不足之处,于此将本次设计的收获和不足总结为以下几点: 

第一、在程序的编写过程中,通过发现问题再到解决问题,在这过程中,逐渐的掌握了Max Plus2的使用以及在使用过程中的一些注意事项,对更好的学习理论知识起到了一定的帮助。 

第二、初步了解对电路的设计的思维和方法,在这方面还有很多不足的地方,理论知识不强,专业的课外知识不充足。在编写程序的过程中遇到了一定的麻烦,感受到了正确的不一定是实用的。 

第三、本次的设计得益于网络资源及图书馆资料的帮助,同时我也认识到在未来的学习中我们不仅要从老师那里学习知识,更多的是合理的正确的利用网上及图书馆资源

6、参考文献(包括电路图和元器件清单)

[1]  作者:侯伯亨,刘凯,顾新

书名:《VHDL硬件描述语言与数字逻辑电路设计》

出版社:西安电子科技大学出版社

出版时间:2009.08

[2]  作者:蒋清明

书名:《C语言程序设计》

出版社:人民邮电出版社

出版时间:2008.04

[3]  作者:田红丽,张涛

书名:《基于VHDL微处理器模拟实验系统的设计与实现》

出版社:河北省科学院


第二篇:数电课程设计--16路彩灯循环控制设计


南京工程学院

课程设计说明书

题 目 16路彩灯循环控制电路设计

课 程 名 称 数字电路课程设计 院(系、部、中心) 电力工程学院

专 业 电力系统及其自动化 班 级 电力083 学 生 姓 名 张乡农 学 号 206081245

设 计 地 点 工程实训中心9-305

指 导 老 师 卢松玉 王玫

设计起止时间:20xx年1 月10日至20xx年1月14日

一、 设计目的:

1、学会了将一个实际情况电路抽象为逻辑电路的逻辑状态的方法。

2、掌握计数、译码、显示综合电路的设计与调试方法。

3、掌握实际输出电路不同要求的实现方法。

4、熟悉Max+plusⅡ9.23软件运行环境,并了解其里面的各部分。

二、 设计任务:

设计16路彩灯循环控制电路,使得该电路彩灯循环显示频率快慢可调,控制器,具有多路输出,彩灯由发光二极管模拟替代。

根据不同的控制信号进行不同的计数,再通过译码器电路,得出不同的彩灯循环控制结果。

还需满足彩灯的闪烁按一定的规则变化(三种);电路有复位控制;设定彩灯的闪烁的时间。

三、 设计步骤:

(1) 局部电路图详解:

彩灯信号输出部分:为实现16路彩灯输出,本案例选用两块集成电路译码器74138进行控制信号的输出。

数电课程设计16路彩灯循环控制设计

- 1 -

A、B、C为3个输入,有8种组合,即可输出彩灯的8路,使用两块74138即可实现16路彩灯信号输出。设定第一块74138输出的灯为L1~L8,第二块为L9~L16。

两块74151对74138进行控制的原理详解:

本案中采用了两块集成电路数据选择器74151,用以对两块译码器进行控制,达到实现多种亮法的目的。

这一块74151中,A、C、GN接地,B接全电路的一个开关EN(工作时置1),所以当工作时,此块74151的输出Y恒为0,WN恒为1,这使得两块74138的各有部分控制借口处于工作状态。

这一块74151中,输出端WN悬空;Y的输出结果由输入端B控制,而B即是本电路的亮法控制按钮INPUT2;当input2置0时,Y输出结果为D0,D0即是计数器74161的QD输出端;当input2置1时,Y=D2,D2是74161 QD的反信号。

计算机74161对电路亮法的驱动与控制:

本案采用一块集成计数器74161进行信号的脉冲激励和对两块74138的控制以实现不同亮法的控制。

本案唯一的计数器74161中,输入端ABCD全接地,ENT和ENP接高电平,三者确保器件工作;预置端和置零端在工作时置1,CLK为脉冲信号产生源。

在输出端中,QA、QB、QC皆连接到两块译码器74138的ABC三个输入端,以计数器工作时的时序信号产生不同的组合使彩灯闪烁。

其中QA和一个输入开关INPUT1进行与关系后才接入74138,这

- 2 -

样的作用是,当INPUT1置1时,电路中QA的信号正常输入给两块74138的A端,彩灯依次亮起;当INPUT1置0时,AQ的信号被屏蔽,根据74161的工作状态表,两块74138所接收到的信号隔一才有,所以可以使彩灯的亮法依次闪烁和隔一闪烁手动可调。

74161的QD输入端,分两种路径连接到两块74138,连接到第一块的G2AN和G2BN,作用是只使得该74138接收计算机的前8种状态,用以一一控制8盏灯。连接到第二块74138的方法为:先分别以正反两信号接到74151中(如前文所述),再由该74151的Y输出端接到第二块74138的G1端。

这样设计的巧妙之处在于,当INPUT2置0时,74151的Y输入为计数器74161的QD,如前文所述,当74161 QD为0时,第一块74138工作;当QD运行到1时,第一块74138不工作,而第二块开始工作,使得16路彩灯依次闪烁;当INPUT2置1时,74151的Y输出为QD的反信号,所以两块74138一起工作,使得16路彩灯实行8-8两路同时闪烁。

综上,两块74138用以彩灯输出;一块74161及两块74151皆用语控制彩灯的亮法;输入断INPUT1的功能为控制16路彩灯是否间隔输出:0为间隔,1为依次;INPUT2控制是否分两路:1为两路,0为顺序输出。

- 3 -

整体电路示意图如下:

数电课程设计16路彩灯循环控制设计

- 4 -

(2)调试与运行:

本次课设要求熟悉MAX+PLUSII软件运行环境,了解各部分的运用。 建立仿真电路图:

运行MAX+PLUSII,选择建立图形电路文件,如图选择器件画好电路图,确认无误后保存该文件。

编译和仿真:

选择菜单“FILE”-“PROJECT”-“SET PROJECT TO CURRENT FILE”然后选择,MAX+PLISIi-COMPILER进行编译。

编译无误通过后,可进行拟真。选择以波形拟真通道文件(*.scf),添加所有电路元件至图中保存。

选择SIMULATOR,在设定好电路的输入EN,CLK 等后,拟真通过,将显示预期想要的波形结果。

仿真结果示意图如下:

01态拟真结果:

数电课程设计16路彩灯循环控制设计

- 5 -

11态拟真结果:

数电课程设计16路彩灯循环控制设计

00态拟真结果:

数电课程设计16路彩灯循环控制设计

- 6 -

10态拟真结果:

数电课程设计16路彩灯循环控制设计

管脚的锁定和下载:

拟真通过后,进行管脚锁定操作。从菜单“ASSIGN”中选择’DEVICE’,选择适当的器件。

在菜单“FOLLRPLAN EDITOR”窗口中,进行管脚的锁定,其中CLK接脉冲,将EN,CLEAR置1。然后控制不同的INPUT1\2组合,即可看到不同的彩灯闪烁方式。

四、 设计结果与分析:

从电路图的设计,项目编译,拟真,至最后的下载运行,本案成功地达到了课设的要求。

本案可现实四种彩灯亮法,该四种方法用两个开关INPUT1和

- 7 -

INPUT2控制:

1.00状态下:16路彩灯隔一盏闪烁;

2.01状态下:8-8两路同时隔一闪烁;

3.11状态下:8-8同时连续闪烁;

4.10状态下:16路彩灯连续闪烁;

电路具有总开关“EN”,置1工作。

电路具有清零开关CLEAR。

五、 设计总结与思考:

在设计前,进行全面的数字逻辑电路的课本知识学习,熟悉各种芯片如计数器,数据选择器,译码器的工作原理。

通过这次对数字抢答器的设计与制作,让我了解了设计电路的程序,也让我了解了关于16路彩灯循环电路的基本原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。此外,本实验也可通过EDA软件MAX PLUSⅡ实现。

让我数字电路这门课程有了更深的了解,因为课程设计本身要求将以前所学的理论知识运用到实际的电路设计当中去,在电路的设计过程中,无形中便加深了对数字电路的了解及运用能力,对课本以及以前学过的知识有了一个更好的总结与理解;以前的数字实验只是针

- 8 -

对某一个小的功能设计,而课程设计对我们的总体电路的设计的要求更严格,需要通过翻阅复习以前学过的知识确立了实验总体设计方案,然后逐步细化进行各模块的设计。

设计时,选择合适的集成芯片,输入了解了74161.74151.74138芯片的全部知识,应用这些芯片设计出符合课设要求的电路。

在使用MAX+PLUSII软件过程中,学习并掌握了该关键的使用方法和调试手段,加强了实际动手能力。

完成了整个课设,我首先对课本知识有了更深入的了解和掌握,巩固了所学知识;还学会了MAX+PLUSII的使用。通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。

其次,以前没有接触过仿真软件,这次审计要使用仿真软件,所以学会了multisim软件的基本应用,这对我们以后的工作和学习的帮助都很有用处。但是在电路仿真的过程中出现大量问题,需要我们细心解决,所以,我对电路故障的排查能力有了很大的提高。但由于是自己学习没有专业指导难免有一些我们不了解的功能。所以我们以后要多接触和了解一些仿真软件,多向老师请教学习。

再次感谢老师的辅导以及同学的帮助。“纸上得来终觉浅,绝知此事要躬行”,由此看来实践的重要,短短几天的课程设计,学到了很多的东西,最重要的是我自己动手把我学习的知识用于实践,做出成功的作品,这才算真正学习到了东西。总之,这次实验我收获颇多。实践是获得知识的一种最好的手段!

- 9 -

- 10 -

更多相关推荐:
循环彩灯课程设计报告

电子系统课程设计报告学号17姓名虞丽惠班级应电091班指导老师吴夏来时间20xx53020xx610课程设计报告目录一引言2二设计要求31任务2基本要求三设计流程31流程总图2AT89C51引脚图四设计方案51...

循环彩灯电路设计报告

数字电子技术基础课程设计报告设计题目彩灯循环控制器的设计专业班级姓名学号指导教师设计日期20xx年6月课程设计评审意见1设计阶段30分硬件电路运行情况优良中一般差2报告60分对于课程设计报告撰写的整体评价优良中...

16路循环彩灯设计报告

循环彩灯控制电路的设计一课程设计的目的1巩固和加强数字电子技术课程的理论知识2掌握电子电路的一般设计方法了解电子产品研制开发过程3掌握电子电路安装和调试的方法及其故障排除方法学会使用multisim软件对电路仿...

循环彩灯课程设计

数字电路课程设计学年设计学年论文任务书数字电路设计说明书学院名称计算机与信息工程学院班级名称网络工程4班学生姓名学号题目循环彩灯控制器设计指导教师姓名起止日期20xx121至20xx13第一部分正文部分一选题背...

微机课程设计8086控制的循环彩灯报告

微机原理课程设计报告书设计目的1巩固和加深课堂所学知识熟悉各种指令的应用及条件2学习掌握一般的软硬件的设计方法和查阅运用资料的能力3深入了解与掌握8255A在PC机系统的典型接法和8255A的工作方法及应用编程...

欧姆龙循环彩灯课程设计(自编)

重庆XX大学题目4循环彩灯PLC控制系统设计专业自动化年级20xx级班级09自动化一班姓名XXX摘要随着人们生活水平的提高环境的不断改善和美化PLC对人类的影响越来越广在许多场合可以看到很多彩色的霓虹灯特别是当...

LED循环彩灯课程设计

学院模拟电子技术课程设计题目LED循环彩灯学生姓名专业班级电科3班学号20xx31000院系电气工程学院指导教师完成时间20xx年12月17日目录1课程设计的目的12课程设计的任务与要求221实验器材222电子...

中北大学循环彩灯电路课程设计

中北大学课程设计说明书学院信息与通信工程学院信息对抗技术专业李泽学号专业学生姓名课程设计题目起迄日期课程设计地点指导教师系主任0905094230EDA实践B题目10循环彩灯控制2月13日2月26日校内王鉴李凯...

EDA课程设计报告-彩灯控制器

EDA技术课程设计报告学院信息科学技术学院专业班级通信2班姓名学号20xx1604B06420xx年06月26日EDA技术课程设计彩灯控制器目录摘要1一设计目的1二设计题目描述及要求1三设计原理231方案论证4...

交通灯课程设计报告

课程设计任务书学生姓名汪鹏飞专业班级电子1202班指导教师吴友宇工作单位信息工程学院题目交通灯控制电路的设计初始条件本设计既可以使用集成集成译码器计数器定时器脉冲发生器和必要的门电路等本设计也可以使用单片机系统...

数字电子技术课程设计实验报告+基于交通灯的设计

数字电子技术课程设计实验报告lt一gt课程性质数字逻辑课程设计lt二gt课程目的训练学生综合地运用所学的数字逻辑的基本知识使用电脑EWB仿真技术独立完整地设计一定功能的电子电路以及仿真和调试等的综合能力本次电脑...

单片机交通灯课程设计报告

单片机应用综合实验报告题目:平面交叉口多时段多相位交通信号灯控制器设计学院:电子与控制工程学院专业:自动化(交通信息与控制)班级:姓名:指导教师:实验题目:平面交叉口多时段多相位交通信号灯控制器设计实验功能要求…

循环彩灯课程设计报告(12篇)