verilog语言设计一个交通灯信号控制电路

合集下载

基于verilog的交通灯设计(状态机)

基于verilog的交通灯设计(状态机)

实验课题:基于verilog的交通灯设计(状态机)一、Verilog程序(主程序+激励)1)主程序/*顶层模块*/module traffic_light(clk,rst,out);input clk,rst;output [5:0]out;wire [4:0] x;delay D(.clk(clk),.rst(rst),.cnt(x));state S(.in(x),.rst(rst),.clk(clk),.out(out));endmodule/*延时模块*/module delay(clk,rst,cnt);input clk,rst;output[4:0]cnt;reg[4:0]cnt;always@(posedge clk)beginif(!rst)cnt<=0;else if(cnt<29)cnt<=cnt+1;else cnt<=0;endendmodule/*状态机模块*/module state(clk,in,rst,out);input clk,rst;input[4:0]in;output [5:0]out;reg [5:0]out;reg[3:0]state;parameter r1_g2or1_2_y=6'b100010,r1_y2og1_r2=6'b001100,g1_r2oy1_r2=6'b010100, y1_r2or1_g2=6'b100001,A='b0001,B='b0010,C='b0100,D='b1000;always@(posedge clk)beginif(!rst)beginstate<=A;out<= y1_r2or1_g2;endelsebegincase(state)A: beginif(in<25)state<=A;elsebeginstate<=B;out<=r1_g2or1_2_y;endendB: beginif(in>24)state<=B;elsebeginstate<=C;out<=r1_y2og1_r2;endendC: beginif(in<25)state<=C;elsebeginstate<=D;out<=g1_r2oy1_r2;endendD: beginif(in>24)state<=D;elsebeginstate<=A;out<=y1_r2or1_g2;endendendcaseendendendmodule2)激励module test;reg clk,rst;wire [5:0]out;traffic_light test(clk,rst,out);initialbeginclk='b1;forever #5 clk=~clk;endinitialbeginrst='b0;#10 rst='b1;#500 rst='b0;#10 rst='b1;endendmodule二、实验波形图截图三、波形分析输出out[5:0]分别对应:out[5]:主干道红灯out[4]:主干道黄灯out[3]:主干道绿灯out[2]:支干道红灯out[1]:支干道黄灯out[0]:支干道绿灯初始状态为:主干道红灯亮,支干道绿灯亮。

verilog课程设计—交通灯

verilog课程设计—交通灯

CPLD课程设计基于FPGA 的交通灯控制器的设计姓名:学号:专业:基于FPGA 的交通灯控制器的设计摘要:现代城市在日常运行控制中,越来越多的使用红绿灯对交通进行指挥和管理。

而一套完整的交通灯控制系统通常要实现自动控制和手动控制去实现其红绿灯的转换。

基于FPGA 设计的交通灯控制系统电路简单、可靠性好。

本设计利用Verilog HDL 语言、采用层次化混合输入方式,可控制4个路口的红、黄、绿、左转四盏信号灯,让其按特定的规律进行变化。

在QUARTUSⅡ下对系统进行了综合与仿真。

仿真结果说明系统可实现十字路口红绿灯及左转弯控制和倒计时显示,并能够自动控制交通灯转变。

关键词:FPGA ;交通灯自动控制;Verilog HDL;Quartus Ⅱ1.交通信号控制器设计要求与思路设计要求在交通灯系统中〔图1〕,路口1、2、3、4均需要红、黄、绿、左转四盏灯(用RYGL分别表示) ,并且每个路口都需要一个倒数的计时器,假设绿灯每次维持的时间是40 s ,黄灯为5 s ,左转灯10s,红灯60s,黄灯亮时以一定的频率闪动。

交通灯系统大多是自动控制来指挥交通的,但有时需要由交警手动控制红绿灯,所以要求设计的该交通信号系统需要具有该功能。

图1 交通灯系统示意图设计思路为了便于讨论,我们只讨论路口1〔用A表示〕和路口4〔用B表示〕。

此交通灯控制系统一共设计有5种工作模式。

分别为:方式1 :A 向绿灯长亮,B 向红灯亮。

方式2 :A 向左转灯长亮,B 向红灯亮。

方式3 :B 向绿灯长亮,A 向红灯亮。

方式4 :B 向左转灯长亮,A 向红灯亮。

方式5 :自开工作方式,两个方向的灯按照显示的顺序,交替循环显示。

系统设有总复位开关,可在任意时间内对系统进行复位。

利用M2M1M0对系统工作的状态进行控制〔见表1〕。

A路口和B路口均需要红黄绿加左转四盏灯。

所以输出显示可以用8个LED灯代替。

又因为最大显示时间为60s,故用两个数码管即可承当显示一个倒数计时器的任务。

基于Verilog的交通灯控制器的设计

基于Verilog的交通灯控制器的设计

武汉科技大学课题:交通灯控制器的设计编号:17指导老师:冯玉林班级:自动化0703班姓名:筱启…………………………坚持,就是胜利………………………目 录1. 设计内容与要求 (2)2. 交通灯控制系统的组成框图 (3)3. 交通灯控制电路的设计 (4)4. 交通灯控制电路设计的难点与解决方法 (5)5. 交通灯控制电路的Verilog 语句 (6)5. 交通灯控制电路的程序和波形分析 (12)6. EPF10K10LC84-4芯片引脚分配图 (20)7. 实验小结 (21)一、 设计内容与要求① 设计一个十字路口交通信号灯的定时控制电路。

要求红、绿灯按一定的规律亮和灭,并在亮灯期间进行倒计时,并将运行时间用数码管显示出来。

②绿灯亮时,为该车道允许通行信号,红灯亮时,为该车道禁止通行信号。

要求主干道每次通行时间为99秒,支干道每次通行时间为30秒。

每次变换运行车道前绿灯闪烁,持续时间为5秒。

即车道要由主干道转换为支干道时,主干道在通行时间只剩下5秒钟时,绿灯闪烁显示,支干道仍为红灯,以便主干道上已过停车线的车继续通行,未过停车线的车停止通行。

同理,当车道由支干道转换为主干道时,支干道绿灯闪烁显示5秒钟,主干道仍为红灯。

③ 对红、绿灯的运行时间要能比较方便的进行重新设置。

④ 添加左转灯的控制,可自行到实际十字路口观看规律并实现。

对器件进行在系统编程和实验验证。

⑤用Verilog 语言对设计进行描述,设计一个测试方案,通过Muxplus 对设计进行仿真验证。

并能够下载到实验板上调试成功。

二、交通灯控制系统的组成框图交通信号灯控制原理图绿 灯 左拐灯红 灯 绿 灯 左拐灯红 灯 交通信号灯控制系统框图三、交通灯控制电路的设计交通灯控制器设计的重点是控制电路的设计,根据设计要求分析,控制电路的算法可用下图所示的ASM图描述。

各状态的详细说明如下:S0状态:主干道绿灯亮,支干道红灯亮,此时若主干道有车等待左拐,而且主干道绿灯已亮足规定的时间间隔Ts;在主干道绿灯亮了(Ts-5)s后,则开始闪亮,直至绿灯亮了Ts;控制器发出状态转换信号Tempm==0,输出从状态S0转换到S1。

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

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

H a r b i n I n s t i t u t e o f T e c h n o l o g yV e r i l o g实验报告(2)实验内容:交通信号灯控制器班级:姓名:学号:哈尔滨工业大学2015年6月一、功能描述本设计利用Verilog HDL 语言,对一个十字路口的交通信号灯进行控制,可控制4个路口的红、黄、绿、左转四盏信号灯,让其按特定的规律进行变化。

并通过ModelSim软件对系统进行了仿真。

仿真结果表明系统可自动实现十字路口红绿灯及左转弯信号灯的控制。

实现设计目标如下:(1)设计一个十字路口的交通灯控制电路,每条路配有红、黄、绿、左转四盏交通信号灯。

通过控制器对四个路口的四组交通灯的状态实现自动循环控制;(2)实现两主干道车辆交替运行,每次通行直行时间为30 秒;左转时间为10秒,右转不受信号灯控制。

(3)黄灯作为绿灯转为左转灯,左转灯转为红灯的过渡信号灯,过渡时间为5s。

(4)系统设有总复位开关,可在任意时间对系统进行复位。

二、设计方案1.设计思路我们对图1所示的十字路口进行设计,路口A和路口C的车辆同时行驶,路口B和路口D的车辆同时行驶,所以虽然要控制4组信号灯,但其实它们可以俩俩合并,这样大大简化了设计。

由于我们采用自动控制方式,两个方向的灯按照顺序依次交替循环显示,每种灯亮的时间结合实际生活合理设定。

系统设有复位开关,可在任意时间内对系统进行复位。

图1 十字路口示意图由以上分析可知,该系统可视为一个状态机,而且共有8种状态,如表1所示。

表1 交通灯状态示意表由上表我们还可以得到状态转换图,如图2所示:图2 状态转移示意图该状态机共有两个输入信号rstn和clk,rstn为复位信号,当该信号为低电平时,状态机处于S0,且状态不发生改变。

当rstn为高电平时,这8个状态依次按时间顺序发生变化,每个状态保持多长时间由clk信号控制。

三、关键代码1.我们通过宏定义来设置每个状态保持的时间,这样既增强了代码的可读性,又方便以后的更改。

Verilog实验报告交通灯

Verilog实验报告交通灯

Verilog实验报告---第四次交通灯班级:集电0802班姓名:张鹏学号: 04086057序号: 16一、规范(1)具有开关功能:当reset=0时红绿灯关闭,使主支干道六个灯全灭;(2)具有四个功能:当reset=1且func=2’b00时,主干道和支路正常计数;且func=2’b01时,支干道一直绿灯,主干道一直红灯;且func=2’b10时,主干道一直绿灯,支干道一直红灯;且func=2’b11时,主干道和支干道一直黄灯闪;(3)计数器频率:运行频率2Hz计数器;(4)信号灯种类:红、黄、绿;(5)信号灯计执行时间关系:主干道:绿灯常亮+绿灯闪+黄灯=支干道:红灯常亮;此设计中:主干道:绿灯常亮=57s,T绿灯闪=3s,T黄灯亮=3s支干道:绿灯常亮=15s,T绿灯闪=3s,T黄灯亮=3s(6)信号灯到计时功能:信号灯预置后,开始执行2Hz计数器;(7)信号灯跳转功能:当各信号灯计时至T时在下一个时钟信号上升沿到来时自动转为下一状态;(8)信号灯各状态跳转关系:绿-黄-红-绿;二、输入输出定义reset,clk, func[1:0] ,green[1:0],red[1:0],yellow[1:0]信号名宽度输入/输出管脚描述reset 1 input L13 红绿灯总开关clk 1 input C9 freq:50MHz func 2 input N17/H18 控制红绿灯功能green[1] 1 output D11 主绿green[0] 1 output E11 支绿red[1] 1 output F11 主红red[0] 1 output F12 支红yellow[1] 1 output C11 主黄yellow[0] 1 output E12 支黄三、模块设计状态转移图:四、测试代码module frequency_divider_small(reset,clk,out); //重写一个小分频模块测试交通灯主模块功能input reset,clk;output out;reg [1:0] temp;reg out;always @ (posedge clk or negedge reset)if (!reset)temp<=2'b00;elsetemp<=(temp==2'b11)?2'b00:temp+2'b01;always @ (temp)out=(temp==2'b11);endmodulemodule test_traffic_light;reg reset,clk;reg [1:0] func;wire [1:0] green;wire [1:0] red;wire [1:0] yellow;traffic_lightsimulation(.reset(reset),.clk(clk),.func(func),.green(green),.red(red),.yellow(yellow));always #10 clk=~clk;initialbeginreset=0;clk=1;func=2'b00;#20 reset=1;#21000 func=2'b01;#10000 func=2'b10;#10000 func=2'b11;endendmodule波形:五、源代码module frequency_divider(reset,clk,out);//分频模块,把50MHz时钟分成半秒计时器input reset,clk;output out;reg [5:0] mol1,mol2;reg [6:0] mol3,mol4;reg out1,out2,out3,out;always @ (posedge clk or negedge reset)//把25000000分成40*40*125*125if(!reset)mol1<=6'd0;elsemol1<=(mol1==6'd39)?6'd0:mol1+6'd1;always @ (posedge clk or negedge reset)if(!reset)mol2<=6'd0;else if(out1)mol2<=(mol2==6'd39)?6'd0:mol2+6'd1;always @ (posedge clk or negedge reset)if(!reset)mol3<=7'd0;else if(out2)mol3<=(mol3==7'd124)?7'd0:mol3+7'd1;always @ (posedge clk or negedge reset)if(!reset)mol4<=7'd0;else if(out3)mol4<=(mol4==7'd124)?7'd0:mol4+7'd1;always @ (mol1 or mol2 or mol3 or mol4)beginout1=(mol1==6'd39);out2=((mol2==6'd39)&&out1);out3=((mol3==7'd124)&&out2);out=((mol4==7'd124)&&out3);endendmodulemodule traffic_light(reset,clk,func,green,red,yellow);//交通灯主模块input reset,clk;input [1:0] func;output [1:0] green,red,yellow;reg [1:0] green,red,yellow;reg [2:0] state;reg [6:0] cnt;wire in;parameter greentime1=6'd57;//主干道绿灯时间parameter greentime0=6'd27;//支干道绿灯时间parameter yellowtime=3'd3;//黄灯时间,绿灯闪时间frequency_divider fenpin(.reset(reset),.clk(clk),.out(in));//调用分频模块always @ (posedge clk or negedge reset)if(!reset)begincnt<=7'd0;state<=3'd1;green<=2'b00;red<=2'b00;yellow<=2'b00;endelseif(in)//分频器结果当主模块始能if(func==2'b00)//选择不同功能控制开关if(cnt==7'd0)case(state)//选择不同状态3'd1:begincnt<=greentime1<<1;state<=3'd2;green<=2'b10;red<=2'b01;yellow<=2'b00;end3'd2:begincnt<=yellowtime<<1;state<=3'd3;end3'd3:begincnt<=yellowtime<<1;state<=3'd4;green<=2'b00;red<=2'b01;yellow<=2'b10;end3'd4:begincnt<=greentime1<<1;state<=3'd5;green<=2'b01;red<=2'b10;yellow<=2'b00;end3'd5:begincnt<=yellowtime<<1;state<=3'd6;end3'd6:begincnt<=yellowtime<<1;state<=3'd1;green<=2'b00;red<=2'b10;yellow<=2'b01;endendcaseelsebegincnt<=cnt-7'd1;//倒计数,计数结束进入下一状态case(state)3'd3:green[1]<=cnt[0];//主干道绿灯闪3'd6:green[0]<=cnt[0];//支干道绿灯闪endcaseendelse if(func==2'b10)//主干道常绿,支干道常红begincnt<=0;state<=3'd1;green<=2'b10;red<=2'b01;yellow<=2'b00;endelse if(func==2'b01)//主干道常红,支干道常绿begincnt<=0;state<=3'd1;green<=2'b01;red<=2'b10;yellow<=2'b00;endelse if(func==2'b11)//主干道,支干道黄灯一直闪begincnt<=0;state<=3'd1;green<=2'b00;red<=2'b00;yellow[1]<=~yellow[1];yellow[0]<=~yellow[1];endendmodule。

毕业设计---基于Verilog的交通灯控制器的设计

毕业设计---基于Verilog的交通灯控制器的设计

课题:交通灯控制器的设计目录1. 设计内容与要求 (2)2. 交通灯控制系统的组成框图 (3)3. 交通灯控制电路的设计 (4)4. 交通灯控制电路设计的难点与解决方法 (5)5. 交通灯控制电路的Verilog语句 (6)5. 交通灯控制电路的程序和波形分析 (12)6. EPF10K10LC84-4芯片引脚分配图 (20)7. 实验小结 (21)一、 设计内容与要求① 设计一个十字路口交通信号灯的定时控制电路。

要求红、绿灯按一定的规律亮和灭,并在亮灯期间进行倒计时,并将运行时间用数码管显示出来。

②绿灯亮时,为该车道允许通行信号,红灯亮时,为该车道禁止通行信号。

要求主干道每次通行时间为99秒,支干道每次通行时间为30秒。

每次变换运行车道前绿灯闪烁,持续时间为5秒。

即车道要由主干道转换为支干道时,主干道在通行时间只剩下5秒钟时,绿灯闪烁显示,支干道仍为红灯,以便主干道上已过停车线的车继续通行,未过停车线的车停止通行。

同理,当车道由支干道转换为主干道时,支干道绿灯闪烁显示5秒钟,主干道仍为红灯。

③ 对红、绿灯的运行时间要能比较方便的进行重新设置。

④ 添加左转灯的控制,可自行到实际十字路口观看规律并实现。

对器件进行在系统编程和实验验证。

⑤用Verilog 语言对设计进行描述,设计一个测试方案,通过Muxplus 对设计进行仿真验证。

并能够下载到实验板上调试成功。

二、交通灯控制系统的组成框图交通信号灯控制原理图绿灯左拐灯红灯绿灯左拐灯红灯交通信号灯控制系统框图三、交通灯控制电路的设计交通灯控制器设计的重点是控制电路的设计,根据设计要求分析,控制电路的算法可用下图所示的ASM图描述。

各状态的详细说明如下:S0状态:主干道绿灯亮,支干道红灯亮,此时若主干道有车等待左拐,而且主干道绿灯已亮足规定的时间间隔Ts;在主干道绿灯亮了(Ts-5)s后,则开始闪亮,直至绿灯亮了Ts;控制器发出状态转换信号Tempm==0,输出从状态S0转换到S1。

基于VerilogHDL的通行时间可变的交通灯控制器

通行时间可变的交通灯控制器设计module tr1(ng,clk,reset,resets,emergency,lighta,lightb,seg,select); input ng,clk,reset,emergency,resets;output[6:0]seg;//显示用的output[3:0] lighta,lightb;//a是主干道,b是支干道output [3:0] select;//选择那一个管子进行显示reg clk1,clk2;//clk1要5HZ clk2要几千HZreg [3:0] select;reg tim1,tim2;//这是看你的等有没有变过颜色的控制信号reg [1:0] cont;reg[2:0]state1,state2,ste;两个控制颜色变化状态的信号。

reg[3:0]lighta,lightb;//a是主干道,b是支干道reg[3:0]num;//译码器是根据这个东西来译码的reg [35:0] fout;reg[6:0]seg;//显示reg[7:0] numa,numb;reg[7:0] red1,red2,green1,green2,yellow1,yellow2,left1,left2; always @(ng )if(!ng)begin //设置计数初值green1 <=8'b00110000;//30Sred1 <=8'b01010001;//51Syellow1<=8'b00000011;//3Sleft1 <=8'b00010101; //15Sgreen2 <=8'b00110000;//30Sred2 <=8'b01010001;//51Syellow2<=8'b00000011;//3Sleft2 <=8'b00010101; //15Sendalways @ (posedge clk)beginif (fout==36'b111111111111111111111111111111111111)fout<=0;else begin fout<=fout+1;clk1=fout[23];5HZclk2=fout[13];几千HZendendalways @(posedge clk1 )beginif(reset) //复位与特殊情况控制这是主干道的复位beginlighta<=4'b1000;//lighta是主干道的交通灯,lightb是支干道的交通灯,1000是红灯,0100是直行绿灯,0010是黄灯,0001是左转绿灯numa<=red1; //主干道的数码管从红灯开始记state1<=0;//这时候灯变化的控制信号为0endelse if(emergency)//紧急情况beginlighta<=4'b1000;//主干道红了numa<=red1;//计时也从红灯记endelse if(ng)//这下开始正常工作了begin //使能有效开始控制计数if(!tim1) //你有没有变过颜色啊?没有?那开始变颜色吧。

verilog交通灯设计

module jtd (zhi,clk,u,i); input zhi,clk;output [2:0]u,i;reg[2:0]u,i;reg d;always@(posedge clk) beginif(zhi)beginu[2:0]<=3'b100;i[2:0]<=3'b001;endelse begind<=d+1;if(d==30)u[2:0]<=3'b010; if(d==34)beginu[2:0]<=3'b001; i[2:0]<=3'b100; endif(d==64)beginu[2:0]<=3'b001; i[2:0]<=3'b010; endif(d==68)beginu[2:0]<=3'b100; i[2:0]<=3'b001; d<=0;endmodule jtd(zhi,u,i,clk,rst);input zhi,clk,rst;output [2:0]u,i;reg [2:0]u,i;reg[4:0]state;reg [5:0]d;initial d=0;parameter s0=5'b00001,s1=5'b00010,s2=5'b00100,s3=5'b01000,s4=5'b10000;always@(posedge clk)beginif(!rst) begin state<=s0;u[2:0]<=3'b100;i[2:0]<=3'b001;endelsebegincase(state)s4:begin u[2:0]<=3'b100;i[2:0]<=3'b001;if(zhi)begin state<=s0;end else state<=s4;ends0:begin u[2:0]<=3'b100;i[2:0]<=3'b001;d=d+1;if(d==30)begin state<=s1;d=0;end else state<=s0;ends1:begin u[2:0]<=3'b010;i[2:0]<=3'b001;d=d+1;if(d==4)begin state<=s2;d=0;end else state<=s1;ends2:begin u[2:0]<=3'b001;i[2:0]<=3'b100;d=d+1;if(d==30) begin state<=s3;d=0;end else state<=s2;ends3:begin u[2:0]<=3'b001;i[2:0]<=3'b010;d=d+1;if(d==4)begin state<=s4;d=0;end else state<=s3;enddefault: state<=s4;endcaseendendendmodule黄灯闪module jtde(zhi,u,i,clk,rst);input zhi,clk,rst;output [2:0]u,i;reg [2:0]u,i;reg[4:0]state;reg [6:0]d;initial d=0;parameter s0=5'b00001,s1=5'b00010,s2=5'b00100,s3=5'b01000,s4=5'b10000;always@(posedge clk)beginif(!rst) begin state<=s4;u[2:0]<=3'b100;i[2:0]<=3'b001;endelsebegincase(state)s4:begin u[2:0]<=3'b100;i[2:0]<=3'b001;if(zhi)begin state<=s0;end else state<=s4;ends0:begin u[2:0]<=3'b100;i[2:0]<=3'b001;d=d+1;if(d==30)begin state<=s1;d=0;end else state<=s0;ends1:begin d=d+1;if(d==1)begin u[2:0]<=3'b000;i[2:0]<=3'b001;state<=s1;endif(d==2)begin u[2:0]<=3'b010;i[2:0]<=3'b001;state<=s1;endif(d==3)begin u[2:0]<=3'b000;i[2:0]<=3'b001;state<=s1;endif(d==4)begin u[2:0]<=3'b010;i[2:0]<=3'b001;state<=s2;d=0;endends2:begin u[2:0]<=3'b001;i[2:0]<=3'b100;d=d+1;if(d==30) begin state<=s3;d=0;end else state<=s2;ends3:begin d=d+1;if(d==1)begin i[2:0]<=3'b000;u[2:0]<=3'b001;state<=s3;endif(d==2)begin i[2:0]<=3'b010;u[2:0]<=3'b001;state<=s3;endif(d==3)begin i[2:0]<=3'b000;u[2:0]<=3'b001;state<=s3;endif(d==4)begin i[2:0]<=3'b010;u[2:0]<=3'b001;state<=s4;d=0;endenddefault: state<=s4;endcaseendend黄灯闪且倒计时module mnb(zhi,u,i,clk,rst,ugx,usx,igx,isx);input zhi,clk,rst;output [2:0]u,i;output [3:0]ugx,usx,igx,isx;reg [2:0]u,i;reg[4:0]state;reg [4:0]ugx,usx,igx,isx;reg [6:0]d,e,f;initialbegin d<=0;e<=30;f<=34;endparameter s0=5'b00001,s1=5'b00010,s2=5'b00100,s3=5'b01000,s4=5'b10000;always@(posedge clk)beginif(!rst) begin state<=s4;u[2:0]<=3'b100;i[2:0]<=3'b001;endelsebegincase(state)s4:beginu[2:0]<=3'b100;i[2:0]<=3'b001;ugx<=0;usx<=0;igx<=0;isx<=0;if(zhi)beginstate<=s0;d<=0;e<=30;f<=35;end else state<=s4;ends0:beginu[2:0]<=3'b100;i[2:0]<=3'b001;ugx<=e%10;usx<=e/10;igx<=f%10;isx<=f/10;d<=d+1;e< =e-1;f<=f-1;if(d==30)begin state<=s1;d<=0;e<=4;f<=4;end else state<=s0;ends1:begin ugx<=e%10;usx<=e/10;igx<=f%10;isx<=f/10;e<=e-1;f<=f-1;if(d==0)begin u[2:0]<=3'b010;i[2:0]<=3'b001;d<=d+1;state<=s1;end if(d==1)begin u[2:0]<=3'b000;i[2:0]<=3'b001;d<=d+1;state<=s1;end if(d==2)begin u[2:0]<=3'b010;i[2:0]<=3'b001;d<=d+1;state<=s1;end if(d==3)beginu[2:0]<=3'b000;i[2:0]<=3'b001;state<=s2;d<=0;e<=35;f<=30;endends2:beginu[2:0]<=3'b001;i[2:0]<=3'b100;ugx<=e%10;usx<=e/10;igx<=f%10;isx<=f/10;d<=d+1;e< =e-1;f<=f-1;if(d==30) begin state<=s3;d<=0;e<=4;f<=4;end else state<=s2;ends3:begin ugx<=e%10;usx<=e/10;igx<=f%10;isx<=f/10;d<=d+1;e<=e-1;f<=f-1;if(d==1)begin i[2:0]<=3'b000;u[2:0]<=3'b001;state<=s3;endif(d==2)begin i[2:0]<=3'b010;u[2:0]<=3'b001;state<=s3;endif(d==3)begin i[2:0]<=3'b000;u[2:0]<=3'b001;state<=s3;endif(d==4)begin i[2:0]<=3'b010;u[2:0]<=3'b001;state<=s4;d<=0;endenddefault: state<=s4;endcaseendendendmodule黄灯闪。

VerilogHDL编写的交通灯

1. module trafficlight(clk,lx,lx_l,lx_r,ly,ly_l,ly_r,c,done,m);input clk,c;//始终和初始化控制output done;output [5:0]m;//倒计时寄存器output lx,lx_l,lx_r,ly,ly_l,ly_r;//指示灯(分别是X、Y方向的直行、左转和右转)reg lx,lx_l,lx_r,ly,ly_l,ly_r;reg [5:0]m;reg [1:0]state;//状态机reg done;parameters0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;//-------------------------------------------//状态模块always@(posedge clk)if(c)begin done<=1;state<=2'b00;endelsebegincase(state)s0:if(done)begin m<=6'd44;done<=0;endelse if(m>1) m<=m-1;elsebegin state<=s1;done<=1;m<=0;ends1:if(done)begin m<=6'd24;done<=0;endelse if(m>1) m<=m-1;elsebegin state<=s2;done<=1;m<=0;ends2:if(done)begin m<=6'd29;done<=0;endelse if(m>1) m<=m-1;elsebegin state<=s3;done<=1;m<=0;ends3:if(done)begin m<=6'd14;done<=0;endelse if(m>1) m<=m-1;elsebegin state<=s0;done<=1;m<=0;endendcaseend//-----------------------------------------//输出模块always@(posedge clk)begincase(state)s0:{lx,lx_l,lx_r,ly,ly_l,ly_r}<=6'b101001;s1:{lx,lx_l,lx_r,ly,ly_l,ly_r}<=6'b011001; s2:{lx,lx_l,lx_r,ly,ly_l,ly_r}<=6'b001101; s3:{lx,lx_l,lx_r,ly,ly_l,ly_r}<=6'b001011; endcaseend//-------------------------------------------- endmodule2.生成的状态机3.整体的图,四个状态都包括X方向由直行变左转,符合倒计时的要求。

交通灯控制系统 verilog

module traffic(en,clk,rst,num1,num2,light1,light2,out1,out2,out3,out4,in1,in2); input en,clk,rst,in1,in2; //en为使能端。

in1,in2控制绿灯和红灯亮时间output [7:0] num1,num2;output [2:0] light1,light2;output [6:0]out1,out2,out3,out4;//输出四个数码管reg [6:0]out1,out2,out3,out4;reg tim1,tim2;reg [1:0]state1,state2;reg [2:0]light1,light2;reg [7:0] num1,num2;reg [7:0] red1,red2,green1,green2,yellow1,yellow2;parameter s0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;//四个循环状态reg[25:0]count;reg div;always @(en )if(en)begin //设置计数初值if (!in1)begingreen1<=8'b00110000;red2<=8'b00110000;end//30H,即30秒elsebegingreen1<=8'b01100000;red2<=8'b01100000;end//60sif (!in2)beginred1<=8'b00100000;green2<=8'b00100000;end//20selsebegin red1<=8'b01000000;green2<=8'b01000000;end//40syellow1<=8'b00000101; yellow2<=8'b00000101;//05sendalways@(posedge clk)//分频if (count==25000000) begin div<=1;count<=count+1;endelse if(count==50000000)begin div<=0;count<=0;endelse count<=count+1;always @(posedge div)beginif(rst) //复位情况控制beginlight1<=3'b001;num1<=green1;endelse if(en)begin //使能有效开始控制计数if(!tim1) //开始控制begin //主干道交通灯点亮控制tim1<=1;case(state1)//状态机s0:begin num1<=green1;light1<=3'b001;state1<=s1;end s1:begin num1<=yellow1;light1<=3'b010;state1<=s2;end s2:begin num1<=red1;light1<=3'b100;state1<=s3;ends3:begin num1<=yellow1;light1<=3'b010;state1<=s0;end default:light1<=3'b100;endcaseendelsebegin //倒数计时if(num1>0)if(num1[3:0]==0)beginnum1[3:0]<=4'b1001;num1[7:4]<=num1[7:4]-1;//十位减1endelse num1[3:0]<=num1[3:0]-1; //个位减1 if(num1==1) tim1<=0;endendelsebeginlight1<=3'b010;num1=2'b00;tim1<=0;endendalways @(posedge div ) //从干道beginif(rst) //复位情况控制beginlight2<=3'b100;num2<=red2;endelse if(en)beginif(!tim2)begintim2<=1;case(state1)s0:begin num2<=red2;light2<=3'b100;state2<=s1;ends1:begin num2<=yellow1;light2<=3'b010;state2<=s2;ends2:begin num2<=green2;light2<=3'b001;state2<=s3;ends3:begin num2<=yellow2;light2<=3'b010;state2<=s0;enddefault:light2<=3'b100;endcaseendelsebegin //倒数计时if(num2>0)if(num2[3:0]==0)beginnum2[3:0]<=4'b1001;num2[7:4]<=num2[7:4]-1;endelse num2[3:0]<=num2[3:0]-1;if(num2==1) tim2<=0;endendelsebegintim2<=0;state2<=2'b00;light2<=3'b010;endendalways @(posedge clk)begin //数码管译码显示case(num1[3:0])4'b0000: out1<=~7'b0111111; //0 ,3F4'b0001: out1<=~7'b0000110; //1 ,064'b0010: out1<=~7'b1011011; //2 ,5B4'b0011: out1<=~7'b1001111; //3 ,4F4'b0100: out1<=~7'b1100110; //4 ,664'b0101: out1<=~7'b1101101; //5 ,6D4'b0110: out1<=~7'b1111101; //6 ,7D 4'b0111: out1<=~7'b0000111; //7 ,07 4'b1000: out1<=~7'b1111111; //8, 7F 4'b1001: out1<=~7'b1101111; //9, 6F default: out1<=~7'b0111111; //0 ,3F endcaseendalways @(posedge clk)begin //数码管译码显示case(num1[7:4])4'b0000: out2<=~7'b0111111; //0 ,3F 4'b0001: out2<=~7'b0000110; //1 ,06 4'b0010: out2<=~7'b1011011; //2 ,5B 4'b0011: out2<=~7'b1001111; //3 ,4F 4'b0100: out2<=~7'b1100110; //4 ,66 4'b0101: out2<=~7'b1101101; //5 ,6D 4'b0110: out2<=~7'b1111101; //6 ,7D 4'b0111: out2<=~7'b0000111; //7 ,07 4'b1000: out2<=~7'b1111111; //8, 7F 4'b1001: out2<=~7'b1101111; //9, 6F default: out2<=~7'b0111111; //0 ,3F endcaseendalways @(posedge clk)begin //数码管译码显示case(num2[3:0])4'b0000: out3<=~7'b0111111; //0 ,3F 4'b0001: out3<=~7'b0000110; //1 ,06 4'b0010: out3<=~7'b1011011; //2 ,5B 4'b0011: out3<=~7'b1001111; //3 ,4F 4'b0100: out3<=~7'b1100110; //4 ,66 4'b0101: out3<=~7'b1101101; //5 ,6D 4'b0110: out3<=~7'b1111101; //6 ,7D 4'b0111: out3<=~7'b0000111; //7 ,07 4'b1000: out3<=~7'b1111111; //8, 7F 4'b1001: out3<=~7'b1101111; //9, 6F default: out3<=~7'b0111111; //0 ,3F endcaseendalways @(posedge clk)begin //数码管译码显示case(num2[7:4])4'b0000: out4<=~7'b0111111; //0 ,3F 4'b0001: out4<=~7'b0000110; //1 ,06 4'b0010: out4<=~7'b1011011; //2 ,5B 4'b0011: out4<=~7'b1001111; //3 ,4F 4'b0100: out4<=~7'b1100110; //4 ,66 4'b0101: out4<=~7'b1101101; //5 ,6D 4'b0110: out4<=~7'b1111101; //6 ,7D 4'b0111: out4<=~7'b0000111; //7 ,07 4'b1000: out4<=~7'b1111111; //8, 7F 4'b1001: out4<=~7'b1101111; //9, 6F default: out4<=~7'b0111111; //0 ,3F endcaseendendmodule。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西北工业大学《FPGA》实验报告
2013 年11 月
为129。

通过比较器,每个灯的条件不同,当129>=k>=70时绿灯亮,69>=k>=60黄灯闪烁,59>=k>=0红灯亮。

对于数码管输出,当129>=k>=70时,数码管个位输出=(k-70)%10,十位输出为(k-70-个位)/10;当69>=k>=60数码管个位输出=(k-60)%10,十位输出为(k-60-个位)/10,当59>=k>=0时,数码管个位输出=k%10十位输出为(k-个位)/10。

分频模块:
分频模块用以把输入的50MHz的信号转换为1Hz信号,便于其后的交通灯控制及数码管输出。

译码模块:
考虑到数字显示需要两个七段译码器,且在数字系统中,数字的表示都是采用二进制,因为两个管子分别输入,所以需要把循环变量k转换为有用的十位和各位输出。

为了方便,把循环变量k减去各状态的基数值后,用数学方法取十位和各位分别做输入。

如绿灯时,129>=k>=70时,数码管个位输出=(k-70)%10,十位输出为(k-70-个位)/10。

七段译码器的设计原理如图:
2.总体设计框图及说明:
图一
输入:clk 全局时钟信号,50MHz rst 全局复位端,高电平有效 输出:ctrl_1s 倒计时个位上数字 ctrl_10s 倒计时十位上数字 blu,yel,red 各个灯状态
框图说明:
状态机的输入,只有时钟信号clk 和复位信号reset.输出为数码管十位和个位的二进制显示状态以及三个灯的颜色显示(blu,yel,red,分别是绿黄红灯,“1”表示灯亮,“0”表示灭)。

输入clk 的频率很大,需要通过计数器对其进行分频。

首先计数产生一个1Hz 的输出,通过该输出再次循环计数,产生周期为130的计数变量,从而控制各个灯的亮灭。

而控制黄灯闪烁的分频,为方便起见,仍以1s 为单位,每秒钟改变一次。

用if 嵌套语句来控制三灯亮与灭,同时间接地进行倒计时的过程,输出个位和十位上的数,
red
Clk1 1Hz
循环变量k
129~0
yel
控制
Clk
50Hz
rst
blu
图四
译码显示模块:
输入端口:
din_1s 显示器个位数据,由控制模块输入 din_10s 显示器十位数据,由控制模块输入 输出端口:
led_data_1s 显示器个位数据的译码 led_data_10s 显示器十位数据的译码 时序说明:
此模块接受主模块输出的个位和十位的数值控制,并间接受(系统时钟)clk(50MHz) 和
clk 50MHz
计数器显示计数
rst J=49999999
clk=~clk
(全局复位)rst,及分频时钟clk1的控制,均为上升沿触发,当rst 为高电平时,电路复位,重新开始工作。

当rst为低电平时,电路正常。

5.仿真及综合结果
表1 仿真结果信号解释说明
信号解释备注
clk 系统时钟, 50MHz 为了方便,这里取2ns
blu,yel,red 最终三灯状态分别绿红灯,
“1”为亮“0”为灭
k 循环计数变量用以状态判断控制
led10 倒计时十位七段译码数码管十位显示
led1 倒计时个位七段译码数码管个位显示
out1 倒计时个位上的数字控制模块的输出
out10 倒计时十位上的数字控制模块的输出
rst 系统控制变量高电平有效
上图中blu,yel,red,三个信号反映的绿黄红交通灯的状态,其中包括绿灯亮60秒,黄灯以2HZ 为周期闪烁,红灯亮60s,总周期为130s。

上图为循环控制变量的值随分频后信号从129到0的循环计数。

综合结果:
顶层及控制,分频模块的综合RTL级电路如图:
译码显示模块的综合如下:。

相关文档
最新文档