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课程设计-交通灯

课程论文论文题目基于DE2的交通灯设计完成时间课程名称 Verilog语言设计任课老师专业年级1.交通信号控制器设计要求与思路1.1设计背景FPGA是一种用户根据各自需要而自行构造逻辑功能的数字集成电路,其种类很多,内部结构也不同,但共同的特点是体积小、使用方便。
本文介绍了用VerilogHDL语言设计交通灯控制器的方法,并在QuartusII系统对FPGA芯片进行编译下载,由于生成的是集成化的数字电路,没有传统设计中的接线问题,所以故障率低、可靠性高,而且体积非常小。
本文通过EDA设计,利用VerilogHDL语言模拟仿真交通灯控制电路。
1.2设计要求根据交通灯控制器要实现的功能,考虑用两个并行执行的always语句来分别控制A方向和B方向的3盏灯。
这两个always语句使用同一个时钟信号,以进行同步,也就是说,两个进程的敏感信号是同一个。
每个always语句控制一个方向的3种灯按如下顺序点亮,并往复循环:绿灯----黄灯----红灯,每种灯亮的时间采用一个减法计数器进行计数,计数器用同步预置数法设计,这样只需改变预置数据,就能改变计数器的模,因此每个方向只要一个计数器进行预置数就可以。
为便于显示灯亮的时间,计数器的输出均采用BCD码,显示由4个数码管来完成,A方向和B方向各用两个数码管。
设定A方向红灯、黄灯、绿灯亮的时间分别为:35s、5s、35s,B方向的红灯、黄灯、绿灯亮的时间分别为:35s、5s、35s。
假如要改变这些时间,只需要改变计数器的预置数即可。
1.3设计思路两个方向各种灯亮的时间能够进行设置和修改,此外,假设B方向是主干道,车流量大,因此B方向通行的时间应该比A方向长。
交通灯控制器的状态转换表见下表。
表中,1表示灯亮,0表示灯不亮。
A方向和B方向的红黄绿分别用R1、Y1、G1、R2、Y2、G2来表示。
交通灯控制器状态转换表从状态表中可以看出,每个方向3盏灯依次按如下顺序点亮,并不断循环:绿灯----黄灯----红灯,并且每个方向红灯亮的时间应该与另一个方向绿灯、黄灯亮的时间相等。
基于VerilogHDL的交通灯控制器设计

目录第一章设计原理 (1)1.1设计要求 (1)1.2设计思路和原理 (1)1.3实现方法 (1)第二章Verilog 程序设计 (2)2.1整体设计 (2)2.2 具体设计 (3)第三章仿真 (7)3.1 波形仿真 (7)第四章设计总结 (9)4.1 总结 (9)4.2参考资料 (9)程序清单 (10)交通灯控制器设计第一章 设计原理1.1设计要求设计一个交通控制器,用LED 显示灯表示交通状态,并以7段数码显示器显示当前状态剩余秒数 主干道绿灯亮时,支干道红灯亮;反之亦然,二者交替允许通行,主干道每次放行35s ,支干道每次放行25s 。
每次由绿灯变为红灯的过程中,亮光的黄灯作为过渡,黄灯的时间为5s 。
能进行特殊状态显示,特殊状态时东西、南北路口均显示红灯状态。
用LED 灯显示倒计时,并且能实现总体清零功能,计数器由初始状态开始计数,对应状态的显示灯亮。
1.2设计思路和原理本次设计是针对十字路口,进行南北和东西直行情况下交通灯控制。
设定东西方向为主干道方向,根据交通灯的亮的规则,在初始状态下四个方向的都为红灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续35S 后,主干道和支干道上的黄灯都亮启,持续5S 后,主干道上红灯亮启,支干道上绿灯亮启持续25S ,之后主干道和支干道上的黄灯都亮启5s ,一个循环完成。
循环往复的直行这个过程。
其过程如下图所示:0s30s25s主干道方向支干道方向图1.交通灯点亮时间控制说明1.3实现方法本次采用文本编辑法,即利用Verilog 语言描述交通控制器,通过状态机计数法,实现设计所要求的交通灯控制及时间显示。
设计中用两组红黄绿LED 模拟两个方向上的交通灯,用4个7段数码管分别显示两个方向上的交通灯剩余时间,控制时钟由试验箱上频率信号提供。
第二章 Verilog 程序设计2.1整体设计根据上章设计原理,交通灯控制的关键是各个状态之间的转换和进行适当的时间延时,根据状态机的设计规范,本次设计了三个状态之间的循环转化,其真值表及状态转化图如下所示:状状状状状状状状状状状状00状状10状状11状状01状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状状001100010010001010100010图2.交通灯控制状态转化说明:该状态图为交通灯在正常情况下的状态转化图,进入控制后,状态00时主干道绿灯及支干道红灯亮起,进入状态01后两路黄灯亮起,状态11时主干道红灯及支干道绿灯亮起。
交通信号灯控制器的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实验报告---第四次交通灯班级:集电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的交通灯控制器的设计

课题:交通灯控制器的设计目录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方向由直行变左转,符合倒计时的要求。
数电课程设计---交通信号灯控制电路

数电课程设计---交通信号灯控制电路西北工业大学课程设计报告题目: 交通信号灯控制电路学院:航海学院班级:03051001班学生(学号):学生(学号):日期:2013 年 1 月摘要Verilog HDL 作为一种规范的硬件描述语言,被广泛应用于数字电子系统设计。
它允许设计者进行各种级别的逻辑设计,也可以进行数字逻辑系统的仿真验证、时序分析、逻辑综合操作。
本文介绍了应用Verilog HDL语言自顶向下的设计方法设计交通灯控制系统,使其实现道路交通的正常运转,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点。
通过Quartus Ⅱ完成了程序的编写、编译与仿真,生成顶层文件后下载到芯片CycloneⅢ EP3C16F484C6芯片上,在DE0开发板上进行验证。
验证结果表明,该设计可以完成交通灯控制的相关要求。
关键词:交通信号灯控制 Verilog HDL Quartus Ⅱ DE0目录一、课程设计目的二、设计任务与要求三、方案设计四、模块设计五、程序代码六、开发板验证七、遇到问题与解决办法八、总结九、参考文献十、附录(管脚对应关系)一、课程设计目的设计目的:初步了解掌握硬件描述语言,体会自顶向下的设计思想,锻炼查阅资料与知识应用的能力。
二、设计任务与要求设计任务:设计一个十字路口的交通灯控制电路,要求甲车道和乙车道两条交叉道路上的车辆交替运行设计要求:1、南北和东西方向各有一组绿、黄、红灯用于指挥交通,绿灯、黄灯和红灯的持续时间分别为20秒、5秒和25秒;2、当有特殊情况(如消防车、救护车等)时,两个方向均为红灯亮,计时停止,当特殊情况结束后,控制器恢复原来状态,继续正常运行;3、用两组数码管,以倒计时方式显示两个方向允许通行的时间。
三、方案设计任务分析:东西(A车道)和南北(B车道)方向各有一组绿、黄、红灯用于指挥交通(如图1、2),绿灯、黄灯和红灯的持续时间分别为 25秒、5 秒和 30 秒。
Verilog语言实现设计交通灯控制器

Verilog语言实现设计交通灯控制器实验模块组成:(计数器+控制器)可以分开实现,最好一起实现避免接口对接时出错译码器实验要求:1.在十字路口两个方向各设一组红、绿、黄灯,显示顺序为:南北方向是绿、黄、红灯;东西方向是红、绿、黄灯。
2.要求红、绿、黄灯的持续时间分别为:10s、7s、3s,东西、南北方向各用一个数码管显示倒计时时间。
3.当任意方向出现特殊情况时,应优先放行,即使各方向均亮红灯,倒计时停止,且显示数字闪烁。
经过规定时间之后,恢复正常运行状态。
//计数器+控制器module ZTJ(clk,s,count1,count2,led);parameter s0=6’b010100,s1=6’b001100,s2=6'b100010,s3=6'b100001,s4=6'b100100;input clk,s;output[3:0]count1;output[3:0]count2;output[5:0]led;reg[3:0]count1;reg[3:0]count2;reg[5:0]led;reg[5:0]st;reg[5:0]jicun;reg[3:0]i;always @(posedge clk)if(s==0 &led==6’b000000)beginled<=s0;st<=s0;count1<=4'b0110;count2〈=4’b1001;endelse if(s==0 & led!=6’b000000)begincase(st)s0:if(count1!=4'b0000) begin led<=s0;count1〈=count1—1;count2<=count2-1;end else begin count1<=4'b0010;st<=s1;ends1:if(count1!=4'b0000)begin led〈=s1;count1〈=count1—1;count2<=count2-1;end else begin count1〈=4’b1001;count2<=4'b0110;st<=s2;ends2:if(count2!=4’b0000) begin led〈=s2;count1<=count1-1;count2〈=count2-1;end else begin count2〈=4’b0010;st〈=s3;ends3:if(count2!=4'b0000)begin led<=s3;count1〈=count1—1;count2〈=count2—1;end else begin count1<=4’b0110;count2〈=4’b1001;st<=s0;enddefault:led<=s4;endcaseendelsebeginjicun<=led;led〈=s4;count1<=count1;count2〈=count2;i<=i+1;if(i==4’b1001)led〈=jicun;endendmodule//译码器module DECL7S(A,LED7S);input [3:0]A;output [6:0]LED7S;reg [6:0]LED7S;always@(A)begincase(A)4’b0000:LED7S<=7'b0111111;4’b0001: LED7S<=7'b0000110;4'b0010: LED7S<=7'b1011011;4'b0011:LED7S〈=7'b1001111;4'b0100:LED7S<=7’b1100110;4’b0101:LED7S<=7’b1101101;4'b0110: LED7S<=7’b1111101;4'b0111:LED7S<=7'b0000111;4’b1000:LED7S<=7'b1111111;4’b1001: LED7S<=7'b1101111;4'b1010: LED7S<=7’b1110111;4’b1011:LED7S〈=7'b1111100;4’b1100: LED7S〈=7'b0111001;4'b1101:LED7S<=7’b1011110;4'b1110: LED7S<=7'b1111001;4’b1111:LED7S〈=7’b1110001;default:LED7S〈=7'b0111111;endcaseendendmodule。
智能交通灯控制器的设计(verilog)

智能交通灯控制器的设计1、实验目的及要求实验目的:通过交通灯的设计与仿真综合,体会复杂时序的实现方法,学会用框图表示程序的设计思想,掌握中小规模集成电路的系统综合设计方法。
实验要求:设计一个交通灯信号控制电路。
具体要求为:输入为50MHz的时钟和复位信号,输出为红、绿、黄三个信号(高电平为亮)。
复位信号(高电平)有效,红、绿、黄灯灭;接着进行如下循环:绿灯亮1分钟,黄灯闪烁10秒,红灯亮1分钟。
在此基础上再加两个数码管,对倒计时的数显示。
2、实验设备(环境)及要求实验EDA工具为:Synplify Pro 9.6.2和ModelSim SE 6.2b。
3、实验内容与步骤3.1设计思路概述总体上分为三个大模块,即:顶层模块、控制模块、译码模块(包括显示模块)。
他们各自的作用分别如下:顶层模块:此模块只做例化,即对底层的控制模块和译码模块进行例化,而不做逻辑设计。
控制模块:此模块是本程序的主体,主要是控制各个灯颜色(此模块并不控制黄灯的闪烁)的转换,以及倒计时时间输出。
首先要对时钟进行分频。
由于系统时钟频率比较大,因此首先分频产生时钟,用于下面的电路的控制;然后是各种颜色之间的转换,在此在添加一个使能端enable ,当使能端enable为0的时候,就开始进行状态循环以及倒计时,然后enable就立即变为1;状态用light_status(分别为0、1、2)表示,开始的时候,如果状态light_status为0,表示此时显示的是绿灯,便把绿灯亮的时间(60s)给统计灯亮时间的变量light_long,并且把显示灯亮的变量light_select赋值100(高电平表示亮),最后把状态标志位light_status赋1,但是此时并不能转向下一个状态(黄),因为绿灯亮的时间还没有控制,接下来会转到倒计时处。
然后,我们这里用了BCD码表示倒计时时间。
灯亮或闪烁时间(绿、黄、红分别为60s、10s、60s)用BCD码表示(分别为60h、10h、60h),倒计时的时候个位和十位分别是BCD码的高四位和低四位,首先是低四位倒数,当倒数到0时,给它重新赋值为9,且高四位减1,如此循环,直到这个数减到0,此时表示某一个灯亮的时间到,接着进行下一个状态,为了能使进入下一个状态,必须在时间减到0的时候,给使能端enable 赋值0;由于用的BCD码,高四位和低四位就分别是我们要在译码模块的要用数码管显示的十位和个位。
基于verlilog hdl的交通信号灯电路设计

基于Verilog HDL的交通信号灯电路设计1. 引言交通信号灯是城市道路交通管理中不可或缺的一部分,它通过不同颜色的灯光来指示车辆和行人何时停止和通行。
本文将介绍基于Verilog HDL的交通信号灯电路设计。
2. 设计目标本次设计的目标是实现一个简单的交通信号灯电路,包括红、黄、绿三种状态。
具体要求如下:•红灯亮时,其他两个灯应熄灭。
•黄灯亮时,其他两个灯应熄灭。
•绿灯亮时,其他两个灯应熄灭。
•红、黄、绿三个状态按照固定时间间隔循环切换。
3. 电路设计3.1 总体结构本次设计采用有限状态机(FSM)来实现交通信号灯电路。
有限状态机是一种数学模型,可以描述系统在不同状态之间的转移和输出。
我们将使用Verilog HDL来描述并实现这个有限状态机。
3.2 状态定义根据设计目标,我们可以定义三种状态:红、黄、绿。
我们可以用二进制数来表示这三种状态,比如红色为00,黄色为01,绿色为10。
我们可以使用两个输出信号来表示当前状态:red和green。
3.3 状态转移根据设计目标,交通信号灯应该按照固定时间间隔循环切换状态。
我们可以使用一个计数器来实现这个功能。
当计数器的值达到一定阈值时,状态应该切换到下一个状态。
具体的状态转移如下:•当前状态为红色时(00),计数器的值递增。
–当计数器的值达到阈值时,切换到黄色状态(01),并重置计数器。
•当前状态为黄色时(01),计数器的值递增。
–当计数器的值达到阈值时,切换到绿色状态(10),并重置计数器。
•当前状态为绿色时(10),计数器的值递增。
–当计数器的值达到阈值时,切换到红色状态(00),并重置计数器。
3.4 Verilog HDL代码实现以下是基于Verilog HDL实现交通信号灯电路的代码:module traffic_light(input wire clk,output reg red,output reg yellow,output reg green);reg [1:0] state;reg [3:0] counter;parameter THRESHOLD = 4'b1010; // 阈值always @(posedge clk) begincase(state)2'b00: begin// 红灯状态if(counter == THRESHOLD) beginstate <= 2'b01; // 切换到黄灯状态counter <= 0;end else begincounter <= counter + 1;endend2'b01: begin// 黄灯状态if(counter == THRESHOLD) beginstate <= 2'b10; // 切换到绿灯状态counter <= 0;end else begincounter <= counter + 1;endend2'b10: begin// 绿灯状态if(counter == THRESHOLD) beginstate <= 2'b00; // 切换到红灯状态counter <= 0;end else begincounter <= counter + 1;endendendcaseendalways @(state) begincase(state)2'b00: begin// 红灯亮,其他两个灯熄灭red <= 1;yellow <= 0;green <= 0;end2'b01: begin// 黄灯亮,其他两个灯熄灭red <= 0;yellow <= 1;green <= 0;end2'b10: begin// 绿灯亮,其他两个灯熄灭red <= 0;yellow <= 0;green <= 1;endendcaseendendmodule4. 总结本文介绍了基于Verilog HDL的交通信号灯电路设计。
基于verilog HDL数字系统设计--交通灯

交通灯控制器-------数字系统设计文档姓名:学号:一.课题简介:我在本课程中所选择的课题是用Verilog HDL 实现的交通灯控制器。
该交通灯控制器处在一个城乡结合处的十字路口,这个十字路口分为主干道和乡村公路,由于主干道的车流量远大于乡村公路的车流量,所以这个交通灯控制器不同于常见的交通灯控制器。
这个交通控制器的功能有如下几点:1.当乡村公路无车时,始终保持乡村公路红灯亮,主干道绿灯亮。
2.当乡村公路有车时,而主干道通车时间已经超过它的最短通车时间时,禁止主干道通行,让乡村公路通行。
主干道最短通车时间为25s 。
3.当乡村公路和主干道都有车时,按主干道通车25s,乡村公路通车16s交替进行。
4.不论主干道情况如何,乡村公路通车最长时间为16s。
5.在每次由绿灯亮变成红灯亮的转换过程中间,要亮5s时间的黄灯作为过渡。
6.用开关代替传感器作为检测车辆是否到来的信号。
用红、绿、黄三种颜色的发光二极管作交通灯。
要求显示时间,倒计时。
二.控制框图和设计流程图:1.这个交通灯控制器由三个主要部分组成---核心控制器以及、译码器、分频器。
2.流程图的内容同上面交通灯的功能,这里不再多做解释。
三.各部分组件的具体实现和分析:1.核心控制器实现基本功能:(1)它的输入端有4个输入信号—C、RST、ST、CLK。
C信号是一个检测信号,检测乡村公路是否有车,C=0示无车,这种情况下乡村公路一直亮红灯,主干道一直亮红灯,并且两个计数器都同步30秒重复计数,直到C=1即乡村公路有车是才跳变到其他情况。
RST信号是复位信号,当RST=0时,这个交通灯控制器才能正常工作。
当RST=1时,所有计数器都立刻赋初值,并且乡村公路和主干道都亮红灯,表示交通灯控制器出了故障,为防止意外发生,禁止通行。
ST信号表示使能信号,当ST=1时,交通灯控制器才能正常工作。
ST=0时,所有计数器都停止计数,并且乡村公路和主干道都亮红灯,表示交通灯控制器出了故障,为防止意外发生,禁止通行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
个位)/10;当 69>=k>=60 数码管个位输出=(k-60)%10,十位输出为(k-60-个位)/10,当 59>=k>=0 时,数码管个位输出=k%10 十位输出为(k-个位)/10。 分频模块:
采用同步时序逻辑。包括一个循环计数器,三个比较器,always 控制。
通过分频后的 CLK1 新号(1Hz),进行对一个循环变量“k”的周期为 130 的循环,进 而控制三个灯的控制;具体循环为:clk1 每进行一次跳变,k 值减 1;当 K=0 时,重新复值
文案大全
实用文档
为 129。 通 过 比 较 器 , 每 个 灯 的 条 件 不 同 , 当 129>=k>=70 时 绿 灯 亮 ,69>=k>=60 黄 灯 闪
//**************************************************** //此为控制部分 //**************??************************** always @(posedge clk1) if(!rst) //??res???1??????? begin
文案大全
实用文档
直接用两个七段译码显示倒计时数。 Rst 信号是清零用的,为“1”时,三个信号灯及循环变量 k 复位置“0”。
流程图
开始
输入 50MHz
clk1:1Hz
循环变量 k 计数
70≤k≤ 129
yel=~yel
60 ≤ k ≤69
0≤k≤ 59
图四
red=1 显示输出
blu=1
3.时序说明:
wire [6:0] led10; reg[3:0] out10,out1; reg[5:0] j; reg[7:0] k; //j,k reg clk1; // initial begin k='d129; blu<=0;
文案大全
门级
实用文档
yel<=0;
red<=0;
//j=0;
//clk1<=0;
二、实验设备(环境)及要求
实验 EDA 工具为: 预装了 Synplify Pro 9.6.2 和 ModelSim SE 6.2b 的 PC 机。
三、实验内容与步骤
1.设计思路概述
总体上分为三个大模块,即:顶层模块、分频模块、控制模块、译码显示模块。作用如下: 顶层及控制模块: 此模块做例化,和控制,是本程序的主体,对底层的分频模块和译码显示模块进行例化,并 且做控制设计。控制设计如下:
分频模块:
输入 50MHz 的信号,rst 为“1”时,计数器 j 置“0”,并在以后每经历一个系统时钟周期 时加 1,知道 k=49999999 时,clk1=~clk1,同时 k=0.到此分频完成。 (在实际代码编写中,为了代码的精简,此模块已经集成入顶层及控制模块)
文案大全
实用文档
clk 50MHz
解释
备注
系统时钟, 50MHz
为了方便,这里取 2ns
最终三灯状态
分别绿红灯,
“1”为亮“0”为灭
循环计数变量
用以状态判断控制
倒计时十位七段译码
数码管十位显示
倒计时个位七段译码
数码管个位显示
倒计时个位上的数字
控制模块的输出
倒计时十位上的数字
控制模块的输出
系统控制变量
高电平有效
文案大全
实用文档
上图中 blu,yel,red,三个信号反映的绿黄红交通灯的状态,其中包括绿灯亮 60 秒,黄灯以 2HZ 为周期闪烁,红灯亮 60s,总周期为 130s。 上图为循环控制变量的值随分频后信号从 129 到 0 的循环计数。
always@(din_1s) begin case(din_1s) 0 : led_data_1s = 7'b0001000;
文案大全
//个位输入 // 十位输入 // 数码管个位输出 // 数码管十位输出
实用文档
1 : led_data_1s = 7'b1101101; 2 : led_data_1s = 7'b0100010; 3 : led_data_1s = 7'b0100100; 4 : led_data_1s = 7'b1000101; 5 : led_data_1s = 7'b0010100; 6 : led_data_1s = 7'b0010000; 7 : led_data_1s = 7'b0101101; 8 : led_data_1s = 7'b0000000; 9 : led_data_1s = 7'b0000100; default : led_data_1s = 7'b1111111; endcase end always@(din_10s) begin case(din_10s) 0 : led_data_10s = 7'b0001000; 1 : led_data_10s = 7'b1101101; 2 : led_data_10s = 7'b0100010; 3 : led_data_10s = 7'b0100100; 4 : led_data_10s = 7'b1000101; 5 : led_data_10s = 7'b0010100; 6 : led_data_10s = 7'b0010000; 7 : led_data_10s = 7'b0101101; 8 : led_data_10s = 7'b0000000; 9 : led_data_10s = 7'b0000100; default : led_data_10s = 7'b1111111; endcase end endmodule
显示状态以及三个灯的颜色显示(blu,yel,red,分别是绿黄红灯,“1”表示灯亮,“0”表示灭)。 输入 clk 的频率很大,需要通过计数器对其进行分频。首先计数产生一个 1Hz 的输出,通过 该输出再次循环计数,产生周期为 130 的计数变量,从而控制各个灯的亮灭。而控制黄灯闪 烁的分频,为方便起见,仍以 1s 为单位,每秒钟改变一次。 用 if 嵌套语句来控制三灯亮与灭,同时间接地进行倒计时的过程,输出个位和十位上的数,
分频模块用以把输入的 50MHz 的信号转换为 1Hz 信号,便于其后的交通灯控制及数码 管输出。 译码模块:
考虑到数字显示需要两个七段译码器,且在数字系统中,数字的表示都是采用二进制, 因为两个管子分别输入,所以需要把循环变量 k 转换为有用的十位和各位输出。 为了方便,把循环变量 k 减去各状态的基数值后,用数学方法取十位和各位分别做输入。 如绿灯时,129>=k>=70 时,数码管个位输出=(k-70)%10,十位输出为(k-70-个位)/10。 七段译码器的设计原理如图:
实用文档
西北工业大学
《FPGA》实验报告
学 院: 学 号: 姓 名: 专 业: 实验时间: 实验地点: 指导教师:
软件与微电子学院 2011303596 杨清山 微电子学 2013/11/11 毅字楼 335 韩兵
西北工业大学
2013 年 11 月
文案大全
实用文档
大作业 设计一个交通灯信号控制电路
end
//****************************************** //这是分频部分功能实现
//**************??**************************
always@(posedge clk or posedge rst)
begin
if(rst)
else red<=1; //yel<=0; out1=k%10; out10=(k-out1)/10;
end else
文案大全
实用文档
begin blu<=0; yel<=0; red<=0;
end decode d(.din_1s(out1),
.din_10s(out10), .led_data_1s(led1), .led_data_10s(led10));
计数器显示计数
rst
译码显示模块:
图四
J=4999 9999
clk=~clk
输入端口:
din_1s
显示器个位数据,由控制模块输入
din_10s
显示器十位数据,由控制模块输入
输出端口:
led_data_1s
显示器个位数据的译码
led_data_10s
显示器十位数据的译码
时序说明:
此模块接受主模块输出的个位和十位的数值控制,并间接受(系统时钟)clk(50MHz) 和
输出:led1
led10
全局时钟信号,50MHz 全局复位端,高电平有效 个位七段译码 十位七段译码
时序说明:加上时钟信号之后,首先用 reset 清零,然后分频模块会分频产生分频时钟 clk1,根据分频时钟的高与低,进而进行变量循环,然后会控制 3 个状态之间的跳转,译码 显示模块会同步通过数码管来显示倒计时数;灯控信号 blu,yel,red 同时输出对交通灯的控制。
综合结果:
顶层及控制,分频模块的综合 RTL 级电路如图:
译码显示模块的综合如下:
文案大全
实用文档
RTL 级
6.代码及注释
此为顶层及控制模块代码: `include "./decode.v" module bulb(clk,rst,red,blu,yel,led1,led10);