电脑桌面
添加蜗牛文库到电脑桌面
安装后可以在桌面快捷访问

FPGA交通灯实验报告

栏目:合同范文发布:2025-01-29浏览:1收藏

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代码。

代码如下:

module traffic(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;

//-------------p for 1Hz-------start----reg Clk_1Hz;reg [31:0] Cnt_1Hz;always@(posedge Clk_50M or negedge Rst)begin

if(!Rst)

begin

Cnt_1Hz<=1;

Clk_1Hz<=1;

end

else

begin

if(Cnt_1Hz>=25000000)

end

//-----------p 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)begin

end

begin

Cnt_1Hz<=1;

Clk_1Hz<=~Clk_1Hz;

end

else

Cnt_1Hz<=Cnt_1Hz + 1;

case(state)

S1:

end

always@(posedge Clk_1Hz)begin

case(stateV)

S1:

begin

if(CntV>=30)

CntV<=1;

begin

if(Cnt30>=30)

Cnt30<=1;

else

Cnt30<=Cnt30 + 1;S2:

begin

if(Cnt30>=5)

Cnt30<=1;end

else

Cnt30<=Cnt30 + 1;S3:

begin

if(Cnt30>=30)

Cnt30<=1;end

else

Cnt30<=Cnt30 + 1;S4:

begin

if(Cnt30>=5)

Cnt30<=1;end

else

Cnt30<=Cnt30 + 1;end endcase

else

CntV<=CntV + 1;

S2: begin

end

end if(CntV>=5)

CntV<=1;

else

CntV<=CntV + 1;end

S3:

begin

if(CntV>=35)

CntV<=1;

else

CntV<=CntV + 1;end endcase always@(posedge Clk_1Hz)begin

case(stateH)

S1:

end

always@(negedge Clk_50M or negedge Rst)begin

begin

if(CntH>=35)

CntH<=1;

else

CntH<=CntH + 1;

S2:

begin

if(CntH>=30)

CntH<=1;end

else

CntH<=CntH + 1;end

S3:

begin

if(CntH>=5)

CntH<=1;

else

CntH<=CntH + 1;end endcase

case(state)

S1:

end always@(negedge Clk_50M or negedge Rst)begin

case(state)

S1:

end

//16进制计数器转换为用于显示的10进制计数器 always@(posedge Clk_50M)begin

if(CntVV>29)

begin

CntDis[7:4]<=3;

CntDis[3:0]<=CntVV20;end else if(CntVV>9)begin

CntDis[7:4]<=1;

CntDis[3:0]<=CntVV30;end else if(CntHH>19)begin

CntDiss[7:4]<=2;

CntDiss[3:0]<=CntHH10;end else

CntDiss<=CntHH;

end

if(Cnt30>=5)

end

end S3:

begin

state<=S4;

end S4:

begin

state<=S1;

end default:

begin

state<=S1;

end endcase

if(Cnt30>=30)

if(Cnt30>=5)always@(posedge Clk_1Hz)begin

case(state)

S1:

end

always@(posedge Clk_50M or negedge Rst)

begin

stateH<=S1;

stateV<=S1;

end S2:

begin

stateH<=S1;

stateV<=S2;

end S3:

begin

stateH<=S2;

stateV<=S3;

end S4:

begin

stateH<=S3;

stateV<=S3;

end endcase begin

if(!Rst)

begin

LedR_H<=0;

else

LedG_H<=0;LedY_H<=0;

LedR_V<=0;

LedG_V<=0;end LedY_V<=0;

begin

case(state)

S1:

begin

LedR_H<=1;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=1;LedY_V<=0;end

S2:

begin

LedR_H<=1;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=0;LedY_V<=1;end

S3:

begin

LedR_H<=0;LedG_H<=1;LedY_H<=0;LedR_V<=1;LedG_V<=0;LedY_V<=0;end

S4:

begin LedR_H<=0;LedG_H<=0;

end

LedY_H<=1;LedR_V<=1;LedG_V<=0;LedY_V<=0;end

default:

begin

end LedR_H<=0;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=0;LedY_V<=0;end

endcase assign led15=state;

endmodule

module SEG7_LUT input [3:0] iDIG;output reg

always @(iDIG)begin

case(iDIG)4'h1: oSEG = 7'b1111001;

//---t----4'h2: oSEG = 7'b0100100;// |

| 4'h3: oSEG = 7'b0110000;// lt rt

4'h4: oSEG = 7'b0011001;// |

| 4'h5: oSEG = 7'b0010010;//---m----4'h6: oSEG = 7'b0000010;// |

| 4'h7: oSEG = 7'b1111000;// lb rb 4'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;[6:0] oSEG;[6:0] oSEG;(oSEG,iDIG);

end

4'hf: oSEG = 7'b0001110;4'h0: oSEG = 7'b1000000;endcase endmodule 编译工程

保存文件,将文件放在所建工程所在路径下 点击主界面工具栏中的图标

也可点击菜单栏中“Processing”,点击“Start Compilation”

分配关键如下:

Clk_50M Input PIN_AD15 LedG_H Output PIN_AD9 LedG_V Output PIN_AJ6 LedR_H Output PIN_AJ7)LedR_V Output PIN_AJ5)LedY_H Output PIN_AD8 LedY_V Output PIN_AK5 Rst Input PIN_AA23 Seg7_HH[6] Output PIN_G1 Seg7_HH[5] Output PIN_H3 Seg7_HH[4] Output PIN_H2 Seg7_HH[3] Output PIN_H1 Seg7_HH[2] Output PIN_J2 Seg7_HH[1] Output PIN_J1 Seg7_HH[0] Output PIN_K3

Seg7_HL[6] Seg7_HL[5] Seg7_HL[4] Seg7_HL[3] Seg7_HL[2] Seg7_HL[1] Seg7_HL[0] Seg7_VH[6] Seg7_VH[5] Seg7_VH[4] Seg7_VH[3] Seg7_VH[2] Seg7_VH[1] Seg7_VH[0] Seg7_VL[6] Seg7_VL[5] Seg7_VL[4] Seg7_VL[3] Seg7_VL[2] Seg7_VL[1] Seg7_VL[0] Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output PIN_E4 PIN_F4 PIN_G4 PIN_H8 PIN_H7 PIN_H4 PIN_H6 PIN_AD17 PIN_AF17 7 PIN_AE17 7 PIN_AG16 PIN_AF16 7 PIN_AE16 7 PIN_AG13 PIN_AD12 PIN_AD11 PIN_AF10 8 PIN_AD10 PIN_AH9 8 PIN_AF9 8 PIN_AE8 8

烧写代码

在管脚配置完成后,还需将工程再编译一次,成功后,点击主界面工具栏中的亦可点击主界面菜单栏中“Tools”,点击“Programmer”

进入代码烧写界面后,点击“Start”,当“Progress”为100%时,表示烧写完成,这是可观察DE2-70板现象

获得预期的效果,两组的信号红黄绿灯交替切换,计数器记为零时信号灯切换状态,红灯35s,黄灯5s,绿灯30s。三,心得体会

通过本次实验初步了解了EDA技术,熟悉了FPGA开发板的开发流程,锻炼了动手能力。

第二篇:基于FPGA的交通灯控制系统

基于FPGA的交通灯控制系统

摘 要:针对现实中越来越严重的城市交通拥堵现象,提出了一种城市十字路口 交通信号灯控制与FPGA实现的新方法。利用超高速硬件描述语言VHDL设计十字路口交通信号灯控制器,实现主干道和支干道的交通控制功能,实时监测每个路口的车辆通行情况,以此更改主干道与支干道的交通灯状态,提高十字路口的车辆通行效率,最后通过硬件测试实现具体功能。

关键词:VHDL FPGA 交通灯控制

一、概述 1.1 设计要求:

(1)设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。(2)红、绿、黄发光二极管作信号灯。

(3)主干道处于常允许通行的状态,支干道有车来时才允许通行。主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。

(4)主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,设立45秒、25秒计时、显示电路。

(5)在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡,使行驶中的车辆有时间停到禁行线外,设立5秒计时、显示电路。1.2 课题分析

(1)主支道路分4种行车状况,无无、无有、有无、有有,此信号从传感器输出信号得到,作为系统的输入,在本系统中用拨片开关模拟状态输入。(2)主支道路有4种亮灯情况:主绿支红、主黄支红、支绿主红、支黄主红。(3)只要支路无车通行,则一直为主绿支红状态,只有支路有车通过才会进入支绿主红状态。

(4)系统可以根据行车情况智能进入相应亮灯情况,提高了十字路口的通车效率。

(5)用6个发光二极管作为主道路绿黄红三灯显示输出和支道路绿黄红三灯显示输出;用4个数码管分别作为主支道路倒计时显示输出。

二、系统方案设计 2.1 整体模块设计 2.1.1整体设计思路

整体设计思路为:交通灯控制系统主要包括两个模块,即交通灯控制模块和倒计时显示模块。首先利用教学实验箱提供的1HZ时钟信号,实现计数功能,1s计数一次,同时设定主干道、支干道的交通灯的具体亮灯时间,并将计数结果传给倒计时模块,以实现倒计时模块显示的时间与交通灯的状态相对应。在交通灯控制过程中,用状态机来实现,设定主干道、支干道的行车检测信号,用以进行状态变换。每进入一个状态就开始计数,该状态结束则清零,在下个状态开始时重新计数,实现每个状态亮灯时间不同的需求。2.1.2 整体设计框架

根据系统要求可知:

输入信号为系统时钟,主支道路行车情况模拟输入。输出信号为主支道路红绿黄显示信号、倒计时显示。

2.2 交通灯状态转换模块设计

由原理分析可知系统需要在4种亮灯状态之间切换,所以需要设计一个状态转换控制模块,而倒计时显示则来自内部的计数,所以状态转换模块内部包含了计数模块,又因为二极管模拟红绿灯显示是和亮灯状态紧密相关的,所以相应的二极管控制整合在状态转换控制模块内部。故在状态转换模块内部包含3个子模块,分别为计数模块、状态转换控制模块、二极管实现模块。最后因为数码管动态显示模块需要根据亮灯状态决定输出,所以本模块还需增加计数输出以及状态输出信号。该模块计数采用1hz的时钟脉冲,以期实现交通灯的秒数设置。

状态循环控制: S0:主干道绿灯支干道红灯45s S1:主干道黄灯支干道红灯5s S2:主干道红灯支干道绿灯25s S3:主干道红灯支干道黄灯5s

2.3 数码管倒计时显示模块设计

由于此模块采用了数码管的动态显示原理,所以代码量较多,单独分为一个模块,又因为动态显示倒计时间是与亮灯状态紧密相关的,所以必须从交通灯状态控制模块获取相关的状态输入,引出状态输出信号,以供本模块使用。又因为动态显示需要较高的时钟频率,所以本模块的时钟信号采用系统输入信号,而非之前计数的1hz时钟。4位数码管的前两位显示支干道的亮灯时间,后两位显示主干道的亮灯时间。

三、硬件设计 3.1总体设计框图

由clk1hz输入,用来计数,道路行车检测由pass_state1,pass_state0控制,pass_state1为主干道行车检测,pass_state0为支干道行车检测。1为有车通行,0为无车通行,输出为数码管的位选信号和段选信号,以及6个二极管控制信号。

3.2交通灯状态转换模块

输入计数时钟和行车控制,输出主干道以及支干道红绿黄三灯的控制信号,最重要的是将此时的计数时间输出给倒计时模块,并将4个状态的状态输出信号给倒计时模块,实现在对应的状态下显示对应的时间。3.3数码管倒计时显示模块

为了实现数码管动态扫描,此模块的时钟使用较高频率,输入上级电路的计数输出和状态输出,给出位选以及段选信号的控制。

四、硬件测试 4.1 引脚分配

Pin_3——1hz时钟输入,用于状态控制模块 Pin_33——24khz时钟输入,用于数码管动态扫描 Pin_4——K1 支干道行车模拟输入 Pin_5——K2 主干道行车模拟输入

Pin_6,Pin_8,Pin_10——数码管位选信号

Pin_11,Pin_12,Pin_13,Pin_14,Pin_15,Pin_30,Pin_31——数码管段选信号

Pin_34——R1主干道红灯 Pin_35——Y1 主干道黄灯 Pin_36——G1 主干道绿灯 Pin_37——R2 支干道红灯 Pin_39——Y2 支干道黄灯 Pin_40——G2 支干道绿灯

4.2 仿真结果 交通灯显示:

倒计时显示:

S1状态(支红主黄):

S0状态(支红主绿)

五、总结

基本实现了设计所需的功能,能根据道路行车情况实现交通灯的智能控制,并将红绿灯通行的时间通过数码管直观显示出来,较好的完成了十字路口交通情况的模拟。

六、附录

6.1 顶层模块源程序

LIBRARY IEEE;---自动交通灯控制系统顶层描述 USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY TRAFFIC_LIGHT_CONTROL IS PORT(CLK1hz,CLK1khz : IN STD_LOGIC;---信号时钟输入

PASS_STATE : IN STD_LOGIC_VECTOR(1 DOWNTO 0);---主支通道的通车情况,低位为支通道高位为主通道,0为无车1为有车

ALIGHT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);---主干道红绿黄灯控制信号 BLIGHT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);---支干道红绿黄灯控制信号 SEL : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);---输出数码管位选信号 LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)---输出数码管段选信号);END ENTITY TRAFFIC_LIGHT_CONTROL;

ARCHITECTURE behav OF TRAFFIC_LIGHT_CONTROL IS COMPONENT STATE_CONTROL PORT(CLK1 : IN STD_LOGIC;---1Hz时钟信号输入

PASS_STATE_IN : IN STD_LOGIC_VECTOR(1 DOWNTO 0);---主支通道的通车情况,低位为支通道高位为主通道,0为无车1为有车

A_LIGHT: OUT STD_LOGIC_VECTOR(2 DOWNTO 0);---主干道红绿黄灯控制信号 B_LIGHT: OUT STD_LOGIC_VECTOR(2 DOWNTO 0);---支干道红绿黄灯控制信号 CNTOUT : OUT STD_LOGIC_VECTOR(5 DOWNTO 0);---已计数时间输出

STATEOUT : OUT STD_LOGIC_VECTOR(1 DOWNTO 0)---状态输出,传递给数码显示模块);END COMPONENT;

COMPONENT DISPLAY PORT(CLK2 : IN STD_LOGIC;---1KHz时钟信号输入

CNTIN : IN STD_LOGIC_VECTOR(5 DOWNTO 0);---亮灯已过时间输入 STATEIN : IN STD_LOGIC_VECTOR(1 DOWNTO 0);---状态输入

LED7SOUT : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);---数码管段选信号输出 SELOUT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0)---数码管位选信号输出);END COMPONENT;

SIGNAL MSTATE : STD_LOGIC_VECTOR(1 DOWNTO 0);---中间信号传递通车状态

SIGNAL MCNT : STD_LOGIC_VECTOR(5 DOWNTO 0);---中间信号传递亮灯已计数时间

BEGIN---例化语句

U1: STATE_CONTROL PORT MAP(CLK1=>CLK1hz,PASS_STATE_IN=>PASS_STATE,B_LIGHT=>BLIGHT, A_LIGHT=>ALIGHT, CNTOUT=>MCNT, STATEOUT=>MSTATE);U2: DISPLAY PORT MAP(CLK2=>CLK1khz,CNTIN=>MCNT,STATEIN=>MSTATE,LED7SOUT=>LED7S,SELOUT=>SEL);

END ARCHITECTURE behav;6.2 交通灯状态转换模块源程序

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY STATE_CONTROL IS GENERIC(GREENA_CNT:INTEGER:=45;---主通道绿灯亮的时间45s

YELLOWA_CNT:INTEGER:=5;---主通道黄灯亮的时间5s

GREENB_CNT:INTEGER:=25;---支通道绿灯亮的时间25s

YELLOWB_CNT:INTEGER:=5);---支通道黄灯亮的时间5s PORT(CLK1 : IN STD_LOGIC;---1Hz时钟信号输入

PASS_STATE_IN : IN STD_LOGIC_VECTOR(1 DOWNTO 0);---主支通道的通车情况,低位为支通道高位为主通道,0为无车1为有车

A_LIGHT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);---主干道红绿黄灯控制信号 B_LIGHT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);---支干道红绿黄灯控制信号 CNTOUT : OUT STD_LOGIC_VECTOR(5 DOWNTO 0);---已计数时间输出 STATEOUT : OUT STD_LOGIC_VECTOR(1 DOWNTO 0)---剩余时间输出显示);END ENTITY STATE_CONTROL;

ARCHITECTURE behav OF STATE_CONTROL IS TYPE STATES IS(ST0,ST1,ST2,ST3);---4个状态分别为【主绿支红45s、主黄支红5s、支绿主红25s、支黄主红5s、】

SIGNAL STATE : STATES:=ST0;---初始化状态为状态0 SIGNAL CNT_EN : STD_LOGIC:='0';---计数使能控制信号,初始不计数

SIGNAL CNT : STD_LOGIC_VECTOR(5 DOWNTO 0):=“000001”;---因为初始不计数,但已过一个周期,所以初值为1 BEGIN

PROCESS(CLK1)BEGIN IF CLK1'EVENT AND CLK1 = '0' THEN

IF(CNT_EN='1')THEN---计数模块

CNT<=CNT+1;ELSE

CNT<=“000001”;---若溢出则计数使能为0,CNT重新赋值为1 END IF;CASE STATE IS---状态循环控制模块 WHEN ST0 => IF(CNT=GREENA_CNT)THEN---主绿支红若计数满45s则根据主支通道的通车情况决定转入下一个状态

CASE PASS_STATE_IN IS

WHEN “00” => STATE<=ST0;

WHEN “01” => STATE<=ST1;

WHEN “10” => STATE<=ST0;

WHEN “11” => STATE<=ST1;

WHEN OTHERS => NULL;

END CASE;ELSE

STATE<=ST0;---若计数未满则为原来状态

END IF;WHEN ST1 =>---主黄支红若计数满5s则根据主支通道的通车情况决定转入下一个状态

IF(CNT=YELLOWA_CNT)THEN

CASE PASS_STATE_IN IS

WHEN “00” => STATE<=ST2;

WHEN “01” => STATE<=ST2;

WHEN “10” => STATE<=ST2;

WHEN “11” => STATE<=ST2;

WHEN OTHERS => NULL;

END CASE;ELSE

STATE<=ST1;---若计数未满则为原来状态 END IF;WHEN ST2 =>---支绿主红若计数满25s则根据主支通道的通车情况决定转入下一个状态

IF(CNT=GREENB_CNT)THEN

CASE PASS_STATE_IN IS

WHEN “00” => STATE<=ST3;

WHEN “01” => STATE<=ST2;

WHEN “10” => STATE<=ST3;

WHEN “11” => STATE<=ST3;

WHEN OTHERS => NULL;

END CASE;ELSE

STATE<=ST2;---若计数未满则为原来状态

END IF;

WHEN ST3 =>---支黄主红若计数满5s则根据主支通道的通车情况决定转入下一个状态

IF(CNT=YELLOWA_CNT)THEN

CASE PASS_STATE_IN IS

WHEN “00” => STATE<=ST0;

WHEN “01” => STATE<=ST0;

WHEN “10” => STATE<=ST0;

WHEN “11” => STATE<=ST0;

WHEN OTHERS => NULL;

END CASE;ELSE

STATE<=ST3;---若计数未满则为原来状态

END IF;END CASE;END IF;CNTOUT<=CNT;END PROCESS;

PROCESS(STATE)BEGIN CASE STATE IS WHEN ST0 =>---状态0时主绿支红

A_LIGHT<=“010”;B_LIGHT<=“100”;CNT_EN<='1';STATEOUT<=“00”;---将当前状态传递给数码管显示模块,以供后续使用 IF(CNT=GREENA_CNT)THEN CNT_EN<='0';END IF;

WHEN ST1 =>---状态1时主黄支红

A_LIGHT<=“001”;B_LIGHT<=“100”;CNT_EN<='1';STATEOUT<=“01”;---将当前状态传递给数码管显示模块,以供后续使用 IF(CNT=YELLOWA_CNT)THEN CNT_EN<='0';END IF;

WHEN ST2 =>---状态2时支绿主红

A_LIGHT<=“100”;B_LIGHT<=“010”;CNT_EN<='1';STATEOUT<=“10”;---将当前状态传递给数码管显示模块,以供后续使用 IF(CNT=GREENB_CNT)THEN CNT_EN<='0';END IF;

WHEN ST3 =>---状态3时支黄主红

A_LIGHT<=“100”;B_LIGHT<=“001”;CNT_EN<='1';STATEOUT<=“11”;---将当前状态传递给数码管显示模块,以供后续使用 IF(CNT=YELLOWB_CNT)THEN CNT_EN<='0';END IF;

END CASE;END PROCESS;END behav;6.3 数码管显示倒计时源程序

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY DISPLAY IS PORT(CLK2 : IN STD_LOGIC;---时钟输入

CNTIN : IN STD_LOGIC_VECTOR(5 DOWNTO 0);---已计数输入,来自状态控制模块 STATEIN : IN STD_LOGIC_VECTOR(1 DOWNTO 0);---状态输入,来自状态控制模块 LED7SOUT : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);---数码管段选信号输出 SELOUT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0)---数码管位选信号输出);END ENTITY DISPLAY;ARCHITECTURE behav OF DISPLAY IS BEGIN PROCESS(CLK2)VARIABLE BITSEL : STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN-----------------------------位选信号循环模块----------------IF CLK2'EVENT AND CLK2='0' THEN CASE BITSEL IS WHEN “000” => BITSEL:=“001”;SELOUT<=“001”;WHEN “001” => BITSEL:=“010”;SELOUT<=“010”;WHEN “010” => BITSEL:=“011”;SELOUT<=“011”;WHEN “011” => BITSEL:=“000”;SELOUT<=“000”;WHEN OTHERS => NULL;END CASE;END IF;-------------------------动态显示模块-----------------CASE STATEIN IS WHEN “00” =>---主绿支红状态 OK CASE BITSEL IS WHEN “000” =>---主绿支红状态 点亮支干道十位数字 OK CASE CNTIN IS WHEN “000001” => LED7SOUT <= “1101101”;---01 50 WHEN “000010” => LED7SOUT <= “1100110”;---02 49 WHEN “000011” => LED7SOUT <= “1100110”;WHEN “000100” => LED7SOUT <= “1100110”;WHEN “000101” => LED7SOUT <= “1100110”;WHEN “000110” => LED7SOUT <= “1100110”;---06 45 WHEN “000111” => LED7SOUT <= “1100110”;WHEN “001000” => LED7SOUT <= “1100110”;WHEN “001001” => LED7SOUT <= “1100110”;WHEN “001010” => LED7SOUT <= “1100110”;WHEN “001011” => LED7SOUT <= “1100110”;---11 40 WHEN “001100” => LED7SOUT <= “1001111”;WHEN “001101” => LED7SOUT <= “1001111”;WHEN “001110” => LED7SOUT <= “1001111”;WHEN “001111” => LED7SOUT <= “1001111”;WHEN “010000” => LED7SOUT <= “1001111”;---16 35 WHEN “010001” => LED7SOUT <= “1001111”;WHEN “010010” => LED7SOUT <= “1001111”;WHEN “010011” => LED7SOUT <= “1001111”;WHEN “010100” => LED7SOUT <= “1001111”;WHEN “010101” => LED7SOUT <= “1001111”;---21 30 WHEN “010110” => LED7SOUT <= “1011011”;WHEN “010111” => LED7SOUT <= “1011011”;WHEN “011000” => LED7SOUT <= “1011011”;WHEN “011001” => LED7SOUT <= “1011011”;WHEN “011010” => LED7SOUT <= “1011011”;---26 25 WHEN “011011” => LED7SOUT <= “1011011”;WHEN “011100” => LED7SOUT <= “1011011”;WHEN “011101” => LED7SOUT <= “1011011”;WHEN “011110” => LED7SOUT <= “1011011”;WHEN “011111” => LED7SOUT <= “1011011”;---31 20 WHEN “100000” => LED7SOUT <= “0000110”;WHEN “100001” => LED7SOUT <= “0000110”;WHEN “100010” => LED7SOUT <= “0000110”;WHEN “100011” => LED7SOUT <= “0000110”;WHEN “100100” => LED7SOUT <= “0000110”;---36 15 WHEN “100101” => LED7SOUT <= “0000110”;WHEN “100110” => LED7SOUT <= “0000110”;WHEN “100111” => LED7SOUT <= “0000110”;WHEN “101000” => LED7SOUT <= “0000110”;WHEN “101001” => LED7SOUT <= “0000110”;---41 10 WHEN “101010” => LED7SOUT <= “0111111”;WHEN “101011” => LED7SOUT <= “0111111”;WHEN “101100” => LED7SOUT <= “0111111”;WHEN “101101” => LED7SOUT <= “0111111”;---45 06 WHEN OTHERS => NULL;END CASE;WHEN “001” =>---主绿支红状态 点亮支干道个位数字 OK CASE CNTIN IS WHEN “000001” => LED7SOUT <= “0111111”;---01 50 WHEN “000010” => LED7SOUT <= “1101111”;---02 49 WHEN “000011” => LED7SOUT <= “1111111”;WHEN “000100” => LED7SOUT <= “0000111”;WHEN “000101” => LED7SOUT <= “1111101”;WHEN “000110” => LED7SOUT <= “1101101”;WHEN “000111” => LED7SOUT <= “1100110”;---07 44 WHEN “001000” => LED7SOUT <= “1001111”;WHEN “001001” => LED7SOUT <= “1011011”;WHEN “001010” => LED7SOUT <= “0000110”;WHEN “001011” => LED7SOUT <= “0111111”;WHEN “001100” => LED7SOUT <= “1101111”;---12 39 WHEN “001101” => LED7SOUT <= “1111111”;WHEN “001110” => LED7SOUT <= “0000111”;WHEN “001111” => LED7SOUT <= “1111101”;WHEN “010000” => LED7SOUT <= “1101101”;WHEN “010001” => LED7SOUT <= “1100110”;---17 34 WHEN “010010” => LED7SOUT <= “1001111”;WHEN “010011” => LED7SOUT <= “1011011”;WHEN “010100” => LED7SOUT <= “0000110”;WHEN “010101” => LED7SOUT <= “0111111”;WHEN “010110” => LED7SOUT <= “1101111”;---22 29 WHEN “010111” => LED7SOUT <= “1111111”;WHEN “011000” => LED7SOUT <= “0000111”;WHEN “011001” => LED7SOUT <= “1111101”;WHEN “011010” => LED7SOUT <= “1101101”;WHEN “011011” => LED7SOUT <= “1100110”;---27 24 WHEN “011100” => LED7SOUT <= “1001111”;WHEN “011101” => LED7SOUT <= “1011011”;WHEN “011110” => LED7SOUT <= “0000110”;WHEN “011111” => LED7SOUT <= “0111111”;WHEN “100000” => LED7SOUT <= “1101111”;---32 19 WHEN “100001” => LED7SOUT <= “1111111”;WHEN “100010” => LED7SOUT <= “0000111”;WHEN “100011” => LED7SOUT <= “1111101”;WHEN “100100” => LED7SOUT <= “1101101”;WHEN “100101” => LED7SOUT <= “1100110”;---37 14 WHEN “100110” => LED7SOUT <= “1001111”;WHEN “100111” => LED7SOUT <= “1011011”;WHEN “101000” => LED7SOUT <= “0000110”;WHEN “101001” => LED7SOUT <= “0111111”;---41 09 WHEN “101010” => LED7SOUT <= “1101111”;WHEN “101011” => LED7SOUT <= “1111111”;WHEN “101100” => LED7SOUT <= “0000111”;WHEN “101101” => LED7SOUT <= “1111101”;---45 06 WHEN OTHERS => NULL;END CASE;WHEN “010” =>---主绿支红状态 点亮主干道十位数字 OK CASE CNTIN IS WHEN “000000” => LED7SOUT <= “1111101”;---00 46 WHEN “000001” => LED7SOUT <= “1100110”;WHEN “000010” => LED7SOUT <= “1100110”;WHEN “000011” => LED7SOUT <= “1100110”;WHEN “000100” => LED7SOUT <= “1100110”;WHEN “000101” => LED7SOUT <= “1100110”;---05 41 WHEN “000110” => LED7SOUT <= “1100110”;WHEN “000111” => LED7SOUT <= “1001111”;WHEN “001000” => LED7SOUT <= “1001111”;WHEN “001001” => LED7SOUT <= “1001111”;WHEN “001010” => LED7SOUT <= “1001111”;---10 36 WHEN “001011” => LED7SOUT <= “1001111”;WHEN “001100” => LED7SOUT <= “1001111”;WHEN “001101” => LED7SOUT <= “1001111”;WHEN “001110” => LED7SOUT <= “1001111”;WHEN “001111” => LED7SOUT <= “1001111”;---15 31 WHEN “010000” => LED7SOUT <= “1001111”;WHEN “010001” => LED7SOUT <= “1011011”;WHEN “010010” => LED7SOUT <= “1011011”;WHEN “010011” => LED7SOUT <= “1011011”;WHEN “010100” => LED7SOUT <= “1011011”;---20 26 WHEN “010101” => LED7SOUT <= “1011011”;WHEN “010110” => LED7SOUT <= “1011011”;WHEN “010111” => LED7SOUT <= “1011011”;WHEN “011000” => LED7SOUT <= “1011011”;WHEN “011001” => LED7SOUT <= “1011011”;---25 21 WHEN “011010” => LED7SOUT <= “1011011”;WHEN “011011” => LED7SOUT <= “0000110”;WHEN “011100” => LED7SOUT <= “0000110”;WHEN “011101” => LED7SOUT <= “0000110”;WHEN “011110” => LED7SOUT <= “0000110”;---30 16 WHEN “011111” => LED7SOUT <= “0000110”;WHEN “100000” => LED7SOUT <= “0000110”;WHEN “100001” => LED7SOUT <= “0000110”;WHEN “100010” => LED7SOUT <= “0000110”;WHEN “100011” => LED7SOUT <= “0000110”;---35 11 WHEN “100100” => LED7SOUT <= “0000110”;---36 10 WHEN “100101” => LED7SOUT <= “0111111”;WHEN “100110” => LED7SOUT <= “0111111”;WHEN “100111” => LED7SOUT <= “0111111”;WHEN “101000” => LED7SOUT <= “0111111”;WHEN “101001” => LED7SOUT <= “0111111”;WHEN “101010” => LED7SOUT <= “0111111”;WHEN “101011” => LED7SOUT <= “0111111”;WHEN “101100” => LED7SOUT <= “0111111”;WHEN “101101” => LED7SOUT <= “0111111”;---45 01 WHEN OTHERS => NULL;END CASE;WHEN “011” =>---主绿支红状态 点亮主干道个位数字 OK CASE CNTIN IS WHEN “000000” => LED7SOUT <= “1111101”;---00 46 WHEN “000001” => LED7SOUT <= “1101101”;---01 45 WHEN “000010” => LED7SOUT <= “1100110”;WHEN “000011” => LED7SOUT <= “1001111”;WHEN “000100” => LED7SOUT <= “1011011”;WHEN “000101” => LED7SOUT <= “0000110”;WHEN “000110” => LED7SOUT <= “0111111”;---06 40 WHEN “000111” => LED7SOUT <= “1101111”;WHEN “001000” => LED7SOUT <= “1111111”;WHEN “001001” => LED7SOUT <= “0000111”;WHEN “001010” => LED7SOUT <= “1111101”;WHEN “001011” => LED7SOUT <= “1101101”;---11 35 WHEN “001100” => LED7SOUT <= “1100110”;WHEN “001101” => LED7SOUT <= “1001111”;WHEN “001110” => LED7SOUT <= “1011011”;WHEN “001111” => LED7SOUT <= “0000110”;WHEN “010000” => LED7SOUT <= “0111111”;---16 30 WHEN “010001” => LED7SOUT <= “1101111”;WHEN “010010” => LED7SOUT <= “1111111”;WHEN “010011” => LED7SOUT <= “0000111”;WHEN “010100” => LED7SOUT <= “1111101”;WHEN “010101” => LED7SOUT <= “1101101”;---21 25 WHEN “010110” => LED7SOUT <= “1100110”;WHEN “010111” => LED7SOUT <= “1001111”;WHEN “011000” => LED7SOUT <= “1011011”;WHEN “011001” => LED7SOUT <= “0000110”;WHEN “011010” => LED7SOUT <= “0111111”;---26 20 WHEN “011011” => LED7SOUT <= “1101111”;WHEN “011100” => LED7SOUT <= “1111111”;WHEN “011101” => LED7SOUT <= “0000111”;WHEN “011110” => LED7SOUT <= “1111101”;WHEN “011111” => LED7SOUT <= “1101101”;---31 15 WHEN “100000” => LED7SOUT <= “1100110”;WHEN “100001” => LED7SOUT <= “1001111”;WHEN “100010” => LED7SOUT <= “1011011”;WHEN “100011” => LED7SOUT <= “0000110”;WHEN “100100” => LED7SOUT <= “0111111”;---35 10 WHEN “100101” => LED7SOUT <= “1101111”;WHEN “100110” => LED7SOUT <= “1111111”;WHEN “100111” => LED7SOUT <= “0000111”;WHEN “101000” => LED7SOUT <= “1111101”;WHEN “101001” => LED7SOUT <= “1101101”;WHEN “101010” => LED7SOUT <= “1100110”;WHEN “101011” => LED7SOUT <= “1001111”;WHEN “101100” => LED7SOUT <= “1011011”;WHEN “101101” => LED7SOUT <= “0000110”;---45 01 WHEN OTHERS => NULL;END CASE;

WHEN OTHERS => NULL;END CASE;-----------WHEN “01” =>---主黄支红状态 OK CASE BITSEL IS WHEN “000” =>---主黄支红状态 点亮支干道十位数字 CASE CNTIN IS WHEN “000001” => LED7SOUT <= “0111111”;WHEN “000010” => LED7SOUT <= “0111111”;WHEN “000011” => LED7SOUT <= “0111111”;WHEN “000100” => LED7SOUT <= “0111111”;WHEN “000101” => LED7SOUT <= “0111111”;WHEN OTHERS => NULL;END CASE;WHEN “001” =>---主黄支红状态 点亮支干道个位数字 CASE CNTIN IS WHEN “000001” => LED7SOUT <= “1101101”;WHEN “000010” => LED7SOUT <= “1100110”;WHEN “000011” => LED7SOUT <= “1001111”;WHEN “000100” => LED7SOUT <= “1011011”;WHEN “000101” => LED7SOUT <= “0000110”;WHEN OTHERS => NULL;END CASE;WHEN “010”=>---主黄支红状态 点亮主干道十位数字 CASE CNTIN IS WHEN “000001” => LED7SOUT <= “0111111”;WHEN “000010” => LED7SOUT <= “0111111”;WHEN “000011” => LED7SOUT <= “0111111”;WHEN “000100” => LED7SOUT <= “0111111”;WHEN “000101” => LED7SOUT <= “0111111”;WHEN OTHERS => NULL;END CASE;WHEN“011” =>---主黄支红状态 点亮主干道个位数字 CASE CNTIN IS WHEN “000001” => LED7SOUT <= “1101101”;WHEN “000010” => LED7SOUT <= “1100110”;WHEN “000011” => LED7SOUT <= “1001111”;WHEN “000100” => LED7SOUT <= “1011011”;WHEN “000101” => LED7SOUT <= “0000110”;WHEN OTHERS => NULL;END CASE;WHEN OTHERS => NULL;END CASE;-----------------------WHEN “10” =>---支绿主红状态 OK CASE BITSEL IS WHEN “000” =>---支绿主红状态 点亮支干道十位数字 OK CASE CNTIN IS WHEN “000001” => LED7SOUT <= “1011011”;---01 25 WHEN “000010” => LED7SOUT <= “1011011”;WHEN “000011” => LED7SOUT <= “1011011”;WHEN “000100” => LED7SOUT <= “1011011”;WHEN “000101” => LED7SOUT <= “1011011”;WHEN “000110” => LED7SOUT <= “1011011”;---06 20 WHEN “000111” => LED7SOUT <= “0000110”;WHEN “001000” => LED7SOUT <= “0000110”;WHEN “001001” => LED7SOUT <= “0000110”;WHEN “001010” => LED7SOUT <= “0000110”;WHEN “001011” => LED7SOUT <= “0000110”;---11 15 WHEN “001100” => LED7SOUT <= “0000110”;WHEN “001101” => LED7SOUT <= “0000110”;WHEN “001110” => LED7SOUT <= “0000110”;WHEN “001111” => LED7SOUT <= “0000110”;WHEN “010000” => LED7SOUT <= “0000110”;---16 10 WHEN “010001” => LED7SOUT <= “0111111”;WHEN “010010” => LED7SOUT <= “0111111”;WHEN “010011” => LED7SOUT <= “0111111”;WHEN “010100” => LED7SOUT <= “0111111”;WHEN “010101” => LED7SOUT <= “0111111”;---21 05 WHEN “010110” => LED7SOUT <= “0111111”;WHEN “010111” => LED7SOUT <= “0111111”;WHEN “011000” => LED7SOUT <= “0111111”;WHEN “011001” => LED7SOUT <= “0111111”;---25 01 WHEN OTHERS => NULL;END CASE;WHEN “001” =>---支绿主红状态 点亮支干道个位数字 OK CASE CNTIN IS WHEN “000001” => LED7SOUT <= “1101101”;---01 25 WHEN “000010” => LED7SOUT <= “1100110”;WHEN “000011” => LED7SOUT <= “1001111”;WHEN “000100” => LED7SOUT <= “1011011”;WHEN “000101” => LED7SOUT <= “0000110”;WHEN “000110” => LED7SOUT <= “0111111”;---06 20 WHEN “000111” => LED7SOUT <= “1101111”;WHEN “001000” => LED7SOUT <= “1111111”;WHEN “001001” => LED7SOUT <= “0000111”;WHEN “001010” => LED7SOUT <= “1111101”;WHEN “001011” => LED7SOUT <= “1101101”;---11 15 WHEN “001100” => LED7SOUT <= “1100110”;WHEN “001101” => LED7SOUT <= “1001111”;WHEN “001110” => LED7SOUT <= “1011011”;WHEN “001111” => LED7SOUT <= “0000110”;WHEN “010000” => LED7SOUT <= “0111111”;---16 10 WHEN “010001” => LED7SOUT <= “1101111”;WHEN “010010” => LED7SOUT <= “1111111”;WHEN “010011” => LED7SOUT <= “0000111”;WHEN “010100” => LED7SOUT <= “1111101”;WHEN “010101” => LED7SOUT <= “1101101”;---21 05 WHEN “010110” => LED7SOUT <= “1100110”;WHEN “010111” => LED7SOUT <= “1001111”;WHEN “011000” => LED7SOUT <= “1011011”;WHEN “011001” => LED7SOUT <= “0000110”;---25 01 WHEN OTHERS => NULL;END CASE;WHEN “010” =>---支绿主红状态 点亮主干道十位数字 OK CASE CNTIN IS WHEN “000001” => LED7SOUT <= “1001111”;---01 30 WHEN “000010” => LED7SOUT <= “1011011”;---02 29 WHEN “000011” => LED7SOUT <= “1011011”;WHEN “000100” => LED7SOUT <= “1011011”;WHEN “000101” => LED7SOUT <= “1011011”;WHEN “000110” => LED7SOUT <= “1011011”;---06 25 WHEN “000111” => LED7SOUT <= “1011011”;WHEN “001000” => LED7SOUT <= “1011011”;WHEN “001001” => LED7SOUT <= “1011011”;WHEN “001010” => LED7SOUT <= “1011011”;WHEN “001011” => LED7SOUT <= “1011011”;---11 20 WHEN “001100” => LED7SOUT <= “0000110”;WHEN “001101” => LED7SOUT <= “0000110”;WHEN “001110” => LED7SOUT <= “0000110”;WHEN “001111” => LED7SOUT <= “0000110”;WHEN “010000” => LED7SOUT <= “0000110”;---16 15 WHEN “010001” => LED7SOUT <= “0000110”;WHEN “010010” => LED7SOUT <= “0000110”;WHEN “010011” => LED7SOUT <= “0000110”;WHEN “010100” => LED7SOUT <= “0000110”;WHEN “010101” => LED7SOUT <= “0000110”;---21 10 WHEN “010110” => LED7SOUT <= “0111111”;WHEN “010111” => LED7SOUT <= “0111111”;WHEN “011000” => LED7SOUT <= “0111111”;WHEN “011001” => LED7SOUT <= “0111111”;---25 06 WHEN OTHERS => NULL;END CASE;WHEN“011” =>---支绿主红状态 点亮主干道个位数字 OK CASE CNTIN IS WHEN “000001” => LED7SOUT <= “0111111”;---01 30 WHEN “000010” => LED7SOUT <= “1101111”;---02 29 WHEN “000011” => LED7SOUT <= “1111111”;WHEN “000100” => LED7SOUT <= “0000111”;WHEN “000101” => LED7SOUT <= “1111101”;WHEN “000110” => LED7SOUT <= “1101101”;WHEN “000111” => LED7SOUT <= “1100110”;---07 24 WHEN “001000” => LED7SOUT <= “1001111”;WHEN “001001” => LED7SOUT <= “1011011”;WHEN “001010” => LED7SOUT <= “0000110”;WHEN “001011” => LED7SOUT <= “0111111”;WHEN “001100” => LED7SOUT <= “1101111”;---12 19 WHEN “001101” => LED7SOUT <= “1111111”;WHEN “001110” => LED7SOUT <= “0000111”;WHEN “001111” => LED7SOUT <= “1111101”;WHEN “010000” => LED7SOUT <= “1101101”;WHEN “010001” => LED7SOUT <= “1100110”;---17 14 WHEN “010010” => LED7SOUT <= “1001111”;WHEN “010011” => LED7SOUT <= “1011011”;WHEN “010100” => LED7SOUT <= “0000110”;WHEN “010101” => LED7SOUT <= “0111111”;WHEN “010110” => LED7SOUT <= “1101111”;---22 09 WHEN “010111” => LED7SOUT <= “1111111”;WHEN “011000” => LED7SOUT <= “0000111”;WHEN “011001” => LED7SOUT <= “1111101”;---25 06 WHEN OTHERS => NULL;END CASE;

WHEN OTHERS => NULL;END CASE;------------

WHEN “11” =>---支黄主红状态 OK CASE BITSEL IS WHEN “000” =>---支黄主红状态 点亮支干道十位数字 CASE CNTIN IS WHEN “000001” => LED7SOUT <= “0111111”;WHEN “000010” => LED7SOUT <= “0111111”;WHEN “000011” => LED7SOUT <= “0111111”;WHEN “000100” => LED7SOUT <= “0111111”;WHEN “000101” => LED7SOUT <= “0111111”;WHEN OTHERS => NULL;END CASE;WHEN “001” =>---支黄主红状态 点亮支干道个位数字 CASE CNTIN IS WHEN “000001” => LED7SOUT <= “1101101”;WHEN “000010” => LED7SOUT <= “1100110”;WHEN “000011” => LED7SOUT <= “1001111”;WHEN “000100” => LED7SOUT <= “1011011”;WHEN “000101” => LED7SOUT <= “0000110”;WHEN OTHERS => NULL;END CASE;WHEN “010” =>---支黄主红状态 点亮主干道十位数字 CASE CNTIN IS WHEN “000001” => LED7SOUT <= “0111111”;WHEN “000010” => LED7SOUT <= “0111111”;WHEN “000011” => LED7SOUT <= “0111111”;WHEN “000100” => LED7SOUT <= “0111111”;WHEN “000101” => LED7SOUT <= “0111111”;WHEN OTHERS => NULL;END CASE;WHEN “011” =>---支黄主红状态 点亮主干道个位数字 CASE CNTIN IS WHEN “000001” => LED7SOUT <= “1101101”;WHEN “000010” => LED7SOUT <= “1100110”;WHEN “000011” => LED7SOUT <= “1001111”;WHEN “000100” => LED7SOUT <= “1011011”;WHEN “000101” => LED7SOUT <= “0000110”;WHEN OTHERS => NULL;END CASE;

WHEN OTHERS => NULL;END CASE;

------------END CASE;END PROCESS;END behav;

第三篇:基于FPGA的智能交通灯

设计题目: 基于FPGA的交通灯控制系统设计

专 业:

学生姓名: 学 号:

起迄日期: 2014.8.22.--2014.9.22.指导教师: 教研室主任:

目录

1.绪论..............................................................1 2.课题研究背景及意义................................................1 3.设计要求..........................................................1 4.设计方案..........................................................1 4.1方案比较....................................错误!未定义书签。4.2 方案说明...................................错误!未定义书签。5.VHDL语言介绍...................................错误!未定义书签。6.系统仿真..........................................................3 6.1 系统电路框图................................................4 6.2设计结果仿真.................................................4 7.心得体会..........................................................5 8.参考文献..........................................................6 7.附件..............................................................6

摘要:针对现实中越来越严重的城市交通拥堵现象,提出了一种城市十字路口交通信号灯控制与FPGA实现的新方法。设计的智能交通控制系统利用对相向车道采用不同步的红绿灯信号控制方法,能够减少交通资源浪费,大幅提高十字路口的车辆通行效率。利用超高速硬件描述语言VHDL设计十字路口交通信号灯控制器,实现主干道和支干道的交通控制功能,并通过Quartus II完成综合、仿真、进行管脚分配、绘出仿真波形及原理图。

关键字:硬件描述语言VHDL;交通信号灯;智能控制

1.绪论

智能的交通灯指挥着人们和各种车辆的安全运行,实现红、黄、绿灯的自动指挥是城乡交通管理现代化的重要课题。在城乡街道的十字交叉路口,为了保证交通秩序和行人的安全,一般在每条街道上各有一组红、黄、绿交通信号灯,其中红灯亮,表示该条道禁止通行;黄灯亮该条道路上未过停车线的停止通行,已过停车线的车辆继续通行;绿灯亮,表示该条道路允许通行。交通灯自动控制十字路口两组红、黄、绿交通灯的状态转换,指挥各种车辆和行人安全通行。实现十字路口交通管理自动化。

DEA技术的发展和应用领域的扩大与深入,在电子信息,通信,自动,控制及计算机应用等领域的重要性日益突出,因此本论文研究基于FPGA的交通灯设计。FPGA中有大量实现组合逻辑的资源,可以完成较大规模的组合逻辑电路设计,而其中相当数量的存储电路(触发器)又可完成复杂的时序逻辑电路设计。通过使用各种EDA工具,用原理图或硬件描述语言,可以很方便地将复杂的电路在FPGA中实现。像典型的数字系统分频器,数字钟,数字频率计等等都可用FPGA完成。本文以QuartusII 软件为开发平台,通过VHDL硬件描述语言以及原理图的输入方式来设计交通灯。

2.课题研究背景及意义

随着公路交通运输的发展,交通拥挤、道路阻塞和交通事故频繁发生等问题越来越严重地困扰着世界各大城市。相对于交通运输工具的飞速发展,我国交通配套设施建设明显滞后,道路安全网络、道路标识、交通指挥中心仍然不足。单独从车辆方面或道路方面考虑,均很难有效地解决交通问题。通过采用信息通信技术、电子技术以及其他科学技术把它们联系起来,并实现智能化的交通控制才能解决根本问题,交通信息化需要融合科技力量才能使目前的交通问题得到改善。

在现代文明高速发展的社会,道路的高度发达使得整个社会进步的速度进一步的加快,交通灯的出现是社会发展的必然产物。交通灯在道路事业中占有举足轻重的地位,它直接影响到公路以及市区内的通车质量。所以,智能交通灯的研究具有重大意义。

3.设计要求

主干道绿灯亮支干道红灯亮时间是50秒,接下来黄灯闪烁5秒,此时主干道的绿灯和支干道的红灯继续亮;然后是主干道红灯亮支干道绿灯亮,时间为20秒,再黄灯闪5秒同时主干道的红灯和支干道的绿灯也继续亮。

4.设计方案

首先根据系统的需要进行分析。系统要求主干道绿灯亮支干道红灯亮时间是50秒,接下来黄灯闪烁5秒,此时主干道的绿灯和支干道的红灯继续亮,然后是 主干道红灯亮支干道绿灯亮时间为20秒,再黄灯闪5秒同时主干道的红灯和支干道的绿灯也继续亮。

因此将整个系统分为计时模块和控制模块组成。计时模块中秒模块主要将50MHZ的时钟进行分频得到20ns的时钟信号,再将信号50000000倍得到秒信号。控制模块由交通灯控制模块以及黄灯闪烁模块构成。

Verilog HDL语言介绍 5.1 Verilog HDL特点

Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰地模拟、仿真语义。使用这种语言编写的模型可以方便地使用Verilog仿真器进行验证。Verilog HDL从C语言继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力和扩展模块。

Verilog HDL之所以成为和VHDL并驾齐驱的描述语言,以为它有如下特点:

(1)基本逻辑门,例如and、or和nand等都内置在语言中。

(2)用户定义原语(UDP)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。

(3)开关级基本结构模型,例如pmos 和nmos等也被内置在语言中。(4)提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。

(5)可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式—使用过程化结构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述建模。

(6)Verilog HDL中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。

(7)能够描述层次设计,可使用模块实例结构描述任何层次。设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级。

(8)设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。Verilog HDL不再是某些公司的专有语言而是IEEE标准。人和机器都可阅读Verilog 语言,因此它可作为EDA的工具和设计者之间的交互语言。

5.2Verilog HDL程序基本结构

模块是Verilog HDL的基本描述单位,描述某个设计的功能或结构及与其他模块通信的外部端口。一个模块的基本语法如下:

module module_name//模块名称

(port_list);//输入输出信号列表//说明 reg//寄存器 wire//线网

parameter//参数 input//输入信号 output//输出信号 inout//输入输出信号 function//函数 task//任务 …//语句

Initial statement Always statement Module instantiation// Gate instantiation// UDP instantiation// Continuous assignment// Endmodule 说明部分用于定义不同的项,例如模块描述中使用寄存器和参数、语句定义设计的功能和结构。说明部分和语句可以放置在模块的任何地方,但是变量、寄存器、线网和参数等的说明部分必须在使用前出现。为了使模块描述清晰和具有良好的可读性,最好将所有的说明部分放在语句前。

6.系统仿真

本文的仿真是在QuartuslI上进行的。QuartuslI 是 Altera 提供的 FPGA/CPLD 开发集成环境,Altera 是世界上最大的可编程逻辑器件供应商之一。QimrtiisII在21世纪 初推出,是Altera前一代FPGA/CPLD集成开发环境MAX+plusII的更 新换代产品,其界面友好,使用便捷。QuartiisII提供了一种与结构 无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件 编程。

Altera的QuartusII提供了完整的多平台设计环境,能满足各 种特定设计的需要,也是单芯片可编程系统(SOPC)设计的综合性环 境和SOPC开发的基本设计工具,并为Altera DSP开发包进行系统模 型设计提供了集成综合环境。

QuartusII包括模块化的编辑器。编辑器包括的功能模块有分析 /综合器、适配器、装配器、时序分析器、设计辅助模块、EDA网表 文件生成器、编辑数据接口等。可以通过选择Start Compilation来运行所有的编辑器模块,也可以选择单独运行各个模块。

基于Quartus II的设计流程:

(1)建立工作库文件夹和编辑设计文件(2)创建工程;(3)全程编译工程;(4)时序仿真;(5)引脚锁定;

(6)下载至硬件系统验证。

6.1 系统电路框图

系统整体电路设计采用原理图输入法,将各个模块包括子模块进行连接,得到系统的电路框图如下图所示。

图三 系统整体电路图

6.2设计结果仿真

利用Quartus II软件对本设计的程序进行编译,得到系统的仿真图。

交通灯运行时时序仿真图1

交通灯运行时时序仿真图1

7.心得体会

在这次课程设计中,我再一次的体验到了细心对一个编程者的重要性,和程序的规范性对于程序的重要性,这些平时我们忽略的问题,其实有时候关乎着我们编程的成功与否的。

在verilog语言中,我们必须注意其与C语言的异同,比如格式和变量定义,还有模块的调用,和时钟信号的应用。我觉得需要在以后多加练习,可以对以后的学习和工作带来莫大的帮助。这次的

课程设计相对以前的较难,其实就是对我们的一次考核,也是一次考验,它培养了学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程。然而从理论到实践的转化过程,我在做课程设计的近一个月时间里,有了更进一步的认识和了解,要想学知识要重在实践,要通过不断的实际操作才能更好地学习。

通过这次课程设计,我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能

力。在设计的过程中遇到问题,可以说得是困难重重,遇到了各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知解得不够深刻,掌握得不够牢固。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。

8.参考文献

(1)程云长.可编程逻辑器件与VHDL语言[M].北京:科学出版社,2005(2)黄智伟.全国大学生电子设计竞赛系统设计[M].北京:北京航空航天大学出版社,2006(3)黄智伟.全国大学生电子设计竞赛电路设计[M].北京:北京航空航天大学出版社,2006(4)黄智伟.全国大学生电子设计竞赛 常用电路模块制作[M].北京:北京航空航天大学出版社,2010(5)黄智伟等.基于NI multisim的电子电路计算机仿真设计与分析[M].北京:电子工业出版社,2007(6)黄智伟.印制电路板(PCB)设计技术与实践[M].北京:电子工业出版社,2009(7)高吉祥等.电子技术基础实验与课程设计[M].北京:电子工业出版社,2002(8)潘松.EDA技术实用教程[M].科学出版社.2005

7.附件 原程序

`timescale 100ms / 1us //程序中的时间单位和仿真精度。module signal_led(clk, rst_n, traffic_signal_master_red, traffic_signal_master_green, traffic_signal_master_yellow, traffic_signal_slave_red, traffic_signal_slave_green, traffic_signal_slave_yellow);input clk;input rst_n;output reg

traffic_signal_master_red;// 交通信号灯主干道红灯

output reg

traffic_signal_master_green;// 交通信号灯主干道绿灯

output reg

traffic_signal_master_yellow;// 交通信号灯主干道黄灯 output reg

traffic_signal_slave_red;// 交通信号灯次干道红灯

output reg

traffic_signal_slave_green;// 交通信号灯次干道绿灯

output reg

traffic_signal_slave_yellow;// 交通信号灯次干道黄灯

reg signal_red_led;reg signal_green_led;reg signal_yellow_led;reg [31:0] traffic_signal_cnt;parameter

LED_ON

= 1'b0;// 1亮

parameter

LED_OFF

= 1'b1;// 0灭

parameter

TIME_CELL

= 32'd50000000;// 时间单元时间 = Time_cell * 20ns(50MHz主频)parameter START = 32'd0;parameter MASTER_GREEN = TIME_CELL * 20;parameter MASTER_YELLOW_1 = TIME_CELL * 20 + TIME_CELL;parameter MASTER_YELLOW_2 = TIME_CELL * 20 + 2 * TIME_CELL;parameter MASTER_YELLOW_3 = TIME_CELL * 20 + 3 * TIME_CELL;parameter MASTER_YELLOW_4 = TIME_CELL * 20 + 4 * TIME_CELL;parameter MASTER_YELLOW_5 = TIME_CELL * 20 + 5 * TIME_CELL;parameter SLAVE_GREEN = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20;parameter SLAVE_YELLOW_1 = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20 + TIME_CELL;parameter SLAVE_YELLOW_2 = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20 + 2 * TIME_CELL;parameter SLAVE_YELLOW_3 = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20 + 3 * TIME_CELL;parameter SLAVE_YELLOW_4 = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20 + 4 * TIME_CELL;parameter TOTAL_TIME = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20 + 5 * TIME_CELL;

//******************************************************************* // 模块名称:时间计数种子 // 功能描述

//******************************************************************* always @(posedge clk or negedge rst_n)begin if(!rst_n)traffic_signal_cnt <= 32'h0;else if(traffic_signal_cnt == TOTAL_TIME)traffic_signal_cnt <= START;else traffic_signal_cnt <= traffic_signal_cnt+1;end //******************************************************************* // 模块名称:LED灯闪烁控制 // 功能描述

//******************************************************************* always @(posedge clk or negedge rst_n)begin if(!rst_n)

begin signal_red_led <= LED_OFF;signal_green_led <= LED_OFF;signal_yellow_led <= LED_OFF;end else begin case(traffic_signal_cnt)START

:

begin signal_red_led <= LED_OFF;signal_green_led <= LED_ON;signal_yellow_led <= LED_OFF;end MASTER_GREEN

:

begin signal_red_led <= LED_OFF;signal_green_led <= LED_ON;signal_yellow_led <= LED_ON;end MASTER_YELLOW_1 :

begin signal_red_led <= LED_OFF;signal_green_led <= LED_ON;signal_yellow_led <= LED_OFF;end MASTER_YELLOW_2 :

begin signal_red_led <= LED_OFF;signal_green_led <= LED_ON;signal_yellow_led <= LED_ON;end MASTER_YELLOW_3 :

begin signal_red_led <= LED_OFF;signal_green_led <= LED_ON;signal_yellow_led <= LED_OFF;end MASTER_YELLOW_4 :

begin signal_red_led <= LED_OFF;signal_green_led <= LED_ON;signal_yellow_led <= LED_ON;end MASTER_YELLOW_5 :

begin signal_red_led <= LED_ON;signal_green_led <= LED_OFF;signal_yellow_led <= LED_OFF;end SLAVE_GREEN

:

begin signal_red_led <= LED_ON;signal_green_led <= LED_OFF;signal_yellow_led <= LED_OFF;end SLAVE_YELLOW_1 :

begin signal_red_led <= LED_ON;signal_green_led <= LED_OFF;signal_yellow_led <= LED_ON;end SLAVE_YELLOW_2 :

begin signal_red_led <= LED_ON;signal_green_led <= LED_OFF;signal_yellow_led <= LED_OFF;end SLAVE_YELLOW_3 :

begin signal_red_led <= LED_ON;signal_green_led <= LED_OFF;signal_yellow_led <= LED_ON;end SLAVE_YELLOW_4 :

begin signal_red_led <= LED_ON;signal_green_led <= LED_OFF;signal_yellow_led <= LED_OFF;end endcase end end //******************************************************************* // 模块名称:主从LED输出 // 功能描述:

//******************************************************************* always @(posedge clk or negedge rst_n)begin if(!rst_n)begin traffic_signal_master_red <= LED_OFF;traffic_signal_master_green <= LED_OFF;traffic_signal_master_yellow <= LED_OFF;traffic_signal_slave_red <= LED_OFF;traffic_signal_slave_green <= LED_OFF;traffic_signal_slave_yellow <= LED_OFF;end else begin traffic_signal_master_red <= signal_red_led;traffic_signal_master_green <= signal_green_led;traffic_signal_master_yellow <= signal_yellow_led;traffic_signal_slave_red <= ~signal_red_led;traffic_signal_slave_green <= ~signal_green_led;traffic_signal_slave_yellow <= signal_yellow_led;end end endmodule

第四篇:基于FPGA的交通灯控制器设计

数字系统课程设计

基于FPGA的交通控制灯设计

姓名:

学号:

班级:

摘要

随着社会的发展,城市规模的不断扩大,城市交通成为制约城市发展的一大因素。人口和汽车日益增长,市区交通也日益拥挤,人们的安全问题当然也日益重要。因此,红绿交通信号灯成为交管部门管理交通的重要工具之一。有了交通灯,人们的安全出行也有了很大的保障。自从交通灯诞生以来,其内部的电路控制系统就不断的被改进,设计方法也开始多种多样,从而使交通灯显得更加智能化。尤其是近几年来,随着电子与计算机技术的飞速发展,电子电路分析和设计方法有了很大的改进,电子设计自动化也已经成为现代电子系统中不可或缺的工具和手段,这些都为交通灯控制系统的设计提供了一定的技术基础。本课程设计运用erilog HDL语言描述交通控制器,通过状态机计数法,实现设计所要求的交通灯控制及时间显示,并最后进行了软件实现,达到了系统要求的功能。

设计原理

1.1设计要求

设计一个交通控制器,用LED显示灯表示交通状态,并以7段数码显示器显示当前状态剩余秒数 主干道绿灯亮时,支干道红灯亮;反之亦然,二者交替允许通行,主干道每次放行35s,支干道每次放行25s。每次由绿灯变为红灯的过程中,亮光的黄灯作为过渡,黄灯的时间为5s。能进行特殊状态显示,特殊状态时东西、南北路口均显示红灯状态。用LED灯显示倒计时,并且能实现总体清零功能,计数器由初始状态开始计数,对应状态的显示灯亮。能实现特殊状态的功能显示,1.2设计思路和原理

本次设计是针对十字路口,进行南北和东西直行情况下交通灯控制。设定东西方向为主干道方向,根据交通灯的亮的规则,在初始状态下四个方向的都为红灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续35S后,主干道和支干道上的黄灯都亮启,持续5S后,主干道上红灯亮启,支干道上绿灯亮启持续25S,之后主干道和支干道上的黄灯都亮启5s,一个循环完成。循环往复的直行这个过程。其过程如下图所示:

0s主干道方向25s绿灯亮30s红灯亮黄灯亮65s支干道方向0s红灯亮35s绿灯亮黄灯亮60s65s

图1.交通灯点亮时间控制说明

1.3实现方法

本次采用文本编辑法,即利用Verilog HDL语言描述交通控制器,通过状态机计数法,实现设计所要求的交通灯控制及时间显示。设计中用两组红黄绿LED模拟两个方向上的交通灯,用4个7段数码管分别显示两个方向上的交通灯剩余时间,控制时钟由试验箱上频率信号提供。

Verilog HDL程序设计

2.1整体设计

根据上章设计原理,交通灯控制的关键是各个状态之间的转换和进行适当的时间延时,根据状态机的设计规范,本次设计了三个状态之间的循环转化,其真值表及状态转化图如下所示:

状状00状状00状状10状状11状状01状状01状状11状状10状状状状状状状状状状001状状状状状010状状状状状100状状状状状010状状状状状状状状状状100状状状状状010状状状状状001状状状状状010

图2.交通灯控制状态转化

说明:该状态图为交通灯在正常情况下的状态转化图,进入控制后,状态00时主干道绿灯及支干道红灯亮起,进入状态01后两路黄灯亮起,状态11时主干道红灯及支干道绿灯亮起。进入10状态两路黄灯亮起。结束一个循环,从00状态重新开始循环。

为实现控制与显示的功能,需要设计交通灯点亮顺序控制程序,倒数计时程序,七段数码管显示程序,数码管显示扫描程序,其系统结构图如下所示:

holdrst状状状状1Hz状状状状状状状状状状状状状状状状状状状clk1KHz状状状状状状状1Hz状状状状状状状状状状状状状状状状状状状状状 图3.交通灯控制系统结构图

其中rst为复位信号,clk为时钟信号,hold为特殊情况控制信号,输入hold时两个方向红灯无条件亮起。

2.2 具体设计

根据整体设计要求,编写各个功能部分Verilog HDL程序,设置各输入输出变量说明如下 clk: 为计数时钟; qclk:为扫描显示时钟;

en: 使能信号,为1 的话,则控制器开始工作; rst: 复位信号,为1的话,控制及技术回到初始状态;

hoid:特殊情况控制信号,为1的话,则两个方向无条件显示为红灯;

light1: 控制主干道方向四盏灯的亮灭;其中,light1[0]~light[2],分别控制主干道方向的 绿灯、黄灯和红灯;

light2: 控制支干道方向四盏灯的亮灭;其中,light2[0] ~ light2[2],分别控制支干道方向的 绿灯、黄灯和红灯;

num1: 用于主干道方向灯的时间显示,8 位,可驱动两个数码管; num2: 用于支干道方向灯的时间显示,8 位,可驱动两个数码管; counter:用于数码管的译码输出; st1,st2:数码管扫描信号。输入输出及中间变量设置如下:

module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0] num1,num2;reg[7:0] red1,red2,green1,green2,yellow1,yellow2;

1.二极管点亮控制

该部分程序的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的译码电路。此外,当检测到特殊情况(hold=‘1’)发生时,无条件点亮红灯的二极管,当检测到复位信号,两个方向计数与控制回复到00状态。因为主、支干道两个方向二极管点亮的顺序与延迟时间不同,顾编写两个独立的部分来控制,具体程序如下: 1)主干道方向 always @(posedge clk)begin

if(rst)//复位与特殊情况控制

FPGA交通灯实验报告

第一篇:FPGA交通灯实验报告 交通灯实验报告 一,实验目的 实现两路信号灯交替亮起,并利用两组数码管分别对两路信号...
点击下载
分享:
最新文档
热门文章
    确认删除?
    QQ
    • QQ点击这里给我发消息
    微信客服
    • 微信客服