EDA课程设计流水灯设计
- 格式:pdf
- 大小:211.91 KB
- 文档页数:8
彩灯控制器一、设计内容及要求:设计一个彩灯控制器,要求:1.四路彩灯从左向右逐次渐亮,间隔为1秒。
2.四路彩灯从右向左逐次渐灭,间隔为1秒。
3.四路彩灯同时点亮,时间间隔为1秒,然后同时变暗,时间为1秒,反复4次。
二、总体框图图(1)总体框图根据设计要求,电路设计大体思路如下:由脉冲发生器发出频率脉冲信号,利用计数器加法计数功能输出0000~1111的脉冲信号,经过数据选择器分别在0000~0011,0100~0111,1000~1111三个时段输出不同的高低电平,控制移位寄存器实现右移→左移→置数功能,从而控制彩灯按照设计要求实现亮灭。
三、选择器件本次课程设计所用器件如表一:表一本次课程设计所用器件1.同步二进制计数器74LS163表二7-3 74LS163功能表根据逻辑图、波形图、功能表分析,74LS163具有如下功能:管脚图逻辑符号1)1是同步4位二进制加法计数器,M=16,CP上升沿触发2)2既可同步清除,也可异步清除。
同步清除时,清除信号的低电平将在下一个CP上升沿配合下把四个触发器的输出置为低电平。
异步清除时,直接用清除信号的低电平把四个触发器的输出置为低电平。
3)3同步预置方式:当LD = 0时,在CP作用下,计数器可并行打入预置数据.当LD = 1时,使能输入PT同时为高电平,在CP作用下,进行正常计数。
4)PT任一为低时,计数器处于保持状态。
5) 5 CO为进位输出,可用来级联成n位同步计数器。
2.四位双向移位寄存器74LS19474LS194内部原理图74LS194四位双向移位寄存器具有左移、右移、并行数据输入、保持、清除功能。
1)从图1中74LS194的图形符号和引脚图分析。
SRG4是4位移位寄存器符号,D0~D3并行数据输入端、D SL左移串行数据输入端、D SR右移串行数据输入端、S A(M0)和S B (M1)(即9脚和10脚)工作方式控制端分别接电平开关,置1或置0,CP 时钟输入端接正向单次脉冲,清零端接负向单次脉冲,Q0~Q3输出端。
eda花样流水灯的课程设计一、课程目标知识目标:1. 学生能理解EDA(电子设计自动化)的基本概念,掌握花样流水灯的设计原理;2. 学生能描述流水灯电路的工作原理,了解相关电子元件的功能和连接方式;3. 学生掌握C语言编程基础,能编写简单的程序控制流水灯的显示效果。
技能目标:1. 学生能运用所学知识,设计出具有创意的花样流水灯电路;2. 学生通过实践操作,提高焊接和电路调试的能力;3. 学生通过团队协作,学会沟通和解决问题,提高项目实践能力。
情感态度价值观目标:1. 学生对电子设计产生兴趣,培养创新意识和探索精神;2. 学生认识到科技发展对社会进步的重要性,增强社会责任感和使命感;3. 学生在团队协作中,学会尊重他人、分享成果,培养良好的团队合作精神。
分析课程性质、学生特点和教学要求:本课程为电子技术与应用的实践课程,适用于初中或高中年级学生。
学生在之前的学习中已经掌握了基本的电路知识和C语言编程基础。
课程注重实践操作,鼓励学生创新设计,培养学生的动手能力和团队协作能力。
课程目标具体、可衡量,旨在让学生通过实践,掌握EDA技术的基本应用,提高电子设计能力,同时注重培养学生的情感态度价值观,为今后的学习和发展奠定基础。
二、教学内容本课程教学内容主要包括以下三个方面:1. 电子设计自动化(EDA)基础理论- 了解EDA的基本概念、发展历程和应用领域;- 学习流水灯的设计原理和电路组成;- 掌握相关电子元件的功能、符号和连接方式。
2. 流水灯电路设计与编程- 学习流水灯电路的设计方法,分析不同显示效果的实现原理;- 掌握C语言编程基础,编写控制流水灯的程序;- 结合教材相关章节,实践操作,调试电路。
3. 团队协作与项目实践- 分组进行项目设计,明确分工,培养团队协作能力;- 制定项目进度计划,按计划完成电路设计、编程、调试和展示;- 教师指导,学生互评,总结项目实施过程中的经验教训。
教学内容安排和进度:第一周:EDA基础理论学习和流水灯设计原理了解;第二周:学习C语言编程基础,编写简单的流水灯程序;第三周:分组项目实践,进行电路设计和调试;第四周:项目总结与展示,交流学习心得。
eda流水灯课程设计一、课程目标知识目标:1. 理解EDA(电子设计自动化)的基本概念,掌握流水灯的设计原理;2. 学习并掌握流水灯电路的组成、工作原理及编程方法;3. 了解数字电路基础知识,如逻辑门、触发器等,并能将其应用于流水灯设计。
技能目标:1. 学会使用EDA软件(如Multisim、Protel等)进行电路设计和仿真;2. 学会编写简单的C语言程序,实现流水灯的控制;3. 培养动手实践能力,能够独立完成流水灯的制作与调试。
情感态度价值观目标:1. 培养学生对电子设计的兴趣和热情,激发创新意识;2. 培养学生的团队合作精神,学会在团队中沟通与协作;3. 培养学生严谨的科学态度,注重实践,敢于面对困难和挑战。
课程性质:本课程属于电子技术实践课程,结合理论知识,强调动手实践,培养学生的实际操作能力。
学生特点:本课程面向初中或高中学生,学生对电子技术有一定的基础,具备一定的逻辑思维能力和动手能力。
教学要求:注重理论与实践相结合,充分调动学生的积极性,引导学生在实践中掌握知识,提高技能,培养情感态度价值观。
教学过程中,将目标分解为具体的学习成果,以便进行有效的教学设计和评估。
二、教学内容1. 电子设计自动化(EDA)基本概念介绍:包括EDA的定义、发展历程、应用领域等;相关教材章节:第一章 电子设计自动化概述2. 流水灯设计原理:讲解流水灯的工作原理、电路组成、编程方法;相关教材章节:第二章 常见数字电路设计实例3. 数字电路基础知识:回顾逻辑门、触发器等基础知识,并应用于流水灯设计;相关教材章节:第三章 数字电路基础知识4. EDA软件使用:学习Multisim、Protel等软件的基本操作,进行电路设计和仿真;相关教材章节:第四章 EDA软件及其应用5. 流水灯编程:学习编写简单的C语言程序,实现流水灯的控制;相关教材章节:第五章 C语言在数字电路设计中的应用6. 流水灯制作与调试:动手实践,分组进行流水灯的制作、编程与调试;相关教材章节:第六章 数字电路实践教学进度安排:1. 第1周:电子设计自动化基本概念介绍;2. 第2周:流水灯设计原理及电路组成;3. 第3周:数字电路基础知识回顾;4. 第4周:EDA软件使用;5. 第5周:流水灯编程;6. 第6周:流水灯制作与调试。
滨江学院课程论文(可编程器件原理与应用)题目基于VHDL语言的流水灯设计学生姓名王秋阳学号20082305047院系滨江学院专业电子与信息工程指导教师刘建成二零一零年十二月三十日一、任务:采用ALTERA 公司的EPM7128SLC84-10芯片,通过VHDL 语言设计一个流水灯电路。
流水灯样式必须大于3种,且可以通过按键调节显示样式;可以通过按键调节流水灯变化快慢;当前流水灯样式和变化速度能够通过数码管显示出来;(附加:具有按键声)二、设计框图(框图说明)1MHZ 周期信号经过2个100分频,得到100HZ ,再经过1个10分频得到10HZ 信号,传给速度控制模块,得到需要的速度周期信号,然后传给样式选择模块,样式选择模块直接输出彩灯样式;控制模块通过接受两个按键信号,同时控制速度控制模块和样式选择模块;译码扫描模块通过判断控制模块,扫描数码管显示当前彩灯样式和彩灯变化速度;按键信号通过延时模块输出按键发生信号。
速度按键 样式按键控制模块速度控制样式选择译码和扫描数码显示彩灯显示1000HZ 信号100HZ 信号蜂鸣器三、原理图(CPLD内部原理说明)从原理图中可以看到,一共有8种模块,D触发器的作用是对按钮进行消抖,除D触发器之外的7个模块功能及作用如下:f100和f10分别是100和10的分频器,speed模块的作用是对彩灯变化速度进行控制,而style_switch模块的作用是对彩灯样式进行调节。
Control 模块接收按键信号对样式和速度进行总的控制。
Show模块是对速度值和样式值进行译码并进行扫描数码管,将当前样式和速度状态显示出来。
Delay模块则是对按键声的延时。
四、各个模块设计(波形仿真)1.f100模块功能:100分频波形仿真:VHDL代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity f100 is --100分频port(clk:in std_logic;sec:out std_logic);end entity f100;architecture getsec of f100 issignal secout : std_logic :='1';beginprocess(clk) isvariable count100: integer range 0 to 50;beginif clk'event and clk='1' thencount100:=count100+1;if count100=50 thensecout<=not secout;count100:=0;end if;end if;end process;sec<=secout;end architecture getsec;2.f10模块功能:10分频波形仿真:VHDL代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity f10 is –-10分频port(clk:in std_logic;sec:out std_logic);end entity f10;architecture getsec of f10 issignal secout : std_logic :='1';beginprocess(clk) isvariable count10: integer range 0 to 5;beginif clk'event and clk='1' thencount10:=count10+1;if count10=5 thensecout<=not secout;count10:=0;end if;end if;end process;sec<=secout;end architecture getsec;3.speed模块功能:根据DATE输入端的数值大小,产生不同频率的周期信号,从而达到控制彩灯变化速率的目的。
EDA实验设计报告姓名:张炫学号:2011128085班级:11电工设计内容:设计8位流水灯的4种循环模式,并用quartusII进行编译和仿真,用LED灯实现需求。
控制系统方案:四种循环模式(1)灯从右到左依次都闪亮(2)灯从右向左逐次闪亮(3)灯从右向左逐次闪亮(4) 从右向左每间隔一个闪亮设计方案:通过复位端reset 与按键端right,left,shan,yici控制,当复位reset为 1 时led 灯最左端点亮,再通过else-if语句控制试验程序:module light(clk,reset,right,left,shan,yici,led);input clk,reset,right,left,shan,yici;output[7:0] led;reg[7:0] led;always @ (posedge clk)beginif(reset)beginled<=8’b00000001;endelsebeginif(yici)beginled<=((led<<1)+8’b00000001);if(led==8’b11111111)led<=8’b00000001;endif(right)beginled<=led>>1;if(led==8’b00000001)led<=8’b10000000;endif(left)beginled<=led<<1;if(led==8’b10000000)led<=8’b00000001;endif(shan)beginif(led==8’b01010101)led<=8’b10101010;elseled<=8’b01010101;endendendendmodule实验总结:经过本次课程设计使我进一步巩固了从课堂上学到的知识,虽然在实验过程中多次出错,但通过不断的检查和调试终于成功的实现了8位流水灯的控制。
1 绪论1.1 EDA简介EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。
现在对EDA的概念或范畴用得很宽。
包括在机械、电子、通信、航空航天、化工、矿产、生物等各个领域,都有EDA的应用。
1.2 硬件描述语VHDL硬件描述语言(HDL)是一种用于设计硬件电子系统的计算机语言,它用软件编程的方式来描述电子系统的逻辑功能、电路结构和连接形式,与传统的门级描述方式相比,它更适合大规模系统的设计。
例如一个32位的加法器,利用图形输入软件需要输人500至1000个门,而利用VHDL语言只需要书写一行“A=B+C” 即可。
而且VHDL语言可读性强,易于修改和发现错误。
早期的硬件描述语言,如ABEL、HDL、AHDL,由不同的EDA厂商开发,互不兼容,而且不支持多层次设计,层次间翻译工作要由人工完成。
为了克服以上不足,1985年美国国防部正式推出了高速集成电路硬件描述语言VHDL,1987年IEEE采纳VHDL 为硬件描述语言标准(IEEE-STD-1076)。
VHDL 是一种全方位的硬件描述语言,包括系统行为级。
寄存器传输级和逻辑门多个设计层次,支持结构、数据流和行为三种描述形式的混合描述,因此VHDL 几乎覆盖了以往各种硬件俄语言的功能,整个自顶向下或由下向上的电路设计过程都可以用VHDL 来完成。
万年历的设计一、实验目标1. 巩固对基本的开发流程的掌握2. 复习对QUARTUS II软件的使用3. 复习NIOS II软件的使用4.在训练掌握相关软件使用的基础上,完成课题的设计二、设计要求用Nios II DE2开发楹的LCD(或8个七段数码管)显示电子钏的日期和时间。
LCD 分两行显示,第1行显示年、月和日(例如显示:20080101);第2行显示时、分和秒(例如显示:00152545)。
用输入按钮BUTTON[0]来控制LCD行修改,同时让Nios II DE2开发板上的绿色发光二极管LDG3的亮与灭来表示这个选择。
当BUTTON[0]按下一次后,LDG3亮,可以修改年、月和日的数字;再按一次BUTTON[0]后,LDG3灭,可以修改时、分和秒的数字。
另外和输入按钮BUTTON[3]来控制日期和时间的修改,当处于日期修改方式时,每按动一次BUTTON[3]按钮,依次更换“年”、“月”和“日”的修改。
当处于时间修改方式时,每按动一次BUTTON[3]按钮,依次更换“时”、“分”和“秒”的修改。
修改对象被选中后,按动BUTTON[2]输入按钮可以增加显示的数字;按动BUTTON[1]输入按钮可以减少显示的数字。
三、实验原理与步骤⑴在QUARTUS II 中建立工程⑵用SOPC BUILDER建立NIOS系统模块⑶在QUARTUS II 中的图形编辑界面中进行管脚连接、锁定工作⑷编译工程后下载到FPGA中⑸在NIOS II IDE中根据硬件建立软件工程⑹编译后,经过简单设置下载到FPGA中进行调试、验证下面根据以上的步骤进行进行一次全程开发:第一步:硬件部分设计1. 在自己的文件目录下建立一个hello_led文件夹,注意目录中不能有空格或中文;2. 打开QUARTUS II,点击FILE菜单下的New Project Wizard…会弹出如图2-1所示的对话框:图2-1 建立工程3. 然后输入工程存放目录,或点击工程路径右面的按钮设置工程存放目录,在第二栏中输入工程名称,我们这里输入为led;之后点击Finish,对话框消失,此时已经建立好了LED工程文件;4. 点击Assignment菜单中的Device,选择芯片为Cyclone II系列的EP2C35F672C6,如下图2-2所示:图2-2 选择器件5. 确认后。
EDA大作业流水灯设计基于Quartus II的花样流水灯的设计流水灯是一串按一定的规律像流水一样连续闪亮,流水灯控制是可编程控制器的一个应用,其控制思想在工业控制技术领域也同样适用。
流水灯控制可用多种方法实现,但对现代可编程控制器而言,基于EDA技术的流水灯设计也是很普遍的。
1.设计目的a.学习使用EDA集成设计软件Quartus II,电路描述,综合,模拟过程b.了解基于EDA应用系统的设计方法c. 掌握使用EDA工具设计流水灯的设计思路和设计方法d.熟练使用Quartus II对实验程序进行改错,调试以及演示现象2. 设计说明流水灯设计是由八只LED显示灯来实现的,通过程序代码来控制这八只灯的亮灭,从而实现花型的变化(快慢,顺序)。
3.程序设计3.1library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY first ISPORT (clk : IN std_logic;rst : IN std_logic;c : OUT std_logic_vector(7 DOWNTO 0));END first;ARCHITECTURE arch OF first ISCONSTANT state0 : std_logic_vector(2 DOWNTO 0) := "000";CONSTANT state1 : std_logic_vector(2 DOWNTO 0) := "001";CONSTANT state2 : std_logic_vector(2 DOWNTO 0) := "010";CONSTANT state3 : std_logic_vector(2 DOWNTO 0) := "011";CONSTANT state4 : std_logic_vector(2 DOWNTO 0) := "100";CONSTANT state5 : std_logic_vector(2 DOWNTO 0) := "101"; CONSTANT state6 : std_logic_vector(2 DOWNTO 0) := "110"; CONSTANT state7 : std_logic_vector(2 DOWNTO 0) := "111"; SIGNAL state : std_logic_vector(2 DOWNTO 0);SIGNAL cnt : std_logic_vector(2 DOWNTO 0);BEGINPROCESS(clk,rst)BEGINIF (NOT rst = '1') THENstate <= state0;cnt <= "000";ELSIF(clk'EVENT AND clk='1')THENcnt <= cnt + "001";IF (cnt = "111") THENCASE state ISWHEN state0 =>state <= state1;WHEN state1 =>state <= state2;WHEN state2 =>state <= state3;WHEN state3 =>state <= state4;WHEN state4 =>state <= state5;WHEN state5 =>state <= state6;WHEN state6 =>state <= state7;WHEN state7 =>state <= state0; WHEN OTHERS =>NULL;END CASE;END IF;END IF;END PROCESS;PROCESS(state)BEGINCASE state ISWHEN state0 =>c <= "";WHEN state1 =>c <= "";WHEN state2 =>c <= "";WHEN state3 =>c <= "";WHEN state4 =>c <= "";WHEN state5 =>c <= "";WHEN state6 =>c <= "";WHEN state7 =>c <= "";WHEN OTHERS =>NULL;END CASE;END PROCESS;END arch;3.2library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY second ISPORT (clk : IN std_logic;rst : IN std_logic;c : OUT std_logic_vector(7 DOWNTO 0));END second;ARCHITECTURE arch OF second ISCONSTANT state0 : std_logic_vector(2 DOWNTO 0) := "000"; CONSTANT state1 : std_logic_vector(2 DOWNTO 0) := "001"; CONSTANT state2 : std_logic_vector(2 DOWNTO 0) := "010"; CONSTANT state3 : std_logic_vector(2 DOWNTO 0) := "011"; CONSTANT state4 : std_logic_vector(2 DOWNTO 0) := "100"; CONSTANT state5 : std_logic_vector(2 DOWNTO 0) := "101"; CONSTANT state6 : std_logic_vector(2 DOWNTO 0) := "110"; CONSTANT state7 : std_logic_vector(2 DOWNTO 0) := "111"; SIGNAL state : std_logic_vector(2 DOWNTO 0);SIGNAL cnt : std_logic_vector(2 DOWNTO 0);BEGINPROCESS(clk,rst)BEGINIF (NOT rst = '1') THENstate <= state0;cnt <= "000";ELSIF(clk'EVENT AND clk='1')THENcnt <= cnt + "001";IF (cnt = "111") THENCASE state ISWHEN state0 =>state <= state1; WHEN state1 =>state <= state2; WHEN state2 =>state <= state3; WHEN state3 =>state <= state4; WHEN state4 =>state <= state5; WHEN state5 =>state <= state6; WHEN state6 =>state <= state7; WHEN state7 =>state <= state0; WHEN OTHERS =>NULL;END CASE;END IF;END IF;END PROCESS;PROCESS(state)BEGINCASE state ISWHEN state0 =>c <= "";WHEN state1 =>c <= "";WHEN state2 =>c <= "";WHEN state3 =>c <= "";WHEN state4 =>c <= "";WHEN state5 =>c <= "";WHEN state6 =>c <= "";WHEN state7 =>c <= "";WHEN OTHERS =>NULL;END CASE;END PROCESS;END arch;3.3library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY third ISPORT (clk : IN std_logic;rst : IN std_logic;c : OUT std_logic_vector(7 DOWNTO 0));END third;ARCHITECTURE arch OF third ISCONSTANT state0 : std_logic_vector(2 DOWNTO 0) := "000"; CONSTANT state1 : std_logic_vector(2 DOWNTO 0) := "001"; CONSTANT state2 : std_logic_vector(2 DOWNTO 0) := "010"; CONSTANT state3 : std_logic_vector(2 DOWNTO 0) := "011"; CONSTANT state4 : std_logic_vector(2 DOWNTO 0) := "100"; CONSTANT state5 : std_logic_vector(2 DOWNTO 0) := "101"; CONSTANT state6 : std_logic_vector(2 DOWNTO 0) := "110"; CONSTANT state7 : std_logic_vector(2 DOWNTO 0) := "111"; SIGNAL state : std_logic_vector(2 DOWNTO 0);SIGNAL cnt : std_logic_vector(2 DOWNTO 0);BEGINPROCESS(clk,rst)BEGINIF (NOT rst = '1') THENstate <= state0;cnt <= "000";ELSIF(clk'EVENT AND clk='1')THENcnt <= cnt + "001";IF (cnt = "111") THENCASE state ISWHEN state0 =>state <= state1; WHEN state1 =>state <= state2; WHEN state2 =>state <= state3; WHEN state3 =>state <= state4; WHEN state4 =>state <= state5; WHEN state5 =>state <= state6; WHEN state6 =>state <= state7; WHEN state7 =>state <= state0; WHEN OTHERS =>NULLEND CASE;END IF;END IF;END PROCESS;PROCESS(state)BEGINCASE state ISWHEN state0 =>c <= "";WHEN state1 =>c <= "";WHEN state2 =>c <= "";WHEN state3 =>c <= "";WHEN state4 =>c <= "";WHEN state5 =>c <= "";WHEN state6 =>c <= "";WHEN state7 =>c <= "";WHEN OTHERS =>NULL;END CASE;END PROCESS;END arch;3.4library ieee;use ieee.std_logic_1164.all;entity sanba isport(a,b,c:in std_logic;y7,y6,y5,y4,y3,y2,y1,y0:out std_logic); end entity sanba;architecture behav of sanba issignal abc: std_logic_vector(2 downto 0);beginabc <= a & b & c ;process(a,b,c)begincase abc iswhen "000" =>y0<='0';y1<='1';y2<='1';y3<='1';y4<='1';y5<='1';y6<='1';y7<='1';when "001" =>y0<='1';y1<='0';y2<='1';y3<='1';y4<='1';y5<='1';y6<='1';y7<='1';when "010" =>y0<='1';y1<='1';y2<='0';y3<='1';y4<='1';y5<='1';y6<='1';y7<='1';when "011" =>y0<='1';y1<='1';y2<='1';y3<='0';y4<='1';y5<='1';y6<='1';y7<='1';when "100" =>y0<='1';y1<='1';y2<='1';y3<='1';y4<='0';y5<='1';y6<='1';y7<='1';when "101" =>y0<='1';y1<='1';y2<='1';y3<='1';y4<='1';y5<='0';y6<='1';y7<='1';when "110" =>y0<='1';y1<='1';y2<='1';y3<='1';y4<='1';y5<='1';y6<='0';y7<='1';when "111" =>y0<='1';y1<='1';y2<='1';y3<='1';y4<='1';y5<='1';y6<='1';y7<='0'; when others =>end case;end process;end architecture behav;3.5 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY first ISPORT (clk : IN std_logic;rst : IN std_logic;c : OUT std_logic_vector(7 DOWNTO 0));END first;ARCHITECTURE arch OF first ISCONSTANT state0 : std_logic_vector(2 DOWNTO 0) := "000"; CONSTANT state1 : std_logic_vector(2 DOWNTO 0) := "001"; CONSTANT state2 : std_logic_vector(2 DOWNTO 0) := "010"; CONSTANT state3 : std_logic_vector(2 DOWNTO 0) := "011"; CONSTANT state4 : std_logic_vector(2 DOWNTO 0) := "100"; CONSTANT state5 : std_logic_vector(2 DOWNTO 0) := "101"; CONSTANT state6 : std_logic_vector(2 DOWNTO 0) := "110"; CONSTANT state7 : std_logic_vector(2 DOWNTO 0) := "111"; SIGNAL state : std_logic_vector(2 DOWNTO 0);SIGNAL cnt : std_logic_vector(2 DOWNTO 0);BEGINPROCESS(clk,rst)BEGINIF (NOT rst = '1') THENstate <= state0;cnt <= "000";ELSIF(clk'EVENT AND clk='1')THENcnt <= cnt + "001";IF (cnt = "111") THENCASE state ISWHEN state0 =>state <= state1;WHEN state1 =>state <= state2;WHEN state2 =>state <= state3;WHEN state3 =>state <= state4; WHEN state4 =>state <= state5; WHEN state5 =>state <= state6; WHEN state6 =>state <= state7; WHEN state7 =>state <= state0; WHEN OTHERS =>NULL;END CASE;END IF;END IF;END PROCESS;PROCESS(state)BEGINCASE state ISWHEN state0 =>c <= "";WHEN state1 =>c <= "";WHEN state2 =>c <= "";WHEN state3 =>c <= "";WHEN state4 =>c <= "";WHEN state5 =>c <= "";WHEN state6 =>c <= "";WHEN state7 =>c <= "";WHEN OTHERS =>NULL;END CASE;END PROCESS;END arch;3.6 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY first ISPORT (clk : IN std_logic;rst : IN std_logic;c : OUT std_logic_vector(7 DOWNTO 0));END first;ARCHITECTURE arch OF first ISCONSTANT state0 : std_logic_vector(2 DOWNTO 0) := "000"; CONSTANT state1 : std_logic_vector(2 DOWNTO 0) := "001"; CONSTANT state2 : std_logic_vector(2 DOWNTO 0) := "010"; CONSTANT state3 : std_logic_vector(2 DOWNTO 0) := "011"; CONSTANT state4 : std_logic_vector(2 DOWNTO 0) := "100"; CONSTANT state5 : std_logic_vector(2 DOWNTO 0) := "101";CONSTANT state6 : std_logic_vector(2 DOWNTO 0) := "110"; CONSTANT state7 : std_logic_vector(2 DOWNTO 0) := "111"; SIGNAL state : std_logic_vector(2 DOWNTO 0);SIGNAL cnt : std_logic_vector(2 DOWNTO 0);BEGINPROCESS(clk,rst)BEGINIF (NOT rst = '1') THENstate <= state0;cnt <= "000";ELSIF(clk'EVENT AND clk='1')THENcnt <= cnt + "001";IF (cnt = "111") THENCASE state ISWHEN state0 =>state <= state1;WHEN state1 =>state <= state2;WHEN state2 =>state <= state3;WHEN state3 =>state <= state4;WHEN state4 =>state <= state5;WHEN state5 =>state <= state6;WHEN state6 =>state <= state7;WHEN state7 =>state <= state0; WHEN OTHERS =>NULL;END CASE;END IF;END IF;END PROCESS;PROCESS(state)BEGINCASE state ISWHEN state0 =>c <= "";WHEN state1 =>c <= "";WHEN state2 =>c <= "";WHEN state3 =>c <= "";WHEN state4 =>c <= "";WHEN state5 =>c <= "";WHEN state6 =>c <= "";WHEN state7 =>c <= "";WHEN OTHERS =>NULL;END CASE;END PROCESS;END arch;3.7 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY first ISPORT (clk : IN std_logic;rst : IN std_logic;c : OUT std_logic_vector(7 DOWNTO 0));END first;ARCHITECTURE arch OF first ISCONSTANT state0 : std_logic_vector(2 DOWNTO 0) := "000"; CONSTANT state1 : std_logic_vector(2 DOWNTO 0) := "001"; CONSTANT state2 : std_logic_vector(2 DOWNTO 0) := "010"; CONSTANT state3 : std_logic_vector(2 DOWNTO 0) := "011"; CONSTANT state4 : std_logic_vector(2 DOWNTO 0) := "100"; CONSTANT state5 : std_logic_vector(2 DOWNTO 0) := "101"; CONSTANT state6 : std_logic_vector(2 DOWNTO 0) := "110"; CONSTANT state7 : std_logic_vector(2 DOWNTO 0) := "111"; SIGNAL state : std_logic_vector(2 DOWNTO 0);SIGNAL cnt : std_logic_vector(2 DOWNTO 0);BEGINPROCESS(clk,rst)BEGINIF (NOT rst = '1') THENstate <= state0;cnt <= "000";ELSIF(clk'EVENT AND clk='1')THENcnt <= cnt + "001";IF (cnt = "111") THENCASE state ISWHEN state0 =>state <= state1; WHEN state1 =>state <= state2; WHEN state2 =>state <= state3; WHEN state3 =>state <= state4; WHEN state4 =>state <= state5; WHEN state5 =>state <= state6; WHEN state6 =>state <= state7; WHEN state7 =>state <= state0; WHEN OTHERS =>NULL;END CASE;END IF;END IF;END PROCESS;PROCESS(state)BEGINCASE state ISWHEN state0 =>c <= "";WHEN state1 =>c <= "";WHEN state2 =>c <= "";WHEN state3 =>c <= "";WHEN state4 =>c <= "";WHEN state5 =>c <= "";WHEN state6 =>c <= "";WHEN state7 =>c <= "";WHEN OTHERS =>NULL;END CASE;END PROCESS;END arch;3.8 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY first ISPORT (clk : IN std_logic;rst : IN std_logic;c : OUT std_logic_vector(7 DOWNTO 0));END first;ARCHITECTURE arch OF first ISCONSTANT state0 : std_logic_vector(2 DOWNTO 0) := "000"; CONSTANT state1 : std_logic_vector(2 DOWNTO 0) := "001"; CONSTANT state2 : std_logic_vector(2 DOWNTO 0) := "010"; CONSTANT state3 : std_logic_vector(2 DOWNTO 0) := "011"; CONSTANT state4 : std_logic_vector(2 DOWNTO 0) := "100"; CONSTANT state5 : std_logic_vector(2 DOWNTO 0) := "101"; CONSTANT state6 : std_logic_vector(2 DOWNTO 0) := "110"; CONSTANT state7 : std_logic_vector(2 DOWNTO 0) := "111"; SIGNAL state : std_logic_vector(2 DOWNTO 0);SIGNAL cnt : std_logic_vector(2 DOWNTO 0);BEGINPROCESS(clk,rst)BEGINIF (NOT rst = '1') THENstate <= state0;cnt <= "000";ELSIF(clk'EVENT AND clk='1')THENcnt <= cnt + "001";IF (cnt = "111") THENCASE state ISWHEN state0 =>state <= state1;WHEN state1 =>state <= state2;WHEN state2 =>state <= state3; WHEN state3 =>state <= state4; WHEN state4 =>state <= state5; WHEN state5 =>state <= state6; WHEN state6 =>state <= state7; WHEN state7 =>state <= state0; WHEN OTHERS =>NULL;END CASE;END IF;END IF;END PROCESS;PROCESS(state)BEGINCASE state ISWHEN state0 =>c <= "";WHEN state1 =>c <= "";WHEN state2 =>c <= "";WHEN state3 =>c <= "";WHEN state4 =>c <= "";WHEN state5 =>c <= "";WHEN state6 =>c <= "";WHEN state7 =>c <= "";WHEN OTHERS =>NULL;END CASE;END PROCESS;END arch;4.流水灯原理图图1 顶层原理图5.仿真波形图图(2)顶层仿真波形图6.心得体会通过本次课程设计,我基本对EDA有了入门的了解和认识,在课堂之外进一步加深了对EDA课程各知识点的学习和以及quartusII软件开发平台的操作。
EDA实验设计报告流水灯一、实验背景流水灯是一种光电组合组件,它大多由两个简单元件组成,一个是led发光二极管,另一个是电位器,可以改变二极管的亮度。
本实验以FATI0A0话题,使用IMO89C52单片机实现流水灯,探究LED的工作原理和单片机的控制原理。
二、实验目的1、通过练习,掌握FATI0A0开发工具的使用,熟悉FATI0A0的基础开发流程;2、掌握基于PORTA的控制方法,通过调节端口的输出电压,控制LED的亮度和闪烁;3、掌握基于定时器的控制方法,使LED实现流水灯效果;4、掌握电路结构和作用原理,用多种方式实现流水灯效果,利用延时函数编程,启用定时器0、定时器1和定时中断,掌握定时器的设置方法等。
三、实验环境本次流水灯实验由FATI0A0开发平台准备了硬件环境:实验台、IMO89C52单片机、晶振、电源、LED等组成。
四、实验步骤(一)编写程序1.首先利用CY8IDE软件设计并编写流水灯程序,开启定时器,通过定时中断实现LED 的闪烁;2.然后了解定时器1的设置方法,编写流水灯程序,将定时器1设置为内部计数,并设定中断周期;3.最后将定时器1设置为高中断优先级,以确保流水灯的互斥性。
(二)烧写1.连接实验台的FATI0A0和串口,Push连接拨码开关,检查元件布局是否正确;2.将编写的程序烧写到FATI0A0,同时将电源和晶振接到FATI0A0的连接器上;3.然后将烧写好的源代码下载到FATI0A0可编译环境,并在FATI0A0上启动,程序就会运行起来。
(三)验证1.将拉线连接到LED上,先检查LED是否能正常亮灭;2.将程序烧写到FATI0A0后,打开LED,检查流水灯效果,看是否按照要求显示;3.如果实验结果满足要求,实验就成功。
五、结论本次实验熟悉了FATI0A0开发环境的使用,掌握了PORTA的控制方法,熟悉了基于定时器的控制方法,使LED实现流水灯效果,用多种方式实现流水灯效果,利用延时函数编程,启动定时器0、定时器1和定时中断,掌握定时器的设置方法等,有助于更好、更全面地掌握IMO89C52单片机和流水灯的相关知识。