基于VerilogHDL的交通灯控制器设计报告参考Word格式.docx

上传人:b****5 文档编号:19165741 上传时间:2023-01-04 格式:DOCX 页数:16 大小:905.31KB
下载 相关 举报
基于VerilogHDL的交通灯控制器设计报告参考Word格式.docx_第1页
第1页 / 共16页
基于VerilogHDL的交通灯控制器设计报告参考Word格式.docx_第2页
第2页 / 共16页
基于VerilogHDL的交通灯控制器设计报告参考Word格式.docx_第3页
第3页 / 共16页
基于VerilogHDL的交通灯控制器设计报告参考Word格式.docx_第4页
第4页 / 共16页
基于VerilogHDL的交通灯控制器设计报告参考Word格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

基于VerilogHDL的交通灯控制器设计报告参考Word格式.docx

《基于VerilogHDL的交通灯控制器设计报告参考Word格式.docx》由会员分享,可在线阅读,更多相关《基于VerilogHDL的交通灯控制器设计报告参考Word格式.docx(16页珍藏版)》请在冰豆网上搜索。

基于VerilogHDL的交通灯控制器设计报告参考Word格式.docx

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

2.2具体设计

根据整体设计要求,编写各个功能部分VerilogHDL程序,设置各输入输出变量说明如下

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:

数码管扫描信号。

输入输出及中间变量设置如下:

moduletraffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);

inputen,clk,qclk,rst,hold,rst1;

outputst1,st2;

output[7:

0]num1,num2;

output[6:

0]counter;

output[2:

0]light1,light2;

regtim1,tim2,st1,st2;

reg[1:

0]state1,state2,ste;

reg[2:

0]light1,light2;

reg[3:

0]num;

reg[6:

reg[7:

0]red1,red2,green1,green2,yellow1,yellow2;

1.二极管点亮控制

该部分程序的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的译码电路。

此外,当检测到特殊情况(hold=‘1’)发生时,无条件点亮红灯的二极管,当检测到复位信号,两个方向计数与控制回复到00状态。

因为主、支干道两个方向二极管点亮的顺序与延迟时间不同,顾编写两个独立的部分来控制,具体程序如下:

1)主干道方向

always@(posedgeclk)

begin

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

begin

light1<

=3'

b001;

num1<

=green1;

end

elseif(hold)

b100;

elseif(en)

begin//使能有效开始控制计数

if(!

tim1)//

begin//主干道交通灯点亮控制

tim1<

=1;

case(state1)

2'

b00:

beginnum1<

light1<

state1<

=2'

b01;

end

b01:

=yellow1;

b010;

b11;

b11:

=red1;

b10;

b10:

b00;

default:

endcase

2)支干道方向

always@(posedgeclk)

light2<

num2<

=red2;

begin

tim2)

tim2<

beginnum2<

light2<

state2<

=green2;

=yellow2;

2.倒数计时

该部分程序完成二极管发光时延的计数,并将计数结果送到数码管显示电路,每切换到一个状态,计数器的初值都被重置,以实现不同颜色二极管不同的时延要求。

本次设计直接用逻辑运算完成2位十进制数的计数,未采用分位器的设计。

因为主、支干道上计数器的结构完全相同,顾只列出一路的程序,其具体程序如下所示:

else

begin//倒数计时

if(num1>

0)

if(num1[3:

0]==0)

num1[3:

0]<

=4'

b1001;

num1[7:

4]<

=num1[7:

4]-1;

elsenum1[3:

=num1[3:

0]-1;

if(num1==1)tim1<

=0;

end

else

num1=2'

end

3.数码管的译码及扫描显示

该段程序主要完成4个7段数码管的译码显示及扫描,使系统能正常显示主、支干道两个方向上的剩余时间。

译码的时钟频率要低,为Hz级。

扫描的时钟频率要高,最低不得小于人眼分辨频率50Hz,具体程序如下所示:

always@(posedgeqclk)

begin//数码管扫描

if(rst1)

st1=0;

st2=0;

else

case({st2,st1})

beginnum<

0];

{st2,st1}<

4];

=num2[3:

=num2[7:

begin//数码管译码显示

case(num)

4'

b0000:

counter<

=7'

b0111111;

//0

b0001:

b0000110;

//1

b0010:

b1011011;

//2

b0011:

b1001111;

//3

b0100:

b1100110;

//4

b0101:

b1101101;

//5

b0110:

b1111101;

//6

b0111:

b0000111;

//7

b1000:

b1111111;

//8

b1001:

b1101111;

//9

default:

endcase

endmodule

总体程序见程序清单所示

第三章仿真与硬件调试

3.1波形仿真

在QuartursⅡ软件下创建工程,新建编辑设计文件,将程序输入,整体编译后,新建波形仿真文件。

设置仿真时间,时钟周期,输入输出端口,进行波形仿真。

具体仿真波形图及说明如下所示:

仿真截止时间:

100us;

时钟:

clk1us,qclk0.1us

1.正常工作时波形仿真图

图4.正常工作时波形仿真图

图形说明

波形仿真主要完成了控制与计数以及数码管显示的波形图。

en为低电品时,计数器置初值,高电平时开始正常控制与计数。

控制发光二极管首次输出为“light1=001,light2=100”,表示主干道路绿灯亮,支杆道路红灯亮,计数器num1和num2从“00110101”开始递减计数,计数至“00000000”时,进入下一个状态,控制输出量为light=010,light2=010,表示主、支干道黄灯均亮起,计数器num1和num2从“00000101”开始计数递减,计数至”00000000”时进入下一个状态,light=100,light2=001,表示主干道路红灯亮,支杆道路绿灯亮。

Counter根据num1,num2变化随时钟上升沿输出译码后的数据。

由于屏幕显示大小有限,未仿真出一个完整周期。

2.特殊情况仿真波形

图5.特殊情况仿真波形

当hold输入高电平时,在时钟上升沿的控制下,light1与light2被强制置位为”100”,表示两路红灯均亮起

3.复位情况仿真波形

图6.复位情况仿真波形

当rst输入高电平时,在时钟上升沿控制下,计数与控制都回到00状态,即light1=001,light2=100,计数器num1和num2从“00110101”开始递减计数。

3.2硬件调试

完成时序仿真确认无误后,进行实验箱管脚设置,注意设置完成后一定要再进行一次全局仿真,使程序真正对应于硬件输出输出。

具体连接说明如下所示

输入变量:

rst、clk、qclk、hold、en

其中en,hold,rst接”0-1”拨码开关,以稳定的输出可变化的电平。

计数时钟clk接实验箱上1Hz时钟,扫描显示时钟qclk接125Khz时钟。

输出变量:

light1[2:

0]、light2[2:

0]、counter[6:

0]、st1、st2

其中light1[0]、light2[0]分别接绿色的发光二极管;

light1[1]、light2[1]分别接黄色的发光二极管;

light1[2]、light2[2]分别接红色的发光二极管。

counter[0]~counter[6],分别接七段数码管的a~f,st1、st2分别接试验箱上”4-16”译码器的低两位。

完成接线后将程序烧写到芯片上,开始功能调试。

分辨改变使能信号,复位信号以及特殊情况信号,观察数码管以及发光二级管情况,实物照片如下所示:

图7.硬件实物图

第四章设计总结

在设计中采用VerilogHDL语言设计交通灯控制系统,借助其功能强大的语言结构,简明的代码描述复杂控制逻辑设计,与工艺无关特性,在提高工作效率的同时达到求解目的,并可以通过VerilogHDL语言的综合工具进行相应硬件电路生成,具有传统逻辑设计方法所无法比拟的优越性。

在设计过程中,觉得最难的部分是波形仿真部分,虽然程序编译通过但仿真出不了正确的波形,不是计数器无法正常计数,就是控制输出无法进入到下一个状态,每次出现问题就必须返回重新修改程序。

实践证明,在编写一个较复杂的程序时,一开始一定要画流程图,弄清楚各个功能及实现它们的逻辑算法,做到心中有数后在开始下笔写编写程序。

在编写的时候要尤其要注意语言的规范,如本次设计中编写的Verilog在Quartus7.0中可以正常生成时序图,而在低版本的软件中却无法生成,原因就是语言使用不规范,在解决这个问题时我总结了一些经验,首先程序要逻辑清晰,简洁明了,避免不必要的嵌套与条用,其次要适当地给程序加上注解文字,提高可读性,以方便之后的程序出错时进行查找,最后充分利用仿真软件提供的各项编译工具与报错消息,按图索骥,有方向的完成程序调试。

完成仿真后进行,进行试验箱上的硬件调试,该步骤主要是要求细心,按照引脚清单,逐一完成连线,本次设计用到两个时钟输入,注意一定要选择合适频率的时钟,以便达到期望的效果。

注意观察实物的现象,看是否满足设计要求,不满足时检查是硬件问题还是程序问题,如果是程序问题,在修改完之后必须要重新编译,重新烧入。

不断排查错误,直至达到满意的效果。

通过这次课程设计,熟悉了简单EDA设计的整个流程,加深了对VerilogHDL硬件描述语言的理解,提高了动手能力,并且锻炼了自己的耐心,收获颇丰,我会把在本次课程设计中学到的东西应用到今后的工作学习中。

最后感谢同学及老师提供的帮助与指导。

程序清单

always@(en)

if(!

en)

begin//设置计数初值

green1<

=8'

b00110101;

red1<

b00100101;

yellow1<

b00000101;

green2<

red2<

yellow2<

tim1)//开始控制

if(num2>

if(num2[3:

num2[3:

num2[7:

elsenum2[3:

if(num2==1)tim2<

state2<

参考资料

[1]夏宇闻.复杂数字电路与系统的VerilogHDL设计技术[M].北京:

北京航空航天大学出版社,1998

[2]郭梯云.移动通信[M].西安:

西安电子科技大学出版社,1995

[3][法]MichelMouly,MarieBernadettePautet1GSM数字移动通信系统[M].骆健霞,顾龙信,徐云霄译.北京:

电子工业出版社,1996

[4]张毅刚,乔立岩.虚拟仪器软件开发环境LabWindowsö

CVI610编程指南[M].北京:

机械工业出版社,2002

[5]刘国权.GSM手机的测试[J].中国无线电管理,2003

[6]俞定玖,刘湘慧.GSM数字蜂窝移动交换系统测试[J].电信科学,2000

[7]张明.VerilogHDL实用教程[M].成都:

电子科技大学出版社,1999

[8]HydeDC.BucknellHandbookonVerilogHDL1ComputerScienceDepart

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 笔试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1