EDA多功能彩灯课程设计

目录

目录 (1)

第一章引言 (2)

1.1 EDA技术及其发展 (2)

1.2 EDA技术的特点和优势 (2)

1.3 EDA技术的设计方法 (3)

第二章彩灯电路控制设计 (3)

2.1设计要求 (4)

第三章.各个模块的设计 (5)

3.1 四种分频的分频计 (5)

第四章设计成果及其实验结果 (10)

4.1实验电路框图 (10)

4.2彩灯整体原理图 (11)

4.3 实验结果 (11)

第五章结束语 (11)

参考文献 (12)

第一章引言

1.1 EDA技术及其发展

电子设计自动化EDA(Electronic Design Automation)技术的发展和普及给数字系统的设计带来了革命性的变化。它作为现代电子设计技术的核心,依赖于功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Description Language)为系统逻辑描述手段完成的设计文件,自动地完成逻辑化简、逻辑分割、逻辑综合、结构综合(布局布线),以及逻辑优化和仿真测试等项功能,直至实现既定性能的电子线路系统功能。

EDA技术在21世纪后,得到更大的发展,突出表现在以下几个方面:使电子设计成果以自主知识产权的方式得以明确表达和确认成为可能。在仿真验证和设计两方面都支持标准硬件描述语言的功能强大的EDA软件不断推出。

电子技术全方位进入EDA时代,数字技术日益成熟,传统电路系统设计建模理念也发生重大的变化:软件无线电技术的崛起,模拟电路系统硬件描述语言的表达和设计的标准化,系统可编程模拟器件的出现,数字信号处理和图像处理的全硬件实现方案的普遍接受,软硬件技术和功能及其结构的进一步融合等。

④EDA使得电子技术领域各学科的界限更加模糊,更加互为包容,如模拟与数字、软件与硬件、ASIC与FPGA等。

⑤软硬件IP核在电子行业的产业领域、技术领域和设计应用领域得到进一步确认和广泛的应用。

1.2 EDA技术的特点和优势

EDA技术的基本特征是采用高级语言描述,具有系统级仿真和综合能力。它采用“自顶向下”的设计方法,与传统的基于标准逻辑器件的“自底向上”数字系统设计方法相比,EDA技术具有以下特点:

①用软件的方式设计硬件。从设计输入到下载配置前的整个过程几乎不涉及硬件,通过软件方式修改硬件设计。

②设计全程,包括电路系统描述、硬件设计、仿真测试、综合、调试、软件设计,直至硬件系统都由计算机完成。

③目标系统可现场编程,在线升级;集成度更高,可构建片上系统。

④对设计人员的硬件知识要求低,通过EDA工具,即使设计人员不熟悉各种半导体工艺,也能完成电子系统的设计。

它基于芯片,大量使用大规模可编程逻辑器件,以缩短产品的上市时间,提高产品性能、缩小产品体积、降低产品消耗;它广泛运用现代计算机技术,提高电子设计自动化程度,缩短开发周期,提高品竞争力。闪烁的彩灯在娱乐场所、餐饮等日常生活环境中应用广泛,彩灯的亮、灭具有一定的周期和规律,采用EDA 技术容易设计和修改其控制电路。

1.3 EDA技术的设计方法

EDA技术是将传统的搭积木式设计模式变为自顶而下的设计模

式,设计人员通过计算机和EDA开发工具即可设计和开发出各种功

能电路。EDA技术从系统总体出发,自上而下地逐步细化设计内容,最后完成系统设计。它包括下面几个设计步骤:

1.设计准备。依据设计要求,选取合适的设计方案和器件类型,对系统功能细化,合理划分功能模块,画出功能框图。

2.设计输入。选取原理图、硬件描述语言等进行设计输入。

3.功能仿真。通过建立波形文件和测试向量,在编译前对设计的电路进行逻辑功能验证,此时的仿真没有考虑延时信息。

4.设计处理。编译软件将对设计输入文件进行逻辑化简、综合优化、适配和分割、布局布线,最后产生编程文件。

5.时序仿真。考虑延时信息,分析系统和各模块时序关系,估计设计的性能,检查和消除竞争冒险。

6.器件编程测试。将仿真成功后适配器产生的配置文件通过编程器或下载电缆写入目标芯片,并对硬件系统进行检查、测试。

第二章彩灯电路控制设计

2.1设计要求

基于EDA技术,利用Alter公司的可编程器件EP1K30TC144-3和MaxplusII 软件平台,设计一个多功能彩灯控制电路,控制16个彩灯周期性地自动改变显示模式并且能够改变显示频率。这里设用发光二极管模拟彩灯,用两个按键来控制频率选择和亮灯花样选择。显示频率分设为时钟信号的频率的八分频、四分频、二分频和其本身频率。

彩灯设为四组闪烁形式,具体如下:

第一组灯亮默认为从LED0到LED15依次单独循环灯亮;

第二组灯亮情况依次为全亮,LED0到LED7这8个彩灯亮,LED0到LED3这4个彩灯亮,LED0到LED1这2个彩灯亮,全不亮,LED0到LED1这2个彩灯亮,LED0到LED3这4个彩灯亮,LED0到LED7这8个彩灯亮,LED0到LED9这10个彩灯亮,LED0到LED11这12个彩灯亮,LED0到LED13这14个彩灯亮,全亮,LED6到LED9这4个彩灯亮,LED5到LED10这6个彩灯亮,LED4到LED11这8个彩灯亮,LED3到LED12这10个彩灯亮.

第三组灯亮情况依次为:LED0和LED15亮,LED0、LED1和LED15、LED14亮,LED0、LED1、LED2和LED15、LED14、LED13亮,LED0、LED1、LED2、LED3和LED15、LED14、LED13、LED12亮,LED0、LED1、LED2、LED3、LED4和LED15、LED14、LED13、LED12、LED11亮,LED0、LED1、LED2、LED3、LED4、LED5和LED15、LED14、LED13、LED12、LED11、LED10亮,LED0、LED1、LED2、LED3、LED4、LED5、LED6和LED15、LED14、LED13、LED12、LED11、LED10、LED9亮,全亮,LED0、LED1、LED2、LED3、LED4、LED5、LED6和LED15、LED14、LED13、LED12、LED11、LED10、LED9亮,LED0、LED1、LED2、LED3、LED4、LED5和LED15、LED14、LED13、LED12、LED11、LED10亮,LED0、LED1、LED2、LED3、LED4和LED15、LED14、LED13、LED12、LED11亮,LED0、LED1、LED2、LED3和LED15、LED14、LED13、LED12亮,LED0、LED1、LED2和LED15、LED14、LED13亮,LED0、LED1和LED15、LED14亮,LED0和LED15亮,LED2、LED3、LED6、LED7、LED10、LED11、LED14、LED15亮。

第四组灯亮情况依次为:LED1、LED3、LED5、LED7、LED9、LED11、LED13、LED15亮,LED0、LED2、LED4、LED6、LED8、LED10、LED12、LED14亮,LED0、LED1、LED4、LED5、LED8、LED9、LED12、LED13亮,LED2、LED3、LED6、LED7、LED10、

LED11、LED14、LED15亮,LED1、LED2、LED3、LED7、LED8、LED9、LED13、LED14、LED15亮,LED4、LED5、LED6、LED7、LED12、LED13、LED14、LED15亮,LED0、LED1、LED2、LED3、LED8、LED9、LED10、LED11亮,LED15和LED7不亮其它亮,LED15、LED14和LED8、LED7不亮其它亮,LED15、LED14、LED13和LED7、LED6、LED5不亮其它亮,LED15、LED14、LED13、LED12和LED7、LED6、LED5、LED4不亮其它亮。

2.2设计思路

彩灯灯亮的的秩序可以通过在对时钟脉冲计数控制,用十六进制计数器循环计数,来让某一个灯在某个瞬间亮,然后再通过外部按键来控制选择第几组的灯亮情况,用另一个按键来控制选择灯闪烁的频率快慢。用记数器的输出依次访问存储器的各地址单元,将存储的彩灯控制信息通过数据总线依次输出,控制彩灯周期性有序变化。整个系统大体上分为三个部分,即可以实现四种分频的频率计、四选一多路选择器、控制彩灯显示的十六进制计数器。多功能彩灯设计需要先把各个小部分用VHDL语言编写,然后再画原理图调出各个部分,再连接好电路,编译成功后,将各个管脚与实验箱上的对应管脚锁定,确认无误后,再将实验图装入实验箱,查看彩灯显示结果。

第三章.各个模块的设计

3.1 四种分频的分频计

⑴VHDL语言

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FENPIN IS

PORT( CLK :IN STD_LOGIC; a,b,c,d:OUT STD_LOGIC);END;

ARCHITECTURE bhv OF FENPIN IS

SIGNAL CLK2,CLK4,CLK8:STD_LOGIC; BEGIN

U1: PROCESS(CLK) BEGIN IF CLK'EVENT AND CLK='1' THEN CLK2 <= NOT CLK2; END IF; END PROCESS; ---二分频

U2: PROCESS(CLK2) BEGIN

IF CLK2'EVENT AND CLK2='1' THEN

CLK4 <= NOT CLK4; END IF; END PROCESS; ---四分频

U3: PROCESS(CLK4) BEGIN

IF CLK4'EVENT AND CLK4='1' THEN

CLK8 <= NOT CLK8; END IF; END PROCESS; ---八分频

a <= CLK8;

b <= CLK4;

c <= CLK2;

d <=CLK; END bhv;

⑵时序仿真图

在时钟上升沿的时候开始实现分频,d是直接时钟输出,c是二分频输出,b是四分频输出,a是八分频输出。

⑶原理图

外接时钟信号输入,四种频率输出,A端八分频输出,B

端四分频输出,C端二分频输出,D端原信号输出。

3.2四选一多路选择器

⑴VHDL语言

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;

ENTITY mux41a IS PORT (a,b,c,d:IN STD_LOGIC;

S:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

Y:OUT STD_LOGIC );END ENTITY mux41a;

ARCHITECTURE bhv OF mux41a IS

BEGIN PROCESS(a,b,c,d,s) BEGIN

IF s="0000" THEN Y <= a;--控制信号输入0,输出状态为a

ELSIF s="0001" THEN Y <= b; --控制信号输入1,输出状态为b

ELSIF s="0010" THEN Y <= c;--控制信号输入2,输出状态为c ELSE Y <= d; --控制信号输入其它,输出状态为d

END IF;END PROCESS;END ARCHITECTURE bhv;

⑵时序仿真图

当S为“0000”时,输出状态为a,当S为“0001”时,输出状态为b,当S为“0010”时,输出状态为c,当S为其它时,输出状态

⑶原理图

通过S来选择输入信号的频率,S接实验箱上的键1。

3.3 控制彩灯显示花样的综合十六进制计数器

⑴VHDL语言

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CUNT16 IS

PORT( CLK: IN STD_LOGIC;

K2:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

LED: OUT STD_LOGIC_VECTOR(15 DOWNTO 0));

END CUNT16;

ARCHITECTURE behav OF CUNT16 IS

SIGNAL LED1:STD_LOGIC_VECTOR(15 DOWNTO 0);

SIGNAL LED2:STD_LOGIC_VECTOR(15 downto 0);

SIGNAL LED3:STD_LOGIC_VECTOR(15 downto 0);

SIGNAL LED4:STD_LOGIC_VECTOR(15 downto 0);

BEGIN PROCESS(K2) BEGIN IF K2="0000"

THEN LED<=LED1;ELSIF K2="0001" THEN LED<=LED2;

ELSIF K2="0010" THEN LED<=LED3;ELSIF K2="0011" THEN LED<=LED4;ELSE NULL; END IF;END PROCESS;----K2控制选择彩灯显示花样

PROCESS(CLK) VARIABLE QQ:STD_LOGIC_VECTOR(3 downto 0); BEGIN IF CLK'EVENT AND CLK='1'THEN IF QQ<15 THEN QQ:=QQ+1;ELSE QQ:="0000"; END IF; END IF;CASE QQ IS

when"0000"=>LED1<="0000000000000001";when"0001"=>LED1<="0000000000000 010";when"0010"=>LED1<="0000000000000100";when"0011"=>LED1<="00000000 00001000";when"0100"=>LED1<="0000000000010000";when"0101"=>LED1<="000 0000000100000";when"0110"=>LED1<="0000000001000000";when"0111"=>LED1< ="0000000010000000";when"1000"=>LED1<="0000000100000000";when"1001"=> LED1<="0000001000000000";when"1010"=>LED1<="0000010000000000";when"10 11"=>LED1<="0000100000000000";when"1100"=>LED1<="0001000000000000";wh en"1101"=>LED1<="0010000000000000";when"1110"=>LED1<="010000000000000 0";when"1111"=>LED1<="1000000000000000";when others=>NULL;END CASE;END PROCESS;--------第一种花样

PROCESS(CLK) VARIABLE QQ:STD_LOGIC_VECTOR(3 downto 0); BEGIN IF CLK'EVENT AND CLK='1'THEN

IF QQ<15 THEN QQ:= QQ + 1;

ELSE QQ:="0000"; END IF; END IF;CASE QQ IS

when"0000"=>LED2<="1111111111111111";when"0001"=>LED2<="0000000011111 111";when"0010"=>LED2<="0000000000001111";

when"0011"=>LED2<="0000000000000011";when"0100"=>LED2<="0000000000000 000";when"0101"=>LED2<="0000000000000011";when"0110=>LED2<="000000000 0001111";when"0111"=>LED2<="0000000011111111";when"1000"=>LED2<="0000 001111111111";when"1001"=>LED2<="0000111111111111";when"1010"=>LED2<= "0011111111111111";when"1011"=>LED2<="1111111111111111";when"1100"=>L

0"=>LED2<="0000111111110000";when"1111"=>LED2<="0001111111111000"; when others=>NULL;END CASE;

END PROCESS;---第二种花样

PROCESS(CLK)

VARIABLE QQ:STD_LOGIC_VECTOR(3 downto 0);BEGIN

IF CLK'EVENT AND CLK='1'THEN

IF QQ<15 THEN QQ := QQ + 1;

ELSE QQ:="0000";END IF; END IF;CASE QQ IS

when"0000"=>LED3<="1000000000000001";when"0001"=>LED3<="1100000000000 011";when"0010"=>LED3<="1110000000000111";

when"0011"=>LED3<="1111000000001111";when"0100"=>LED3<="1111100000011 111";when"0101"=>LED3<="1111110000111111";when"0110"=>LED3<="11111110 01111111";when"0111"=>LED3<="1111111111111111";when"1000"=>LED3<="111 1111001111111";when"1001"=>LED3<="1111110000111111";when"1010"=>LED3< ="1111100000011111";when"1011"=>LED3<="1111000000001111";when"1100"=> LED3<="1110000000000111";when"1101"=>LED3<="1100000000000011";when"11 10"=>LED3<="1000000000000001";when"1111"=>LED3<="1100110011001100";wh en others=>NULL;END CASE;END PROCESS;--第三种花样

PROCESS(CLK) VARIABLE QQ:STD_LOGIC_VECTOR(3 downto 0);

BEGIN IF CLK'EVENT AND CLK='1'THEN IF QQ<15 THEN QQ := QQ + 1;

ELSE QQ:="0000";END IF; END IF;CASE QQ IS

when"0000"=>LED4<="1010101010101010";when"0001"=>LED4<="0101010101010 101";when"0010"=>LED4<="0011001100110011";

when"0011"=>LED4<="1100110011001100";when"0100"=>LED4<="1110001110001 110";when"0101"=>LED4<="1111000011110000";when"0110"=>LED4<="00001111 00001111";when"0111"=>LED4<="0111111101111111";when"1000"=>LED4<="001 1111001111111";when"1001"=>LED4<="0001111100011111";when"1010"=>LED4< ="0000111100001111";when"1011"=>LED4<="0001111111111000";when"1100"=>

10"=>LED4<="1111100001111101";when"1111"=>LED4<="1000001111111100";wh en others=>NULL;END CASE;END PROCESS;--第四种花样END behav;

⑵时序仿真图

K2控制LED的显示,四种花样。

⑶原理图

K2外接键2,CLK接四选一多路选择器,LED

【15..0】直接输出。

第四章设计成果及其实验结果

4.1实验电路框图

键1控制彩灯显示频率,接到芯片管脚PIO0--PIO3。键2控制彩灯变换花样接到芯片管脚PIO7--PIO4。D1到D16为显示彩灯,接到芯片PIN32--39。

4.2彩灯整体原理图

将彩灯原理图装入实验箱前,锁定管脚,外部时钟信号最好与芯片126管脚锁定,那样将易于观察彩灯变化快慢。输入引脚S[3..0](即键1)依次与该芯片的12、10、9、8管脚锁定,K2[3..0](即键2)依次与芯片上的19、18、17、13管脚锁定。彩灯LED[15..0]依次与芯片上的29、28、27、26、23、22、21、20、86、83、82、81、80、79、78、73管脚锁定。然后再将原理图装入实验箱,通过键1和键2进行操作,观察彩灯变化情形。

4.3 实验结果

第五章结束语

本文设计了一个多功能彩灯控制电路实现16路灯各种分频输出及四种花样组合输出。在本课程的设计过程中,灵活地运用了计数器、分频计和多路选择器。在汇编VHDL语言时,也灵活地运用了CASE语句,对VHDL语言也加深了理解和熟练应用。VHDL最初用于标准文档的建立和电路功能模拟,后来作为系统

模拟建模工具,还可以作为电路系统的设计工具,通过软件工具将VHDL源码自动转化为文本方式表达的基本逻辑原件连接图。它具有与具体硬件电路无关和与设计平台无关的特性,它通过EDA工具自动语法检查,排除许多设计中的疏忽,还有很好的行为级描述能力和一定的系统级描述能力。EDA技术通过软件方式设计与测试数字系统,体现了硬件设计向软件化方向发展的新趋势。这种数字系统设计技术采用自顶向下的模块化设计方法,使系统的功能修改及调试方便,大大节约了设计和开发成本。随着计算机技术和微电子技术的快速发展,EDA技术在现代数字系统设计中必然将发挥更加重要的作用。

参考文献

[1]谭会生,张昌凡.EDA技术及应用第二版[M].西安:西安电子科技大

学出版社,2006:1-3.

[2]崔葛瑾.基于FPGA的数字电路系统设计[M].西安:西安电子科技大

学出版社,2008:8-10.

[3]丁文霞.EDA技术在现代数字系统中的应用[ J ] .电子技术应

用,2000(11):29-31.

[4]康华光,皱寿彬,秦臻.电子技术基础(数字部分)第五版[M].北京:高

等教育出版社,2006:296-298.

[5]姜雪松,刘东升.硬件描述语言VHDL教程(应用篇)[M].西安:西安

交通大学大学出版社,2004:414-415.

[6]崔葛瑾,沈利芳,李伟民.基于FPGA的数字电路系统设计[M].西安:

西安电子科技大学出版社,2008:95.

[7]潘松,黄继业.EDA技术实用教程—VHDL版第四版.北京:科学出版社,2010

相关文档
最新文档