交通信号灯控制器的verilog实现.doc

交通信号灯控制器的verilog实现.doc

ID:56904439

大小:76.05 KB

页数:11页

时间:2020-07-21

交通信号灯控制器的verilog实现.doc_第1页
交通信号灯控制器的verilog实现.doc_第2页
交通信号灯控制器的verilog实现.doc_第3页
交通信号灯控制器的verilog实现.doc_第4页
交通信号灯控制器的verilog实现.doc_第5页
资源描述:

《交通信号灯控制器的verilog实现.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、HarbinInstituteofTechnologyVerilog实验报告(2)实验内容:交通信号灯控制器班级:姓名:学号:哈尔滨工业大学2015年6月一、功能描述本设计利用VerilogHDL语言,对一个十字路口的交通信号灯进行控制,可控制4个路口的红、黄、绿、左转四盏信号灯,让其按特定的规律进行变化。并通过ModelSim软件对系统进行了仿真。仿真结果表明系统可自动实现十字路口红绿灯及左转弯信号灯的控制。实现设计目标如下:(1)设计一个十字路口的交通灯控制电路,每条路配有红、黄、绿、左转四盏交通信号灯。通过控制器对四个路口的四组交通灯的状态实现自动循环控制;(2

2、)实现两主干道车辆交替运行,每次通行直行时间为30秒;左转时间为10秒,右转不受信号灯控制。(3)黄灯作为绿灯转为左转灯,左转灯转为红灯的过渡信号灯,过渡时间为5s。(4)系统设有总复位开关,可在任意时间对系统进行复位。二、设计方案1.设计思路我们对图1所示的十字路口进行设计,路口A和路口C的车辆同时行驶,路口B和路口D的车辆同时行驶,所以虽然要控制4组信号灯,但其实它们可以俩俩合并,这样大大简化了设计。由于我们采用自动控制方式,两个方向的灯按照顺序依次交替循环显示,每种灯亮的时间结合实际生活合理设定。系统设有复位开关,可在任意时间内对系统进行复位。图1十字路口示意图

3、由以上分析可知,该系统可视为一个状态机,而且共有8种状态,如表1所示。表1交通灯状态示意表由上表我们还可以得到状态转换图,如图2所示:S7S0000003S11S6S25S5S36S47图2状态转移示意图该状态机共有两个输入信号rstn和clk,rstn为复位信号,当该信号为低电平时,状态机处于S0,且状态不发生改变。当rstn为高电平时,这8个状态依次按时间顺序发生变化,每个状态保持多长时间由clk信号控制。三、关键代码1.我们通过宏定义来设置每个状态保持的时间,这样既增强了代码的可读性,又方便以后的更改。由于此实验不做硬件设计,只是通过仿真来验证,所以为了方便看波

4、形,我们用一个时钟周期代表5s,具体代码如下:`defineG2YDELAY6//绿灯亮转到红灯亮的延迟,用一个时钟周期代替5s,//则此延迟为30s,这样做是为了仿真时容易看波形`defineY2LDELAY1//黄灯亮转到左转灯亮的延迟时间为5s`defineL2YDELAY2//左转灯亮转到黄灯亮的延迟时间为10s`defineY2RDELAY1//黄灯亮转到红灯亮的延迟时间为5s2.我们用一个16位的reg类型的向量light来代表16盏交通信号灯,light[15:12]代表A路口,light[11:8]代表B路口,light[7:4]代表C路口,light

5、[3:0]代表D路口,高位到低位依次表示左转灯,红灯,绿灯,黄灯且每一位用1代表亮,0代表灭。3.用state表示当前状态,用next_state代表下一个状态,当rstn被拉低时,让系统处于S0状态,否则在时钟上升沿到来时将next_state赋给state。代码如下:always@(posedgeclk)if(!rstn)beginstate<=S0;next_state<=S0;endelsestate<=next_state;//状态改变4.当系统处于某种状态时必须有确定的输出,通过运用case语句代码可读性更强,而且简介。代码如下:always@(state

6、)begincase(state)S0:light<=16'b0010_0100_0010_0100;S1:light<=16'b0001_0100_0001_0100;S2:light<=16'b1000_0100_1000_0100;S3:light<=16'b0001_0100_0001_0100;S4:light<=16'b0100_0010_0100_0010;S5:light<=16'b0100_0001_0100_0001;S6:light<=16'b0100_1000_0100_1000;S7:light<=16'b0100_0001_0100_000

7、1;endcaseend5.控制状态何时发生改变是关键,通过repeat语句来实现延时,而且只有当rstn为高电平是,状态才可以发生改变,代码如下:always@(stateorrstn)beginif(rstn)begincase(state)S0:beginrepeat(`G2YDELAY-1)@(posedgeclk);next_state=S1;endS1:beginrepeat(`Y2LDELAY-1)@(posedgeclk);next_state=S2;endS2:beginrepeat(`L2YDELAY-1)@(posedgeclk

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。