EDA彩灯控制器课程设计报告书.docx

上传人:b****8 文档编号:30234109 上传时间:2023-08-07 格式:DOCX 页数:16 大小:184.90KB
下载 相关 举报
EDA彩灯控制器课程设计报告书.docx_第1页
第1页 / 共16页
EDA彩灯控制器课程设计报告书.docx_第2页
第2页 / 共16页
EDA彩灯控制器课程设计报告书.docx_第3页
第3页 / 共16页
EDA彩灯控制器课程设计报告书.docx_第4页
第4页 / 共16页
EDA彩灯控制器课程设计报告书.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

EDA彩灯控制器课程设计报告书.docx

《EDA彩灯控制器课程设计报告书.docx》由会员分享,可在线阅读,更多相关《EDA彩灯控制器课程设计报告书.docx(16页珍藏版)》请在冰豆网上搜索。

EDA彩灯控制器课程设计报告书.docx

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

 

第一章绪论

1.1系统背景

20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。

在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。

这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。

这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。

  EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。

  利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。

  现在对EDA的概念或范畴用得很宽。

包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。

目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。

例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。

1.2课程设计的主要内容和任务以及要达到的目标

(1)主要内容和任务

完成彩灯控制系统的设计与制作,在计算机上用MAX+plusⅡ仿真后要能在实验箱上实现,熟悉可编程逻辑器件的使用,学会自己烧程序并应用于实践。

(2)目标

设计一个彩灯控制器,具有3种花样的变化,最后一次是将前三种的循环。

并且具有四种频率的变化。

整个系统有三个输入信号,分别为音频输入脉冲信号clk2,复位清零信号CLR,彩灯输入控制脉冲clk1。

最后按照FPGA的开发流程和VHDL语言建模、仿真、综合、下载、适配,用EDA6000实验箱上的FPGA系统实现了相应的功能。

 

第二章系统电路设计

2.1系统总体设计框架结构

图2-1系统框图

2.1系统硬件

该系统使用的是ACEX1K-EP1K30TC144-3芯片。

其具体的电路如下:

图2-2系统的硬件图

 

第三章系统软件设计

3.1方案原理

彩灯设计总体采用分模块的方法来完成,包括分频器、4选1选择器、48进制计数器、彩灯控制器四大部分。

其中彩灯控制器是用来控制16个LED,使其呈现出不同的花型,而彩灯控制器的输出则是由48进制计数器来控制。

通过一个集成分频器来将输入的频率分成几种不同的频率,然后通过一个四选一选择器择性不同频率,从而实现彩灯不同的速率。

通过一个显示模块来显示不同的花样,该模块的使能端实现四种状态的切换显示。

3.2模块设计

(1)集成分频器模块

设计分频器来用不同的频率控制不同的彩灯速率输出。

模块说明:

通过分频器可以实现不同频率的转换,clk为输入信号,clk_out_1hz,clk_out_2hz,clk_out_4hz为输出信号,还有一个信号为系统时钟

(2)4选1选择器模块

通过一个使能端来控制不同的状态,状态用A,B,C,D表示。

 

 

(3)48进制计数器模块

48进制模块用来控制彩灯输出模块来控制彩灯的显示模块,即当计数到49时自动转到到第一种状态,实现循环控制,不然到49将停止。

RST:

系统清零信号,低电平有效

Clk:

输入信号用来给模块提供工作频率

CQ【5..0】:

48进制计数器的输出

 

(4)彩灯显示模块

灯控制模块用来直接控制彩灯的输出,使彩灯表现出不同的花样。

通过使能端来实现不同状态的转换。

X[5..0]:

不同的输入使彩灯控制模块有不同的输出即彩灯显示出不同的花样。

K[1..0]:

即使能端,来控制不同状态的切换。

Y[15..0]:

输出信号直接与彩灯相连来控制彩灯。

 

3.3总体模块设计

整个系统就是各个分模块组成来实现最后的彩灯控制功能,用一个时钟为分频器的输入来进行分频处理,通过四选一来切换不同频率,再通过显示模块显示

 

第四章实验结果和分析

4.1实验仿真结果

(1)分频

说明:

该程序是将时钟进行二分频,将分频的信号再分频,就变成四分频了,将四分频的信号再二分频就可以变八分频了

(2)四选一

(3)48进制计数器

(4)显示模块

说明:

使能端控制的是四种状态的转换,第四种状态是前三种状态的循环。

 

结束语

彩灯控制器EDA设计实验刚开始,拿着选定的题目不知如何入手。

不过通过指导老师冯杰老师的说明与提示,心中才有了谱。

将整个系统根据不同的功能化分成模块,再分别进行设计,逐个攻破,最后再将其整合即可。

通过这次课程设计,使我受益颇多。

既巩固了课堂上学到的理论知识,又掌握了常用集成电路芯片的使用。

在此基础上学习了数字系统设计的基本思想和方法,学会了科学地分析实际问题,通过查资料、分析资料及请教老师和同学等多种途径,独立解决问题。

同时,也培养了我认真严谨的工作作风。

只有这样才能有实质的进步,还有要和同学共同讨论,解决各种困难,在困难中你能了解更多的非课本的知识,还能再找错误的同时锻炼你的观察力,所以我知道了很多器件的作用,并了解到什么样的现象是哪块的电路出现了错误,小小的成功给了我很大的动力,也感受到探索的乐趣。

 

附录

(1)分频程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYfenpingIS

PORT(clk:

INSTD_LOGIC;

clk_out_1hz,clk_out_2hz,clk_out_4hz:

OUTSTD_LOGIC);

ENDfenping;

ARCHITECTUREaOFfenpingIS

signalfull1,full2,full3:

STD_LOGIC;

begin

p_a:

process(clk)

begin

ifclk'eventandclk='1'then

full3<=notfull3;

endif;

clk_out_4hz<=full3;

endprocess;

p_b:

process(full3)

begin

iffull3'eventandfull3='1'then

full2<=notfull2;

endif;

clk_out_2hz<=full2;

endprocess;

p_c:

process(full2)

begin

iffull2'eventandfull2='1'then

full1<=notfull1;

endif;

clk_out_1hz<=full1;

endprocess;

enda;

(2)四选一

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitymux41is

port(a,b,c,d:

instd_logic;

s:

instd_logic_vector(1downto0);

y:

outstd_logic);

endmux41;

architecturebehavofmux41is

begin

process(a,b,c,d,s)

begin

ifs="00"theny<=a;

elsifs="01"theny<=b;

elsifs="10"theny<=c;

elsey<=d;

endif;

endprocess;

endbehav;

(3)48进制计数器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYcnt48IS

PORT(CLK,RST:

INSTD_LOGIC;

CQ:

OUTSTD_LOGIC_VECTOR(5DOWNTO0);

COUT:

OUTSTD_LOGIC);

ENDcnt48;

ARCHITECTUREbehavOFcnt48IS

signalDQ:

STD_LOGIC_VECTOR(5DOWNTO0);

BEGIN

PROCESS(CLK,RST)

BEGIN

IFRST='1'THENDQ<="000000";

ELSIFCLK'EVENTANDCLK='1'THEN

IFDQ="110000"THENDQ<="000000";COUT<='1';

ELSEDQ<=DQ+'1';COUT<='0';

ENDIF;

ENDIF;

ENDPROCESS;

CQ<=DQ;

ENDbehav;

(4)显示模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_unsigned.ALL;

ENTITYxianshiis

PORT(x:

INSTD_LOGIC_VECTOR(5DOWNTO0);

k:

INSTD_LOGIC_VECTOR(1DOWNTO0);

y:

OUTSTD_LOGIC_vector(15downto0));

END;

ARCHITECTUREoneOFxianshiIS

BEGIN

PROCESS(x)

BEGIN

ifk="00"then

CASEx(3downto0)IS

when"0000"=>y<="0000000000000001";

when"0001"=>y<="0000000000000010";

when"0010"=>y<="0000000000000100";

when"0011"=>y<="0000000000001000";

when"0100"=>y<="0000000000010000";

when"0101"=>y<="0000000000100000";

when"0110"=>y<="0000000001000000";

when"0111"=>y<="0000000010000000";

when"1000"=>y<="0000000100000000";

when"1001"=>y<="0000001000000000";

when"1010"=>y<="0000010000000000";

when"1011"=>y<="0000100000000000";

when"1100"=>y<="0001000000000000";

when"1101"=>y<="0010000000000000";

when"1110"=>y<="0100000000000000";

when"1111"=>y<="1000000000000000";

whenothers=>y<="1111111111111111";

ENDCASE;

elsifk="01"then

CASEx(5downto0)IS

when"010000"=>y<="1000000000000000";

when"010001"=>y<="0100000000000000";

when"010010"=>y<="0010000000000000";

when"010011"=>y<="0001000000000000";

when"010100"=>y<="0000100000000000";

when"010101"=>y<="0000010000000000";

when"010110"=>y<="0000001000000000";

when"010111"=>y<="0000000100000000";

when"011000"=>y<="0000000010000000";

when"011001"=>y<="0000000001000000";

when"011010"=>y<="0000000000100000";

when"011011"=>y<="0000000000010000";

when"011100"=>y<="0000000000001000";

when"011101"=>y<="0000000000000100";

when"011110"=>y<="0000000000000010";

when"011111"=>y<="0000000000000001";

whenothers=>y<="1111111111111111";

ENDCASE;

elsifk="10"then

CASEx(5downto0)IS

when"100000"=>y<="1000000000000001";

when"100001"=>y<="0100000000000010";

when"100010"=>y<="0010000000000100";

when"100011"=>y<="0001000000001000";

when"100100"=>y<="0000100000010000";

when"100101"=>y<="0000010000100000";

when"100110"=>y<="0000001001000000";

when"100111"=>y<="0000000110000000";

when"101000"=>y<="0000001001000000";

when"101001"=>y<="0000100000100000";

when"101010"=>y<="0001000000010000";

when"101011"=>y<="0010000000001000";

when"101100"=>y<="0100000000000100";

when"101101"=>y<="1000000000000001";

when"101110"=>y<="1100000000000011";

when"101111"=>y<="1110000000000111";

whenothers=>y<="1111111111111111";

ENDCASE;

elsifk="11"then

CASEx(5downto0)IS

when"000000"=>y<="0000000000000001";

when"000001"=>y<="0000000000000010";

when"000010"=>y<="0000000000000100";

when"000011"=>y<="0000000000001000";

when"000100"=>y<="0000000000010000";

when"000101"=>y<="0000000000100000";

when"000110"=>y<="0000000001000000";

when"000111"=>y<="0000000010000000";

when"001000"=>y<="0000000100000000";

when"001001"=>y<="0000001000000000";

when"001010"=>y<="0000010000000000";

when"001011"=>y<="0000100000000000";

when"001100"=>y<="0001000000000000";

when"001101"=>y<="0010000000000000";

when"001110"=>y<="0100000000000000";

when"001111"=>y<="1000000000000000";

when"010000"=>y<="1000000000000000";

when"010001"=>y<="0100000000000000";

when"010010"=>y<="0010000000000000";

when"010011"=>y<="0001000000000000";

when"010100"=>y<="0000100000000000";

when"010101"=>y<="0000010000000000";

when"010110"=>y<="0000001000000000";

when"010111"=>y<="0000000100000000";

when"011000"=>y<="0000000010000000";

when"011001"=>y<="0000000001000000";

when"011010"=>y<="0000000000100000";

when"011011"=>y<="0000000000010000";

when"011100"=>y<="0000000000001000";

when"011101"=>y<="0000000000000100";

when"011110"=>y<="0000000000000010";

when"011111"=>y<="0000000000000001";

when"100000"=>y<="1000000000000001";

when"100001"=>y<="0100000000000010";

when"100010"=>y<="0010000000000100";

when"100011"=>y<="0001000000001000";

when"100100"=>y<="0000100000010000";

when"100101"=>y<="0000010000100000";

when"100110"=>y<="0000001001000000";

when"100111"=>y<="0000000110000000";

when"101000"=>y<="0000001001000000";

when"101001"=>y<="0000100000100000";

when"101010"=>y<="0001000000010000";

when"101011"=>y<="0010000000001000";

when"101100"=>y<="0100000000000100";

when"101101"=>y<="1000000000000001";

when"101110"=>y<="1100000000000011";

when"101111"=>y<="1110000000000111";

whenothers=>y<="1111111111111111";

ENDCASE;

endif;

endprocess;

END;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1