EDA课程设计-用Verilog HDL语言编写-红绿灯控制程序.doc
文本预览下载声明
XI’AN UNIVERSITY OF TECHNOLOGY
EDA综合实践
所在院系 自动化与信息工程学院 专业名称 电子信息科学与技术 班级 电技111 题目 红绿灯设计 指导教师 XXXX 成员 XXX 完成时间 2014年元月
一、设计任务及要求:
设计任务:
红绿灯控制程序
要 求:
1、有倒计时显示
2、红黄绿灯三个状态,根据现实红绿灯的转换设计逻辑关系设计
3、具有复位控制按钮,动作时,复位到初始状态
模型图:
(见下页)
3状态机:
源程序
module traffic(clock,reset,red1,yellow1,green1,red2,yellow2,green2);
input clock,reset;
output red1,yellow1,green1,red2,yellow2,green2;
parameter st0=0,st1=1,st2=2,st3=3,st4=4,st5=5,st6=6,st7=7;
reg[2:0] state,nxstate;
reg red1,yellow1,green1,red2,yellow2,green2;
always@(posedge clock or posedge reset)
begin
if(reset)
state=st0;
else
state=nxstate;
end
always@(state)
begin
red1=1b0; yellow1=1b0; green1=1b0;
red2=1b0; yellow2=1b0; green2=1b0;
case(state)
st0:begin
green1=1b1;
red2=1b1;
nxstate=st1;
end
st1:begin
green1=1b1;
red2=1b1;
nxstate=st2;
end
st2:begin
green1=1b1;
red2=1b1;
nxstate=st3;
end
st3:begin
green1=1b0;
yellow1=1b1;
red2=1b1;
nxstate=st4;
end
st4:begin
red1=1b1;
red2=1b0;
yellow1=1b0;
green2=1b1;
nxstate=st5;
end
st5:begin
red1=1b1;
green2=1b1;
nxstate=st6;
end
st6:begin
red1=1b1;
green2=1b1;
nxstate=st7;
end
st7:begin
green2=1b0;
red1=1b1;
yellow2=1b1;
nxstate=st0;
end
endcase
end
endmodule
四、编译和仿真波形
红绿灯设计仿真图
五、仿真分析及结论
根据仿真波形图可以看出实验结果符合预期设想,基本实现了红绿黄灯按一定规律进行循环闪烁的功能,仿真结果与预想的一致,实现了各个方向绿、黄、红灯闪亮的时间比为3:1:4。
程序中美中不足的是这个比例是固定的,必须通过修改程序来修改时间比,而且只是一个比例,不是固定的以秒为单位的时间。例如要实现绿、黄、红灯闪亮时间为20s,5s,25s,就无法用该程序实现,但可以通过在程序中修改时间比来实现。
另外此程序的缺憾是没有手动校准红绿灯时间的功能,假设红绿灯由于年代久远内部芯片老化而导致时间产生误差,就无法进行校准,而必须更换红绿灯。
程序的亮点是简单易懂,容易理解,适合刚刚学习Verilog语言的人。对于红绿灯的设计思路容易掌握。
通过此次课程设计,我基本了解了用Verilog语言编程的一般方法,掌握了用该语言编程的一些技巧,这对于刚刚接触Verilog语言的我来说是个不小的提高。
同时感谢老师的指导,让我在编程的过程中思路更清晰了一些,克
显示全部