1、1设计思路概述:考虑一个红绿黄交通灯及倒计时显示器设计首先复位电平置1,所有的交通灯电平为低,即灭。首先绿灯亮60s,然后黄灯闪烁10s;红灯再接着亮60s;而后绿灯亮60s,黄灯闪烁10s,红灯亮60s以此循环,直至复位电平置1,所有交通灯灭。2模块结构设计及流程图顶层模块(module lights):模块例化,对控制模块和译码模块进行例化控制模块:交通灯颜色和倒计时时钟分频(frequencies):将50MHZ的频率分成我们所需要的1HZ; 颜色变化:状态循环及倒计时,状态用light_status,如果状态light_status为0,绿灯亮,时间(60s)给统计灯亮时间的变量lig
2、ht_long,并且把显示灯亮的变量light_select赋值100(高电平表示亮),最后把状态标志位light_status赋1,控制倒计时。交通灯亮灭情况:light_out交通灯亮灭情况001红灯亮010黄灯亮100绿灯亮倒计时:灯亮或闪烁时间(绿、黄、红分别为60s、10s、60s)用BCD码表示(分别为60h、10h、60h),倒计时的时候个位和十位分别是高四位和低四位,首先是低四位倒数,当倒数到0时,重新赋值为9,且高四位减1,如此循环,直到这个数减到0,灯亮的时间到,接着进行下一个状态,在时间减到0的时候,给使能端enable 赋值0;高四位和低四位分别显示十位和个位。译码模块
3、:黄灯闪烁及倒计时译码输出。黄灯闪烁:黄灯在1s内亮0.5s灭0.5s,中间位当分频时钟y_flicker为高且输入light_select为高时,输出light_out 才为高(黄灯亮),别的情况light_out中间位都为低(黄灯灭)。七段译码:38译码器,把倒计时译码输出显示模块框图:3时序说明在0时刻,加上系统时钟,首先进行reset置1,计数器清零,所有交通灯为灭的状态,二进制代码为00,七段译码无显示。在reset为0时,系统开始正常工作。计数器开始工作,纵向路口的路灯亮,横向路口的红灯亮,二进制代码为01,同时两个倒计时显示器工作,从59到0的倒计时。经过60s(也就是经过60*
4、50M个系统时钟上升沿之后)纵向路口,横向路口的黄灯开始闪烁( 1秒内只有半秒,黄灯是亮的,从9秒到8.5秒之间黄灯是亮的,然后8.5到8是灭的,如此继续下去,知道10秒结束)又经过10s(70*50M个系统时钟上升沿),状态转移到红灯,然后显示及七段译码过程与绿灯相似。至此一个周期已经完成,接下来就是循环执行以上步骤的过程,直到有reset清零端打断其正常工作。4计框图及相关时序四实验代码/ 顶层模块module lights(clk50MHz,reset,light_out,led_ctrlge,led_ctrlshi); input clk50MHz; input reset; outp
5、ut 2:0 light_out; output 6:0 led_ctrlge;0 led_ctrlshi; wire 3:0 dataoutge;0 dataoutshi; wire 2:0 light_selccted; controlcontrollk50MHz),.reset(reset),.doutge(dataoutge),.doutshi(dataoutshi),.light_select(light_selccted); /控制模块例化 decodeU_decode(.sysclk_50MHz(sysclk_50M,.reset(reset),.inge(dataoutge),
6、.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); output3:0 outge;0 outshi; output2:0 light_select; reg 2: reg 1:0 light_status; reg clk1Hz; reg 24
7、:0 counter; reg enable; reg 7:0 light_long; parameter g_long=8h59; parameter y_long=8h09; parameter r_long=8always(posedge clk50MHz or posedge reset)begin if(reset) begin clk1Hz=0; counter=5d0; end else if(counter=25d25000000-1) begin counter=25 clk1Hz=clk1Hz; end else=counter+1;endalways(posedge cl
8、k1Hz or posedge reset) light_select=3b000; light_status=2 enable if(enable=0) enable=1; case(light_status)0:light_long=g_long;light_selectb100;light_statusd1; 1:=y_long;b010;d2; 2: light_long=r_long;b001; default light_select endcase if(light_long=0) enable else if(light_long3:0=0) begin light_long3
9、:0=4d9; light_long7:4=light_long7:4-1; end else=light_long3:0-1;assign outge=light_long3:0;assign outshi=light_long7:4;/ 译码模块module decode (clk50MHz, reset, inge,inshi,light_sel,light_out,led_datage, led_datashi ); input 3:0 inge;0 inshi; input 2:0 light_sel;0 led_datage;0 led_datashi; reg 6:0 count
10、er_yell; reg frequencies; counter_yell frequencies if(counter_yell=25 counter_yell frequencies = frequencies;=counter_yell+1;always( frequencies or light_sel) light_out2=light_sel2; light_out0=light_sel0; if(frequencies =1)&(light_sel1=1b1) light_out1=1b1;elseb0;always(inge)case(inge) / 个位七段译码,低电平有效
11、 4h0 : led_datage = 7b0001000;h1 :b1101101;h2 :b0100010;h3 :b0100100;h4 :b1000101;h5 :b0010100;h6 :b0010000;h7 :b0101101;h8 :b0000000;h9 :b0000100; default :b1111111; endcasealways(inshi) case(inshi) /十位七段译码,低电平有效 led_datashi = 7测试代码timescale 1ns/1nsmodule traffic_tb; reg clk50MHz; reg reset; wire 6
12、: initial reset=1; #1 reset=0; always #1 clk50MHz=0; #1 clk50MHz=1;lightslights(.clk50MHz(clk50MHz),.reset(reset),.light_out(light_out),.led_ctrlge(led_ctrlge),.led_ctrlshi(led_ctrlshi);五实验结果仿真图绿灯红灯黄灯综合结果总模块控制模块译码模块六结论通过交通信号控制器功能仿真与测试,本设计达到了预定设计的目的,实现了交通灯的仿真机布局布线,对我们的生活有指导性的意义,同时也体现了verilog语言的重要性。在以后的实验中,一定要先理清思路,得出大致的流程图以及核心部分,在分各个模块实现,最后连接起来七、教师评语签名:日期:成绩
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1