EDA课程设计

时间:2024.4.5

EDA课程设计报告

课题名称:交通信号灯的控制

姓名:吴曼

学号:1010910530

随着我国经济社会快速发展,城市机动车保有量迅速增长,在进行城市基础设施建设以改善中心城区的交通问题时,仍然存在道路体系未健全,功能未理顺,公共系统不发达等问题,交通矛盾突出。而我国交通灯使用定周期控制和各路口各自独立控制方法,在解决这些问题时效果并不是很好。

随着电子信息的发展,找到一种更为合理的控制方法尤为重要。目前,控制交通信号灯的方法有很多,这次课程设计利用FPGA作为核心芯片,设计交通信号指示系统。

一、任务分析

设计一个交通信号灯控制器,在一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯。要求主干道处于常允许通行的状态,支干道有车来时才允许通行。主、支干道均有车时,两者交替通行,主干道每次放行45秒,支干道每次放行25秒。在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡。

综合分析,需用状态机实现功能。

二.原理分析

1.1设计目的

学习DEA开发软件和QuartusII的使用方法,熟悉可编程逻辑器件的使用。

1.2设计说明

利用状态机的转换实现模拟交通灯的控制,状态表如下所示:

表1 交通信号灯的4种状态

根据要求,可将各状态转换为状态转换图,如下所示:

图2:交通信号控制系统状态转换图

1.3模块分析

1.3.1分频模块

系统时钟为48MHZ,根据题目要求,利用分频器,将系统时钟分频为1HZ,分频器如下所示:

图3:分频器

1.3.2状态转换电路

实现各个状态的转换,包含各个灯的计时器,当记满时间后,用于状态的变换。用两个按键分别控制两个输入A,B。A输入高电平时,代表主道有车,B输入高电平时,代表支道有车。RA,GA,YA分别控制主干道红绿黄灯,RB,GB,YB分别控制支干道红绿黄灯。

图3:状态机

一.程序清单

1.1分频模块

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity fp is

port(       clk :in std_logic;                   

              fout:out std_logic);

end;

architecture one of fp is

       signal full :std_logic;

begin

       fpq: process(clk)

       variable d :integer range 48000000 downto 0;

       begin

       if clk'event and clk ='1' then

              if d= 48000000 then

              d :=0;

              full <= '1';

              else d := d+1;

              full <= '0';

              end if;

       end if;

end process fpq;

     fpq2 :process(full)

    variable d2 :std_logic;

    begin

    if full'event and full = '1' then

          d2 := not d2;

         if d2 ='1' then fout <= '1';

         else fout<='0';

         end if;

end if;

end process fpq2;

end;

 1.2状态机及计时模块

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity traffic is

port(

      A:in std_logic;

              B:in std_logic;

              clk:in std_logic;

              RA,GA,YA:out std_logic;

              RB,GB,YB:out std_logic

);

end;

architecture behav of traffic is

type states is(st0,st1,st2,st3);

signal current_state,next_state:states:=st0;

signal C,D,E:std_logic;

signal RAx,GAx,YAx,RBx,GBx,YBx:std_logic;

begin

reg:process(clk)begin

if(clk'event and clk ='1')then current_state<=next_state;

end if;

end process ;

COM1:process(current_state,A,B,C,D,E)begin

       case current_state is

       when st0=>if(B and (not A or C))='1' then next_state<=st1;

              else next_state<=st0;

              end if;

       when st1=>if D='1' then next_state<=st2;

              else  next_state<=st1;

              end if;

       when st2=>if(B and (not (A and E)))='1' then next_state<=st2;

           else next_state<=st3;

               end if;

       when  st3=>if D='1' then next_state<=st0;

               else next_state<=st3;

               end if;

       when others=>next_state<=st0;

end case;

end process;

COM2:process(current_state)

       begin

       Case current_state is

       when st0=>RAx<='0';GAx<='1';YAx<='0';RBx<='1';GBx<='0';YBx<='0';

       when st1=>RAx<='0';GAx<='0';YAx<='1';RBx<='1';GBx<='0';YBx<='0';

       when st2=>RAx<='1';GAx<='0';YAx<='0';RBx<='0';GBx<='1';YBx<='0';

       when st3=>RAx<='1';GAx<='0';YAx<='0';RBx<='0';GBx<='0';YBx<='1';

       when others=>RAx<='0';GAx<='1';YAx<='0';RBx<='1';GBx<='0';YBx<='0';

       end case;

       end process;

G45:process(current_state,clk)

variable Q45:std_logic_vector(5 downto 0);

begin

if(current_state=st0)then

       if(clk'event and clk='1')then

              if Q45<"101101"then Q45:=Q45+'1';

              else Q45:=(others=>'0');

              end if;

       end if;

                     if Q45="101101"then C<='1';

                     else C<='0';

                     end if;

else null;

end if;

end process;

R25:process(current_state,clk)

variable Q25:std_logic_vector(4 downto 0);

begin

if(current_state=st2)then

       if(clk'event and clk='1')then

              if Q25<"11001"then Q25:=Q25+'1';

              else Q25:=(others=>'0');

              end if;

       end if;

                     if Q25="11001"then D<='1';

                     else D<='0';

                     end if;

                     else null;

end if;

end process;

Y5:process(current_state,clk)

variable Q5:std_logic_vector(2 downto 0);

begin

if((current_state=st1)or(current_state=st3))then

       if(clk'event and clk='1')then

              if Q5<"101" then Q5:=Q5+'1';

              else Q5:=(others=>'0');

              end if;

       end if;

                     if Q5="101" then E<='1';

                     else E<='0';

                     end if;

                     else null;

end if;

end process;

Px:process(clk)begin

       if(clk'event and clk='1')then

       RA<=RAx;GA<=GAx;YA<=YAx;RB<=RBx;GB<=GBx;YB<=YBx;

       end if;

end process;

end;

三.仿真波形

四.故障分析

五.心得体会


第二篇:EDA课程设计交通灯


目录

1绪论?????????????????2

1.1 课程设计说明???????????2

1.2 课程设计目的???????????2 2 系统分析与总体方案?????????2

2.1 系统分析?????????????2

2.2 设计思想?????????????3

2.3 设计的总体方案??????????3 3 硬件电路设计???????????4

3.1控制流程电路设计?????????4

3.2译码显示电路设计?????????6

4、程序仿真与分析??????????11

4.1 仿真结果????????????11

4.2 仿真结果分析??????????11 5 心得体会?????????????12 6 参考文献?????????????13 附录A、各模块连接图????????14

1、绪论

1.1课程设计说明

伴随着社会的发展以及人类生活水平的提高,汽车的数量在不断增加,交通事业得以蓬勃发展,而随之引起的安全问题已经不容忽视。EDA技术的发展和应用领域也在不断的扩大与深入,机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域的重要性日益突出。为了确保十字路口的行人和车辆顺利,畅通的通过,往往采用电子控制的交通信号来进行指挥。利用EDA技术设计交通灯来完成这个需求就显的更加迫切,同样也是非常的实用和合理。

1.2 课程设计目

a.掌握十字路口交通灯控制的设计原理,并能够运用VHDL编程语言编写出实验程序,进一步对所学的EDA知识进行掌握与实际应用。

b.学会在MAX+plus Ⅱ软件环境中仿真,熟悉软件的基本操作和运行环境。 c.锻炼自己获取信息的能力,以及能够独立自主的思考和解决问题的能力。

2、系统分析与总体方案

2.1系统分析

通过分析可以知道,所要设计的十字路口交通灯控制电路要能够使南北方向有左转、直行各三个灯(红、黄、绿),东西方向有左转、直行各三个灯(红、黄、绿),三个灯能够按顺序依次亮灭。而且要求绿灯亮转黄灯亮然后其他时间为红灯,红灯亮可以直接转绿灯(三种灯的循环顺序如图2.1所示)。还要求三种灯的点亮时间能够以倒计时的形式显示出来。可以用VHDL语言合理设计系统功能,使红黄绿灯的转换有一个准确的时间间隔和转换顺序。

图2.1三种灯的循环顺序

2.2 设计思想

1 时间脉冲可以直接赋予得到。

2 10s、5s、40s、30s定时信号用倒计时,计时起始信号由控制流程电路给出,每当计满所需时间,即向控制电路输出“时间到”的信号,并使计数器清零,由控制电路启、闭三色信号灯。

3 主控电路是核心,这是一个时序电路,其输入信号为东西、南北方向: 10s、5s、40s、30s定时信号,其输出状态控制相应的三色灯。

4 三种灯转换状态表:

EDA课程设计交通灯

EDA课程设计交通灯

2.3 设计的总体方案

根据设计要求和系统所具有功能,并参考相关的文献资料经行方案设计画出如下所示的十字路口交通灯控制器系统框图,及为设计的总体方案,框图如下图

3.1所示:

图2.2 系统的框图

3、硬件电路设计

3.1控制器电路设计

流程控制器的作用是根据计数器的计数值控制各方向上发光二极管的亮、灭,当计时时间到达,状态控制器就响应,自动跳转到下一个状态。此外,当检测到特殊情况(urgen =‘1’)发生时,无条件点亮红灯的二极管(急救灯按下urgen ='1',则东西南北都亮红灯,在这种状态下原来的状态必须保持,即东西南北方向定时时间保持不变。急救灯未按下或者按下后恢复,则继续计时(计时通过计数器count),同时恢复东西南北原来灯的状态)。具体实物模块如图:

EDA课程设计交通灯

图3.1控制器模块

EDA课程设计交通灯

程序实现如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY ledcontrol IS

PORT(

reset,clk,urgen state : IN STD_LOGIC; : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); : OUT STD_LOGIC); sub,set1,set2,set3,set4

END ledcontrol;

ARCHITECTURE a OF ledcontrol IS

SIGNAL count : STD_LOGIC_VECTOR(6 DOWNTO 0);

SIGNAL subtemp: STD_LOGIC;

BEGIN

sub<=subtemp AND (NOT clk) ; --将电平型信号变为脉冲型,即高电平时输出一个脉冲

statelabel:

PROCESS (reset,clk)

BEGIN

IF reset='1' THEN --――系统复位

count<="0000000";

state<="000";

set2<='1';set4<='1';

ELSIF clk'event AND clk='1' THEN

IF urgen='0' THEN count<=count+1;subtemp<='1';ELSE subtemp<='0';END IF;

--――经过脉冲电平变换后,使得正常状态时,正常减计数,紧急状态下停止计数

IF count=0 then

state<="000";set1<='1';set2<='1';set3<='1';set4<='1';

ELSIF count=10 then state<="001";set1<='1';

ELSIF count=15 THEN state<="010";set1<='1';set2<='1';

ELSIF count=55 THEN state<="011";set2<='1';

ELSIF count=60 THEN state<="100";set2<='1';set3<='1';

elsif count=70 THEN state<="101";set3<='1';

elsif count=75 THEN state<="110";set3<='1';set4<='1';

elsif count=105 THEN state<="111";set4<='1';

ELSIF count=110 THEN count<="0000000";

ELSE set1<='0'; set2<='0';set3<='0';set4<='0';END IF;

END IF; -- ――控制流程

END PROCESS statelabel;

END a;

3.2输出显示电路设计

根据状态控制器所控制的状态和计数器的计时时间,选择当前状态下的显示器,使显示器输出当前状态下的数码管亮、灭指令,其中数码管的显示采用动态扫描显示。具体实物模块如图:

EDA课程设计交通灯

图3.2译码显示电路模块

程序实现如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY ledshow IS

PORT( clk,urgen state : IN : IN STD_LOGIC; STD_LOGIC_VECTOR(2 DOWNTO 0); : IN STD_LOGIC; : OUTsub,set1,set2,set3,set4 eg1,ey1,er1,edg2,edy2,edr2,ng1,ny1,nr1,ndg2,ndy2,ndr2 STD_LOGIC; led1,led2 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ledshow;

ARCHITECTURE a OF ledshow IS

SIGNAL count1,count2,count3,count4 : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL setstate1,setstate2,setstate3,setstate4 : STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL

etg1,ety1,etr1,edirr1,edirg1,ediry1,norg2,nory2,norr2,nordirg2,nordiry2,nordirr2 : STD_LOGIC;

BEGIN

led1<="00000000" WHEN urgen='1' AND clk='0' ELSE --显示东西向行和停

count1 WHEN state="000" ELSE count1 WHEN state="001" ELSE count2 WHEN state="010" ELSE count2 WHEN state="011" ELSE count2;

led2<="00000000" WHEN urgen='1' AND clk='0' ELSE

count3 WHEN state="000" ELSE

count3 WHEN state="001" ELSE

count3 WHEN state="010" ELSE

count3 WHEN state="011" ELSE

count3 WHEN state="100" ELSE

count3 WHEN state="101" ELSE

count4 WHEN state="110" ELSE

count4;

etg1<='1' WHEN state="000" AND urgen='0' ELSE '0';

ety1<='1' WHEN state="001" AND urgen='0' ELSE '0';

etr1<='1' WHEN state="010" or urgen='1' OR state="011" OR state="100" OR state="101" OR state="110" OR state="111" ELSE '0';

edirg1<='1' WHEN state="010" and urgen='0' ELSE '0';

ediry1<='1' WHEN state="011" and urgen='0' ELSE '0';

edirr1<='1' WHEN state="000" OR urgen='1' OR state="001" OR state="100" OR state="101" OR state="110" OR state="111" ELSE '0';

norg2<='1' WHEN state="100" AND urgen='0' ELSE '0';

nory2<='1' WHEN state="101" and urgen='0' ELSE '0';

norr2<='1' WHEN state="000" OR state="001" OR state="010" OR state="011" OR state="110" OR state="111" OR urgen='1' ELSE '0';

nordirg2<='1' WHEN state="110" AND urgen='0' ELSE '0';

nordiry2<='1' WHEN state="111" and urgen='0' ELSE '0';

nordirr2<='1' WHEN state="000" OR state="001" OR state="010" OR state="011" OR state="100" OR urgen='1' OR state="101" ELSE '0';

setstate1<= "00010000" WHEN state="000" ELSE

"00000101" WHEN state="001" ELSE "10010101" ;

setstate2<= "00010101" WHEN state="000" ELSE

--"00000101" WHEN state="001" ELSE "01000000" WHEN state="010" ELSE "00000101" WHEN state="011" ELSE "01010000" ;

setstate3<= "01100000" WHEN state="000" ELSE

"00010000" WHEN state="100" ELSE "00000101" WHEN state="101" ELSE "00110101" ;

setstate4<= "01110101" WHEN state="000" ELSE

"00110000" WHEN state="110" ELSE "00000101" ;

label4: ----南北直行

PROCESS (sub)

BEGIN

IF sub'event AND sub='1' THEN

IF set4='1' THEN

count4<=setstate4;

elsif count4(3 downto 0)="0000" then count4<=count4-7; ELSE count4<=count4-1;

END IF;

ndy2<=nordiry2; ndg2<=nordirg2; ndr2<=nordirr2;

END IF;

END PROCESS label4;

label3: ----南北左行

PROCESS (sub)

BEGIN

IF sub'event AND sub='1' THEN

IF set3='1' THEN

count3<=setstate3;

elsif count3(3 downto 0)="0000" then count3<=count3-7; ELSE count3<=count3-1;

END IF;

ng1<=norg2; ny1<=nory2; nr1<=norr2;

END IF;

END PROCESS label3;

label2: ---东西直行

PROCESS (sub)

BEGIN

IF sub'event AND sub='1' THEN

IF set2='1' THEN

count2<=setstate2;

elsif count2(3 downto 0)="0000" then count2<=count2-7; ELSE count2<=count2-1; END IF;

edg2<=edirg1; edy2<=ediry1; edr2<=edirr1;

END IF;

END PROCESS label2;

label1: --东西左行

PROCESS (sub)

BEGIN

IF sub'event AND sub='1' THEN

IF set1='1' THEN

count1<=setstate1;

elsif count1(3 downto 0)="0000" then count1<=count1-7; ELSE count1<=count1-1;

END IF;

eg1<=etg1; er1<=etr1; ey1<=ety1;

END IF;

END PROCESS label1;

END a;

4、程序仿真与分析

4.1 仿真结果

利用MAX+PLUS II软件对本程序进行编译,生成了可以进行仿真定时分析以及下载到可编程器件的相关文件。仿真结果如图5.1所示:

EDA课程设计交通灯

图5.1 仿真结果

4.2 仿真结果分析

通过设定clk值以及reset和urgen的初值,就可以得到如上所示的仿真波形图。由仿真波形图可以看出波形是由reset初值信号触发而显示出各个状态的。Urgen高电平信号输入时,所有交通灯都变为红灯状态(符合任务书的要求)。由仿真波形图还可以清楚的看出各时间段每个交通灯的状态。

要得到正确的仿真波形图就不许设定合适的时间信号clk值。如果clk值设置的太小则交通灯状态变化得太快无法分辨,如果clk值设置得太大则交通灯状态转换缓慢,效果不明显。其次,要设定reset初值,如果没有设定reset初值就不可能触发而得到仿真图。最后,就是要设置一Urgen高电平信号来检测紧急情况下的交通灯的状态。

5、心得体会

通过此次课程设计,使我对EDA程序设计有了进一步的学习,进一步的认识;在程序的设计,程序的调试方面都学到了很多东西,这是第一次编写EDA的大程序,很有成就感。在这几天课设的时间里,实验室的氛围对我们的影响很大,大家一起努力,这也是我们能完成课设的动力。在编程中出现问题时,一定要戒骄戒躁,脚踏实地,认真看书,仔细分析,仔细调试,就一定会发现错误,克服困难,我们也是这么做的,这在课设中十分重要。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习EDA更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。

生活就是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。虽然我这次做的课程设计不是非常的复杂,但在设计和仿真的过程中,我们也遇到了不少的困难,回首整个过程,却受益匪浅。

对我而言,知识上的收获重要,精神上的丰收更加可喜。让我知道了学无止境的道理。我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。挫折是一份财富,经历是一份拥有。这次课程设计必将成为我人生旅途上一个非常美好的回忆!

6 参考文献

[1] 阎石 主编,《数字电子技术基础》,高等教育出版社,1998

[2] 谭会生等主编,《EDA技术及应用》,西安电子科技大学出版社,2001

[3] 廖裕评等主编,《CPLD数字电路设计——使用MAX+plusⅡ入门篇》,清华大学出版社,2001

[4] 冯涛等主编,《可编程逻辑器件开发技术:MAX+plusⅡ入门与提高》,人民邮电出版社,2002

[5] 杨崇志,《特殊新型电子元件手册》,辽宁科学技术出版社,1999

[6] 彭介华,《电子技术课程设计指导》高等教育出版社.20xx年出版.

[7] Mark Zwolinski, Digital System Design with VHDL, 电子工业出版社,2002

[8] Alan B. Marcovitz Introduction to logic Design, 电子工业出版社,2002

附录A、各模块连接图

EDA课程设计交通灯

更多相关推荐:
工程预算课程设计总结

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着工程技术发展的日新日异,工程造价已经成为当今建筑工程领域最为重要的管理环…

c++课程设计总结

课程设计总结经过一个学期对《C++程序设计》的学习,我学习到了基本的理论知识,了解到了C++语言程序设计的思想,这些知识都为我的课程实践和进一步的学习打下了坚实的基础。在为期近两周的C++课程设计中,我体会颇多…

化工原理课程设计总结

《化工原理课程设计》总结本学期顺利完成了化学工程与工艺专业共100名同学的化工原理课程设计,总体来看学生的工艺计算、过程设计及绘图等专业能力得到了真正有效的提高,可以较好地把理论学习中的分散知识点和实际生产操作…

PLC自动门课程设计心得体会

PLC自动门课程设计心得体会:通过此次C语言程序设计实践本人实在是获益不浅!C语言是上个学期开的课程所以这个学期并没怎么看过当要开始设计的时候还真不知从哪下手!结果第一次的上机我傻坐着不知道该做什么后来就写了几…

课程设计心得体会

课程设计心得体会在初学C语言的一个学期后,学校组织我们进行了C语言实训,尝试编写一些有难度的程序。在为期两周的时间中,同组同学共同的感受是:C语言实训和平时上课所接触的程序是完全不同的,所经受的考验是平时所无法…

综合实践活动课程设计练习题(判断题、填空题、名词解释、简答题)

单选题第1题(3.0)分下列以研究性为主的探究活动的实施程序哪个是正确的√A、产生问题-确定主题-组建小组-制定计划-开展活动-总结成果-展示交流-评价反思B、产生问题--组建小组-确定主题-制定计划-开展活动…

20xx年《管理信息系统》课程设计论文选题

20xx年《管理信息系统》课程设计论文选题一、管理信息系统设计与开发1、IT行业市场情报管理信息系统设计与开发2、某工业企业生产业务处理信息系统设计与开发3、某产品质量管理信息系统设计与开发4、某工业企业设备管…

消防课程设计范文.doc

课程设计课题名称所在班级同组姓名指导教师目录1前言12简介13火灾危险性分析231学生公寓的火灾特点232学生公寓的火灾危险性等级233学生公寓的耐火等级2331建筑物耐火等级的划分2332建筑物耐火等级的选定...

化工原理课程设计范文

化工原理课程设计3题目吸收量为2400mh水吸收丙酮过程填料塔设计教学院专业班级学生姓名学生学号指导教师20xx年12月24日I目录任务书1摘要2第一章绪论311吸收技术概况312吸收设备的发展313吸收过程在...

毕业论文及课程设计参考模版

摘要摘要电信营业厅顾客排队是一个常见的现象为了提高顾客满意度并为实现电信企业转型提供保障必须解决好这个问题而解决该问题的基本目标是平稳波动的顾客需求与电信营业厅有限的服务能力之间的矛盾本文基于排队论和需求管理的...

课程设计排版范本

课程设计课题名称我校顺枫公寓A6栋的消防现状分析与改进专业名称安全工程所在班级安本0803班设计者解燕同组人姜琼学号0860124031008601240212指导教师胡鸿湖南工学院课程设计任务书安全与环境工程...

创新课程设计范例

机械创新设计课程设计院系班级成员指导老师设计题目1年月日多功能平口钳设计方案一设计任务简述多功能平口钳为了实现平口钳的多功能化解决平口钳功能单一的问题设计出一种多功能平口钳其我们将钳口作成燕尾槽结构并配合以不同...

课程设计(518篇)