通过Verilog实现交通灯设计实验报告

合集下载

交通灯实验报告

交通灯实验报告

基于FPGA 实现的交通灯控制器一、实验室名称通信实验室(实训楼二楼)二、实训内容本实验为Verilog HDL 的程序设计仿真,通过实验掌握状态机,时序CLK 的控制模块,及时序同步的控制方式。

实验要求:1.LED 灯显示交通灯状态。

2.7段数码管显示当前状态剩余时间。

状态要求:1.主干道绿灯亮35s 支道绿灯亮25s 。

2.当主干道绿灯亮时,支道亮红灯。

3.由绿灯转红灯时,黄灯亮5s 。

3.时钟为1KHz 。

能实现倒计时显示。

4.由初始状态开始计数,对应状态指示。

三、实验原理3.1设计思路和原理本次设计是针对十字路口,进行南北和东西直行情况下交通灯控制。

设定东西方向为主干道方向,根据交通灯的亮的规则,在初始状态下四个方向的都为红灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续35S 后,主干道和支干道上的黄灯都亮启,持续5S 后,主干道上红灯亮启,支干道上绿灯亮启持续25S ,之后主干道和支干道上的黄灯都亮启5s ,一个循环完成。

循环往复的直行这个过程。

其过程如下图所示:状态主干道支干道秒数(S )1绿灯红灯35 2黄灯红灯 5 3红灯绿灯25 4红灯黄灯 5状态1:主干道绿灯亮支干道红灯亮35秒状态3:主干道红灯亮支干道绿灯亮25秒状态4:主干道红灯亮支干道黄灯亮5秒状态2:主干道黄灯亮支干道红灯亮5秒3.2实现方法本次采用文本编辑法,即利用Verilog HDL语言描述交通控制器,通过状态机计数法,实现设计所要求的交通灯控制及时间显示。

设计中用两组红黄绿LED 模拟两个方向上的交通灯,用两个7段数码管显示主干道上的交通灯剩余时间,控制时钟由试验箱上频率信号提供。

3.3整体设计交通灯控制的关键是各个状态之间的转换和进行适当的时间延时,根据状态机的设计规范,本次设计了三个状态之间的循环转化,说明:该状态图为交通灯在正常情况下的状态转化图,进入控制后,状态00时主干道绿灯及支干道红灯亮起,进入状态01后两路黄灯亮起,状态11时主干道红灯及支干道绿灯亮起。

通过Verilog实现交通灯设计实验报告

通过Verilog实现交通灯设计实验报告

电子科技大学实验报告一、实验室名称:虚拟仪器实验室二、实验项目名称:交通灯设计实验三、实验学时:4学时四、实验原理假设交通灯处于南北和东西两条大街的“十”字路口,如图1所示。

用FPGA 开发板的LED 灯来模拟红、黄、绿3种颜色信号,并按一定顺序、时延来点亮LED ,如图2所示。

图3给出了交通灯的状态转移图。

设计使用频率为1Hz 的时钟来驱动电路(注1:仿真时采用1MHz 的时钟来驱动电路),则停留1个时钟可得到1S 的延时,类似停留3个时钟可得到3S 的延时,停留15个时钟可得到15S 的延时(注2:开发板工作时钟为50MHz )。

北南西东图1. 六个彩色LED 可以表示一组交通信号灯南北 东西 红 黄 绿 红 黄 绿 S0 1 0 0 0 0 1 S1 1 0 0 0 1 0 S2 1 0 0 1 0 0 S3 0 0 1 1 0 0S4 0 1 0 1 0 0S5 1 0 0 1 0 0图3. 交通灯的状态转移图顶层模块时钟分频模块状态机跳转模块图4. 交通灯的原理框图五、实验目的本实验是有限状态机的典型综合实验,掌握如何使用状态转移图来定义Mealy状态机和Moore状态机,熟悉利用HDL代码输入方式进行电路的设计和仿真的流程,掌握Verilog语言的基本语法。

并通过一个交通灯的设计掌握利用EDA软件(Xilinx ISE 13.2)进行HDL代码输入方式的电子线路设计与仿真的详细流程。

六、实验内容在Xilinx ISE 13.2上完成交通灯设计,输入设计文件,生成二进制码流文件下载到FPGA开发板上进行验证。

七、实验器材(设备、元器件)1、计算机(安装Xilinx ISE 13.2软件平台);2、BASYS2 FPGA开发板一套(带USB-MIniUSB下载线)八、实验步骤(1)新建工程,设置器件属性:在Xilinx ISE 13.2平台中,新建一个工程(注意命名规范),输入工程名称以及工程所在的目录,设置芯片的具体型号(Spartan 3E XC3S100E)、封装类型(CP132)以及编码使用的语言(Verilog)。

交通信号灯控制器的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.我们通过宏定义来设置每个状态保持的时间,这样既增强了代码的可读性,又方便以后的更改。

FPGA 交通灯控制器实验

FPGA 交通灯控制器实验

交通灯控制器一、实验目的熟练掌握EDA软件quartus 2的应用环境,加强利用verilog语言解决生活中实际问题的能力。

二、实验原理和内容利用软件quartus 2进行编写程序实现十字路口交通灯控制器,达到A方向和B方向红、黄、绿三盏灯按合理的顺序亮或灭,并能将灯亮的时间用倒计时的形式显示在数码管上,最后通过软件自带的工具将交通灯控制器的门级电路和RTL级电路自动生成。

三、实验步骤1:首先分析交通灯的原理,整理出所需要的模块,设定每个灯的亮灯时间。

2:运行quartus 2软件、新建工程,然后新建verilog HDL文件,利用verilog语言编写程序实现A和B方向的红黄绿三盏灯合理的交替亮灭,通过对应数码管显示亮灯倒计时。

3:编译程序,若有错误根据错误提示对程序进行修改,直到编译通过,然后设置LED 灯和数码管的引脚,以达到控制A和B那盏灯亮和与之相对应的数码管做倒计时,倒计时结束,亮灯状态转换的效果。

4:将程序烧入FPGA开发板,观察开发板上的LED和数码管显示状况,看是否达到实验目的,若达到则记录实验结果并整理,反之继续修改,直到达到预期效果为止。

5:关闭电源,拆除实验器材。

四、实验数据A方向红灯40s,黄灯10s,绿灯30sB方向红灯40s,黄灯10s,绿灯30s五、实验代码module traffic(clk,en,seg,dig,lampa,lampb);input clk;//时钟信号,50Mhzinput en;// 使能信号,当为高电平时控制器工作,当为低电平时,进行初始化设置。

output[7:0] dig;//数码管位选output[7:0] seg;//数码管段选output[2:0] lampa;//A方向灯亮的情况output[2:0] lampb;//B方向灯亮的情况reg clk_out1;reg clk_out2;reg[15:0] count1;reg[31:0] count2;reg[1:0] a;reg[2:0] lampa;reg[2:0] lampb;reg[3:0] disp_dat;reg[7:0] dig;reg[7:0] seg;reg[7:0] ared,ayellow,agreen,bred,byellow,bgreen;reg[7:0] numa,numb;reg tempa,tempb;reg[1:0] counta, countb;always @(posedge clk)begincount1<=count1+1;if(count1==16'd25000)beginclk_out1<=~clk_out1;count1<=0;endendalways @(posedge clk)begincount2<=count2+1;if(count2==32'd2*******)beginclk_out2<=~clk_out2;count2<=0;endendalways @(en) //给各种灯亮的时间预置数,注意此处为十六进制的数beginif (!en)beginared <= 8'h40;ayellow <= 8'h10;agreen <= 8'h30;bred <=8'h40;byellow <= 8'h10;bgreen <= 8'h30;endendalways @(posedge clk_out2) //控制A方向的四种灯的亮灭及亮的时间beginif(en)beginif(!tempa)begintempa <= 1;case(counta)2'd0:begin numa <= ared; lampa <= 3'b011; counta <= 2'd1;end2'd1:begin numa <= agreen; lampa <= 3'b110; counta <= 2'd2;end2'd2:begin numa <= ayellow; lampa <= 3'b101; counta <= 2'd0;endendcaseendelsebeginif(numa[3:0]==0)beginnuma[3:0] <= 4'd9;numa[7:4] <= numa[7:4]-1;endelse numa[3:0] <= numa[3:0]-1;if (numa == 8'd2)tempa <= 0;endendelsebeginlampa <= 3'b000;counta <= 0; tempa <= 0;endendalways @(posedge clk_out2) //控制B方向的四种灯的亮灭及亮的时间beginif(en)beginif(!tempb)begintempb <= 1;case(countb)2'd0:begin numb <= bgreen; lampb <= 3'b110; countb <= 2'd1;end2'd1:begin numb <= byellow; lampb <= 3'b101; countb <= 2'd2;end2'd2:begin numb <= bred; lampb <= 3'b011; countb <= 2'd0;endendcaseendelsebeginif(numb[3:0]==0)beginnumb[3:0] <= 4'd9;numb[7:4] <= numb[7:4]-1;endelse numb[3:0] <= numb[3:0]-1;if (numb == 8'd2)tempb <= 0;endendelsebeginlampb <= 3'b000;countb <= 0; tempb <= 0;endendalways @(posedge clk_out1)begina<=a+1;endalways @(posedge clk_out1)begincase(a) //数码管显示什么样的数2'd0:disp_dat = numa[3:0];2'd1:disp_dat = numa[7:4];2'd2:disp_dat = numb[3:0];2'd3:disp_dat = numb[7:4];endcasecase(a) //数码管位选2'd0:dig = 8'b10111111;2'd1:dig = 8'b01111111;2'd2:dig = 8'b11111110;2'd3:dig = 8'b11111101;endcaseendalways @(disp_dat)begincase(disp_dat) //数码管译码4'h0:seg = 8'hc0; //显示04'h1:seg = 8'hf9; //显示14'h2:seg = 8'ha4; //显示24'h3:seg = 8'hb0; //显示34'h4:seg = 8'h99; //显示44'h5:seg = 8'h92; //显示54'h6:seg = 8'h82; //显示64'h7:seg = 8'hf8; //显示74'h8:seg = 8'h80; //显示84'h9:seg = 8'h90;endcaseendendmodule交通灯RTL电路交通灯门级网表实际效果。

FPGA交通灯实验报告

FPGA交通灯实验报告

交通灯实验报告一,实验目的实现两路信号灯交替亮起,并利用两组数码管分别对两路信号进行倒计时。

两路信号时间分别为:V:绿灯(30S)H:红灯(35S)黄灯(5s)绿灯(30S)红灯(35S)黄灯(5S)二,实验步骤建立工程可在欢迎界面点击“Creat a New Project”进入工程建立界面,亦可关闭欢迎界面,点击菜单栏的“File”,点击“New Project Wizard”进入建立工程界面。

右侧为建立工程界面,点击next。

在此界面选定工程路径,取好工程名,点击“Next”。

注意:路径中不能有中文,工程名也不能有中文。

一直点击“Next”进入器件设置界面,DE2-70开发工具采用的Cyclone II系列的EP2C70F896C6N。

点击“Finish”,完成工程建立1、点击“File”,点击“New”选择“Verilog HDL”2,点击主界面工具栏中的选择“Verilog HDL”3、写入verilog代码。

代码如下:moduletraffic(Clk_50M,Rst,LedR_H,LedG_H,LedY_H,LedR_V,LedG_V,LedY_V,Seg7_VH,Seg7_VL,Seg7_HH,Seg7_HL,led15);parameter S1=2'b00;parameter S2=2'b01;parameter S3=2'b10;parameter S4=2'b11;input Clk_50M,Rst;output LedR_H,LedG_H,LedY_H,LedR_V,LedG_V,LedY_V;output[6:0] Seg7_VH,Seg7_VL,Seg7_HH,Seg7_HL;output led15;//-------------div for 1Hz-------start----reg Clk_1Hz;reg [31:0] Cnt_1Hz;always(posedge Clk_50M or negedge Rst)beginif(!Rst)beginCnt_1Hz<=1;Clk_1Hz<=1;endelsebeginif(Cnt_1Hz>=25000000)beginCnt_1Hz<=1;Clk_1Hz<=~Clk_1Hz;endelseCnt_1Hz<=Cnt_1Hz + 1;endend//-----------div for 1Hz------end-----reg[7:0] Cnt30,CntH,CntV,CntHH,CntVV;reg[7:0] CntDis,CntDiss;//-----------30 counter and seg7---start---reg LedR_H,LedG_H,LedY_H,LedR_V,LedG_V,LedY_V;always(posedge Clk_1Hz)begincase(state)S1:beginif(Cnt30>=30)Cnt30<=1;elseCnt30<=Cnt30 + 1;endS2:beginif(Cnt30>=5)Cnt30<=1;elseCnt30<=Cnt30 + 1;endS3:beginif(Cnt30>=30)Cnt30<=1;elseCnt30<=Cnt30 + 1;endS4:beginif(Cnt30>=5)Cnt30<=1;elseCnt30<=Cnt30 + 1;endendcaseendalways(posedge Clk_1Hz) begincase(stateV)S1:beginif(CntV>=30)CntV<=1;elseCntV<=CntV + 1;endS2:beginif(CntV>=5)CntV<=1;elseCntV<=CntV + 1;endS3:beginif(CntV>=35)CntV<=1;elseCntV<=CntV + 1;endendcaseendalways(posedge Clk_1Hz)begincase(stateH)S1:beginif(CntH>=35)CntH<=1;elseCntH<=CntH + 1;endS2:beginif(CntH>=30)CntH<=1;elseCntH<=CntH + 1;endS3:beginif(CntH>=5)CntH<=1;elseCntH<=CntH + 1;endendcaseendalways(negedge Clk_50M or negedge Rst) begincase(state)S1:CntVV=30-CntV;S2:CntVV=5-CntV;S3:CntVV=35-CntV;S4:CntVV=35-CntV;endcaseendalways(negedge Clk_50M or negedge Rst)begincase(state)S1:CntHH=35-CntH;S2:CntHH=35-CntH;S3:CntHH=30-CntH;S4:CntHH=5-CntH;endcaseend//16进制计数器转换为用于显示的10进制计数器always(posedge Clk_50M)beginif(CntVV>29)beginCntDis[7:4]<=3;CntDis[3:0]<=CntVV - 30;endelse if(CntVV>19)beginCntDis[7:4]<=2;CntDis[3:0]<=CntVV - 20;endelse if(CntVV>9)beginCntDis[7:4]<=1;CntDis[3:0]<=CntVV - 10;elseCntDis<=CntVV;endSEG7_LUT hex4(Seg7_VL,CntDis[3:0]); SEG7_LUT hex5(Seg7_VH,CntDis[7:4]);always(posedge Clk_50M)beginif(CntHH>29)beginCntDiss[7:4]<=3;CntDiss[3:0]<=CntHH - 30;endelse if(CntHH>19)beginCntDiss[7:4]<=2;CntDiss[3:0]<=CntHH - 20;endelse if(CntHH>9)beginCntDiss[7:4]<=1;CntDiss[3:0]<=CntHH - 10;endelseCntDiss<=CntHH;endSEG7_LUT hex1(Seg7_HL,CntDiss[3:0]); SEG7_LUT hex2(Seg7_HH,CntDiss[7:4]); //-----------30 counter and seg7----end---- reg [1:0]state,stateH,stateV;always(posedge Clk_1Hz)begincase(state)S1:if(Cnt30>=30)beginstate<=S2;endS2:if(Cnt30>=5)beginstate<=S3;S3:if(Cnt30>=30)beginstate<=S4;endS4:if(Cnt30>=5)beginstate<=S1;enddefault:beginstate<=S1;endendcaseendalways(posedge Clk_1Hz)begincase(state)S1:beginstateH<=S1;stateV<=S1;endS2:beginstateH<=S1;stateV<=S2;endS3:beginstateH<=S2;stateV<=S3;endS4:beginstateH<=S3;stateV<=S3;endendcaseendalways(posedge Clk_50M or negedge Rst)beginif(!Rst)beginLedR_H<=0;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=0;LedY_V<=0;endelsebegincase(state)S1:beginLedR_H<=1;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=1;LedY_V<=0;endS2:beginLedR_H<=1;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=0;LedY_V<=1;endS3:beginLedR_H<=0;LedG_H<=1;LedY_H<=0;LedR_V<=1;LedG_V<=0;LedY_V<=0;endS4:beginLedR_H<=0;LedG_H<=0;LedY_H<=1;LedR_V<=1;LedG_V<=0;LedY_V<=0;enddefault:beginLedR_H<=0;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=0;LedY_V<=0;endendcaseendendassign led15=state;endmodulemodule SEG7_LUT ( oSEG,iDIG );input [3:0] iDIG;output [6:0] oSEG;reg [6:0] oSEG;always (iDIG)begincase(iDIG)4'h1: oSEG = 7'b1111001; // ---t----4'h2: oSEG = 7'b0100100; // | |4'h3: oSEG = 7'b0110000; // lt rt4'h4: oSEG = 7'b0011001; // | |4'h5: oSEG = 7'b0010010; // ---m----4'h6: oSEG = 7'b0000010; // | |4'h7: oSEG = 7'b1111000; // lb rb4'h8: oSEG = 7'b0000000; // | |4'h9: oSEG = 7'b0011000; // ---b----4'ha: oSEG = 7'b0001000;4'hb: oSEG = 7'b0000011;4'hc: oSEG = 7'b1000110;4'hd: oSEG = 7'b0100001;4'he: oSEG = 7'b0000110;4'hf: oSEG = 7'b0001110;4'h0: oSEG = 7'b1000000;endcaseendendmodule编译工程保存文件,将文件放在所建工程所在路径下点击主界面工具栏中的图标也可点击菜单栏中“Pro cessing”,点击“Start Compilation”分配关键如下:Clk_50M Input PIN_AD15LedG_H Output PIN_AD9LedG_V Output PIN_AJ6LedR_H Output PIN_AJ7 )LedR_V Output PIN_AJ5 )LedY_H Output PIN_AD8LedY_V Output PIN_AK5Rst Input PIN_AA23Seg7_HH[6] Output PIN_G1Seg7_HH[5] Output PIN_H3Seg7_HH[4] Output PIN_H2Seg7_HH[3] Output PIN_H1Seg7_HH[2] Output PIN_J2Seg7_HH[1] Output PIN_J1Seg7_HH[0] Output PIN_K3Seg7_HL[6] Output PIN_E4Seg7_HL[5] Output PIN_F4Seg7_HL[4] Output PIN_G4Seg7_HL[3] Output PIN_H8Seg7_HL[2] Output PIN_H7Seg7_HL[1] Output PIN_H4Seg7_HL[0] Output PIN_H6Seg7_VH[6] Output PIN_AD17Seg7_VH[5] Output PIN_AF17 7Seg7_VH[4] Output PIN_AE17 7Seg7_VH[3] Output PIN_AG16Seg7_VH[2] Output PIN_AF16 7Seg7_VH[1] Output PIN_AE16 7Seg7_VH[0] Output PIN_AG13Seg7_VL[6] Output PIN_AD12Seg7_VL[5] Output PIN_AD11Seg7_VL[4] Output PIN_AF10 8Seg7_VL[3] Output PIN_AD10Seg7_VL[2] Output PIN_AH9 8Seg7_VL[1] Output PIN_AF9 8Seg7_VL[0] Output PIN_AE8 8烧写代码在管脚配置完成后,还需将工程再编译一次,成功后,点击主界面工具栏中的亦可点击主界面菜单栏中“Tools”,点击“Programmer”进入代码烧写界面后,点击“Start”,当“Progress”为100%时,表示烧写完成,这是可观察DE2-70板现象获得预期的效果,两组的信号红黄绿灯交替切换,计数器记为零时信号灯切换状态,红灯35s,黄灯5s,绿灯30s。

verilog实验报告流水灯数码管秒表交通灯

verilog实验报告流水灯数码管秒表交通灯

流水灯实验目的:在basys2开发板上实现LED灯的花样流水的显示,如隔位显示,依次向左移位显示,依次向右移位显示,两边同时靠中间显示。

实验仪器:FPGA开发板一块,计算机一台。

实验原理:当一个正向的电流通过LED时,LED就会发光。

当阳极的电压高于阴极的电压时,LED就会有电流通过。

当在LED上增添一个典型值为1.5V—2.0V之间的电压时,LED就会有电流通过并发光。

实验内容:顶层模块:输入信号:clk_50MHz(主时钟信号),rst(重置信号),输出信号:[7:0] led(LED灯控制信号)。

module led_top(clkin,rst,led_out);input clkin, rst;output [7:0] led_out;wire clk_1hz;divider_1hz d0(clkin, rst, clk_1hz);led l0(clk_1hz, rst, led_out);endmodule分频模块:module divider_1hz(clkin,rst,clkout);input clkin,rst;output reg clkout;reg [24:0] cnt;always@(posedge clkin, posedge rst)beginif(rst) begincnt<=0;clkout<=0; endelse if(cnt==24999999) begincnt<=0;clkout=!clkout; endelse cnt<=cnt+1;endendmodule亮灯信号模块:module led(clkin,rst,led_out);input clkin,rst;output [7:0] led_out;reg [2:0] state;always@(posedge clkin, posedge rst)if(rst) state<=0;else state<=state+1;always@(state)case(state)3'b000:ledout<=8'b0000_0001;3'b001:ledout<=8'b0000_0010;3'b010:ledout<=8'b0000_0100;3'b011:ledout<=8'b0000_1000;3'b100:ledout<=8'b0001_0000;3'b101:ledout<=8'b0010_0000;3'b110:ledout<=8'b0100_0000;3'b111:ledout<=8'b1000_0000;endcaseendmodule实验中存在的问题:1 芯片选择问题automotive spartan3EXA3S100E XA3S250E CPG132spartan3EXC3S100E XC3S250E CP1322 时序逻辑部分,阻塞赋值和非阻塞赋值混用always@(posedge clk)begina=b+c;d<=e+f;end3 UCF文件格式错误NET “CLK” LOC = “B8”;NET “a” LOC = “N11”;NET “b” LOC = “G13”;NET “c[0]”LOC =“K11;数码管实验目的:设计一个数码管动态扫描程序,实现在四位数码管上动态循环显示“1”、“2”“3”“4”;实验仪器:FPGA开发板一块,计算机一台。

交通灯实验报告

交通灯实验报告

基于FPGA实现的交通灯控制器一、实验室名称通信实验室(实训楼二楼)二、实训内容本实验为Verilog HDL的程序设计仿真,通过实验掌握状态机,时序CLK的控制模块,及时序同步的控制方式。

实验要求:1.LED灯显示交通灯状态。

2.7段数码管显示当前状态剩余时间。

状态要求:1.主干道绿灯亮35s支道绿灯亮25s。

2.当主干道绿灯亮时,支道亮红灯。

3.由绿灯转红灯时,黄灯亮5s。

3.时钟为1KHz。

能实现倒计时显示。

4.由初始状态开始计数,对应状态指示。

三、实验原理3.1设计思路和原理本次设计是针对十字路口,进行南北和东西直行情况下交通灯控制。

设定东西方向为主干道方向,根据交通灯的亮的规则,在初始状态下四个方向的都为红灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续35S后,主干道和支干道上的黄灯都亮启,持续5S后,主干道上红灯亮启,支干道上绿灯亮启持续25S,之后主干道和支干道上的黄灯都亮启5s,一个循环完成。

循环往复的直行这个过程。

其过程如下图所示:3.2实现方法本次采用文本编辑法,即利用Verilog HDL 语言描述交通控制器,通过状态状态 主干道 支干道 秒数(S )1 绿灯 红灯 352黄灯红灯5 3 红灯 绿灯 25 4红灯黄灯5状态1: 主干道绿灯亮 支干道红灯亮35秒状态3: 主干道红灯亮 支干道绿灯亮25秒状态4:主干道红灯亮 支干道黄灯亮5秒状态2: 主干道黄灯亮 支干道红灯亮5秒机计数法,实现设计所要求的交通灯控制及时间显示。

设计中用两组红黄绿LED 模拟两个方向上的交通灯,用两个7段数码管显示主干道上的交通灯剩余时间,控制时钟由试验箱上频率信号提供。

3.3整体设计交通灯控制的关键是各个状态之间的转换和进行适当的时间延时,根据状态机的设计规范,本次设计了三个状态之间的循环转化,说明:该状态图为交通灯在正常情况下的状态转化图,进入控制后,状态00时主干道绿灯及支干道红灯亮起,进入状态01后两路黄灯亮起,状态11时主干道红灯及支干道绿灯亮起。

用verilog语言编写交通灯程序

用verilog语言编写交通灯程序

交通灯一、实验目的写一个交通灯,要求:①有东西南北四个方向,两组交通灯轮流交替变换,其中,红灯时间为30个时间单位,绿灯时间为25个时间单位,黄灯时间为5个时间单位。

最后用modelsim软件进行仿真。

②要求设计是一个可综合设计。

二、实验原理根据实验要求的逻辑功能描述,可以分析得出原理图如下:控制器即可以设计为一个有限状态机的形式:根据实验要求画出控制器的状态转移图如下:三、代码1、源代码(1)控制器模块module traffic_lights(clk,rst,count,ew,sn);input clk,rst;input[5:0] count;output[2:0] ew,sn;reg[2:0] ew,sn;reg[3:0] state;parameter Idle=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100; always @(posedge clk)if(!rst)beginstate<=Idle;endelsecasex(state)Idle: if(rst)beginstate<=s1;ends1: if(count=='d25)beginstate<=s2;ends2: if(count=='d30)beginstate<=s3;ends3: if(count=='d55)beginstate<=s4;ends4: if(count=='d60)beginstate<=s1;endendcasealways @(posedge clk)beginif(!rst)beginew<=3'b100;sn<=3'b100;endelsecasex(state)Idle: if(rst)beginew<=3'b100;sn<=3'b001;ends1: if(count=='d25)beginew<=3'b100;sn<=3'b010;ends2: if(count=='d30)beginew<=3'b001;sn<=3'b100;ends3: if(count=='d55)beginew<=3'b010;sn<=3'b100;ends4: if(count=='d60)beginew<=3'b100;sn<=3'b001;enddefault: state<=Idle;endcaseendendmodule(2)计数器模块module counter(en,clk,rst,out);output[5:0]out;input en,clk,rst;reg[5:0] out;always@(posedge clk or negedge rst) beginif(!rst)out<='d0;else if(!en&&out<'d60)out<=out+1;elseout<='d1;endendmodule(3)将控制器与计数器进行连接module traffic_lights_top(out,clk,rst,en,ew,sn); input clk,rst,en;output[2:0] ew,sn;output[5:0]out;wire[5:0] out;traffic_lights u1(.clk(clk),.rst(rst),.count(out),.ew(ew),.sn(sn));counter u2(.en(en),.clk(clk),.rst(rst),.out(out));endmodule2、激励`timescale 1ns/100psmodule traffic_lights_tb;reg clk,rst,en;wire[2:0] ew,sn;wire[5:0]out;traffic_lights_top m(.clk(clk),.rst(rst),.en(en),.ew(ew),.sn(sn),.out(out));always#5 clk=~clk;initialen<=1;initialbeginclk<=1;en<=0;rst<=0;#5 rst<=1;endendmodule四、仿真波形(图一)(图二)五、波形说明波形图中,从上至下依次为:时钟信号clk、复位信号rst、计数器使能端en、东西方向上灯的状态ew、南北方向上灯的状态sn、计数器的输出out。

FPGA实验报告-交通灯控制器设计

FPGA实验报告-交通灯控制器设计

FPGA实验报告--交通灯控制器设计院系:电子与信息工程系专业:通信工程班级:姓名:学号:指导教师:一、实验任务 1、任务名称:交通灯控制器的设计2、设计容与要求:① 设计一个十字路口交通信号灯的定时控制电路。

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

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

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

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

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

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

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

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

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

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

6 写出设计性实验报告,并打印各层次的源文件和仿真波形,然后作简要说明。

2、补充功能与要求:1.在主干道和支干道添加左转向灯;2.各灯亮的时间及最后闪烁时间可调节;3.紧急路况时,主干道和支干道都为红灯。

二、实验环境1、ISE 软件一套;2、PC 机一台。

三、设计思路1、根据题目要求,知道整个交通灯的运行过程是周期的,所以可以设计一个总的计数器,满周期则清零;2、将灯闪烁时间、主干道绿灯亮的时间、主干道转向灯亮的时间、支干道绿灯亮的时间、支干道转向灯亮的时间分别记为变量t0、t1、t2、t3、t4,通过调整它们,实现调节各灯亮的时间;3、将所有需要显示的量由同一个信号表示并最终输出、显示在LCD上。

四、系统设计a)系统框图b)状态转换说明:主干道和支干道永远有且只有一个灯亮,紧急路况时两边红灯亮,其余时候有且只有一个红灯亮;主干道绿灯、主干道转向灯亮、支干道绿灯、支干道转向灯依次亮,在最后t0S(默认为5S)闪烁。

Verilog数字电子技术课程设计报告-交通灯设计

Verilog数字电子技术课程设计报告-交通灯设计

江苏科技大学数字电子技术课程设计报告姓名:学号:学院: 电子信息学院专业: 电气工程及其自动化日期: 2015 年 6 月 27日课题一数字电子钟任务:用文本法或图形法设计一个能显示时、分、秒的数字电子钟要求:1 设计由20mhz有源晶振电路产生标准信号的单元电路2时为00~23二十四进制计数器,分、秒为00~59六十进制计数器;3 能够显示出时、分、秒;4 具有清零,调节分钟的功能;5 模拟钟摆功能6 具有整点报时功能,整点报时的同时声响电路发出叫声;7 对时、分、秒单元电路进行仿真并纪录;8 选作部分:具有定时闹钟功能,可在任意设定一时间,到时间自动提醒,通过声响电路发出叫声。

分步模块设计如下:1、分频器程序module div(clk_20M,clk_1000,clk_100,clk_10,clk_1);input clk_20M;outputreg clk_1000,clk_100,clk_10,clk_1;reg [15:0]cnt1;reg [2:0]cnt2,cnt3,cnt4;always @(posedge clk_20M) //得到1000Hz的信号,并且占空比为50%beginif(cnt1==9999)begincnt1<=16'b0000000000000000;clk_1000<=~clk_1000;endelse cnt1<=cnt1+1'b1;endalways @(posedge clk_1000) //得到100Hz的信号,并且占空比为50% beginif(cnt2==4)begincnt2<=3'b000;clk_100<=~clk_100;endelse cnt2<=cnt2+1'b1;endalways @(posedge clk_100) //得到10Hz的信号,并且占空比为50%beginif(cnt3==4)begincnt3<=3'b000;clk_10<=~clk_10;endelse cnt3<=cnt3+1'b1;endalways @(posedge clk_10) //得到1Hz的信号,并且占空比为50%beginif(cnt4==4)begincnt4<=3'b000;clk_1=~clk_1;endelse cnt4=cnt4+1'b1;endendmodule2,、六十进制计数器程序:秒针计数:module count60(clk,ctr,reset,out,full1,out_m);inputclk,reset,ctr;outputreg [7:0]out;outputreg full1,out_m;wire CP;or A(CP,clk,ctr);always @(posedge CP or negedge reset)beginif(~reset)out<=8'b00000000;elsebeginif(out>=59)beginout<=8'b00000000;full1<=1'b1;endelsebeginout<=out+1'b1;full1<=1'b0;endendalways @(out)beginif(out==59) out_m=1;elseout_m=0;endendmodule分针计数:module count60f(clk,ctr,reset,out,full2,out_m); inputclk,reset,ctr;outputreg [7:0]out;outputreg full2,out_m;wirecp;or A(cp,clk,ctr);always @(posedgecp or negedge reset)beginif(~reset)out<=8'b00000000;elsebeginif(out>=59)beginout<=8'b00000000;full2<=1'b1;endelsebeginout<=out+1'b1;full2<=1'b0;endendalways @(out)beginif(out==59) out_m=1;elseout_m=0;endendmodule3、二十四进制计数器程序:时针计数器:module C24(clk,ctr,reset,out);inputclk,ctr,reset;outputreg [7:0]out;initial out=8'b00000000;wire CP;or A(CP,clk,ctr);always @(posedge CP or negedge reset)beginif(~reset)out<=8'b00000000;elsebeginif(out>=23)out<=8'b00000000;else out<=out+1'b1;endend4、调节程序:moduletiaojie(mode,ctr,ctr_m,ctr_h);inputmode,ctr;outputregctr_m,ctr_h;reg [1:0]cnt;always @(posedge mode)beginif(cnt>=2'b10)cnt<=2'b00;elsecnt<=cnt+1'b1;endalways @(ctr)begincase(cnt)2'b01:beginctr_m<=ctr;ctr_h<=1'b0;end2'b10:beginctr_m<=1'b0;ctr_h<=ctr;enddefault:beginctr_m<=1'b0;ctr_h<=1'b0;endendcaseend5、 BCD四段译码器程序://60—4译码module decode60(in,out_h,out_l);input [7:0]in;outputreg [3:0]out_h,out_l;always @(in)begincase(in)8'b00000000:beginout_h<=4'b0000;out_l<=4'b0000;end //0 8'b00000001:beginout_h<=4'b0000;out_l<=4'b0001;end //1 8'b00000010:beginout_h<=4'b0000;out_l<=4'b0010;end //2 8'b00000011:beginout_h<=4'b0000;out_l<=4'b0011;end //3 8'b00000100:beginout_h<=4'b0000;out_l<=4'b0100;end //4 8'b00000101:beginout_h<=4'b0000;out_l<=4'b0101;end //5 8'b00000110:beginout_h<=4'b0000;out_l<=4'b0110;end //6 8'b00000111:beginout_h<=4'b0000;out_l<=4'b0111;end //7 8'b00001000:beginout_h<=4'b0000;out_l<=4'b1000;end //8 8'b00001001:beginout_h<=4'b0000;out_l<=4'b1001;end //9 8'b00001010:beginout_h<=4'b0001;out_l<=4'b0000;end//10 8'b00001011:beginout_h<=4'b0001;out_l<=4'b0001;end//11 8'b00001100:beginout_h<=4'b0001;out_l<=4'b0010;end//12 8'b00001101:beginout_h<=4'b0001;out_l<=4'b0011;end//13 8'b00001110:beginout_h<=4'b0001;out_l<=4'b0100;end//14 8'b00001111:beginout_h<=4'b0001;out_l<=4'b0101;end//15 8'b00010000:beginout_h<=4'b0001;out_l<=4'b0110;end//16 8'b00010001:beginout_h<=4'b0001;out_l<=4'b0111;end//178'b00010011:beginout_h<=4'b0001;out_l<=4'b1001;end//19 8'b00010100:beginout_h<=4'b0010;out_l<=4'b0000;end//20 8'b00010101:beginout_h<=4'b0010;out_l<=4'b0001;end//21 8'b00010110:beginout_h<=4'b0010;out_l<=4'b0010;end//22 8'b00010111:beginout_h<=4'b0010;out_l<=4'b0011;end//23 8'b00011000:beginout_h<=4'b0010;out_l<=4'b0100;end//24 8'b00011001:beginout_h<=4'b0010;out_l<=4'b0101;end//25 8'b00011010:beginout_h<=4'b0010;out_l<=4'b0110;end//26 8'b00011011:beginout_h<=4'b0010;out_l<=4'b0111;end//27 8'b00011100:beginout_h<=4'b0010;out_l<=4'b1000;end//28 8'b00011101:beginout_h<=4'b0010;out_l<=4'b1001;end//29 8'b00011110:beginout_h<=4'b0011;out_l<=4'b0000;end//30 8'b00011111:beginout_h<=4'b0011;out_l<=4'b0001;end//31 8'b00100000:beginout_h<=4'b0011;out_l<=4'b0010;end//32 8'b00100001:beginout_h<=4'b0011;out_l<=4'b0011;end//33 8'b00100010:beginout_h<=4'b0011;out_l<=4'b0100;end//34 8'b00100011:beginout_h<=4'b0011;out_l<=4'b0101;end//35 8'b00100100:beginout_h<=4'b0011;out_l<=4'b0110;end//36 8'b00100101:beginout_h<=4'b0011;out_l<=4'b0111;end//37 8'b00100110:beginout_h<=4'b0011;out_l<=4'b1000;end//38 8'b00100111:beginout_h<=4'b0011;out_l<=4'b1001;end//39 8'b00101000:beginout_h<=4'b0100;out_l<=4'b0000;end//40 8'b00101001:beginout_h<=4'b0100;out_l<=4'b0001;end//41 8'b00101010:beginout_h<=4'b0100;out_l<=4'b0010;end//42 8'b00101011:beginout_h<=4'b0100;out_l<=4'b0011;end//43 8'b00101100:beginout_h<=4'b0100;out_l<=4'b0100;end//44 8'b00101101:beginout_h<=4'b0100;out_l<=4'b0101;end//45 8'b00101110:beginout_h<=4'b0100;out_l<=4'b0110;end//468'b00110000:beginout_h<=4'b0100;out_l<=4'b1000;end//48 8'b00110001:beginout_h<=4'b0100;out_l<=4'b1001;end//49 8'b00110010:beginout_h<=4'b0101;out_l<=4'b0000;end//50 8'b00110011:beginout_h<=4'b0101;out_l<=4'b0001;end//51 8'b00110100:beginout_h<=4'b0101;out_l<=4'b0010;end//52 8'b00110101:beginout_h<=4'b0101;out_l<=4'b0011;end//53 8'b00110110:beginout_h<=4'b0101;out_l<=4'b0100;end//54 8'b00110111:beginout_h<=4'b0101;out_l<=4'b0101;end//55 8'b00111000:beginout_h<=4'b0101;out_l<=4'b0110;end//56 8'b00111001:beginout_h<=4'b0101;out_l<=4'b0111;end//57 8'b00111010:beginout_h<=4'b0101;out_l<=4'b1000;end//58 8'b00111011:beginout_h<=4'b0101;out_l<=4'b1001;end//59 default:beginout_h<=7'b0000;out_l<=0000;end //0endcaseendendmodule//24—4译码:module decode24(in,out_h,out_l);input [7:0]in;outputreg [3:0]out_h,out_l;always @(in)begincase(in)8'b00000000:beginout_h<=4'b0000;out_l<=4'b0000;end //0 8'b00000001:beginout_h<=4'b0000;out_l<=4'b0001;end //1 8'b00000010:beginout_h<=4'b0000;out_l<=4'b0010;end //2 8'b00000011:beginout_h<=4'b0000;out_l<=4'b0011;end //38'b00000100:beginout_h<=4'b0000;out_l<=4'b0100;end //4 8'b00000101:beginout_h<=4'b0000;out_l<=4'b0101;end //5 8'b00000110:beginout_h<=4'b0000;out_l<=4'b0110;end //6 8'b00000111:beginout_h<=4'b0000;out_l<=4'b0111;end //7 8'b00001000:beginout_h<=4'b0000;out_l<=4'b1000;end //8 8'b00001001:beginout_h<=4'b0000;out_l<=4'b1001;end //9 8'b00001010:beginout_h<=4'b0001;out_l<=4'b0000;end//10 8'b00001011:beginout_h<=4'b0001;out_l<=4'b0001;end//11 8'b00001100:beginout_h<=4'b0001;out_l<=4'b0010;end//12 8'b00001101:beginout_h<=4'b0001;out_l<=4'b0011;end//13 8'b00001110:beginout_h<=4'b0001;out_l<=4'b0100;end//14 8'b00001111:beginout_h<=4'b0001;out_l<=4'b0101;end//15 8'b00010000:beginout_h<=4'b0001;out_l<=4'b0110;end//16 8'b00010001:beginout_h<=4'b0001;out_l<=4'b0111;end//17 8'b00010010:beginout_h<=4'b0001;out_l<=4'b1000;end//18 8'b00010011:beginout_h<=4'b0001;out_l<=4'b1001;end//19 8'b00010100:beginout_h<=4'b0010;out_l<=4'b0000;end//20 8'b00010101:beginout_h<=4'b0010;out_l<=4'b0001;end//21 8'b00010110:beginout_h<=4'b0010;out_l<=4'b0010;end//22 8'b00010111:beginout_h<=4'b0010;out_l<=4'b0011;end//23 default:beginout_h<=7'b0000;out_l<=0000;end //0endcaseendendmodule6、钟摆电路程序moduleZhongbai(clk_10,out_ZB);input clk_10;outputreg [5:0]out_ZB;reg [3:0]cnt;always @(posedge clk_10)beginif(cnt>=9)cnt<=4'b0000;elsecnt<=cnt+1'b1;endalways @(cnt)begincase(cnt)4'b0000:out_ZB<=6'b100000;4'b0001:out_ZB<=6'b010000;4'b0010:out_ZB<=6'b001000;4'b0011:out_ZB<=6'b000100;4'b0100:out_ZB<=6'b000010;4'b0101:out_ZB<=6'b000001;4'b0110:out_ZB<=6'b000010;4'b0111:out_ZB<=6'b000100;4'b1000:out_ZB<=6'b001000;4'b1001:out_ZB<=6'b010000;default:out_ZB<=6'b000000;endcaseendendmodule7、报时程序module ring(clk_1000,clk_100,out_s,out_m,out_ring); input clk_1000,clk_100,out_m;input [1:0]out_s;outputregout_ring;always @( out_s or out_m)beginif((out_s==2'b10)&&out_m) //qu 00;beginout_ring<=clk_100;endelse if((out_s==2'b11) &&out_m)beginout_ring<=clk_1000;endelseout_ring<=1'b0;endendmodule8、顶层文件程序moduleclock(clk_20M,mode,ctr,reset,out_ZB,out_ring,out_h_s,out_l_s,out_h_m, out_l_m,out_h_h,out_l_h,clk_10,clk_1,out_s);input clk_20M,mode,ctr,reset;wire [7:0]out_h,out_m,out_s;output [5:0]out_ZB;output [7:0]out_s;outputout_ring;wirec_s,c_m;output clk_10,clk_1;wire clk_1000, clk_100,clk_10,clk_1;wirectr_m,ctr_h;wire [1:0]outs;wireoutm;output [3:0]out_h_s,out_l_s,out_h_m,out_l_m,out_h_h,out_l_h;div div(clk_20M,clk_1000,clk_100,clk_10,clk_1);count60 count60(clk,ctr,reset,out,full1,outs);count60f count60f(clk,ctr,reset,out,full2,outm);C24 C24(clk,ctr,reset,out);tiaojietiaojie(mode,ctr,ctr_m,ctr_h);ZhongbaiZhongbai(clk_10,out_ZB);ring ring(clk_1000,clk_100,outs,outm,out_ring);decode60 decode60(in,out_h,out_l);decode60 decode60s(in,out_h,out_1);decode24 decode24(in,out_h,out_l);endmodule仿真结果:设计总结:将电路每个部分单元化,在顶层文件中调用相应原件从而实现总的设计。

verilog实验报告流水灯数码管秒表交通灯

verilog实验报告流水灯数码管秒表交通灯

流水灯实验目的:在basys2开发板上实现LED灯的花样流水的显示,如隔位显示,依次向左移位显示,依次向右移位显示,两边同时靠中间显示。

实验仪器:FPGA开发板一块,计算机一台。

实验原理:当一个正向的电流通过LED时,LED就会发光。

当阳极的电压高于阴极的电压时,LED就会有电流通过。

当在LED上增添一个典型值为1.5V—2.0V之间的电压时,LED就会有电流通过并发光。

实验内容:顶层模块:输入信号:clk_50MHz(主时钟信号),rst(重置信号),输出信号:[7:0] led(LED灯控制信号)。

module led_top(clkin,rst,led_out);input clkin, rst;output [7:0] led_out;wire clk_1hz;divider_1hz d0(clkin, rst, clk_1hz);led l0(clk_1hz, rst, led_out);endmodule分频模块:module divider_1hz(clkin,rst,clkout);input clkin,rst;output reg clkout;reg [24:0] cnt;always@(posedge clkin, posedge rst)beginif(rst) begincnt<=0;clkout<=0; endelse if(cnt==24999999) begincnt<=0;clkout=!clkout; endelse cnt<=cnt+1;endendmodule亮灯信号模块:module led(clkin,rst,led_out);input clkin,rst;output [7:0] led_out;reg [2:0] state;always@(posedge clkin, posedge rst)if(rst) state<=0;else state<=state+1;always@(state)case(state)3'b000:ledout<=8'b0000_0001;3'b001:ledout<=8'b0000_0010;3'b010:ledout<=8'b0000_0100;3'b011:ledout<=8'b0000_1000;3'b100:ledout<=8'b0001_0000;3'b101:ledout<=8'b0010_0000;3'b110:ledout<=8'b0100_0000;3'b111:ledout<=8'b1000_0000;endcaseendmodule实验中存在的问题:1 芯片选择问题automotive spartan3EXA3S100E XA3S250E CPG132spartan3EXC3S100E XC3S250E CP1322 时序逻辑部分,阻塞赋值和非阻塞赋值混用always@(posedge clk)begina=b+c;d<=e+f;end3 UCF文件格式错误NET “CLK” LOC = “B8”;NET “a” LOC = “N11”;NET “b” LOC = “G13”;NET “c[0]”LOC =“K11;数码管实验目的:设计一个数码管动态扫描程序,实现在四位数码管上动态循环显示“1”、“2”“3”“4”;实验仪器:FPGA开发板一块,计算机一台。

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

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

文案大全
实用文档
直接用两个七段译码显示倒计时数。 Rst 信号是清零用的,为“ 1”时,三个信号灯及循环变量 k 复位置“ 0”。
流程图
开始 输入 50MHz
clk1:1Hz 循环变量 k
计数 70≤ k≤
yel=~yel
60 ≤ k ≤ 69
0≤ k≤
图四
red=1 显示输出
blu=1
3.时序说明:
blu,yel,red
全局时钟信号, 50MHz 全局复位端,高电平有效
倒计时个位上数字 倒计时十位上数字
各个灯状态
框图说明 :
状态机的输入,只有时钟信号 clk 和复位信号 reset.输出为数码管十位和个位的二进制
显示状态以及三个灯的颜色显示 ( blu,yel,red, 分别是绿黄红灯, “ 1”表示灯亮,“ 0”表示灭)。
顶层及控制模块: 此模块做例化, 和控制, 是本程序的主体,对底层的分频模块和译码显示模块进行例化,并 且做控制设计。控制设计如下:
采用同步时序逻辑。包括一个循环计数器,三个比较器, 控制。
always
通过分频后的 CLK1 新号( 1Hz),进行对一个循环变量“ k”的周期为 130 的循环,进 而控制三个灯的控制;具体循环为: clk1 每进行一次跳变, k 值减 1;当 K=0 时,重新复值
实用文档
西北工业大学
《FPGA 》 实验报告
学 院: 学 号: 姓 名: 专 业: 实验时间: 实验地点: 指导教师:
软件与微电子学院 2011303596 杨清山 微电子学 2013/11/11 毅字楼 335 韩兵
西北工业大学
2013 年 11 月
文案大全
实用文档

智能交通灯控制器的设计(verilog)

智能交通灯控制器的设计(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码,高四位和低四位就分别是我们要在译码模块的要用数码管显示的十位和个位。

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

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

分频模块:
输入 50MHz 的信号,rst 为“1”时,计数器 j 置“0”,并在以后每经历一个系统时钟周期时加 1,知道 k=49999999 时,clk1=~clk1,同时 k=0.到此分频完成。 (在实际代码编写中,为了代码的精简,此模块已经集成入顶层及控制模块)
专业整理
word 格式文档
clk 50MHz
word 格式文档
//******************************************
//这是分频部分功能实现
//**************??**************************
always@(posedge clk or posedge rst)
begin
专业整理
word 格式文档
2.总体设计框图及说明:
blu
Clk
rst
50Hz
控制
循环变量 k
Clk1
yel
1Hz 129~0
red
专业整理
word 格式文档
图一
输入:clk rst
输出:ctrl_1s ctrl_10s
blu,yel,red
全局时钟信号,50MHz 全局复位端,高电平有效
倒计时个位上数字 倒计时十位上数字
此模块接受主模块输出的个位和十位的数值控制,并间接受(系统时钟)clk(50MHz) 和
(全局复位)rst,及分频时钟 clk1 的控制,均为上升沿触发,当 rst 为高电平时,电路复
位,重新开始工作。当 rst 为低电平时,电路正常。
5.仿真及综合结果
信号 clk blu,yel,red
k led10 led1 out1 out10 rst

交通灯设计-verilog.

交通灯设计-verilog.

. . .. . .基于Verilog语言交通灯设计报告院系:工学院自动化系年级:14级班级:10班:周博学号:14032291这学期我学习了EDA技术及其创新实践这门课程,通过自己学习的容和自己查找的一些资料用Verilog语言编写交通灯的程序,并且完成了仿真。

Verilog HDL是工业和学术界的硬件设计者所使用的两种主要的HDL之一,另一种是VHDL。

现在它们都已成为IEEE标准。

两者各有特点,但Verilog HDL拥有更悠久的历史、更广泛的设计群体,资源也远比VHDL丰富,且非常容易学习掌握。

一、设计背景和意义交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。

在现代化的大城市中,十字交叉路口越来越多,在每个交叉路口都需要使用红绿灯进行交通指挥和管理,红、黄、绿灯的转换要有一个准确的时间间隔和转换顺序,这就需要有一个安全、自动的系统对红、黄、绿灯的转换进行管理,本系统就是基于此目的而开发的。

二、设计任务(1)设计一个交通红绿灯。

要求分主干道和支干道,每条道上安装红(主:red1,支:red2)绿(主:green1,支:green2)黄(主:yellow1,支:yellow2)三种颜色灯,由四种状态自动循环构成;(2)在交通灯处在不同的状态时,设计一个计时器以倒计时方式显示计时,主干道上绿灯亮30S,支干道上绿灯亮20S。

每个干道上,在绿灯转为红灯时,要求黄灯先亮5S。

在完成基本要求的基础上,可进一步增加功能、提高性能,如绿灯亮的时间可调。

三、设计方案1.工作原理:城市十字交叉路口红绿灯控制系统主要负责控制主干道走向和从干道走向的红绿灯的状态和转换顺序,关键是各个状态之间的转换和进行适当的时间延时,正是基于以上考虑,采用如下设计:S0:当主干道走向的绿灯亮时,从干道走向的红灯亮,并保持30sS1:当主干道走向的黄灯亮时,从干道走向的黄灯亮,并保持5sS2:当主干道走向的红灯亮时,从干道走向的绿灯亮,并保持20sS3:当主干道走向的黄灯亮时,从干道走向的黄灯亮,并保持5s在S3结束后又回到(1)状态,并周期重复进行。

基于FPGA的交通灯设计——数字系统课程设计实习报告书

基于FPGA的交通灯设计——数字系统课程设计实习报告书

河南科技学院信息工程学院数字系统课程设计报告书课题名称:基于FPGA的交通灯设计院系:信息工程学院姓名学号:**、2***专业班级:通信工程、通信指导教师:刘艳昌、左现刚设计时间:20**-20**学年第2学期**-**周2016年*月**日目录摘要 (1)1设计目的 (2)2设计内容及要求 (2)3系统设计总体方案及设计原理 (2)4各模块电路设计与实现 (3)4.1分频模块设计与实现 (3)4.2减法计数模块设计与实现 (4)4.3数码管驱动模块设计与实现 (7)5系统仿真及硬件下载 (8)6设计总结 (10)参考文献摘要FPGA技术在数字电子系统设计领域越来越普及,并且FPGA技术实现在实际应用时也非常方便。

它是作为专用集成电路(ASIC)领域的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

Verilog HDL语言作为一种规范的硬件描述语言,被广泛应用于电路的设计中。

利用Verilog HDL语言自顶而下的设计方法设计交通灯控制系统,实现道路的正常畅通,并通过Quartus II9.1完成综合仿真。

将程序下载到FPGA芯片上,可应用于现实生活中的交通灯控制系统。

【关键词】FPGA,Verilog HDL,ASIC,可编程器件1、设计目的(1)掌握运用Quartus II9.1软件进行可编程逻辑器件设计的方法。

(2)掌握FPGA进行计数器以及数码管驱动电路设计的方法。

(3)熟练掌握可编程逻辑器件的文本输入(Verilog)的设计方法。

(4)掌握Quartus II9.1进行仿真以及可编程器件进行硬件下载方法。

2、设计内容及要求设计并实现交通灯控制电路,下载到芯片EP2C8Q208C8。

设计一个交通红路灯。

分为A、B两个路口,每个路口安装红、黄、绿三种颜色的灯。

设计一个计时器用倒计时的方法显示时间,A路口红灯(ared)、黄灯(ayellow)、绿灯(agreen)亮灯时间依次是40秒、5秒、30秒,B路口红灯(bred)、黄灯(byellow)、绿灯(bgreen)亮灯时间依次是40秒、5秒、30秒。

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

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

西北工业大学实验报告》FPGA《学院:软件与微电子学院2011303596 号:学名:姓杨清山专业:微电子学2013/11/11 实验时间:毅字楼335 实验地点:韩兵指导教师:西北工业大学2013 年11 月2.总体设计框图及说明:图一输入:clk 全局时钟信号,50MHzrst 全局复位端,高电平有效输出:ctrl_1s 倒计时个位上数字ctrl_10s 倒计时十位上数字blu,yel,red 各个灯状态框图说明:状态机的输入,只有时钟信号clk和复位信号reset.输出为数码管十位和个位的二进制显示状态以及三个灯的颜色显示(blu,yel,red,分别是绿黄红灯,“1”表示灯亮,“0”表示灭)。

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

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

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

嵌套语句来控制三灯亮与灭,同时间接地进行倒计时的过程,输出个位和十位上的数,if用.输入端口:din_1s 显示器个位数据,由控制模块输入din_10s 显示器十位数据,由控制模块输入输出端口:led_data_1s 显示器个位数据的译码led_data_10s 显示器十位数据的译码时序说明:和clk(50MHz) (系统时钟)并间接受此模块接受主模块输出的个位和十位的数值控制,上图中blu,yel,red,三个信号反映的绿黄红交通灯的状态,其中包括绿灯亮60秒,黄灯以2HZ为周期闪烁,红灯亮60s,总周期为130s。

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

综合结果:顶层及控制,分频模块的综合RTL级电路如图:译码显示模块的综合如下:RTL级门级6.代码及注释此为顶层及控制模块代码:`include ./decode.vmodule bulb(clk,rst,red,blu,yel,led1,led10);input clk,rst;output blu,yel,red,led1,led10;reg red,yel,blu;wire [6:0] led1;wire [6:0] led10;reg[3:0] out10,out1;reg[5:0] j;reg[7:0] k; //j,kreg clk1;//initialbegink='d129;blu<=0;。

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

电子科技大学实验报告一、实验室名称:虚拟仪器实验室二、实验项目名称:交通灯设计实验三、实验学时:4学时四、实验原理假设交通灯处于南北和东西两条大街的“十”字路口,如图1所示。

用FPGA开发板的LED灯来模拟红、黄、绿3种颜色信号,并按一定顺序、时延来点亮LED,如图2所示。

图3给出了交通灯的状态转移图。

设计使用频率为1Hz的时钟来驱动电路(注1:仿真时采用1MHz的时钟来驱动电路),则停留1个时钟可得到1S的延时,类似停留3个时钟可得到3S的延时,停留15个时钟可得到15S的延时(注2:开发板工作时钟为50MHz)。

北西东南图1. 六个彩色LED可以表示一组交通信号灯图2. 交通灯状态南北东西红黄绿红黄绿S0 1 0 0 0 0 1S1 1 0 0 0 1 0S2 1 0 0 1 0 0S3 0 0 1 1 0 0S4 0 1 0 1 0 0S5 1 0 0 1 0 0图3. 交通灯的状态转移图顶层模块时钟分频模块状态机跳转模块图4. 交通灯的原理框图五、实验目的本实验是有限状态机的典型综合实验,掌握如何使用状态转移图来定义Mealy状态机和Moore状态机,熟悉利用HDL代码输入方式进行电路的设计和仿真的流程,掌握Verilog语言的基本语法。

并通过一个交通灯的设计掌握利用EDA软件(Xilinx ISE 13.2)进行HDL代码输入方式的电子线路设计与仿真的详细流程。

六、实验内容在Xilinx ISE 13.2上完成交通灯设计,输入设计文件,生成二进制码流文件下载到FPGA开发板上进行验证。

七、实验器材(设备、元器件)1、计算机(安装Xilinx ISE 13.2软件平台);2、BASYS2 FPGA开发板一套(带USB-MIniUSB下载线)八、实验步骤(1)新建工程,设置器件属性:在Xilinx ISE 13.2平台中,新建一个工程(注意命名规范),输入工程名称以及工程所在的目录,设置芯片的具体型号(Spartan 3E XC3S100E)、封装类型(CP132)以及编码使用的语言(Verilog)。

(详见实验指导书)(2)Verilog源码文件创建与编辑:选中器件名字,点击鼠标右键,选中New Source…,选择Verilog Module以及输入文件名称(详见实验指导书)(3)语法检查,对设计文件进行综合:代码编写完成后,在ISE的主界面的处理子窗口的synthesis的工具检查代码语法(Check Syntax),同时在此窗口可以查看RTL原理图(View RTL schematic)、查看技术原理图(View Technology Schematic)以及产生综合后仿真模型(GeneratePost-Synthesis Simulation Model)。

(4)对设计进行行为仿真:1)产生测试文件模板;2)完成测试脚本创建与编辑;3)调出仿真窗口对设计进行仿真;4)通过波形查看仿真结果。

(详见实验指导书)(5)添加实现约束文件。

(详见实验指导书)(6)UCF文件导入。

(详见实验指导书)(7)FPGA在线下载配置:1)连接开发板并给开发板供电;2)边界扫描,初始化链;3)下载比特流文件;4)对FPGA进行编程;5)生成PROM文件;6)将生成的PROM文件烧到PROM芯片中。

(详见实验指导书)(8)关闭配置界面,不保存任何信息。

(一定不要保存任何信息)(9)关闭电源重新上电,程序从PROM自动引导到FPGA芯片中。

(10)给开发板断电,清理器件,实验结束。

九、实验数据及结果分析9.1状态机转移代码module traffic(input clk,input rst,output reg[5:0] lights);reg[2:0] state;reg[3:0] count;parameter S0=3'b000,S1=3'b001,S2=3'b010,S3=3'b011,S4=3'b100,S5=3'b101;always@(posedge clk or posedge rst)beginif(rst)beginstate<=S0;count<=0;endelse begincase(state)S0:if(count<15)beginstate<=S0;count<=count+1;endelse beginstate<=S1;count<=0;endS1:if(count<3)beginstate<=S1;count<=count+1;endelse beginstate<=S2;count<=0;endS2:if(count<3)beginstate<=S2;count<=count+1;endelse beginstate<=S3;count<=0;endS3:if(count<15)beginstate<=S3;count<=count+1;endelse beginstate<=S4;count<=0;endS4:if(count<3)beginstate<=S4;count<=count+1;endelse beginstate<=S5;count<=0;endS5:if(count<3)beginstate<=S5;count<=count+1;endelse beginstate<=S0;count<=0;enddefault state<=S0;endcaseendendalways@(*)begincase(state)S0:lights=6'b100_001;S1:lights=6'b100_010;S2:lights=6'b100_100;S3:lights=6'b001_100;S4:lights=6'b010_100;S5:lights=6'b100_100;default lights=6'b100_001;endcaseendEndmodule9.2 时钟分频代码module clk_div(input clk,input rst,output reg clk_1hz );parameter CNT_WIDTH=5;reg[CNT_WIDTH-1:0] cnt;always@(posedge clk or posedge rst) beginif(rst)begincnt<=0;endelse begincnt<=cnt+1;endendalways@(posedge clk or posedge rst)if(rst)clk_1hz<=0;else if(cnt==25)beginclk_1hz<=~clk_1hz;cnt<=0;endEndmodule9.3 顶层代码module top(input mclk,input wire[3:3] btn,output wire[7:2] Led );wire clk_1hz;wire rst;assign rst=btn[3];clk_div clk_div_inst(.clk(mclk),.rst(rst),.clk_1hz(clk_1hz));traffic traffic_inst(.clk(clk_1hz),.rst(rst),.lights(Led));endmodule9.4 测试代码module text;// Inputsreg mclk;reg [3:3] btn;// Outputswire [7:2] Led;// Instantiate the Unit Under Test (UUT)top uut (.mclk(mclk),.btn(btn),.Led(Led));initial begin// Initialize Inputsmclk = 0;btn = 1;// Wait 100 ns for global reset to finish#100;btn = 0;// Add stimulus hereendparameter PERIOD =20;always begin#(PERIOD/2) mclk =0;#(PERIOD/2) mclk =1;endEndmodule9.5 仿真波形代码(对波形进行相关的文字说明,所截取的波形要覆盖所有状态转移)由图中可以看出,lights显示100001(S0),经过15us后变为100010(S1),接着3us变为100100(S2),再3us变为001100(S3),然后15us变为010100(S4),之后3us变为100100(S5),状态正确。

由图可以看出,clk_1hz周期为1000ns,满足1M hz的要求十、实验结论通过实验,实现了用Xilinx ISE 13.2实现了一个交通灯的电子线路设计与仿真,更加熟练掌握Verilog语言的基本语法。

十一、实验中遇到的问题及相应的解决办法(1)lights状态不发生变化答:在test文件中,令btn初值为1报告评分:指导教师签字:11。

相关文档
最新文档