eda实验报告西电.docx

上传人:b****5 文档编号:27959005 上传时间:2023-07-06 格式:DOCX 页数:14 大小:132.44KB
下载 相关 举报
eda实验报告西电.docx_第1页
第1页 / 共14页
eda实验报告西电.docx_第2页
第2页 / 共14页
eda实验报告西电.docx_第3页
第3页 / 共14页
eda实验报告西电.docx_第4页
第4页 / 共14页
eda实验报告西电.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

eda实验报告西电.docx

《eda实验报告西电.docx》由会员分享,可在线阅读,更多相关《eda实验报告西电.docx(14页珍藏版)》请在冰豆网上搜索。

eda实验报告西电.docx

eda实验报告西电

 

《数字逻辑与系统设计》实验报告

 

目录

一、设计任务与要求2

二、流程图与示意图3

三、设计思路及原理图4

1、原理图4

2、总体思路4

3、状态转移图5

四、设计实现6

1、程序6

2、仿真波形10

3、引脚分配11

4、程序下载12

五、总结13

一、设计任务与要求

设计一个十字路口交通控制系统,其东西,南北两个方向除了有红、黄、绿灯指示是否允许通行外,还设有时钟,以倒计时方式显示每一路允许通行的时间,绿灯,黄灯,红灯的持续时间分别是40、5和45秒。

当东西或南北两路中任一道上出现特殊情况,例如有消防车,警车要去执行任务,此时交通控制系统应可由交警手动控制立即进入特殊运行状态,即两条道上的所有车辆皆停止通行,红灯全亮,时钟停止计时,且其数字在闪烁。

当特殊运行状态结束后,管理系统恢复原来的状态,继续正常运行。

二、流程图与示意图

三、设计思路及原理图

1、原理图

2、总体思路

本设计主要有两种模块,一种控制红黄绿灯的变化,数目为1,即JiaoTongDeng。

另一种控制各种颜色灯的倒计时计数显示,数目为2个分别m45和m45_2。

时钟接入实验箱上所提供的1Hz外部时钟。

其中灯的控制模块采用VHDL设计,分为计数、状态转移和输出三个进程。

其中5个状态分别为:

S4:

1红亮1红亮(紧急)

S0:

1绿亮2红亮(40s)

S1:

1黄亮2红亮(5s)

S2:

1红亮2绿亮(40s)

S3:

1红亮2黄亮(5s)

使能位为1时,灯在S0-S3之间转移;使能位为0时,即紧急状态时,状态转为S4,同时程序保存此时的状态,待紧急状态解除后,恢复进入紧急状态时的状态。

M45计数器模块负责控制两个倒数计时器的工作,用VHDL实现。

原理为每个方向的交通灯计时为三个状态绿(40s)→黄(5s)→红(45s)循环。

所以在内部用状态的转移为计数器分别循环置数为39、4、44。

实现循环计数39~0、4~0、44~0。

本设计中两个M45计数器的区别仅在于一个从绿灯状态开始,一个从红灯状态开始,由于状态为循环,所以其他部分相同。

进入紧急状态时,两路都为红灯闪烁,同时计数器在“00”和”FF”两个状态闪烁。

推出紧急状态后,恢复进入紧急状态时的状态和计数。

状态的恢复通过临时储存状态的两个变量tempL和tempH实现。

具体实现见代码。

3、状态转移图

四、设计实现

1、程序

------------------------JiaoTongDeng.vhd------------------------

-------------------用于实现红黄绿灯的控制-----------------

libraryieee;

useieee.std_logic_unsigned.all;

useieee.std_logic_1164.all;

entityJiaoTongDengis

port(

clk:

instd_logic;

en:

instd_logic;

red1,red2:

outstd_logic;

yellow1,yellow2:

outstd_logic;

green1,green2:

outstd_logic

);

endJiaoTongDeng;

architectureoneofJiaoTongDengis

typestateis(s0,s1,s2,s3,s4);--5个状态

signalstate_now:

state:

=s0;--当前状态,初始化为s0

signalcount:

integer:

=0;--计数变量

begin

--计数进程

counter:

process(clk)begin

if(clk'eventandclk='1')then–时钟上升沿

if(en='1')then

if(count<90)then--实现1-90循环模90计数

count<=count+1;

else

count<=1;

endif;

endif;

endif;

endprocess;

--状态转移进程

state_trans:

process(count)begin

if(clk'eventandclk='1')then

casestate_nowis--根据当前状态按顺序进行转换,en为0时进入紧急

whens0=>

if(en='1')then

if(count>39)then

state_now<=s1;

endif;

else

state_now<=s4;

endif;

whens1=>

if(en='1')then

if(count>44)then

state_now<=s2;

endif;

else

state_now<=s4;

endif;

whens2=>

if(en='1')then

if(count>84)then

state_now<=s3;

endif;

else

state_now<=s4;

endif;

whens3=>

if(en='1')then

if(count>89)then

state_now<=s0;

endif;

else

state_now<=s4;

endif;

whens4=>

if(en='1')then

if(count<39)then

state_now<=s0;

elsif(count<44)then

state_now<=s1;

elsif(count<84)then

state_now<=s2;

elsif(count<89)then

state_now<=s3;

endif;

else

state_now<=s4;

endif;

endcase;

endif;

endprocess;

--output进程把对应状态的绿红黄灯输出

output:

process(clk)begin

casestate_nowis

whens0=>

red1<='0';red2<='1';

green1<='1';green2<='0';

yellow1<='0';yellow2<='0';

whens1=>

red1<='0';red2<='1';

green1<='0';green2<='0';

yellow1<='1';yellow2<='0';

whens2=>

red1<='1';red2<='0';

green1<='0';green2<='1';

yellow1<='0';yellow2<='0';

whens3=>

red1<='1';red2<='0';

green1<='0';green2<='0';

yellow1<='0';yellow2<='1';

whens4=>

red1<='1';red2<='1';

green1<='0';green2<='0';

yellow1<='0';yellow2<='0';

endcase;

endprocess;

endone;

-------------------------------m45.vhd------------------------------

-------------用于实现单方向的计数器显示控制-----------

libraryieee;

useieee.std_logic_unsigned.all;

useieee.std_logic_1164.all;

entitym45is

port(

clk:

instd_logic;

en:

instd_logic;

numH,numL:

outstd_logic_vector(3downto0)

);

endm45;

architectureoneofm45is

signaltempL,tempH:

std_logic_vector(3downto0);--紧急状态时储存当前状态

signalcountL:

std_logic_vector(3downto0):

="0000";

signalcountH:

std_logic_vector(3downto0):

="0000";

signalflag:

std_logic:

='0';--是否为紧急状态标志

signalyellow_flag:

std_logic_vector(1downto0):

="00";--用于记录状态

--另一程序m45_2.vhd仅在此处的初始化不一样,为“10”,其他代码相同

begin

process(clk)begin

if(clk'eventandclk='1')then

if(en='1')then--判断是否紧急,1为正常状态

if(flag='1')then

--若flag为1,说明刚刚恢复正常,需要从tempL和tempH恢复

flag<='0';

if(tempL="0000")then

countL<="0100";

else

countL<=tempL-1;

endif;

countH<=tempH;

elsif(countL=0andcountH=0)then

--若高地位都变为0,则进行下一个状态的置数

if(yellow_flag="00")then—绿灯,置数39

countL<="1001";

countH<="0011";

yellow_flag<="01";

elsif(yellow_flag="01")then—黄灯,置数4

countL<="0100";

countH<="0000";

yellow_flag<="10";

else—红灯,置数44

countL<="0100";

countH<="0100";

yellow_flag<="00";

endif;

elsif(countL=0)then--仅低位到0,高位减1,低位置为9

countL<="1001";

countH<=countH-1;

else

countL<=countL-1;

endif;

elsif(en='0')then--en若为0,则为紧急状态

if(flag='0')then--flag为0则刚转入紧急状态,保存进入前状态

flag<='1';

tempL<=countL;

tempH<=countH;

countL<="0000";

countH<="0000";

else--flag为1则数码管在”00”和”FF”间闪烁

countL<=notcountL;--进行取反操作即可

countH<=notcountH;

endif;

endif;

endif;

endprocess;

numL<=countL;

numH<=countH;

endone;

2、仿真波形

正常情况下

进入紧急状态与恢复正常状态

3、引脚分配

4、程序下载

1、按引脚分配将所用引脚与对应输出连接起来。

2、连接下载器,选择Tools-Programmer,在HardwareSetup中指定好下载器,然后点击Start下载。

3、下载成功后,观察程序实际运行情况。

五、总结

根据仿真与实际下载观察,本实验设计的十字路口交通灯自动控制器设计运行良好,能够实现东西,南北两个方向红、黄、绿灯以及时钟倒计时的控制。

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

当前位置:首页 > 工程科技 > 建筑土木

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

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