EDA实验交通灯设计报告.docx

上传人:b****8 文档编号:10894971 上传时间:2023-02-23 格式:DOCX 页数:20 大小:297.09KB
下载 相关 举报
EDA实验交通灯设计报告.docx_第1页
第1页 / 共20页
EDA实验交通灯设计报告.docx_第2页
第2页 / 共20页
EDA实验交通灯设计报告.docx_第3页
第3页 / 共20页
EDA实验交通灯设计报告.docx_第4页
第4页 / 共20页
EDA实验交通灯设计报告.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

EDA实验交通灯设计报告.docx

《EDA实验交通灯设计报告.docx》由会员分享,可在线阅读,更多相关《EDA实验交通灯设计报告.docx(20页珍藏版)》请在冰豆网上搜索。

EDA实验交通灯设计报告.docx

EDA实验交通灯设计报告

 

EDA原理及应用

实验报告

题目:

交通灯控制器

 

专业:

电子信息工程

班级:

姓名:

学号:

 

一、设计题目:

交通灯控制器

二、设计目标:

1、 设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。

2、 红、绿、黄发光二极管作信号灯。

3、 主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。

4、 主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,设立45秒、25秒计时、显示电路。

5、 在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡,使行驶中的车辆有时间停到禁行线外,设立5秒计时、显示电路。

三、设计原理:

(含系统总的原理图)

由两个分频器模块,三个计数器模块及它的选择器,一个扫描数码管模块,和一个红绿灯控制模块连接而成。

 

RTL状态图

四、设计内容:

(含状态转换图、软件流程图、说明文字等,每单独模块的图标和VHDL程序;最后为总体程序框图)

分频器1

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYDVFIS

PORT(CLK:

INSTD_LOGIC;

--D:

INSTD_LOGIC_VECTOR(3DOWNTO0);

FOUT:

OUTSTD_LOGIC);

END;

ARCHITECTUREoneOFDVFIS

SIGNALFULL:

STD_LOGIC;

BEGIN

P_REG:

PROCESS(CLK)

VARIABLECNT8:

INTEGERRANGE48000000DOWNTO0;

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFCNT8=24000000THEN

CNT8:

=0;

FULL<='1';

ELSECNT8:

=CNT8+1;

FULL<='0';

ENDIF;

ENDIF;

ENDPROCESSP_REG;

P_DIV:

PROCESS(FULL)

VARIABLECNT2:

STD_LOGIC;

BEGIN

IFFULL'EVENTANDFULL='1'THEN

CNT2:

=NOTCNT2;

IFCNT2='1'THENFOUT<='1';ELSEFOUT<='0';

ENDIF;

ENDIF;

ENDPROCESSP_DIV;

END;

说明:

采用的是48M时钟输入,作为后面的时钟信号。

 

分频器2

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYDVF2IS

PORT(CLK:

INSTD_LOGIC;

--D:

INSTD_LOGIC_VECTOR(3DOWNTO0);

FOUT:

OUTSTD_LOGIC);

END;

ARCHITECTUREoneOFDVF2IS

SIGNALFULL:

STD_LOGIC;

BEGIN

P_REG:

PROCESS(CLK)

VARIABLECNT8:

INTEGERRANGE48000000DOWNTO0;

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFCNT8=20000THEN

CNT8:

=0;

FULL<='1';

ELSECNT8:

=CNT8+1;

FULL<='0';

ENDIF;

ENDIF;

ENDPROCESSP_REG;

P_DIV:

PROCESS(FULL)

VARIABLECNT2:

STD_LOGIC;

BEGIN

IFFULL'EVENTANDFULL='1'THEN

CNT2:

=NOTCNT2;

IFCNT2='1'THENFOUT<='1';ELSEFOUT<='0';

ENDIF;

ENDIF;

ENDPROCESSP_DIV;

END;

说明:

改变了分频器的大小,这个频率很高,是给扫描数码管模块使用的。

计数器1

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYcntnIS

PORT(CLK:

INSTD_LOGIC;

CLR:

INSTD_LOGIC_vector(2downto0);

U:

INSTD_LOGIC_VECTOR(2DOWNTO0);

A,B:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

END;

ARCHITECTUREbhvOFcntnIS

SIGNALJ,K,L:

STD_LOGIC;

SIGNALQ2,Q1:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

a1:

PROCESS(CLK)

BEGIN

IFCLR="001"THENQ1<="0100";

ELSIFU="010"THEN

IFCLK'EVENTANDCLK='1'THEN

Q1<=Q1-1;IFQ1="0000"THENQ1<="1001";J<='1';ELSEJ<='0';ENDIF;

ENDIF;A<=Q1;

ENDIF;

ENDPROCESS;

a2:

PROCESS(J)

BEGIN

IFCLR="001"THENQ2<="0010";

ELSIFU="010"THEN

IFJ'EVENTANDJ='1'THEN

Q2<=Q2-1;IFQ2="0000"THENQ2<="0010";K<='0';ELSEK<='1';ENDIF;

ENDIF;B<=Q2;

ENDIF;

ENDPROCESS;

END;

说明:

作为支干道通行时间,倒计时25s。

计数器2

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYcntmIS

PORT(CLK:

INSTD_LOGIC;

CLR:

INSTD_LOGIC_vector(2downto0);

U:

INSTD_LOGIC_VECTOR(2DOWNTO0);

C,D:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

END;

ARCHITECTUREbhvOFcntmIS

SIGNALJ,K,L:

STD_LOGIC;

SIGNALQ2,Q1:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

a1:

PROCESS(CLK)

BEGIN

IFCLR="010"THENQ1<="0101";

ELSIFU="001"THEN

IFCLK'EVENTANDCLK='1'THEN

Q1<=Q1-1;IFQ1="0000"THENQ1<="1001";J<='1';ELSEJ<='0';ENDIF;

ENDIF;C<=Q1;

ENDIF;

ENDPROCESS;

a2:

PROCESS(J)

BEGIN

IFCLR="010"THENQ2<="0000";

ELSIFU="001"THEN

IFJ'EVENTANDJ='1'THEN

Q2<=Q2-1;IFQ2="0000"THENQ2<="0010";K<='0';ELSEK<='1';ENDIF;

ENDIF;D<=Q2;

ENDIF;

ENDPROCESS;

END;

说明:

要亮5秒黄灯作为过渡

计数器3

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYcntlIS

PORT(CLK:

INSTD_LOGIC;

CLR:

INSTD_LOGIC_vector(2downto0);

U:

INSTD_LOGIC_VECTOR(2DOWNTO0);

E,F:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

END;

ARCHITECTUREbhvOFcntlIS

SIGNALJ,K,L:

STD_LOGIC;

SIGNALQ2,Q1:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

a1:

PROCESS(CLK)

BEGIN

IFCLR="001"THENQ1<="0100";

ELSIFU="000"THEN

IFCLK'EVENTANDCLK='1'THEN

Q1<=Q1-1;IFQ1="0000"THENQ1<="1001";J<='1';ELSEJ<='0';ENDIF;

ENDIF;E<=Q1;

ENDIF;

ENDPROCESS;

a2:

PROCESS(J)

BEGIN

IFCLR="001"THENQ2<="0100";

ELSIFU="000"THEN

IFJ'EVENTANDJ='1'THEN

Q2<=Q2-1;IFQ2="0000"THENQ2<="0010";K<='0';ELSEK<='1';ENDIF;

ENDIF;F<=Q2;

ENDIF;

ENDPROCESS;

END;

说明:

作为主干道通行时间,倒计时45s。

选择器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYxuanzeIS

PORT(U:

INSTD_LOGIC_VECTOR(2DOWNTO0);

A,B,C,D,E,F:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Q1,Q2:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

END;

ARCHITECTUREbhvOFxuanzeIS

 

BEGIN

PROCESS(U)

BEGIN

caseUIS

WHEN"000"=>Q1<=E;Q2<=F;

WHEN"001"=>Q1<=C;Q2<=D;

WHEN"010"=>Q1<=A;Q2<=B;

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

END;

说明:

不同的状态数码管分别显示45s,25s,5s倒计时。

 

红绿灯控制模块

libraryieee;

useieee.std_logic_1164.all;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

entitydengis

generic(a:

integer:

=45;

b:

integer:

=5;

c:

integer:

=25);

port(clk,rst:

instd_logic;

R1,G1,Y1,R2,G2,Y2:

outstd_logic;

U:

outstd_logic_vector(2downto0));

end;

architectureoneofdengis

typefsm_stis(QA,QB,QC,QD);

signalcurrent_state,next_state:

fsm_st;

SIGNALq:

integerrange0TO200;

begin

 

--process(clk)

--begin

--ifclk='1'andclk'eventthen

--ifq=29thenq<=0;elseq<=q+1;endif;endif;

--endprocess;

process(clk)

begin

ifrst='0'thencurrent_state<=QA;q<=0;

elsifclk='1'andclk'eventthen

current_state<=next_state;ifq=a+b+b+c-1thenq<=0;elseq<=q+1;endif;

endif;

endprocess;

process(current_state,q)

begin

casecurrent_stateis

whenQA=>G1<='0';R2<='0';R1<='1';Y1<='1';G2<='1';Y2<='1';U<="000";

ifq=a-1thennext_state<=QB;

elsenext_state<=QA;

endif;

whenQB=>Y1<='0';R2<='0';R1<='1';G1<='1';G2<='1';Y2<='1';U<="001";

ifq=a+b-1thennext_state<=QC;

elsenext_state<=QB;

endif;

whenQC=>R1<='0';G2<='0';Y1<='1';G1<='1';R2<='1';Y2<='1';U<="010";

ifq=a+b+c-1thennext_state<=QD;

elsenext_state<=QC;

endif;

whenQD=>R1<='0';Y2<='0';Y1<='1';G1<='1';G2<='1';R2<='1';U<="001";

ifq=a+b+b+c-1thennext_state<=QA;

elsenext_state<=QD;

endif;

endcase;

endprocess;

end;

说明:

设置四种状态QA主绿,支红;QB主黄,支红;QC主红,支绿;QD主红,支黄;同时用时间控制状态的切换

扫描数码管模块

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityscan_ledis

port(clk:

instd_logic;

a1,a2,a3,a4,a5,a6,a7,a8:

instd_logic_vector(3downto0);

sg:

outstd_logic_vector(6downto0);

bt:

outstd_logic_vector(7downto0));

end;

architectureoneofscan_ledis

signalcnt8:

std_logic_vector(2downto0);

signala:

std_logic_vector(3downto0);

begin

p1:

process(cnt8)

begin

casecnt8is

when"000"=>bt<=NOT"00000001";a<=a1;

when"001"=>bt<=NOT"00000010";a<=a2;

when"010"=>bt<=NOT"00000100";a<=a3;

when"011"=>bt<=NOT"00001000";a<=a4;

when"100"=>bt<=NOT"00010000";a<=a5;

when"101"=>bt<=NOT"00100000";a<=a6;

when"110"=>bt<=NOT"01000000";a<=a7;

when"111"=>bt<=NOT"10000000";a<=a8;

whenothers=>null;

endcase;

endprocessp1;

p2:

process(clk)

begin

ifclk'eventandclk='1'thencnt8<=cnt8+1;

endif;

endprocessp2;

p3:

process(a)

begin

caseais

when"0000"=>sg<=NOT"0111111";when"0001"=>sg<=NOT"0000110";

when"0010"=>sg<=NOT"1011011";when"0011"=>sg<=NOT"1001111";

when"0100"=>sg<=NOT"1100110";when"0101"=>sg<=NOT"1101101";

when"0110"=>sg<=NOT"1111101";when"0111"=>sg<=NOT"0000111";

when"1000"=>sg<=NOT"1111111";when"1001"=>sg<=NOT"1101111";

when"1010"=>sg<=NOT"1110111";when"1011"=>sg<=NOT"1111100";

when"1100"=>sg<=NOT"0111001";when"1101"=>sg<=NOT"1011110";

when"1110"=>sg<=NOT"1111001";when"1111"=>sg<=NOT"1110001";

whenothers=>null;

endcase;

endprocessp3;

end;

说明:

采用共阳7段数码管。

经过高频率的扫描给人以同时出现的错觉。

虽然有8个输入但我只用了2个;

总体程序框图

 

五、实验现象(需要有实验现象图片及文字说明)

交通灯设计共有六个灯,当主干道亮绿灯时,支干道亮红灯;45秒倒计时后,主干道亮5秒黄灯;接着支干道亮绿灯时,主干道亮红灯;25秒倒计时后,支干道亮5秒黄灯,依次循环下去。

 

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

当前位置:首页 > PPT模板 > 自然景观

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

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