学号: 成绩:
河北联合大学电气工程学院
《综合性课程设计报告
——交通灯控制器设计》
专 业:电子科学与技术
班 级:姓 名:__ 张___ 指导教师:__________
2015年1月9日
交通灯控制设计
作者:张桂明
摘要:本次课设是目的是通过Verilog_HDL语言对交通灯控制的设计,是同学们熟悉并掌握EDA技术、培养综合应用数字电子技术、EDA设计工具、HDL语言等各领域知识的能力、提高设计能力和实际操作能力。本课题是利用Verilog_HDL语言自顶而下的设计方法设计交通的控制系统,并通过QuartusⅡ和ModelSim完成综合、仿真,对FPGA芯片进行编译下载。把程序下载到FPGA芯片后,由于生成的是集成电路,所以故障率低、可靠性高、体积比较小,可应用于实际的交通灯控制系统中,使其实现道路交通的快速正常运转。随着大规模集成电路的发展、EDA技术随之出现,本课题说明了EDA技术在数字电路设计中的优越性。
关键词:Verilog_HDL FPGA 交通灯控制器 硬件描述语言
1、简介
1.1课程设计的目的和内容
用Verilog HDL语言设计实现一个交通灯控制器电路:十字路口A方向和B方向各设红、黄、绿和左拐四盏灯,两个方向各种灯亮的时间能够进行设置和修改,此外,假设A方向是主干路,车流量大,因此A方向通行的时间应比B方向长;四盏灯按合理的顺序亮灭,并能将灯亮的时间以倒计时的形式显示出来。每个方向四种灯依次按如下顺序点亮,并不断循环:绿灯—黄灯—左拐灯—黄灯—红灯,并且每个方向红灯亮的时间应该与另一方向绿、黄、左拐、黄灯亮的时间相等。黄灯所起的作用是用来在绿灯和左拐灯后进行缓冲。在本课程设计中,着重培养学生的如下能力:熟悉EDA技术概况。培养综合应用数字电子技术、EDA设计工具、HDL语言等各领域知识的能力。提高设计能力和实际操作能力,使学生能够独立完成具有一定难度的数字电子系统的设计,并锻炼动手实践能力。
1.2 Verilog语言简介
Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design
Automation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。
1.3 Verilog HDL 的设计流程
1)文本编辑:用任何文本编辑器都可以进行,也可以用专用的 HDL 编辑环境。通常 Verilog HDL 文件保存为 .v 文件。
2)功能仿真:将文件调入 HDL 仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只有在布线完成之后,才进行时序仿真) 。
3)逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式。逻辑综合软件会生成 .edf ( EDIF )的 EDA 工业标准文件。 (最好不用 MAX+PLUS II 进行综合,因为只支持 VHDL/Verilog HDL 的子集)
4)布局布线:将 .edf 文件调入 PLD 厂家提供的软件中进行布线,即把设计好的逻辑安放到 CPLD/FPGA 内。
5)时序仿真:需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序也叫后仿真。
2、总体设计
每个方向四种灯依次按如下顺序点亮,并不断循环:绿灯—黄灯—左拐灯—黄灯—红灯,并且每个方向红灯亮的时间应该与另一方向绿、黄、左拐、黄灯亮的时间相等。黄灯所起的作用是用来在绿灯和左拐灯后进行缓冲,以提醒行人及驾驶员该方向上要禁行了;信号灯变换次序为:A主干道 每次放行 40 秒,亮 5 秒黄灯让行驶中的车辆有时间停到禁行线外,左拐放行 15 秒,亮 5 秒黄灯;支干道放行 30 秒,亮 5 秒黄灯,左拐放行 15 秒,亮 5 秒黄灯......,各计时电路位倒计时显示。
图1 设计流程图
根据系统的功能要求, 可分为四个部分来实现, 分别是定时模块, 主控电路, 译码驱动电路和扫描显示几部分。 分频部分是把外部提供的 1Hz 进行分频得到系 统工作需要的工作脉冲,显示部分包括两个内容,一个是主干道红绿灯显示,另 一个是支干道红绿灯显示。然后将红绿灯显示时间以 BCD 码形式显示出来,显示 模块将其译码轮流扫描显示 4 具有四种信号灯的交通灯控制器设计如图2
交通信号灯控制器系统工作流程
(1)主干道放行亮绿灯 40 秒,支干道红灯显示 65 秒;
(2)主干道绿灯转黄灯 5 秒,支干道红灯显示 25 秒
(3)主干道黄灯转左拐 15 秒,支干道红灯显示 20 秒;
(4)主干道左拐转红灯 55 秒,支干道绿灯显示 30 秒;
(5)主干道红灯显示 25 秒,支干道绿灯转黄灯 5 秒;
(6)主干道红灯显示 20 秒,支干道黄灯转左拐 15 秒;
(7)主干道亮红灯 5 秒,支干道左拐转黄灯 5 秒;
(8)依次循环跳到主干道,红绿灯重新计时
图2 设计电路图
道红绿灯显示;输出部分为七段译码显示和位选码 MS,数码管显示的是交 通信号灯转换时间。
3、实验方法
3.1仿真平台简介
Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。
主要特点:RTL和门级优化,本地编译结构,编译仿真速度快,跨平台跨版本仿真; 单内核VHDL和Verilog混合仿真; 源代码模版和助手,项目管理; 集成了性能分析、波形比较、代码覆盖、数据流ChaseX、Signal Spy、虚拟对象Virtual Object、Memory窗口、Assertion窗口、源码窗口显示信号值、信号条件断点等众多调试功能; C和Tcl/Tk接口,C调试;对SystemC的直接支持,和HDL任意混合; 支持SystemVerilog
的设计功能;对系统级描述语言的最全面支持,SystemVerilog,SystemC,PSL; ASIC Sign off。可以单独或同时进行行为(behavioral)、RTL级、和门级(gate-level)的代码。
3.2仿真步骤
1) 点开file,选择new,点击project,来创建一个新工程。
2) 在弹出的对话框中输入工程名和库名称,这里直接采用默认库work,输入
的工程名为“testtraffic”,输入完毕后点击ok完成。
3) 在弹出的对话框中选中AddExistingFile按钮,找到文件存储的路径
“modelsim”点击ok。同时两个程序文件处会有两个问号。
4)右键点击空白处,选择其中的Compile选项,会出现一系列的编译方式。最
常用的是前两个,即编译选中文件Compile Selected。同时两个程序文件处的问
号变为对号。
5) 选中Simulate,选择第二个start Simulation。在弹出的对话框中选择work里
的testtraffic并且去掉左下角的对号,点击ok。
6) 右键点击testtraffic模块,选中Add,然后Add to Wave。这时会出现一个新
窗口:wave-default。这里就是观察信号变化的区域,在仿真没有运行时,输出
的信号均为空,快捷键中有Run-All按钮进行仿真。
4、仿真步骤
图3 仿真结果示意图
如图3所示,我们看出看出主干道红灯亮的时间等于支路绿灯,黄灯,左转灯,黄灯亮的时间之和,同时支路红灯亮的时间等于主干道绿灯,黄灯,左转灯,黄灯亮的时间之和。本设计中设定A方向红、绿、黄、左拐灯亮的时间分别为55秒、40秒、5秒和15秒,B方向红、绿、黄、左拐灯亮的时间分别为:65秒、30秒、5秒和15秒,该系统满足我们的设计需求。
5、结论
通过本次课设,是我从一个verilog HDL编程语言的菜鸟逐渐升级为一个感兴趣的初学者. 体验到了细心对一个编程者的重要性, 和程序的规范性对于程序的重要性在
verilog语言中,我们必须注意其与C语言的异同,比如格式和变量定义,还有模块的调用,和时钟信号的应用。还有,verilogHDL设计语言是一门很好的硬件描述语言, 可以直白的描述实际的电路, 实际的系统模型, 易懂而且易于实现,我觉得在以后多加练习,可以对以后的学习和工作带来莫大的帮助。通过做熊老师的课程设计培养了学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。通过这次课程设计使我懂得了理论与实际相结合是很重要的, 只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来, 从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
如果说大学的学习就像是在充实自己,那么课设的意义就是让所学的东西充分的发挥出来,我希望大学的制度也可以从大一就开始抓起,这才是对我们学生的一次提升。在实战中自由发挥,只有困难才能让我们更加强大。
参考文献
1、《CPLD/FPGA 应用系统设计与(基础篇)》 作者: 亿特科技 人民邮电出版社 出
版日期:2005年7月 书号:ISBN 7-115-13200-3/TP.4503
2、林明权.VHDL 数字控制系统设计范例(第一版)[M]北京:电子工业出版社;
3、杨晓慧.电子技术 EDA 实践教程(第一版)[M],北京:国防工业出版社;
附录
module aa(clk,rst,LAMPA,ledcom,data_out);
output[7:0] LAMPA ,ledcom,data_out;
input clk,rst;
reg[7:0]numa,ledcom;
reg tempa ,i;
reg[3:0] data_in;
reg[3:0]counta;
reg[7:0]ared,ayellow,agreen;
reg[7:0]LAMPA,data_out;
reg [24:0] c, k,c1;
reg clk1s;
reg clk_100;
reg[19:0] cnt2;
always @(posedge clk )
begin
if(c==12500000)
begin
c
clk1s=~clk1s;
end
else
c
end
always @(posedge clk )
begin
cnt2
if(cnt2==100000)
begin
clk_100=~clk_100;
cnt2
end
end
always@(posedge clk1s or negedge rst )//该模块控制东西方向的三种灯 if(!rst)
LAMPA
else
begin
ayellow
agreen
if(!tempa)
begin
tempa
if(counta == 0)
begin
numa
LAMPA
counta
end
if(counta == 1)
begin
numa
LAMPA
counta
end
if(counta == 2)
begin
numa
LAMPA
end
if(counta == 3)
begin
numa
LAMPA
end
if(counta == 4)
begin
numa
LAMPA
end
if(counta == 5)
begin
numa
LAMPA
if(counta == 6)
begin
numa
LAMPA
counta
end
if(counta == 7)
begin
numa
LAMPA
counta
end
end
else
begin//倒计时模块
if(numa)
begin
if(numa==0)
begin
tempa
end
else
begin
if(numa[7:4]==4'b0000)
numa[3:0]
numa[7:4]
4'b0001;
end
else
numa[3:0]
4'b0001;
end
end
end
end
////////////////////////////////////////////////////////////////////// always @(posedge clk_100 or negedge rst)
if(!rst)
begin
i
ledcom
data_out
end
else
begin
ledcom
if(i==0)
begin
data_in
i
end
else
if(i==1)
begin
data_in
i
end
case(data_in)
4'b0000 : data_out
4'b0001 : data_out
4'b0010 : data_out
4'b0011 : data_out
4'b0100 : data_out
4'b0101 : data_out
4'b0110 : data_out
4'b0111 : data_out
//7
4'b1000 : data_out
4'b1001 : data_out
//4'b1111 : data_out
end
endmodule
学号: 成绩:
河北联合大学电气工程学院
《综合性课程设计报告
——交通灯控制器设计》
专 业:电子科学与技术
班 级:姓 名:__ 张___ 指导教师:__________
2015年1月9日
交通灯控制设计
作者:张桂明
摘要:本次课设是目的是通过Verilog_HDL语言对交通灯控制的设计,是同学们熟悉并掌握EDA技术、培养综合应用数字电子技术、EDA设计工具、HDL语言等各领域知识的能力、提高设计能力和实际操作能力。本课题是利用Verilog_HDL语言自顶而下的设计方法设计交通的控制系统,并通过QuartusⅡ和ModelSim完成综合、仿真,对FPGA芯片进行编译下载。把程序下载到FPGA芯片后,由于生成的是集成电路,所以故障率低、可靠性高、体积比较小,可应用于实际的交通灯控制系统中,使其实现道路交通的快速正常运转。随着大规模集成电路的发展、EDA技术随之出现,本课题说明了EDA技术在数字电路设计中的优越性。
关键词:Verilog_HDL FPGA 交通灯控制器 硬件描述语言
1、简介
1.1课程设计的目的和内容
用Verilog HDL语言设计实现一个交通灯控制器电路:十字路口A方向和B方向各设红、黄、绿和左拐四盏灯,两个方向各种灯亮的时间能够进行设置和修改,此外,假设A方向是主干路,车流量大,因此A方向通行的时间应比B方向长;四盏灯按合理的顺序亮灭,并能将灯亮的时间以倒计时的形式显示出来。每个方向四种灯依次按如下顺序点亮,并不断循环:绿灯—黄灯—左拐灯—黄灯—红灯,并且每个方向红灯亮的时间应该与另一方向绿、黄、左拐、黄灯亮的时间相等。黄灯所起的作用是用来在绿灯和左拐灯后进行缓冲。在本课程设计中,着重培养学生的如下能力:熟悉EDA技术概况。培养综合应用数字电子技术、EDA设计工具、HDL语言等各领域知识的能力。提高设计能力和实际操作能力,使学生能够独立完成具有一定难度的数字电子系统的设计,并锻炼动手实践能力。
1.2 Verilog语言简介
Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design
Automation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。
1.3 Verilog HDL 的设计流程
1)文本编辑:用任何文本编辑器都可以进行,也可以用专用的 HDL 编辑环境。通常 Verilog HDL 文件保存为 .v 文件。
2)功能仿真:将文件调入 HDL 仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只有在布线完成之后,才进行时序仿真) 。
3)逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式。逻辑综合软件会生成 .edf ( EDIF )的 EDA 工业标准文件。 (最好不用 MAX+PLUS II 进行综合,因为只支持 VHDL/Verilog HDL 的子集)
4)布局布线:将 .edf 文件调入 PLD 厂家提供的软件中进行布线,即把设计好的逻辑安放到 CPLD/FPGA 内。
5)时序仿真:需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序也叫后仿真。
2、总体设计
每个方向四种灯依次按如下顺序点亮,并不断循环:绿灯—黄灯—左拐灯—黄灯—红灯,并且每个方向红灯亮的时间应该与另一方向绿、黄、左拐、黄灯亮的时间相等。黄灯所起的作用是用来在绿灯和左拐灯后进行缓冲,以提醒行人及驾驶员该方向上要禁行了;信号灯变换次序为:A主干道 每次放行 40 秒,亮 5 秒黄灯让行驶中的车辆有时间停到禁行线外,左拐放行 15 秒,亮 5 秒黄灯;支干道放行 30 秒,亮 5 秒黄灯,左拐放行 15 秒,亮 5 秒黄灯......,各计时电路位倒计时显示。
图1 设计流程图
根据系统的功能要求, 可分为四个部分来实现, 分别是定时模块, 主控电路, 译码驱动电路和扫描显示几部分。 分频部分是把外部提供的 1Hz 进行分频得到系 统工作需要的工作脉冲,显示部分包括两个内容,一个是主干道红绿灯显示,另 一个是支干道红绿灯显示。然后将红绿灯显示时间以 BCD 码形式显示出来,显示 模块将其译码轮流扫描显示 4 具有四种信号灯的交通灯控制器设计如图2
交通信号灯控制器系统工作流程
(1)主干道放行亮绿灯 40 秒,支干道红灯显示 65 秒;
(2)主干道绿灯转黄灯 5 秒,支干道红灯显示 25 秒
(3)主干道黄灯转左拐 15 秒,支干道红灯显示 20 秒;
(4)主干道左拐转红灯 55 秒,支干道绿灯显示 30 秒;
(5)主干道红灯显示 25 秒,支干道绿灯转黄灯 5 秒;
(6)主干道红灯显示 20 秒,支干道黄灯转左拐 15 秒;
(7)主干道亮红灯 5 秒,支干道左拐转黄灯 5 秒;
(8)依次循环跳到主干道,红绿灯重新计时
图2 设计电路图
道红绿灯显示;输出部分为七段译码显示和位选码 MS,数码管显示的是交 通信号灯转换时间。
3、实验方法
3.1仿真平台简介
Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。
主要特点:RTL和门级优化,本地编译结构,编译仿真速度快,跨平台跨版本仿真; 单内核VHDL和Verilog混合仿真; 源代码模版和助手,项目管理; 集成了性能分析、波形比较、代码覆盖、数据流ChaseX、Signal Spy、虚拟对象Virtual Object、Memory窗口、Assertion窗口、源码窗口显示信号值、信号条件断点等众多调试功能; C和Tcl/Tk接口,C调试;对SystemC的直接支持,和HDL任意混合; 支持SystemVerilog
的设计功能;对系统级描述语言的最全面支持,SystemVerilog,SystemC,PSL; ASIC Sign off。可以单独或同时进行行为(behavioral)、RTL级、和门级(gate-level)的代码。
3.2仿真步骤
1) 点开file,选择new,点击project,来创建一个新工程。
2) 在弹出的对话框中输入工程名和库名称,这里直接采用默认库work,输入
的工程名为“testtraffic”,输入完毕后点击ok完成。
3) 在弹出的对话框中选中AddExistingFile按钮,找到文件存储的路径
“modelsim”点击ok。同时两个程序文件处会有两个问号。
4)右键点击空白处,选择其中的Compile选项,会出现一系列的编译方式。最
常用的是前两个,即编译选中文件Compile Selected。同时两个程序文件处的问
号变为对号。
5) 选中Simulate,选择第二个start Simulation。在弹出的对话框中选择work里
的testtraffic并且去掉左下角的对号,点击ok。
6) 右键点击testtraffic模块,选中Add,然后Add to Wave。这时会出现一个新
窗口:wave-default。这里就是观察信号变化的区域,在仿真没有运行时,输出
的信号均为空,快捷键中有Run-All按钮进行仿真。
4、仿真步骤
图3 仿真结果示意图
如图3所示,我们看出看出主干道红灯亮的时间等于支路绿灯,黄灯,左转灯,黄灯亮的时间之和,同时支路红灯亮的时间等于主干道绿灯,黄灯,左转灯,黄灯亮的时间之和。本设计中设定A方向红、绿、黄、左拐灯亮的时间分别为55秒、40秒、5秒和15秒,B方向红、绿、黄、左拐灯亮的时间分别为:65秒、30秒、5秒和15秒,该系统满足我们的设计需求。
5、结论
通过本次课设,是我从一个verilog HDL编程语言的菜鸟逐渐升级为一个感兴趣的初学者. 体验到了细心对一个编程者的重要性, 和程序的规范性对于程序的重要性在
verilog语言中,我们必须注意其与C语言的异同,比如格式和变量定义,还有模块的调用,和时钟信号的应用。还有,verilogHDL设计语言是一门很好的硬件描述语言, 可以直白的描述实际的电路, 实际的系统模型, 易懂而且易于实现,我觉得在以后多加练习,可以对以后的学习和工作带来莫大的帮助。通过做熊老师的课程设计培养了学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。通过这次课程设计使我懂得了理论与实际相结合是很重要的, 只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来, 从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
如果说大学的学习就像是在充实自己,那么课设的意义就是让所学的东西充分的发挥出来,我希望大学的制度也可以从大一就开始抓起,这才是对我们学生的一次提升。在实战中自由发挥,只有困难才能让我们更加强大。
参考文献
1、《CPLD/FPGA 应用系统设计与(基础篇)》 作者: 亿特科技 人民邮电出版社 出
版日期:2005年7月 书号:ISBN 7-115-13200-3/TP.4503
2、林明权.VHDL 数字控制系统设计范例(第一版)[M]北京:电子工业出版社;
3、杨晓慧.电子技术 EDA 实践教程(第一版)[M],北京:国防工业出版社;
附录
module aa(clk,rst,LAMPA,ledcom,data_out);
output[7:0] LAMPA ,ledcom,data_out;
input clk,rst;
reg[7:0]numa,ledcom;
reg tempa ,i;
reg[3:0] data_in;
reg[3:0]counta;
reg[7:0]ared,ayellow,agreen;
reg[7:0]LAMPA,data_out;
reg [24:0] c, k,c1;
reg clk1s;
reg clk_100;
reg[19:0] cnt2;
always @(posedge clk )
begin
if(c==12500000)
begin
c
clk1s=~clk1s;
end
else
c
end
always @(posedge clk )
begin
cnt2
if(cnt2==100000)
begin
clk_100=~clk_100;
cnt2
end
end
always@(posedge clk1s or negedge rst )//该模块控制东西方向的三种灯 if(!rst)
LAMPA
else
begin
ayellow
agreen
if(!tempa)
begin
tempa
if(counta == 0)
begin
numa
LAMPA
counta
end
if(counta == 1)
begin
numa
LAMPA
counta
end
if(counta == 2)
begin
numa
LAMPA
end
if(counta == 3)
begin
numa
LAMPA
end
if(counta == 4)
begin
numa
LAMPA
end
if(counta == 5)
begin
numa
LAMPA
if(counta == 6)
begin
numa
LAMPA
counta
end
if(counta == 7)
begin
numa
LAMPA
counta
end
end
else
begin//倒计时模块
if(numa)
begin
if(numa==0)
begin
tempa
end
else
begin
if(numa[7:4]==4'b0000)
numa[3:0]
numa[7:4]
4'b0001;
end
else
numa[3:0]
4'b0001;
end
end
end
end
////////////////////////////////////////////////////////////////////// always @(posedge clk_100 or negedge rst)
if(!rst)
begin
i
ledcom
data_out
end
else
begin
ledcom
if(i==0)
begin
data_in
i
end
else
if(i==1)
begin
data_in
i
end
case(data_in)
4'b0000 : data_out
4'b0001 : data_out
4'b0010 : data_out
4'b0011 : data_out
4'b0100 : data_out
4'b0101 : data_out
4'b0110 : data_out
4'b0111 : data_out
//7
4'b1000 : data_out
4'b1001 : data_out
//4'b1111 : data_out
end
endmodule