EDA报告代码完整版Word下载.docx
- 文档编号:22565460
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:15
- 大小:132.85KB
EDA报告代码完整版Word下载.docx
《EDA报告代码完整版Word下载.docx》由会员分享,可在线阅读,更多相关《EDA报告代码完整版Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
时钟接入实验箱上所提供的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:
red1,red2:
outstd_logic;
yellow1,yellow2:
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='
)then
if(count<
90)then--实现1-90循环模90计数
count<
=count+1;
else
=1;
endif;
endif;
endif;
endprocess;
--状态转移进程
state_trans:
process(count)begin
casestate_nowis--根据当前状态按顺序进行转换,en为0时进入紧急
whens0=>
--s0状态下的计时
if(en='
if(count>
39)then
state_now<
=s1;
endif;
state_now<
=s4;
whens1=>
--s1状态下的计时
44)then
=s2;
whens2=>
--s2状态下的计时
84)then
=s3;
whens3=>
--s3状态下的计时
89)then
whens4=>
--s4状态下的计时
if(count<
elsif(count<
endcase;
--output进程把对应状态的绿红黄灯输出
output:
casestate_nowis
--s0状态下的灯显示方式
red1<
='
0'
;
green1<
yellow1<
--s1状态下的灯显示方式
;
--s2状态下的灯显示方式
--s3状态下的灯显示方式
--s4状态下的灯显示方式
endone;
-------------------------------m45.vhd------------------------------
-------------用于实现单方向的计数器显示控制-----------
entitym45is
lightH,lightL:
outstd_logic_vector(3downto0)
endm45;
architectureoneofm45is
signaltempL,tempH:
std_logic_vector(3downto0);
--紧急状态时储存当前状态
signalnumberL:
std_logic_vector(3downto0):
="
0000"
--计时低位数字
signalnumberH:
--计时高位数字
signalflag:
std_logic:
--是否为紧急状态标志
signalstatus:
std_logic_vector(1downto0):
00"
--用于记录状态
--另一程序m45_2.vhd仅在此处的初始化不一样,为“10”,其他代码相同
process(clk)begin
if(clk'
)then--判断是否紧急,1为正常状态
if(flag='
)then
--若flag为1,说明刚刚恢复正常,需要从tempL和tempH恢复
flag<
if(tempL=0andtempH=0)then
If(status=”00”)then--00表示绿灯状态
numberL<
1001"
numberH<
0011"
status<
01"
elsif(status="
)then--01表示黄灯状态
0100"
numberH<
status<
10"
else--表示红灯状态
endif;
elsif(tempL=0)then--时间递减方式
numberL<
numberH<
=tempH-1;
else
=numberL-1;
=tempH;
countH<
elsif(numberL=0andnumberH=0)then
--若高地位都变为0,则进行下一个状态的置数
if(status="
)then—绿灯,置数39
status<
)then—黄灯,置数4
else—红灯,置数44
elsif(numberL=0)then--仅低位到0,高位减1,低位置为9
numberL<
numberH<
=numberH-1;
else
elsif(en='
)then--en若为0,则为紧急状态
)then--flag为0则刚转入紧急状态,保存进入前状态
tempL<
=numberL;
--把紧急状态前的低位记录
tempH<
=numberH;
--把紧急状态前的高位记录
--低位赋值0
--高位赋值0
else
if(numberH=0andnumberL=0)then--还原紧急状态前的值
=tempL;
else--重新开始循环
lightL<
lightH<
2、仿真波形
正常情况下
进入紧急状态与恢复正常状态
3、引脚分配
4、程序下载
1、按引脚分配将所用引脚与对应输出连接起来。
2、连接下载器,选择Tools-Programmer,在HardwareSetup中指定好下载器,然后点击Start下载。
3、下载成功后,观察程序实际运行情况。
五、总结
根据仿真与实际下载观察,本实验设计的十字路口交通灯自动控制器设计运行良好,能够实现东西,南北两个方向红、黄、绿灯以及时钟倒计时的控制。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 报告 代码 完整版
![提示](https://static.bdocx.com/images/bang_tan.gif)