EDA 交通信号灯控制电路设计.docx
《EDA 交通信号灯控制电路设计.docx》由会员分享,可在线阅读,更多相关《EDA 交通信号灯控制电路设计.docx(13页珍藏版)》请在冰豆网上搜索。
EDA交通信号灯控制电路设计
北华航天工业学院
《EDA技术综合设计》
课程设计报告
报告题目:
交通信号灯控制电路设计
作者所在系部:
电子工程系
作者所在专业:
通信工程
作者所在班级:
B09232
作者姓名:
冯晓鹏(34)
指导教师姓名:
陈刚
完成时间:
2011.12.19
内容摘要
EDA技术是现代电子信息工程领域的一门新技术,它是在先进的计算机平台上开发出来的一整套电子系统设计的软硬件工具,并提供了先进电子系统设计方法。
当今的技术,开发人员完全可以通过自己的电子系统设计来制定芯片内部的电路功能,使之成为设计者自己的专用集成电路芯片。
这种技术中常用软件有maxplusII和quartusII,而程序的编辑是用VHDL语言实现逻辑功能的。
本实验试验系统中可用可编程逻辑器件为FPGA,本实验的交通信号灯的设计:
首先在quartusII软件当中编辑程序,编译完成之后仿真,当仿真结果正确时下载到试验箱的系统中。
最终的目的要在实验板上用红路灯表示出来,并且同时要用数码管显示出人们的等待时间,交通灯的状态变化和显示时间同步……
关键词
EDA、VHDL、交通灯、控制电路
一、设计任务…………………………………………………………5
二、设计结构…………………………………………………………5
1、clk时钟秒脉冲发生电路或分频器…………………………………6
2、六十进制计数器…………………………………………………6
3、次态发生器……………………………………………………6
4、状态寄存器及等待时间输出………………………………………6
5、时间显示电路……………………………………………………6
6、时钟扫描电路……………………………………………………6
三、原理图……………………………………………………………7
四、程序………………………………………………………………7
五、心得体会……………………………………………………11
课程设计任务书
课题名称
交通信号的控制电路设计
完成时间
11/12/19
指导教师
陈刚
职称
教授
学生姓名
冯晓鹏
班级
B09232
总体设计要求和技术要点
设计一个交通信号灯控制电路。
要求:
1、主干道和支干道交替放行,主干道每次放行30秒,支干道每次放行20秒;
2、每次绿灯变红灯时,黄灯先亮5秒钟,此时原红灯不变;
3、用十进制数字(递增计数)显示放行和等待时间。
技术要点:
1、主(支)干道红灯时间等于支(主)干道红绿黄灯时间之和;
2、用时钟数据扫描通过视觉暂留来数码管显示等待时间;
3、状态寄存器和状态寄存器的结合灵活运用;
4、计数时间值要译成七段译码值。
工作内容及时间进度安排
工作内容:
在软件上编辑、编译程序,并仿真到达实验要求。
进度安排;
课下编写程序,并要求程序能通过编译仿真;
第十七周的周一在实验板上下载调试程序;
周三课设答辩。
课程设计成果
1.与设计内容对应的软件程序
2.课程设计报告书
3.成果使用说明书
4.设计工作量要求
交通信号控制器的VHDL的设计
一、设计任务
模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED作为交通信号灯,用数码管显示等待时间。
设计一个交通信号灯控制器。
能达到的要求:
(1)交通灯从绿变红时,有5秒黄灯亮的间隔时间;
(2)交通灯红变绿是直接进行的,没有间隔时间;
(3)主干道上的绿灯时间为30秒,支干道的绿灯时间为20秒;
(4)在任意时间,显示等待时间。
支干道
主干道
图1路口交通管理示意图
S0
S1
S2
S3
主干道交通灯
绿(30秒)
黄(5秒)
红(20秒)
红(5秒)
支干道交通灯
红
红
绿
黄
表1交通信号灯的4种状态
二、设计结构
学习EDA开发软件和Quartus
的使用方法,熟悉可编程逻辑器件的使用。
通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。
设计说明
(1)第一模块:
clk时钟秒脉冲发生电路
在红绿灯交通信号系统中,大多数情况是通过自动控制的方式指挥交通的。
因此为了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作。
模块说明:
系统输入信号:
Clk:
由外接信号发生器提供153的时钟信号;
系统输出信号:
CLK:
产生每秒一个脉冲的信号;
(2)第二模块:
计数秒数选择电路
计数电路最主要的功能就是记数负责显示倒数的计数值,对下一个模块提供状态转换信号。
模块说明:
系统输入:
CLK:
接收由clk电路的提供的1hz的时钟脉冲信号;
系统输出信号:
tm:
产生显示电路状态转换信号
tl:
倒计数值秒数个位变化控制信号
th:
倒计数值秒数十位变化控制信号
(3)第三模块:
红绿灯状态转换电路
本电路负责红绿灯的转换。
模块说明:
系统输入信号:
CLK:
接收由clk电路的提供的1hz的时钟脉冲信号;
tm:
接收计数秒数选择电路状态转换信号;
系统输出信号:
da_out:
负责红绿灯的状态显示。
(4)第四模块:
时间显示电路
本电路负责红绿灯的计数时间的显示。
模块说明:
系统输入信号:
tl:
倒计数值秒数个位变化控制信号;
th:
倒计数值秒数十位变化控制信号;
系统输出信号:
led7s1:
负责红绿灯的显示秒数个位。
led7s2:
负责红绿灯的显示秒数十位。
三、原理图
四、试验程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytrafficis
port(clk_in:
instd_logic;
selout:
outstd_logic_vector(6downto0);-------定义数码管的七段显示
sel:
outstd_logic_vector(1downto0);------数码管个位十位选择段
da_out:
outstd_logic_vector(5downto0));------定义主次干道的红绿灯(主红黄绿支红黄绿)
endtraffic;
architectureoneoftrafficis
typedmis(s0,s1,s2,s3);--------自定义状态四种
signalcurrent_state,next_state:
dm;----当前状态与次态均在四种状态之间变化
signalclk:
std_logic;------一秒时钟信号
signalcount:
std_logic_vector(1downto0);-----个十位选择端(sel)
signalled7s1:
std_logic_vector(6downto0);----十位数码管控制端
signalled7s2:
std_logic_vector(6downto0);----个位数码管控制端
signaltime:
std_logic_vector(6downto0);-----递增计数
signaltm:
std_logic_vector(6downto0);----剩余时间倒计时
signaltl:
std_logic_vector(6downto0);-----个位数码管显示情况控制
signalth:
std_logic_vector(1downto0);-----十位数码管显示情况控制
begin
sel<=count;
fen:
process(clk_in)
variablecnt:
std_logic_vector(8downto0);
begin
ifclk_in'eventandclk_in='1'then-------产生153hz分频,上升沿有效产生clk
ifcnt="100110001"then
cnt:
="010011000";
clk<='1';
elsecnt:
=cnt+1;
clk<='0';
endif;
endif;
endprocessfen;
a:
process(clk_in,count)----------不断扫描出现count的00和01的选择
begin
ifclk_in'eventandclk_in='1'then
ifcount="01"then
count<="00";
elsecount<=count+1;
endif;
endif;
casecountis
when"00"=>selout<=led7s2;
when"01"=>selout<=led7s1;
whenothers=>null;
endcase;
endprocessa;
process(clk)
begin
ifclk'eventandclk='1'then------60秒的循环设计
iftime="0111100"then
time<="0000001";
elsetime<=time+1;
endif;
endif;
endprocess;
reg:
process(clk,current_state)------定义当前状态与次态的关系
begin产生上升沿时次态把自己的状态赋予当
ifclk='1'andclk'eventthen前状态
current_state<=next_state;
endif;
endprocessreg;
com:
process(current_state,time)
begin
casecurrent_stateis
whens0=>da_out<="001100";tm<=30-time;-----主绿和支红状态,当计时到29
iftime=29thennext_state<=s1;秒时将s1状态赋给次态,此时
elsenext_state<=s0;当前状态还是s0,等到下一个
endif;上升沿后次态将s1赋给当前状
whens1=>da_out<="010100";tm<=35-time;态
iftime=34thennext_state<=s2;
elsenext_state<=s1;
endif;
whens2=>da_out<="100001";tm<=55-time;
iftime=54thennext_state<=s3;
elsenext_state<=s2;
endif;
whens3=>da_out<="100010";tm<=60-time;
iftime=59thennext_state<=s0;
elsenext_state<=s3;
endif;
endcase;
endprocesscom;
process(tm)
begin
iftm>=30THENth<="11";tl<="0000000";
elsiftm>=20THENth<="10";tl<=tm-20;
elsiftm>=10THENth<="01";tl<=tm-10;
elsifth<="00";tl<=tm;
endif;
endprocess;
process(th,tl)
begin
casethis
when"00"=>led7s1<="0111111";
when"01"=>led7s1<="0000110";
when"10"=>led7s1<="1011011";
when"11"=>led7s1<="1001111";
whenothers=>null;
endcase;
casetlis
when"0000000"=>led7s2<="0111111";
when"0000001"=>led7s2<="0000110";
when"0000010"=>led7s2<="1011011";
when"0000011"=>led7s2<="1001111";
when"0000100"=>led7s2<="1100110";
when"0000101"=>led7s2<="1101101";
when"0000110"=>led7s2<="1111101";
when"0000111"=>led7s2<="0000111";
when"0001000"=>led7s2<="1111111";
when"0001001"=>led7s2<="1101111";
whenothers=>null;
endcase;
endprocess;
endone;
五、心得体会
通过本次EDA课程设计,我们更加了解交通灯的工作原理,也更加清楚设计实现步骤是如何完成的。
学会了各个并行进程之间相互通信协同工作的过程。
进一步了解了VHDL语言的结构和编程方法,并通过硬件实验和对FPGA的程序下载初步掌握了电子EDA的设计方法,为以后的学习打下基础。
加深了对电子设计自动化的了解。
进一步熟练了对QuartusII软件的操作。
我们的课程设计分为三个阶段,第一阶段是阅读课设要求并作出分析;第二阶段是编写程序并上机调试纠正错误;第三阶段是程序改进,验收。
在阅读题目后我们针对要求做出了两种设计方案,但在编程过程中发现第一种方案虽简单但存在时钟触发缺陷,选择第二种方案编程。
在编写程序的过程中,遇到了很多问题,使我发现自己以前学习上存在的不足的,我们大量搜集资料,通过总体设计,局部编程,最终完成整个程序。
在下载调试过程中,由于器件问题出现译码管显示不正确的情况,我们逐个排查虚接线路,最后成功实现实验内容。
在实验过程中,最珍贵的不是我们独立的编程能力,而是学会用所学的知识掌控大局,用所查的资料完善设计;并能在实践中踏下心来慢慢检查错因,并进行改善。
我们掌握了做课程设计的一般流程,为以后的设计积累了一定的经验。
做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。
最后参照每个模块把输入和输出引脚设定,运用我们所学的VHDL语言进行编程。
总之,通过这次的设计,进一步了解了EDA技术,收获很大,对软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。
六,参考书目
《EDA技术与实验》机械工业出版社李国洪、胡辉、沈明山
《EDA技术实验与课程设计》清华大学出版社曹新燕、周凤臣、聂春燕
《EDA技术综合应用实例与分析》西安电子科技大学出版社谭会生、翟遂春
网上资源:
XX文库、豆丁、维基百科、中国电子设计在线等
指导教师评语及设计成绩
评语
课程设计成绩:
指导教师:
日期:
年月日