《基于Verilog交通灯仿真系统设计与仿真(11页).docx》由会员分享,可在线阅读,更多相关《基于Verilog交通灯仿真系统设计与仿真(11页).docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-基于Verilog交通灯仿真系统设计与仿真-第 11 页基于Verilog交通灯仿真系统设计与仿真姓名:班级:1501011学号: 基于Verilog交通灯的设计与实现一、 选题意义1.1背景介绍交通信号灯是现代交通系统中必不可少的元素,用Verilog语言对交通信号灯进行模拟,设计一个交通灯信号控制电路。具体要求为:输入为50MHz的时钟和复位信号,输出为红、绿、黄三个信号(高电平为亮)。复位信号(高电平)有效,红、绿、黄灯灭;接着进行如下循环:绿灯亮1分钟,黄灯闪烁10秒,红灯亮1分钟。在此基础上再加两个数码管,对倒计时的数显示。1.2研究价值通过交通灯的设计与仿真综合,体会复杂时序的实
2、现方法,学会用框图表示程序的设计思想,掌握中小规模集成电路的系统综合设计方法。二、系统设计设计思路概述:考虑一个红绿黄交通灯及倒计时显示器设计首先复位电平置1,所有的交通灯电平为低,即灭。首先绿灯亮60s,然后黄灯闪烁10s;红灯再接着亮60s;而后绿灯亮60s,黄灯闪烁10s,红灯亮60s以此循环,直至复位电平置1,所有交通灯灭。三、模块设计与仿真顶层模块(module lights):模块例化,对控制模块和译码模块进行例化控制模块:交通灯颜色和倒计时时钟分频(frequencies):将50MHZ的频率分成我们所需要的1HZ; 颜色变化:状态循环及倒计时,状态用light_status,如
3、果状态light_status为0,绿灯亮,时间(60s)给统计灯亮时间的变量light_long,并且把显示灯亮的变量light_select赋值100(高电平表示亮),最后把状态标志位light_status赋1,控制倒计时。交通灯亮灭情况:light_out交通灯亮灭情况001红灯亮010黄灯亮100绿灯亮倒计时:灯亮或闪烁时间(绿、黄、红分别为60s、10s、60s)用BCD码表示(分别为60h、10h、60h),倒计时的时候个位和十位分别是高四位和低四位,首先是低四位倒数,当倒数到0时,重新赋值为9,且高四位减1,如此循环,直到这个数减到0,灯亮的时间到,接着进行下一个状态,在时间减
4、到0的时候,给使能端enable 赋值0;高四位和低四位分别显示十位和个位。译码模块:黄灯闪烁及倒计时译码输出。黄灯闪烁:黄灯在1s内亮0.5s灭0.5s,中间位当分频时钟y_flicker为高且输入light_select为高时,输出light_out 才为高(黄灯亮),别的情况light_out中间位都为低(黄灯灭)。七段译码:38译码器,把倒计时译码输出显示模块框图:3时序说明在0时刻,加上系统时钟,首先进行reset置1,计数器清零,所有交通灯为灭的状态,二进制代码为00,七段译码无显示。在reset为0时,系统开始正常工作。计数器开始工作,纵向路口的路灯亮,横向路口的红灯亮,二进制代
5、码为01,同时两个倒计时显示器工作,从59到0的倒计时。经过60s(也就是经过60*50M个系统时钟上升沿之后)纵向路口,横向路口的黄灯开始闪烁( 1秒内只有半秒,黄灯是亮的,从9秒到8.5秒之间黄灯是亮的,然后8.5到8是灭的,如此继续下去,知道10秒结束)又经过10s(70*50M个系统时钟上升沿),状态转移到红灯,然后显示及七段译码过程与绿灯相似。至此一个周期已经完成,接下来就是循环执行以上步骤的过程,直到有reset清零端打断其正常工作。4计框图及相关时序四、系统仿真/ 顶层模块module lights(clk50MHz,reset,light_out,led_ctrlge,led_
6、ctrlshi); input clk50MHz; input reset; output 2:0 light_out; output 6:0 led_ctrlge; output 6:0 led_ctrlshi; wire 3:0 dataoutge;wire 3:0 dataoutshi;wire 2:0 light_selccted; controlcontrollk50MHz),.reset(reset),.doutge(dataoutge),.doutshi(dataoutshi),.light_select(light_selccted); /控制模块例化decodeU_decod
7、e(.sysclk_50MHz(sysclk_50M,.reset(reset),.inge(dataoutge),.inshi(dataoutshi).light_sel(light_selccted),.light_out(light_out),.led_datage(led_ctrlge),.led_datashi(led_ctrlshi); / 译码模块例化endmodule/ 控制模块Module control (clk50MHz,reset, outge, outshi, light_select); inputclk50MHz; inputreset; output3:0 ou
8、tge; output3:0 outshi; output2:0 light_select; reg 2:0 light_select; reg 1:0 light_status; reg clk1Hz; reg 24:0 counter; reg enable; reg 7:0 light_long; parameter g_long=8h59; parameter y_long=8h09; parameter r_long=8h59; always(posedge clk50MHz or posedge reset)begin if(reset) begin clk1Hz=0; count
9、er=5d0; end else if(counter=25d25000000-1) begin counter=25d0; clk1Hz=clk1Hz; end else counter=counter+1;endalways(posedge clk1Hz or posedge reset)begin if(reset) begin light_select=3b000; light_status=2d0; enable=0; end else if(enable=0) begin enable=1; case(light_status)0: beginlight_long=g_long;
10、light_select=3b100; light_status=2d1; end 1: beginlight_long=y_long;light_select=3b010;light_status=2d2;end 2: begin light_long=r_long;light_select=3b001; light_status=2d0; enddefault light_select=3b000; endcase end else if(light_long=0) enable=0; else if(light_long3:0=0) begin light_long3:0=4d9; li
11、ght_long7:4=light_long7:4-1; end else light_long3:0=light_long3:0-1;endassign outge=light_long3:0;assign outshi=light_long7:4;endmodule/ 译码模块module decode (clk50MHz, reset, inge,inshi,light_sel,light_out,led_datage, led_datashi); input clk50MHz; input reset; input 3:0 inge; input 3:0 inshi; input 2:
12、0 light_sel; output 2:0 light_out; output 6:0 led_datage; output 6:0 led_datashi; reg 6:0 led_datage; reg 6:0 led_datashi; reg 2:0 light_out; reg 24:0 counter_yell; reg frequencies; always(posedge clk50MHz or posedge reset)begin if(reset) begin counter_yell=25d0; frequencies =0; end else if(counter_
13、yell=25d25000000-1) begin counter_yell=25d0; frequencies = frequencies; end else counter_yell=counter_yell+1;endalways( frequencies or light_sel)begin light_out2=light_sel2; light_out0=light_sel0; if(frequencies =1)&(light_sel1=1b1) light_out1=1b1; else light_out1=1b0; endalways(inge)begincase(inge)
14、 / 个位七段译码,低电平有效 4h0 : led_datage = 7b0001000; 4h1 : led_datage = 7b1101101; 4h2 : led_datage = 7b0100010; 4h3 : led_datage = 7b0100100; 4h4 : led_datage = 7b1000101; 4h5 : led_datage = 7b0010100; 4h6 : led_datage = 7b0010000; 4h7 : led_datage = 7b0101101; 4h8 : led_datage = 7b0000000; 4h9 : led_data
15、ge = 7b0000100; default : led_datage = 7b1111111; endcaseendalways(inshi) begin case(inshi) /十位七段译码,低电平有效 4h0 : led_datashi = 7b0001000; 4h1 : led_datashi = 7b1101101; 4h2 : led_datashi = 7b0100010; 4h3 : led_datashi = 7b0100100; 4h4 : led_datashi = 7b1000101; 4h5 : led_datashi = 7b0010100; 4h6 : le
16、d_datashi = 7b0010000; 4h7 : led_datashi = 7b0101101; 4h8 : led_datashi = 7b0000000; 4h9 : led_datashi = 7b0000100; default : led_datashi = 7b1111111; endcaseendendmodule测试代码timescale 1ns/1nsmodule traffic_tb; reg clk50MHz; reg reset; wire 2:0 light_out; wire 6:0 led_ctrlge;wire 6:0 led_ctrlshi;init
17、ialbeginreset=1;#1 reset=0;endalwaysbegin#1 clk50MHz=0;#1 clk50MHz=1;endlightslights(.clk50MHz(clk50MHz),.reset(reset),.light_out(light_out),.led_ctrlge(led_ctrlge),.led_ctrlshi(led_ctrlshi);endmodule实验结果仿真图绿灯红灯黄灯综合结果总模块控制模块译码模块五、小结通过交通信号控制器功能仿真与测试,本设计达到了预定设计的目的,实现了交通灯的仿真机布局布线,对我们的生活有指导性的意义,同时也体现了verilog语言的重要性。在以后的实验中,一定要先理清思路,得出大致的流程图以及核心部分,在分各个模块实现,最后连接起来