文档库 最新最全的文档下载
当前位置:文档库 › EDA课程设计-用Verilog HDL语言编写-红绿灯控制程序

EDA课程设计-用Verilog HDL语言编写-红绿灯控制程序

XI ’AN UNIVERSITY OF TECHNOLOGY

EDA 综合实践

二、红绿灯原理及设计思路

设计思路:

为了实现两个方向红绿灯循环亮灭的过程,假设该过程如下:

起始(st0)东西方向绿灯亮(green1=1),南北方向红灯亮(red2=1),这个过程持续3个clock周期;然后(st3)东西方向黄灯亮,绿灯灭,南北方向红灯仍然亮着,这个过程持续1个clock;然后(st4)东西方向红灯亮,南北方向绿灯亮,这个过程持续3个clock;然后南北(st7)方向黄灯亮,东西方向红灯仍然亮着,这个过程持续一个clock;接下来就回到起始(st0)的状态进行循环。

此程序中无论哪个方向,各个灯亮着的时间之比为, 绿:黄:红=3:1:4,可以设置clock的值确定各灯具体的亮的时间。

1、红绿灯工作状态的真值表:

2、模型图:

(见下页)

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=1'b0; yellow1=1'b0; green1=1'b0;

red2=1'b0; yellow2=1'b0; green2=1'b0;

case(state)

st0:begin

red2=1'b1;

nxstate=st1;

end

st1:begin

green1=1'b1;

red2=1'b1;

nxstate=st2;

end

st2:begin

green1=1'b1;

red2=1'b1;

nxstate=st3; end

st3:begin

green1=1'b0;

yellow1=1'b1;

red2=1'b1;

nxstate=st4; end

st4:begin

red2=1'b0;

yellow1=1'b0;

green2=1'b1;

nxstate=st5; end

st5:begin

red1=1'b1;

green2=1'b1;

nxstate=st6; end

st6:begin

red1=1'b1;

green2=1'b1;

nxstate=st7; end

st7:begin

green2=1'b0;

red1=1'b1;

yellow2=1'b1;

nxstate=st0; end

endcase

end

endmodule

四、编译和仿真波形

红绿灯设计仿真图

五、仿真分析及结论

根据仿真波形图可以看出实验结果符合预期设想,基本实现了红绿黄灯按一定规律进行循环闪烁的功能,仿真结果与预想的一致,实现了各个方向绿、黄、红灯闪亮的时间比为3:1:4。

程序中美中不足的是这个比例是固定的,必须通过修改程序来修改时间比,而且只是一个比例,不是固定的以秒为单位的时间。例如要实现绿、黄、红灯闪亮时间为20s,5s,25s,就无法用该程序实现,但可以通过在程序中修改时间比来实现。

另外此程序的缺憾是没有手动校准红绿灯时间的功能,假设红绿灯由于年代久远内部芯片老化而导致时间产生误差,就无法进行校准,而必须更换红绿灯。

程序的亮点是简单易懂,容易理解,适合刚刚学习Verilog语言的人。对于

红绿灯的设计思路容易掌握。

通过此次课程设计,我基本了解了用Verilog语言编程的一般方法,掌握了用该语言编程的一些技巧,这对于刚刚接触Verilog语言的我来说是个不小的提高。

同时感谢老师的指导,让我在编程的过程中思路更清晰了一些,克服了一些很难的问题。我会更加努力,如果以后还会用到该语言,定会再接再厉,做的更好。

相关文档
相关文档 最新文档