资源描述
课 程 设 计
课程设计名称: EDA课程设计
专 业 班 级 : XXXXX
学 生 姓 名 : XXXXX
学 号 XXXX
指 导 教 师 : XXXXX
课程设计时间: 2011-12-19~2011-12-30
电子信息工程技术 专业课程设计任务书
学生姓名
XXX
专业班级
XXXX
学号
XXXX
题 目
交通信号灯控制器
课题性质
工程设计
课题来源
自拟课题
指导教师
XXXXX
同组姓名
主要内容
1、 设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。
2、 红、绿、黄发光二极管作信号灯,用传感器或逻辑开关作检测车辆是否到来的信号。
3、 主干道处于常允许通行的状态,支干道有车来时才允许通行。主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。
4、 主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,设立45秒、25秒计时、显示电路。
5、 在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡,使行驶中的车辆有时间停到禁行线外,设立5秒计时、显示电路。
任务要求
1根据设计题目要求进行方案设计并编写相应程序代码
2对编写的VHDL程序代码进行编译和仿真
3总结设计内容,完成课程设计说明书
审查意见
指导教师签字:XXXXX
教研室主任签字:XXXXX
说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页
1 设计任务及要求
设计一个主干道和支干道十字路口的交通灯控制电路,要求如下:
①一般情况下,保持主干道畅通,主干道绿灯亮、支干道红灯亮,并且主干道绿灯亮的时间为45s。
②主干道无车,支干道有车,则主干道红灯亮、支干道绿灯亮,但支干道绿灯亮的时间为25s。
③每次主干道或支干道绿灯变红灯时,黄灯先亮5s。
设计要求:1.有MR(主红)、MY(主黄)、MG(主绿)、CR(干红)、CY(干黄)、CG(干绿)六盏交通灯需要控制;
2.交通灯由绿转红有5秒黄灯亮的间隔时间,由红转绿没有间隔时间;
3.系统有MRCY、MRCG、MYCR、MGCR四个状态;
MGCR
MYCR
MRCG
MRCY
主干道交通灯
绿(45秒)
黄(5秒)
红(25秒)
红(5秒)
支干道交通灯
红
红
绿
黄
4.干间公路右侧各埋有一个传感器,当有车辆通过干间公路时,发出请求信号S=1,其余时间S=0;
5.平时系统停留在MGCR(主干道通行)状态,一旦S信号有效,经MYCR(黄灯状态)转入MRCG(支干道通行)状态,但要保证MGCR的状态不得短于45s;
6.一旦S信号无效,系统脱离MRCG状态。随即经MRCY(黄灯状态)进入MGCR状态,即使S信号一直有效,MRCG状态也不得长于25秒钟。
2设计原理及总体框图
发光二极管
控制器
分频电路
分位电路
计数器
七段数码管
译码电路
倒计时数字显示
Resetd
Clkd
计数值
Con1d
Cond
主控电路是一个单进程Moore型有限状态机,通过接收定时器发送的“时间到”信号以及根据s(用来指示支干道是否有车来,‘1’表示支干道没有车来,‘0’ 支干道有车来)的值进行状态的切换,实现对十字路口东西、南北两个方向的红、黄、绿灯状态的控制。具体控制过程为:当s=‘1’时,支干道没有车来,主干道处于常允许通行的状态,此时主干道亮绿灯,支干道亮红灯;当s=‘0’时,支干道有车来,即主、支干道均有车,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,且在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡。由于主、支干道有45秒和25秒得放行时间,以及每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡,所以设计45秒、25秒和5秒计时电路,均采用倒计时。考虑到显示的方便,每个计时电路又由计数器和码型转换电路组成。码型转换电路是把对应的二进制码直接转换成数码管显示时的码字,采用数码管的静态显示,这样可简化模块设计。
3 程序设计
(1)分频器的设计
LIBRARY IEEE;
USE IEEE.Std_Logic_1164.ALL;
ENTITY FreDevider IS
PORT
(Clkin:IN Std_Logic;
Clkout:OUT Std_Logic);
END;
ARCHITECTURE Devider OF FreDevider IS
CONSTANT N:Integer:=499;
signal counter:Integer range 0 to N;
signal Clk:Std_Logic;
BEGIN
PROCESS(Clkin)
begin
IF rising_edge(Clkin)THEN
IF Counter=N then
counter<=0;
Clk<=not clk;
else
counter<=counter+1;
end if;
end if;
end process;
clkout<=clk;
end;
(2)控制设计
控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译管的分译码电路。此外,当检测到特殊情况(Hold=‘1’)发生时,无条件点亮红色的发光二极管。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY countroller IS
PORT (Clock:IN STD_LOGIC;
Hold:in std_logic;
CountNum:in INTEGER RANGE 0 TO 89;
NumA,NumB:out INTEGER RANGE 0 TO 45;
RedA,GreenA,YellowA:out std_logic;
RedB,GreenB,YellowB:out std_logic);
END;
ARCHITECTURE behavior OF Countroller IS
BEGIN
process(Clock)
BEGIN
IF falling_edge(Clock)THEN
IF Hold='1' THEN
RedA<='1';
RedB<='1';
GreenA<='0';
GreenA<='0';
YellowA<='0';
YellowB<='0';
ELSIF CountNum<=39 THEN
NumA<=40-CountNum;
RedA<='0';
GreenA<='1';
YellowA<='0';
ELSIF CountNum<=44 THEN
NumA<=45-CountNum;
RedA<='0';
GreenA<='0';
YellowA<='1';
ELSE
NumA<=90-CountNum;
RedA<='1';
GreenA<='0';
YellowA<='0';
END IF;
IF CountNum<=44 THEN
NumB<=45-CountNum;
RedB<='1'; GreenB<='0';
YellowB<='0';
ELSIF CountNum<=84 THEN
NumB<=85-CountNum;
RedB<='0'; GreenB<='1';
YellowB<='0';
ELSe
NumB<=90-CountNum;
RedB<='0';
GreenB<='0';
YellowB<='1';
END IF;
END IF;
END PROCESS;
END;
(3)计数器的设计
这里计数器的计数范围为0—45S 。计到45后,下一个时钟沿回复到0,开始下一轮计数.此外,当检测到特殊情况(Hold=‘1‘)发生时,计数器暂停计数,而系统复位号Reset则使计数器异步清0。
程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY counter IS
PORT (clock:IN STD_LOGIC;
reset:in std_logic;
Hold:in std_logic;
countNum:BuFFeR INTEGER RANGE 0 TO 90);
END;
ARCHITECTURE behavior OF counter IS
BEGIN
process(reset,Clock)
BEGIN
IF Reset='1' THEN countNum<=0;
ELSIF rising_edge(Clock) THEN
IF Hold='1' then
countNum<=countNum;
ELSE IF countNum=90 THEN
countNum<=0;
ELSE countNum<=countNum+1;
END IF;
END IF;
END IF;
END PROCESS;
END;
(4)分位译码电路设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY Fenwei IS
PORT
(Numin:IN integer RANGE 0 TO 45;
NumA,NumB:OUT Integer RANGE 0 to 9);
END;
ARCHITECTURE behavior OF Fenwei IS
BEGIN
process(Numin)
BEGIN
IF Numin>=40 THEN NumA<=4;
NumB<=Numin-40;
ELSIF Numin>=30 THEN NumA<=3;
NumB<=Numin-30;
ELSIF Numin>=20 THEN NumA<=2;
NumB<=Numin-20;
ELSIF Numin>=10 THEN NumA<=1;
NumB<=Numin-10;
ELSE NumA<=0;
NumB<=Numin;
END IF;
END PROCESS;
END;
(5)数码管驱动设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY bcd_data IS
PORT
(bcd_data:in STD_LOGIC_VECTOR(3 downto 0);
segout: out STD_LOGIC_VECTOR(6 downto 0));
END;
ARCHITECTURE behavior OF bcd_data IS
BEGIN
process(bcd_data)
BEGIN
case bcd_data is
when "0000"=>segout<="1111110";
when "0001"=>segout<="0110000";
when "0010"=>segout<="1101101";
when "0011" =>segout<="1111001" ;
when "0100" =>segout<="0110011" ;
when "0101"=>segout<="1011011" ;
when "0110"=>segout<="0011111" ;
when "0111"=>segout<="1110000" ;
when "1000" =>segout<="1111111" ;
when "1001" =>segout<="1110011";
when others =>null;
END CASE;
END PROCESS;
END;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_unsigned.ALL;
ENTITY dtsm IS
PORT(clk:in STD_LOGIC;
NumA,NumB,NumC,NumD: in STD_LOGIC_VECTOR(3 downto 0);
segout1:out STD_LOGIC_VECTOR(6 downto 0);
led_sel: out STD_LOGIC_VECTOR(3 downto 0));
END dtsm;
architecture bhv of dtsm is
component bcd_data is
port (bcd_data:in STD_LOGIC_VECTOR(3 downto 0);
segout:out STD_LOGIC_VECTOR(6 downto 0));
end component;
signal x:STD_LOGIC_VECTOR(3 downto 0);
signal q:STD_LOGIC_VECTOR(1 downto 0);
begin
p1:process(clk)
begin
if clk'event and clk ='1' then
Q<= Q + '1';
end if;
end process;
p2:process(Q)
begin
case Q is
when"00"=>led_sel<="1110";x<=NumD;
when"01"=>led_sel<="1101";x<=NumC;
when"10"=>led_sel<="1011";x<=NumB;
when"11"=>led_sel<="0111";x<=NumA;
when others=>null;
end case;
end process;
u1:bcd_data PORT map(bcd_data=>x,segout=>segout1);
end
4 编译及仿真
对文件保存并进行编译仿真,仿真波形如下:
(1)当没有完成模45计数,即使S=1,状态也不发生改变
(2)45秒过后,若S=1主道进入黄灯状态并保持4秒
(3)25秒过后,不论S=1或0乡道进入黄灯状态并保持4秒
(4)当S一旦为0,乡道立刻进入黄灯状态,并持续四秒
5 硬件调试与结果分析
RST信号有效时不计数,主干道在前45s,无论s是否有信号,都不改变状态,到达45s且s有信号,状态改变,主干道黄灯支干道红灯5s后转为主干道红灯支干道绿灯。再经25s状态改变,主干道红灯支干道黄灯5s后转为主干道绿灯乡村道红灯,继续等待。
6 参考文献
在“课程设计报告”的最后应附上所参考的相关文献,
参考文献格式如下:([1]书籍 [2] 文章例)
[1] 边肇祺.模式识别(第二版).北京:清华大学出版社,1988,25~35
[2] 李永忠.几种小波变换的图像处理技术.西北民族学院学报(自然科学版),2001.6,22(3),15~18
心得体会
经过两周的努力,我终于完成关于交通灯控制电路的课程设计,通过两周不断的查资料让我积累了许多实际操作经验,我已熟悉了QuartusⅡ软件的使用方法,而且学习了VHDL 基本逻辑电路和状态机电路的综合设计应用。EDA设计我感觉程序调试最重要,试验软件、硬件熟悉其次。在编完各模块程序之后,编译查错最初有十几个错误,有输入错误、语法错误。必须注意工程名和实体名一致,不然一般会出错。在无误后可以进行波型仿真。若与理想的不同,再查看程序,有无原理上的编辑错误或没有查出的输入错误。
15
展开阅读全文