verilog课程设计—交通灯

合集下载

Verilog交通灯

Verilog交通灯

实验报告

班级:微电2班

组员:刘家豪门珺

学号:11180102

目录

一、概述 (4)

二、任务功能 (5)

三.系统设计 (5)

1.工作原理 (5)

2.系统设计方案 (6)

四、程序设计 (7)

1.verilog源程序 (7)

2.设备选择 (11)

3引脚绑定 (12)

五、结束语 (13)

一:概述

HDL(Hardware Description Language,硬件描述语言)是一种描述硬件所做工作的语言。目前,电子系统向集成化、大规模和高速度等方向发展,以硬件描述语言和逻辑综合为基础的自顶向下的电路设计方法在业界得到迅猛发展,HDL在这种形势下显示出了巨大的优势,展望将来HDL在硬件设计领域的地位将与C和C++在软件设计领域地位一样,在大规模数字系统的设计中,它将逐步取代传统的逻辑状态表和逻辑电路图等硬件描述方法而成为主要的硬件描述工具。

Verilog HDL是工业和学术界的硬件设计者所使用的两种主要的HDL之一,另一种是VHDL。现在它们都已成为IEEE标准。两者各有特点,但Verilog HDL 拥有更悠久的历史、更广泛的设计群体,资源也远比VHDL丰富,且非常容易学习掌握。

Quartus简介:

Quartus II 是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL 以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

FPGA课程设计交通灯信号控制器的设计报告

FPGA课程设计交通灯信号控制器的设计报告

交通灯信号控制器的设计报告

学院

专业

班级

学号

姓名

交通灯信号控制器的设计

1、实验目的

(1)熟悉QuartusⅡ/ISE Design Suite/ispLEVER软件的基本使用方法。

(2)熟悉GW48-CK或其他EDA实验开发系统的基本使用方法。

(3)学习和掌握Verilog HDL过程区块语句、if条件语句、case 选择语句、for循环语句和元件实例化语句等的综合使用。

(4)学习计数器、分频器、选择器等Verilog HDL基本逻辑电路、动态扫描显示电路和状态机控制电路的综合设计应用。

2、实验要求

设计并调试好一个十字交叉口的交通灯信号控制器,要求为:(1)设置两个开关SW1、SW2,其中固定开关实现交通警察人为监督交通秩序和无人自动控制交通秩序之间的切换,默认开关置于高电平端,为自动控制模式—交通灯按事先的规定工作,开关置于低电平时,为人为监督控制模式(交通灯不再工作)。点动开关SW2用于整个系统的总复位,如系统出现故障,则需要总复位。

(2)当交通灯处于无人控制自动状态时,若方向灯1绿灯亮,则方向2红灯亮。计数55s后,方向1的绿灯熄灭、黄灯亮,再计数5s后,方向1的红灯亮,黄灯灭,同时方向2的绿灯亮,然后方向2重复方向1的工作过程,这样就实现了无人自动控制交通灯。有关控制的定时使用倒计时方式,计时过程用数码管显示。

3、总体设计思路

3.1系统组成

交通灯控制器拟由单片的CPLD/FPGA来实现,结合设计任务要求和确定的实现方案,按照自顶向下的层次化设计方法,整个系统可分为6个模块组成。

交通信号灯控制器的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 y

V 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 交通灯状态示意表

基于FPGA的交通灯控制电路设计

基于FPGA的交通灯控制电路设计

基于FPGA的交通灯控制电路设计

本文介绍了一种基于FPGA的交通灯控制电路设计。交通灯控制是城市交通管理的一个重要部分,它有助于维护交通秩序,减少交通事故,提高交通效率。在本电路设计中,我

们使用FPGA作为主控制器,并通过数码管、按钮和LED模块与外部交互。同时,我们还采用了状态机设计方法,以实现灵活的控制逻辑和连续的动态过渡。

首先介绍了本电路设计的硬件设计。在本设计中,我们使用了FPGA作为主控制器,数码管用于显示当前状态,按钮用于进行手动控制,LED模块用于显示当前灯颜色。在硬件

设计中,我们通过适当的寄存器和时钟模块,实现了稳定的时序控制和同步操作。

接着,我们介绍了本电路设计的软件设计。在软件设计中,我们采用了状态机设计方法,将交通控制逻辑分为多个状态,通过状态间的转移完成交通灯的切换控制。具体地,

我们将交通灯控制状态划分为三种:绿灯、黄灯和红灯。在每种状态下,我们通过计数器

和状态转移条件来实现精确的时间控制和灯颜色的自动切换。同时,为了提高控制的灵活性,我们设计了手动控制模式,让用户可以通过按钮手动切换交通灯状态。

最后,我们介绍了本电路设计的实现结果。在实现过程中,我们使用了Quartus II软件进行综合、布局和验证,并将设计的电路下载到FPGA开发板上进行实验。实验结果表明,本交通灯控制电路设计实现了稳定、灵活和精确的交通控制,能够满足不同的交通道路需求。

综上所述,本文介绍了一种基于FPGA的交通灯控制电路设计,通过硬件和软件设计,实现了稳定、灵活和精确的交通控制。该设计可以为城市交通管理提供帮助,为交通事故

数电课程设计--交通灯控制逻辑电路设计

数电课程设计--交通灯控制逻辑电路设计

数电课程设计--交通灯控制逻辑电路设计

江苏科技大学电子信息学院

数字电子技术实验课程设计报告

指导老师: 李绍鹏

学院: 电子信息学院

班级: 11403022

学生(学号): 孙磊(1140302219)

目录

课题一数字电子钟

课题二交通灯控制逻辑电路设计

(注:由于Quartusii 9.0不支持中文输入,但支持中文复制,所以以下代码文字说明均为后期制作)

课题一数字电子钟

任务:用文本法设计一个能显示时、分、秒的数字电子钟

要求:1.设计由20mhz有源晶振电路产生标准信号的单元电路;

2.时为00~23六十进制计数器,分、秒为00~59六十进制计数器;

3.能够显示出时、分、秒;

4.具有清零,调节分钟的功能;

5.模拟钟摆功能;

6.具有整点报时功能,整点报时的同时声响电路发出叫声;

7.对时、分、秒单元电路进行仿真并记录。

本文利用Verilog HDL语言自顶向下的设计方法设计多功能数字钟,并通过仿真和下载,实现其基本功能。

一.顶层文件

module top(

CLK,SET,EN,RE, //CLK==20M

HZ SET调节分钟

LED_5,OUT,

QH1,QH0,QM1,QM0,QS1,QS0

);

input CLK,SET,RE,EN;

output OUT; //OUT报时

output [3:0] QH1,QH0,QM1,QM0,QS1,QS0;

output [4:0] LED_5;

wire

clk1khz,clk250hz,clk1hz,m1,b2,b3,b4;

wire [5:0] s1,m2,h3;

//---------------分频-----------------------------------------

verilog HDL课程设计之交通灯控制电路

verilog HDL课程设计之交通灯控制电路

课程设计任务书

(理工科类)

Ⅰ、课程设计(报告)题目:

《HDL项目设计》交通灯控制电路

Ⅱ、课程设计(论文)工作内容

一、课程设计目标

1、培养综合运用知识和独立开展实践创新的能力;

2、《硬件描述语言》是一门技术性、应用性很强的学科,实验课教学是它的一个极为重要的环节。不论理论学习还是实际应用,都离不开实验课教学。如果不在切实认真地抓好学生的实践技能的锻炼上下功夫,单凭课堂理论课学习,势必出现理论与实践脱节、学习与应用脱节的局面。《HDL项目设计》的目的就是让同学们在理论学习的基础上,通过完成一个涉及时序逻辑、组合逻辑、声光输出的,具有实用性、趣味性的小系统设计,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对分析、解决实际的数字电路问题进一步加深认识,为今后能够独立进行某些数字应用系统的开发设计工作打下一定的基础。

二、研究方法及手段应用

1、将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务;

2、通过EDA实验箱进行实际调试,实现软件的功能。

三、课程设计预期效果

1、完成实验环境搭建;

2、(1)设计一个十字路口的交通灯控制电路,每条路配有红、黄、绿交通信号灯,通过电

路对十字路口的两组交通灯的状态实现自动循环控制;

(2)实现东西车道和南北车道上的车辆交替运行,每次通行时间为20秒;

(3)要求黄灯亮3秒后,红灯才能转为绿灯,黄灯亮时要每秒闪亮一次;

(4)东西车道和南北车道每次通行的时间不同且可调。

学生姓名:专业年级:

摘要

本次课程设计通过HDL技术设计交通灯控制系统,其设计描述可被不同的工具所支持,可用不同器件来实现。利用Verilog HDL语言自顶向下的设计方法设计交通灯控制系统,使其实现道路交通的快速正常运转,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点,并通过Quartus II和ModelSim完成综合、仿真。此程序下载到FPGA芯片后,可应用于实际的交通灯控制系统中。通常的设计方法基于中、小规模集成电路进行,电路元件多、接线复杂、故障率高。随着大规模集成电路的发展、EDA技术的出现,数字电路的设计进入了一个崭新阶段。FPGA是一种用户根据各自需要而自行构造逻辑功能的数字集成电路,其种类很多,内部结构也不同,但共同的特点是体积小、使用方便。本论文介绍了用Verilog HDL语言设计交通灯控制器的方法,并在Quartus II 系统对FPGA芯片进行编译下载,由于生成的是集成化的数字电路,没有传统设计中的接线问题,所以故障率低、可靠性高,而且体积非常小。本论文通过EDA设计,利用Verilog HDL语言模拟仿真交通灯控制电路。说明EDA技术在数字电路设计中的优越性。

交通灯实验报告计划

交通灯实验报告计划

基于 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

状态 4:状态 1:

骨干道红灯亮骨干道绿灯亮

支干道黄灯亮支干道红灯亮

5 秒35 秒

状态 3:状态 2:

骨干道红灯亮骨干道黄灯亮

支干道绿灯亮支干道红灯亮

25 秒 5 秒

3.2 实现方法

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

verilog交通灯模块例化代码

verilog交通灯模块例化代码

module piii(reset,clk,numx,redx,greenx,yellowx,numy,redy,greeny,yellowy,num,num1,num2);input reset;input clk;output redx;output greenx;output yellowx;output redy;output greeny;output yellowy;output [4:0] numx;output [4:0] numy;output [6:0] num;output [6:0] num1;output [6:0] num2; mclk cl(.clk(clk),.reset(reser),.num(num));trafficx xx(.clk(clk),.reset(reset),.num1(num1),.redx(redx),.greenx(greenx),.yellowx(yellowx),.numx(numx));trafficy yy(.clk(clk),.reset(reset),.num2(num2),.redy(redy),.greeny(greeny),.yellowy(yellowy),.numy(numy) );endmodulemodule mclk(clk,reset,num);input clk;input reset;output num;reg [6:0] num; always@(posedge clk or posedge reset)beginif(reset)num<=0;else if(num==59)num<=0;elsenum<=num+1;endendmodulemodule trafficx(clk,reset,num1,redx,greenx,yellowx,numx);input clk;input reset;output num1;output redx;output greenx;output yellowx;output numx;reg redx;reg greenx;reg yellowx;reg [6:0] numx;reg [6:0] num1;parameter [2:0] red=3'b001;parameter [2:0] green=3'b010;parameter [2:0] yellow=3'b100;reg [2:0] state;reg [2:0] nextstate;always@(posedge clk or posedge reset)beginif(reset)state<=red;elsestate<=nextstate;endalways@(num1)begincase(state)red:beginif(num1>7'd29)beginnextstate<=green;redx<=0;greenx<=1;yellowx<=0;numx<=7'd54-num1;endelsebeginnextstate<=red;redx<=1;

Verilog HDL实现 交通灯

Verilog HDL实现 交通灯

可编程逻辑器件原理

实验交通灯控制器

1 实验内容:

(1)任务:实现东西方向和南北方向(或左右方向和上下方向)的交通灯的控制

(2)要求:

•东西干道上的交通灯一般保持为绿灯,直到南北干道上出现汽车时,反正亦然;

•汽车在东西干道上时,在给定时间内干道上的交通灯为绿灯,达到给定时间后要过渡到红灯,会有小许时间的黄灯显示这个过渡,以表示将要变成红灯,同理在南北干道上的显示也一样;

•每种交通灯亮的时间需要显示出来;

•遇到紧急情况时需要将计时器和所有灯置位,也就是计数器为零,所有灯处于灭的状态。

2实验源程序

module jiangtd(clk,rst,leftr,upd,counter,key);

input clk,rst,key;

output leftr,upd,counter;

reg[4:0]counter;

reg[2:0]leftr,upd;

reg[5:0]state;

integer i;

reg[1:0] cunt;

reg cp_t;

wire cp;

//分频注意:分频信号需是线形

//如果将液晶分频为1s,只需将cunt==2改为cunt==24999 999;

always@(posedge clk or negedge rst)

begin

if(!rst)

cunt=0;

else if(cunt==2)

begin

cunt<=0;

cp_t=~cp_t;

end

else

cunt<=cunt+1;

end

assign cp=cp_t; //********

//说明:左右方向leftr亮绿灯亮4秒,黄灯亮2秒。南北方向upd绿色亮4秒,黄灯亮2秒

数电课程设计---交通信号灯控制电路

数电课程设计---交通信号灯控制电路

数电课程设计---交通信号灯控制电路

西北工业大学

课程设计报告

题目: 交通信号灯控制电路

学院:航海学院

班级:03051001班

学生(学号):

学生(学号):

日期:2013 年 1 月

摘要

Verilog HDL 作为一种规范的硬件描述语言,被广泛应用于数字电子系统设计。它允许设计者进行各种级别的逻辑设计,也可以进行数字逻辑系统的仿真验证、时序分析、逻辑综合操作。本文介绍了应用Verilog HDL语言自顶向下的设计方法设计交通灯控制系统,使其实现道路交通的正常运转,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点。通过Quartus Ⅱ完成了程序的编写、编译与仿真,生成顶层文件后下载到芯片CycloneⅢ EP3C16F484C6芯片上,在DE0开发板上进行验证。验证结果表明,该设计可以完成交通灯控制的相关要求。

关键词:交通信号灯控制 Verilog HDL Quartus Ⅱ DE0

目录

一、课程设计目的

二、设计任务与要求

三、方案设计

四、模块设计

五、程序代码

六、开发板验证

七、遇到问题与解决办法

八、总结

九、参考文献

十、附录(管脚对应关系)

一、课程设计目的

设计目的:

初步了解掌握硬件描述语言,体会自顶向下的设计思想,锻炼查阅资料与知识应用的能力。

二、设计任务与要求

设计任务:

设计一个十字路口的交通灯控制电路,要求甲车道和乙车道两条交叉道路上的车辆交替运行

设计要求:

1、南北和东西方向各有一组绿、黄、红灯用于指挥交通,绿灯、黄

灯和红灯的持续时间分别为20秒、5秒和25秒;

2、当有特殊情况(如消防车、救护车等)时,两个方向均为红灯亮,

基于verlilog hdl的交通信号灯电路设计

基于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),计数器的值递增。

EDA课程设计交通灯

EDA课程设计交通灯

设计题目:交通信号控制器班级:

学号:

姓名:

指导老师:

设计时间:2023年4月

交通信号控制器的VHDL设计

一、设计任务:

模拟十字路口交通信号灯的工作过程,运用实验板上的两组红、黄、绿LED作为交通信号灯,设计一个交通信号灯控制器。规定:

(1)交通灯从绿变红时,有4秒黄灯亮的间隔时间;

(2)交通灯红变绿是直接进行的,没有间隔时间;

(3)主干道上的绿灯时间为40秒,支干道的绿灯时间为20秒;

(4)在任意时间,显示每个状态到该状态结束所需的时间。

支干道

主干道

图1 路口交通管理示意图

表1 交通信号灯的4种状态

二、设计目的:

设计交通灯控制系统重要是为了实现城市十字交叉路口红绿灯的控制。通过对QuartusII软件使用方法与技巧的学习,掌握VHDL程序设计的实现,熟悉可编程逻辑器件的使用。同时加深对交通灯控制系统的了解与应用。

三、设计方案:

图2 交通信号灯控制器的原理框图

信号灯输出

图3 交通信号灯控制器程序原理框图

四、程序清单和说明:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY TRAFFIC IS

PORT (CLK: IN STD_LOGIC;

LED7S1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--数码管高位显示数字

LED7S2: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--数码管低位显示数字

LIGHT: OUT STD_LOGIC_VECTOR(5 DOWNTO 0));--各交通灯显示

用verilog语言编写交通灯程序

用verilog语言编写交通灯程序

交通灯

一、实验目的

写一个交通灯,要求:

①有东西南北四个方向,两组交通灯轮流交替变换,其中,红灯时间为30

个时间单位,绿灯时间为25个时间单位,黄灯时间为5个时间单位。最后用modelsim软件进行仿真。

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

二、实验原理

根据实验要求的逻辑功能描述,可以分析得出原理图如下:

控制器即可以设计为一个有限状态机的形式:

E-W方向S-N方向

状态R Y G R Y G

1 0 0 1 0 0 IDLE

1 0 0 0 0 1 S1

1 0 0 0 1 0 S2

1

0 0 1 1 0 0 S3

0 1 0 1 0 0 S4

根据实验要求画出控制器的状态转移图如下:

三、代码

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)

2

if(!rst)

begin

state〈=Idle;

end

else

casex(state)

Idle: if(rst)

begin

state〈=s1;

end

s1:if(count=='d25)

begin

state<=s2;

end

s2: if(count=='d30)

begin

state〈=s3;

交通信号灯控制器代码及说明

交通信号灯控制器代码及说明

课程设计报告

课程名称: FPGA现代数字系统设计

设计名称:交通信号灯控制器

姓名: * * *

学号: ********** 专业:通信

指导教师:* * *

起止日期: 2010.12.25 - 2011.1.9

课程设计任务书设计名称:

一、设计目的和意义

通过应用Verilog语言在QuartusⅡ软件平台上设计交通信号灯控制器,并借助硬件来测试仿真效果。通过课程设计,熟悉硬件编程语言的应用,特别是有限状态机的灵活使用,为以后进一步的学习实践打下良好的基础。

二、设计原理

(1) 主、支干道用传感器检测车辆到来情况,实验电路用逻辑开关代替。

(2) 选择1HZ时钟脉冲作为系统时钟。

(3) 45s、25s、5s定时信号可用顺计时,也可用倒计时,计时起始信号由主控电路给出,每当计满所需时间,启、闭三色信号灯,并启动另一计时电路。

(4) 交通灯状态变化如表1及图1所示:

表1:交通灯状态图

图1:交通灯状态图

(5) 交通灯设计输入信号4个:CLK(时钟),EN(使能),EMERGENCY(紧急),BCHECK(检测) ;输出信号4个:LAMPA(主干道信号灯),LAMPB(支干道信号灯),ACOUNT(主干道计数器),

BCOUNT(支干道计数器)。交通灯控制原理如图2所示。

图2:交通灯原理图

三、详细设计步骤

(1) 确定4个输入信号与4个输出信号,具体见图2;

(2) 将50MHZ时钟分频为1MHZ;

(3) 设计红黄绿3中信号灯切换的时间及顺序;

(4) 设计支路检测状态下的信号灯切换;

(5) 设计紧急(EMERGENCY)状态下信号灯的切换;

红绿灯编程

红绿灯编程

Verilog——交通灯 三、 代码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;Verilog——交通灯 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;endVerilog——交通灯 s2: 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)Verilog——交通灯 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));Verilog——交通灯 endmodule2、激励`timescale 1ns/100psmodule traffic_lights_tb; reg clk,rst,en;wire[2:0] ew,sn;wire[5:0]out;traffic_lights_top m( );always#5 clk=~clk;initialen<=1;initialbeginclk<=1; en<=0; rst<=0; #5 rst<=1; endendmodule.clk(clk), .rst(rst), .en(en), .ew(ew), .sn(sn), .out(out)五、波形说明波形图中,从上至下依次为:时钟信号clk、复位信号rst、计数器使能端en、东西方向上灯的状态ew、南北方向上灯的状态sn、计数器的输出out。该程序实现的功能是在一个十字路口的交通灯的轮流交替变换:图一可以完整的看到60个时间单位内两个方向上灯交替的状况 图二可以清楚的看到在时间从0——30过程中灯的跳变时间和结果。 五、 实验过程中遇到的问题及解决方法1、在实验过程中得到的波形图跟我设计的时间间隔不一致,仔细检查过后第7/8页发现是因为控制器和计数器没有很好的连接在一起,导致灯的跳变跟计数器的控制脱离了,修改之后得到时间间隔比例跟设计一致的波形。2、在检查波形的过程中发现计数器实现的不是模60,而是模64,将计数器程序中的选择条件从if(!en)改为if(!en&&out<’d60)之后得到了自己想要

verilog交通灯代码

verilog交通灯代码

module traffic(clk,en,lampa,lampb,qout,COM);

output [3:0] COM;

output [7:0] qout;

output [3:0] lampa,lampb; //用于控制东西、南北方向四盏灯的亮灭input clk,en;

reg [3:0] COM;

reg [7:0] qout;

reg [7:0] acount,bcount;

reg [7:0] numa,numb; //用于控制东西、南北方向灯的显示时间reg tempa,tempb;

reg[2:0] counta, countb;

reg[7:0] ared ,ayellow,agreen,aleft,bred,byellow,bgreen,bleft;

reg[3:0] lampa,lampb;

reg clk_M,clk_HZ;

reg[1:0] count;

integer i,j;

reg [3:0] date;

initial

begin

count <= 0;

i <= 0;

j <=0;

end

always @(posedge clk) //分频,用于数码管的扫描

begin

if(i == 120000)

begin i = 0;

clk_M <= ~clk_M;

end

else i <= i+1;

end

always @(posedge clk) //分频,计数

begin

if(j == 25000000)

begin j = 1;

clk_HZ <= ~clk_HZ;

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

课程论文

论文题目基于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盏灯依次按如下顺序点亮,并不断循环:绿灯----黄灯----红灯,并且每个方向红灯亮的时间应该与另一个方向绿灯、黄灯亮的时间相等。黄灯所起的作用是用来在绿灯后进行缓冲,以提醒行人该方向马上要禁行了。在使能控制信号(EN)控制时系统工作,并且要求有两个控制输入信号:即复位信号(Reset)和备用模式设置信号(Standby),在复位信号控制时,两个方向均为红灯,在备用模式设置信号控制时,两个方向均为黄灯。

1.4系统设计框图

系统采用的时钟频率为10KHZ,经分频为1HZ后送入控制计时电路,同时送入控制计时电路的还有控制信号M2M1M0以及复位信号RST,控制交通灯的运行状态。经处理后输出LED灯以及数码管显示电路的控制信号,从而完成整个电路的控制与实现。

时钟CLK10K 分频CLK1

复位RST M2

M1

M0

复位RST

复位RST

时钟CLK10K B 组信号灯A 组信号灯

分频clk1

控制计

时电路

数码管显示电路AL AR AY AG

BL BR BY BG

图1 系统设计示意图

2.交通信号控制器具体模块设计

2.1时钟分频模块设计

系统的时钟输入为10KHZ的脉冲,而系统时钟计时模块需要1HZ的脉冲。分频模块主要为系统提供所需的时钟计时脉冲。该模块将10KHZ的脉冲信号进行分频,产生1S的方波(占空比为50%),作为系统时钟计时信号。计时模块用来设定路口计时器的初值,并为扫描显示译码模块提供倒计时时间。

Verilog HDL源代码如下:

module fenpin(clk10k,rst,clk1); //将10K的频率分频为1

input clk10k,rst;

output clk1;

reg [7:0]j;

reg clk1;

always@(posedge clk10k or posedge rst)

if(rst)begin

clk1<=0;

j<=0;

end

else if(j==9999)begin

j<=0;

clk1<=~clk1;

end

else j<=j+1;

Endmodule

2.2控制模块设计

Verilog HDL源代码如下:

module control(EN_in,SW1,RST,Red1,Red2,Yellow1,Yellow2,Green1,Green2);

output Red1;

output Red2;

output Yellow1;

output Yellow2;

output Green1;

output Green2;

input [1:0] EN_in;

input SW1;

input RST;

reg Red1,Red2,Yellow1,Yellow2,Green1,Green2,D_out;

always @(EN_in,RST,SW1)

begin

if(SW1==0||RST==0) {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b0;

else

begin

case(EN_in)

2'b00 : {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b010010;

2'b01 : {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b011000;

2'b10 : {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b100001;

2'b11 : {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b100100;

default : {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b0;

endcase

end

end

Endmodule

2.3倒计时选择模块

Verilog HDL源代码如下:

module counter55(C_CLK,RST,C_EN,D_OUT1,D_OUT0,C_out);

output C_out;

output [3:0] D_OUT1;

output [3:0] D_OUT0;

input C_CLK;

input RST;

input C_EN;

reg [3:0] D_OUT1;

reg [3:0] D_OUT0;

reg C_out;

reg [3:0] CData1;

reg [3:0] CData0;

相关文档
最新文档