eda课程设计交通灯控制器的设计.docx

上传人:b****5 文档编号:30582888 上传时间:2023-08-18 格式:DOCX 页数:30 大小:309.26KB
下载 相关 举报
eda课程设计交通灯控制器的设计.docx_第1页
第1页 / 共30页
eda课程设计交通灯控制器的设计.docx_第2页
第2页 / 共30页
eda课程设计交通灯控制器的设计.docx_第3页
第3页 / 共30页
eda课程设计交通灯控制器的设计.docx_第4页
第4页 / 共30页
eda课程设计交通灯控制器的设计.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

eda课程设计交通灯控制器的设计.docx

《eda课程设计交通灯控制器的设计.docx》由会员分享,可在线阅读,更多相关《eda课程设计交通灯控制器的设计.docx(30页珍藏版)》请在冰豆网上搜索。

eda课程设计交通灯控制器的设计.docx

eda课程设计交通灯控制器的设计

 

 

EDA课程设计报告

 

 题   目 交通灯控制器的设计 ﻫ

摘要

交通灯信号控制器通常要实现自动控制和手动控制其红绿灯的变化,基于FPGA设计的交通灯信号控制器电路简单、可靠性好。

本设计可控制2个路口的红、黄、绿三盏灯.让其按特定的规律进行变化。

利用QuartusⅡ对设计结果进行仿真,发现系统工作性能良好。

据此设计而成的硬件电路,也实现了控制要求。

关键词:

交通灯自动控制手动控制

 

摘要ﻩ1

1.概述3

1.1课程设计目的ﻩ3

1.3 实验环境3

2.系统总体设计4

2.2系统组成4

3. 系统层次化设计与软件仿真ﻩ5

3.1系统时序发生电路ﻩ5

3.1.2系统时序发生电路clk_gen的仿真输出波形和元件符号6

3.2红绿灯计数时间选择模块7

3.2.1VHDL源代码:

7

3.3定时控制电路ﻩ8

3.3.1VHDL源代码:

ﻩ9

3.3.2定时控制电路count_down的仿真输出波形和元件符号ﻩ10

3.4红绿灯信号译码电路10

3.4.2信号译码电路ﻩ14

3.5 红绿灯交通控制器顶层电路ﻩ15

3.5.1VHDL源代码:

ﻩ15

3.5.2交通控制器顶层电路Traffic_TOP的仿真输出波形和元件符号ﻩ17

4.系统硬件仿真19

5.结论与体会ﻩ21

参考文献22

 

1.概述

1.1课程设计目的

此次课程设计是根据《VHDL程序设计》这门课程开设的综合设计课程,要求学生利用VHDL编程语言,基于EDA开发平台Quartus错误!

未找到引用源。

设计相应的数字系统,通过对系统进行编程、仿真、调试与实现,体验设计的全过程,进一步加深对所学基础知识的理解,培养学生将理论知识应用于实践的能力、学生自学与创新能力和分析解决实际问题的能力。

培养学生设计、绘图、计算机应用、文献查阅、实验研究、报告撰写等基本技能;提高学生独立分析和解决工程实际问题的能力;增强学生的团队协作精神、创新意识、严肃认真的治学态度和严谨求实的工作作风。

1.2课程设计题目及要求

交通灯控制器的设计:

随着各种交通工具的发展和交通指挥的需要,交通灯的诞生大大改善了城市交通状况。

要求设计一个交通灯控制器,假设某个交通十字路口是由一条主干道和一条次干道汇合而成,在每个方向设置红绿黄灯3种信号灯,红灯亮禁止通行,绿灯亮允许通行。

黄灯亮允许车辆有时间停靠到禁止线以外。

在自动控制模式时,主干道(东西)每次放行时间为30s,次干道(南北)每次放行时间为20s,主干道红灯、次干道黄灯、主干道黄灯、次干道红灯持续时间为5s。

 绿灯转为红灯时,要求黄灯先亮5s,才能变换运行车道。

要求交通灯控制器有复位功能,并要求所有交通灯的状态变化在时钟脉冲上升沿处。

1.3 实验环境

软件仿真采用QuartusII6.0;

硬件仿真采用KFH-1型CPLD/FPGA实验开发系统;

2. 系统总体设计

根据设计要求和系统所具有的功能,并参考相关的文献资料,经行方案设计,可以画出如下述所示的交通信号灯控制器的系统流程图与系统框图。

我们选择按照自顶向下的层次化设计方法,整个系统可分为4个模块,系统时序发生电路、红绿灯计数时间选择模块、定时控制电路、红绿灯信号译码电路。

2.2系统组成

其中系统时序发生电路最主要的功能就是产生一些额外的输出信号,它们是为红绿灯信号译码电路提供的频率39kHz的扫描信号,为定时控制电路提供的使能(enable)控制信号,为红绿灯信号译码电路提供的占空比为50%的秒闪烁信号;红绿灯计数时间选择模块是负责输出显示器需要的值(即倒数的秒数值),作为定时控制电路的倒计时秒数,在该模块中可设置东西路口河南北路口的信号灯维持秒数;定时控制电路功能就是负责接收红绿灯计数时间选择模块输出的值(即倒数的秒数值),然后将其转换成BCD码,利用七段显示器显示出来,让新人能清楚的知道再过多久就会变成红灯;红绿灯信号译码电路除了负责控制路口红绿灯的显示外,最主要的功能就是能够利用开关来切换手动与自动的模式,让交警能够通过外部输入的方式指挥交通的,但为了配合高峰时段,防止交通拥挤,有时还必须使用手动红字,即让交警执行指挥交通。

为了系统正常运作,整个控制器采用同步工作方式,由外接信号发生器(该电路的设计可参见本章)提供1Hz的时钟信号CLK。

3.系统层次化设计与软件仿真

EDA技术的基本设计方法有电路设计方法和系统设计方法。

电路级设计方法已经不能适应新的形势,本系统采用的是系统级层次设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片FPGA芯片实现,首先用VHDL语言编写各个功能模块程序,最后通过综合器和适配器生成最终的目标器件,然后用顶层原理图将各功能模块连接起来。

下面给出各模块的VHDL设计过程和仿真结果。

3.1系统时序发生电路

在红绿灯交通信号控制系统中,大多数的情况是通过自动控制的方式指挥交通的。

因此,为了避免意外事件的发生,电路必须有一个稳定的时钟(clock)才能让系统正常工作。

但为了配合高峰时段,防止交通拥挤,有时也必须使用手动可能工资,即让交警能够顺利的指挥交通。

CLK_gen电路最主要的功能就是产生一些额外的输出信号,并将其用作后续几个电路的使用(enable)控制与同步信号处理。

该电路的核心部分就是分频电路,通过对外接信号发生器提供1Hz的时钟信号进行1000分频,得到一个周期1s的输出使能信号ena_1Hz(占空比1:

1000)和flash_Hz(占空比1:

1);1024分频后得到红绿灯信号译码电路所需要的频率为39kHz的显示使能信号ena_scan。

3.1.1VHDL源代码:

LIBRARYIEEE;

USEIEEE.std_logic_1164.all;

USEIEEE.std_logic_arith.all;

USEIEEE.std_logic_unsigned.all;

ENTITYclk_genIS

Port(reset:

in std_logic;

   clk:

instd_logic;

  ena_scan:

outstd_logic;

  ena_1Hz:

outstd_logic;

  flash_1Hz:

outstd_logic);

end;

ARCHITECTUREBEHAVIORofclk_gen IS

CONSTANTscan_bit:

positive:

=10;

CONSTANTscan_val:

positive:

=1024;

CONSTANTtwo_Hz_bit:

positive:

=15;

CONSTANTtwo_Hz_val:

positive:

=19532;

signalclk_scan_ff:

std_logic_vector(scan_bit-1downto0);

signal clk_2Hz_ff:

std_logic_vector(two_Hz_bit-1 downto0);

signal ena_s,ena_one,ena_two:

std_logic;

begin

 scan:

process(clk,reset)

    begin

 if reset='1'then

    clk_scan_ff<="000000000";

ena_s<='0';

 elsif(clk'eventandclk='1')then

 ifclk_scan_ff>=scan_val-1then

  clk_scan_ff<="000000000";

 ena_s<='1';

  else

  clk_scan_ff<=clk_scan_ff+1;

    ena_s<='0';

  endif;

   endif;

 endprocess;

ena_scan<=ena_s;

two_Hz:

process(reset,clk,ena_s)

begin

 if reset='1'then

ena_one<='0';

 ena_two<='0';

clk_2Hz_ff<="00";

 elsif(clk'eventandclk='1') then

ifena_s='1'then

ifclk_2Hz_ff>=two_Hz_val-1then

clk_2Hz_ff<="00";

ena_two<='1';

 ena_one<=not ena_one;

 else

clk_2Hz_ff<= clk_2Hz_ff+1;

  ena_two<='0';

 endif;

endif;

 endif;

end process;

ena_1Hz<=ena_oneandena_two and ena_s;

flash_1Hz<=ena_one;

endBEHAVIOR;

3.1.2系统时序发生电路clk_gen的仿真输出波形和元件符号

系统时序发生电路clk_gen的仿真输出波形

                

图3-1 系统时序发生电路CLK_GEN

 

3.2 红绿灯计数时间选择模块

当过马路的时候,绿灯的一方又是会附加一个显示器告诉行人,目前还剩下几秒信号灯将变成红灯。

因此,traffic_mux电路最主要的功能就是负责输出显示器需要的值(即倒数的秒值数),作为定时控制电路的技术秒数。

该电路的核心部分就是数据选择电路,利用选择语句case_when(单输入,多输出)实现4选1,其选择输入信号sign_state是红绿灯信号译码电路产生的4种状态信号,状态转换输出表如表3-2所示。

状态sign_state

东西路口

南北路口

时间(s)

00(状态0)

东西路口为通行状态,此时东西路口绿灯亮

南北路口红灯亮

30

01(状态1)

东西路口为过渡状态,此时东西路口黄灯亮

南北路口红灯亮

10(状态2)

东西路口红灯亮

南北路口为通行状态,此时南北路口绿灯亮

20

11(状态3)

东西路口红灯亮

南北路口为过渡状态,此时南北路口黄灯亮

5

表3-2红绿灯计数时间状态转换表

3.2.1VHDL源代码:

LIBRARYIEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYtraffic_muxIS

PORT(reset,clk,ena_scan,recount:

in std_logic;

   sign_state:

instd_logic_vector(1 downto0);

    load:

outstd_logic_vector(7downto0));

end;

ARCHITECTUREBEHAVIORoftraffic_mux IS

CONSTANT yellow0_time:

integer:

=5;

CONSTANTgreen0_time:

integer:

=30;

CONSTANTyellow1_time:

integer:

=5;

CONSTANTgreen1_time:

integer:

=20;

begin

load_time:

process(reset,clk)

 begin

 ifreset='1'then

  load<="00000000";

 elsif(clk'event andclk='1') then

 if(ena_scan='1'and recount='1')then

 CASEsign_stateIS

   WHEN"00"=>load<=CONV_STD_LOGIC_VECTOR(green0_time,8);

   WHEN"01"=>load<=CONV_STD_LOGIC_VECTOR(yellow0_time,8);

      WHEN"10"=>load<=CONV_STD_LOGIC_VECTOR(green1_time,8);

 WHEN OTHERS=>load<=CONV_STD_LOGIC_VECTOR(yellow1_time,8);

 ENDCASE;

 ENDIF;

END IF;

ENDPROCESS;

ENDBEHAVIOR;

3.2.2计数时间选择模块traffic_mux的仿真输出波形和元件符号

计数时间选择模块traffic_mux的仿真输出波形

             

3.3定时控制电路

该电路的核心部分是可置数的减法计数器电路和七段译码输出显示电路。

可置数的减法计数器电路是利用if_then_else语句完成,两位七段译码输出显示电路则利用case_when语句通过查表的方式构成。

3.3.1VHDL源代码:

LIBRARYIEEE;

USEIEEE.std_logic_1164.all;

USEIEEE.std_logic_arith.all;

USEIEEE.std_logic_unsigned.all;

ENTITYcount_downIS

 Port(reset,clk,ena_1Hz,recount:

instd_logic;

   load:

instd_logic_vector(7downto 0);

seg7:

out std_logic_vector(15downto0);

    next_state:

outstd_logic);

end;

ARCHITECTUREBEHAVIORofcount_downIS

signalcnt_ff:

std_logic_vector(7downto 0);

begin

count:

process(clk,reset)

 begin

  if(reset='1')then

  cnt_ff<="00000000";seg7<="00000";

 elsif(clk'eventand clk='1')then

   ifena_1Hz='1'then

     if(recount='1')then

   cnt_ff<=load-1;

  else

    cnt_ff<=cnt_ff-1;

    endif;

  endif;

caseconv_integer(cnt_ff)is

when0=>seg7(15downto 0)<="11111";

when1=>seg7(15 downto0)<="00110";

when2=>seg7(15downto0)<="11011";

when3=>seg7(15 downto0)<="01111";

when4=>seg7(15downto0)<="00110";

when5=>seg7(15downto0)<="01101";

when6=>seg7(15downto 0)<="11101";

when7=>seg7(15downto0)<="00111";

when 8=>seg7(15downto0)<="11111";

when9=>seg7(15downto 0)<="01111";

when10=>seg7(15 downto0)<="11111";

when11=>seg7(15downto 0)<="00110";

when12=>seg7(15downto0)<="11011";

when13=>seg7(15 downto0)<="01111";

when14=>seg7(15 downto0)<="00110";

when 15=>seg7(15downto 0)<="01101";

when16=>seg7(15downto0)<="11101";

when 17=>seg7(15 downto0)<="00111";

when18=>seg7(15downto 0)<="11111";

when19=>seg7(15downto 0)<="01111";

when20=>seg7(15downto 0)<="11111";

when21=>seg7(15 downto0)<="00110";

when22=>seg7(15downto0)<="11011";

when23=>seg7(15downto0)<="01111";

when24=>seg7(15downto0)<="00110";

when25=>seg7(15downto0)<="01101";

when26=>seg7(15downto0)<="11101";

when27=>seg7(15downto0)<="00111";

when28=>seg7(15 downto0)<="11111";

when29=>seg7(15 downto 0)<="01111";

when30=>seg7(15downto0)<="11111";

when31=>seg7(15downto0)<="00110";

when 32=>seg7(15downto0)<="11011";

when33=>seg7(15downto0)<="01111";

when34=>seg7(15downto0)<="00110";

when35=>seg7(15 downto0)<="01101";

when 36=>seg7(15 downto0)<="11101";

when 37=>seg7(15downto0)<="00111";

when 38=>seg7(15 downto0)<="11111";

when39=>seg7(15 downto0)<="01111";

whenothers=>seg7(15 downto0)<="11111";

  end case;

 endif;

 endprocess;

next_state<='1'whencnt_ff=1else'0';

endBEHAVIOR;

3.3.2定时控制电路count_down的仿真输出波形和元件符号

定时控制电路count_down的仿真输出波形

3.4 红绿灯信号译码电路

在红绿灯交通灯信号系统中,大多数的情况是通过自动控制的方式指挥交通的。

但为了配合高峰时段,防止交通拥挤,有时还必须使用手动控制,即让交警自行指挥交通。

因此,traffic_fsm电路除了负责监控路口红绿灯之外,最主要的功能就是能够利用开关来切手动与自动的模式,让交警能够通过外部输入的方式来控制红绿灯信号系统的运作。

输出信号:

recount(产生重新计数的输出使能控制信号)、sign_state(产生的输出状态信号共2位,4种状态)、red(负责红灯的显示,共2位,4种状态)、green(负责绿灯的显示,共2位,4种状态)、yelllow(负责黄灯的显示,共2位,4种状态)。

设南北路口红黄绿3色灯为r0、y0、g0,东西路口的红黄绿3色灯为r1、y1、g1,自动操作模式和手动操作模式信号灯显示的真值表如表3-2、表3-3所示。

信号灯显示的真值表

CLK

reset

ena_1hz

next_stage

state状态

sign_stage

recount

light

state1

1

X

X

r0g1

00

1

010010

state2

0

1

r0g1->roy1

01

1

011000

0

1

0

r0g1

00

0

010010

state3

0

1

1

r0y1->g0r1

10

1

100001

0

1

0

r0y1

01

0

011000

state4

g0r1->y0r1

11

1

100100

0

1

0

g0r1

10

100001

state5

0

1

y0r1->r0g1

00

1

010010

0

1

0

y0r1

11

0

100100

state6

1

1

others

00

0

110000

表中定义了一些进程(process)间整体共享的电路内部传递信号,以整合所有功能,它们是:

state信号(设定红绿灯电路的状态,在该程序里定义8种状态)、st_transfer(在手动模式下判断是否转态的控制信号)、light[5:

0](在自动模式下该信号为是否转态的控制信号,其位数从高到低分别表示red1、red0、yellow1、yellow0、green1、green0)。

3.4.1VHDL源代码:

LIBRARYIEEE;

USE IEEE.std_logic_1164.all;

USEIEEE.std_logic_arith.all;

USEIEEE.std_logic_unsigned.all;

ENTITYtraffic_CONIS

  Port(reset,clk,ena_scan,ena_1Hz,flash_1Hz,a_m,st_butt,next_state:

instd_logic;

 recount:

outstd_logic;

   sign_state:

outstd_logic_vector(1downto0);

red:

outstd_logic_vector(1downto 0);

  green:

outstd_logic_vector(1downto0);

  yellow:

outstd_logic_vector(1downto0));

end;

ARCHITECTUREBEHAVIORof traffic_CONIS

typeSreg0_typeis(r0g1,r0y1,g0r1,y0r1,y0y1,y0g1,g0y1,r0r1);

signalstate:

Sreg0_type;

signalst_transfer:

std_logic;

signallight:

std_logic_vector(5downto0);

begin

 rebounce:

process(reset,clk,ena_scan,st_butt)

 variablerebn_ff:

std_logic_vector(5downto0);

begin

  if(st_butt='1' orreset='1')then

   rebn_ff:

="111111";st_transfer<='0';

 elsif(clk'event and

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

当前位置:首页 > 人文社科 > 法律资料

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

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