eda大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
e d a大作业
-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII
班级 021291
学号 02129057
EDA实验报告
学院电子工程学院
专业电子信息工程
学生姓名 02129057
导师姓名纠博
交通控制器
一.设计目标
设计一个十字路口交通控制系统,其东西,南北两个方向除了有红、黄、绿灯指示是否允许通行外,还设有时钟,以倒计时方式显示每一路允许通行的时间,绿灯,黄灯,红灯的持续时间分别是70、5和75秒。当东西或南北两路中任一道上出现特殊情况,例如有消防车,警车要去执行任务,此时交通控制系统应可由交警手动控制立即进入特殊运行状态,即两条道上的所有车辆皆停止通行,红灯全亮,时钟停止计时,且其数字在闪烁。当特殊运行状态结束后,管理系统恢复原来的状态,继续正常运行。
二.设计思路与实施方案
1.设计目标思路整理
①在十字路口的两个方向上各设一组红、绿、黄灯,显示顺序为其中一方向(东西方向)是绿灯、黄灯、红灯;另一方向(南北方向)是红灯、绿灯、黄灯。
②设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,其中绿灯、黄灯、红灯的持续时间分别是70s、5s和75s。
③当各条路上任意一条上出现特殊情况时,如当消防车、救护车或其他需要优先放行的车辆通过时,各方向上均是红灯亮,倒计时停止,且显示数字在闪烁。当特殊运行状态结束后,控制器恢复原来状态,继续正常运行。
2.原理分析
本系统主要由分频器,计数器,控制器,倒计时显示器等电路组成。分频器将晶振送来的50MHZ信号变为1HZ时钟信号;计数器实现总共150秒的计数,它也是交通控制系统的一个大循环;控制器控制系统的状态转移和红黄绿灯的信号输出;倒计时显示电路实现75秒,70秒及5秒的倒计时和显示功能。整个系统的工作时序受控制器控制,是系统的核心。基于此,做出交通控制系统的转移图如下:
其中,s0:A方向绿灯亮,B方向红灯亮,此状态持续70秒;
S1:A方向黄灯亮,B方向红灯亮,此状态持续5秒;
S2:A方向红灯亮,B方向绿灯亮,此状态持续70秒;
S3:A方向红灯亮,B方向黄灯亮,此状态持续5秒;
S4:紧急制动状态,A方向红灯亮,B方向红灯亮,当hold=‘0‘时进入这种状态。
当紧急制动信号无效时,状态按照s0—s1—s2—s3—s0循环;当紧急制动信号有效时,立即进入s4,两个方向红灯全亮,计数器停止计数。
三.设计过程
1.电路设计
交通控制系统顶层原理图如下图示,它主要由50MHZ分频器模块,控制器,倒计时计数器模块,7段数码管组成。
(1)分频器的设计
分频器外部接口如右图所示:Array library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity fp50m is
port(
clk : in std_logic;
reset : in std_logic;
clk_out: out std_logic
);
end entity fp50m;
architecture behavior of fp50m is
signal count : std_logic_vector(31 downto 0);
signal Q:std_logic;
begin
process(reset,clk)
begin
if (reset = '0') then
count <= (others=>'0'); -- 复位计数器
elsif clk'event and clk='1' then
count<=count+1;
if (count = 25000000) then
Q<= not Q; -- 反置输出
count <= (others=>'0');
end if;
end if;
clk_out<=Q;
end process;
end architecture behavior;
由于50MHz过大,在这里就不展示分频时序图。
(2)控制器的设计
控制器control的逻辑符号如下图所示。其中,clk为时钟输入信号;hld为紧急制动信号;ared,agreen,ayellow为东西方向驱动红灯,绿灯及黄灯指示的
输出信号;bred,bgreen,byellow分别为南北方向驱动红灯。绿灯及黄灯指示
的输出信号。控制器按照上边的状态转移图所示控制系统的时序,即为个方向红,绿,黄灯的亮灭时间。
control的VHDL描述文件control.vhd:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity control is
port( clk,hold:in std_logic;
ared,agreen,ayellow,bred,bgreen,byellow:out std_logic);
end control;
architecture behavior of control is
type state_type is(s0,s1,s2,s3,s4);
signal current_state,next_state:state_type;
signal counter:std_logic_vector(6 downto 0);
begin
synch:process
begin
wait until clk'event and clk='1';
if hold='0' then --当紧急制动信号有效时,计数器停止工作counter<=counter;
else --当紧急制动信号无效时,计数器进行周期为150s的计数 if counter<149 then
counter<=counter+1;
else
counter<=(others=>'0');
end if;
end if;
end process;
process --状态机的状态转移描述
begin
wait until clk'event and clk='1';
current_state<=next_state;
end process;
state_trans:process(current_state)
begin
case current_state is
when s0=>
if hold='0' then
next_state<=s4;
else
if counter<69 then
next_state<=s0;
else
next_state<=s1;
end if;
end if;