资源描述
西北工业大学课 程 设 计 报 告题 目: 交通信号灯控制电路学院: 航 海 学 院班级: 03051001班学生(学号): 学生(学号): 日期: 2013 年 1 月摘要Verilog HDL 作为一种规范的硬件描述语言,被广泛应用于数字电子系统设计。它允许设计者进行各种级别的逻辑设计,也可以进行数字逻辑系统的仿真验证、时序分析、逻辑综合操作。本文介绍了应用Verilog HDL语言自顶向下的设计方法设计交通灯控制系统,使其实现道路交通的正常运转,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点。通过Quartus 完成了程序的编写、编译与仿真,生成顶层文件后下载到芯片Cyclone EP3C16F484C6芯片上,在DE0开发板上进行验证。验证结果表明,该设计可以完成交通灯控制的相关要求。关键词:交通信号灯控制 Verilog HDL Quartus DE0目录一、课程设计目的二、设计任务与要求三、方案设计四、模块设计五、程序代码六、开发板验证七、遇到问题与解决办法八、总结九、参考文献十、附录(管脚对应关系)一、 课程设计目的设计目的:初步了解掌握硬件描述语言,体会自顶向下的设计思想,锻炼查阅资料与知识应用的能力。二、 设计任务与要求设计任务:设计一个十字路口的交通灯控制电路,要求甲车道和乙车道两条交叉道路上的车辆交替运行设计要求:1、南北和东西方向各有一组绿、黄、红灯用于指挥交通,绿灯、黄灯和红灯的持续时间分别为20秒、5秒和25秒;2、当有特殊情况(如消防车、救护车等)时,两个方向均为红灯亮,计时停止,当特殊情况结束后,控制器恢复原来状态,继续正常运行;3、用两组数码管,以倒计时方式显示两个方向允许通行的时间。三、 方案设计任务分析:东西(A车道)和南北(B车道)方向各有一组绿、黄、红灯用于指挥交通(如图1、2),绿灯、黄灯和红灯的持续时间分别为 25秒、5 秒和 30 秒。AB图1 十字路口交通灯模型 25s 30s 55s 60sA方向 绿灯亮 黄灯亮 红灯亮B方向 红灯亮 绿灯亮 黄灯亮图2 计数值与交通灯亮灭的关系 如果有特殊情况发生,两个方向均亮红灯,因此,可以设计如下五个状态,其关系为:状态亮灯情况车辆行驶状况持续时间(秒)下一状态A车道B车道S0红亮红亮特殊状况,两方向均禁止通行S(?)S1绿亮红亮A方向通行,B车道禁止通行20S2S2黄亮红亮A车道缓行,B车道禁止通行5S3S3红亮绿亮A车道禁止通行,B车道通行20S4S4红亮黄亮A车道禁止通行,B车道缓行5S1S(?)即返回暂停前一状态 正常工作 特殊情况S2S1S0S3S4设计思想:根据设计要求,考虑用4个模块实现:基频分频模块、60进制计数器、交通控制、分位译码显示模块。整个电路以一个50MHz的晶振为时钟源,由分频得到所需时钟1Hz。设计一个技术范围是059的计数器和一个根据计数值做出相应反映的计数器,并且对于计数值以两组数码管来显示,这就需要相应的译码电路。对于特殊情况,要设计特殊的对待方式,当进入此方式时两个方向的红灯点亮。四、 模块设计1)分频模块由于实验板只能提供50MHz的时钟信号,而电路中需要使用较低频率的时钟,经分配产生1Hz频率送给交通控制器和计数器。 2)计数器 本设计主要是由计数器来实现交通灯的亮灭关系。当检测到特殊情况时,计数器暂停。 3)交通控制器 根据计数器的数值控制发光二级管亮灭,输出倒计时数值给译码管的分位电路。 4)分位译码显示 交通灯时钟输出两组时间,数码管显示。五、 程序代码moduletrafficlight(clk50M,hold,RedA,GreenA,YellowA,RedB,GreenB,YellowB,AG,AL,BG,BL);input clk50M,hold;output reg RedA,GreenA,YellowA,RedB,GreenB,YellowB;output reg6:0AG,AL,BG,BL;/ clk50M输入时钟信号/hold突发情况信号/ RedA,GreenA,YellowA输出A方向灯信号/ RedB,GreenB,YellowB输出B方向灯信号/AG、AL输出A方向倒计时十位与个位/BG、BL输出B方向倒计时十位与个位wire3:0DispAG,DispAL,DispBG,DispBL;reg5:0NumA,NumB;integer num;reg clk1;integer count;/分位子模块assign DispAG3:0=NumA/10, /A 方向十位 DispAL3:0=NumA%10; /A 方向个位assign DispBG3:0=NumB/10, /B 方向十位 DispBL3:0=NumB%10; /B 方向个位 / 50MHz分频为1Hzalways (posedge clk50M)begin if(num=50000000)num=0; else num=num+1; if(num25000000)clk1=1; else clk1=0;end /数码管显示输出,低电平有效always (DispAG) case(DispAG) 4b0000:AG=7b1000000; 4b0001:AG=7b1111001; 4b0010:AG=7b0100100; 4b0011:AG=7b0110000; 4b0100:AG=7b0011001; 4b0101:AG=7b0010010; 4b0110:AG=7b0000010; 4b0111:AG=7b1111000; 4b1000:AG=7b0000000; 4b1001:AG=7b0010000; endcase always (DispAL) case(DispAL) 4b0000:AL=7b1000000; 4b0001:AL=7b1111001; 4b0010:AL=7b0100100; 4b0011:AL=7b0110000; 4b0100:AL=7b0011001; 4b0101:AL=7b0010010; 4b0110:AL=7b0000010; 4b0111:AL=7b1111000; 4b1000:AL=7b0000000; 4b1001:AL=7b0010000; endcasealways (DispBG) case(DispBG) 4b0000:BG=7b1000000; 4b0001:BG=7b1111001; 4b0010:BG=7b0100100; 4b0011:BG=7b0110000; 4b0100:BG=7b0011001; 4b0101:BG=7b0010010; 4b0110:BG=7b0000010; 4b0111:BG=7b1111000; 4b1000:BG=7b0000000; 4b1001:BG=7b0010000; endcasealways (DispBL) case(DispBL) 4b0000:BL=7b1000000; 4b0001:BL=7b1111001; 4b0010:BL=7b0100100; 4b0011:BL=7b0110000; 4b0100:BL=7b0011001; 4b0101:BL=7b0010010; 4b0110:BL=7b0000010; 4b0111:BL=7b1111000; 4b1000:BL=7b0000000; 4b1001:BL=7b0010000; endcase /60进制计数器 always ( posedge clk1) begin if(hold)count=count; else if(count=59)count=0; else count=count+1 end /交通灯控制always (posedge clk1) begin if(hold) begin RedA=1b1;GreenA=1B0;YellowA=1B0; RedB=1b1;GreenB=1B0;YellowB=1B0; end else if(count25) begin NumA=25-count; NumB=30-count; RedA=1b0;GreenA=1B1;YellowA=1B0; RedB=1b1;GreenB=1B0;YellowB=1B0; end else if(count30) begin NumA=30-count; NumB=30-count; RedA=1b0;GreenA=1B0;YellowA=1B1; RedB=1b1;GreenB=1B0;YellowB=1B0; end else if(count55) begin NumA=60-count; NumB=55-count; RedA=1b1;GreenA=1B0;YellowA=1B0; RedB=1b0;GreenB=1B1;YellowB=1B0; end else if(count60) begin NumA=60-count; NumB=60-count; RedA=1b1;GreenA=1B0;YellowA=1B0; RedB=1b0;GreenB=1B0;YellowB=1B1; end end endmodule 六、 程序仿真仿真波形如图1、2、3图1 交通灯控制图2 数码管显示图3 特殊情况七、 开发板验证在程序在DE0板上实现了预期功能。A方向: 红灯(LEDG0)黄灯(LEDG1)绿灯(LEDG2) 数码管HEX1显示倒计数十位,数码管HEX0显示倒计数个位 B方向: 红灯 (LEDG9) 黄灯(LEDG8) 绿灯(LEDG7)数码管HEX3显示倒计数十位,数码管HEX2显示倒计数个位hold: SW0(后附管脚对应)八、 遇到问题与解决办法1) 编程过程中,由于部分模块代码类似,进行了粘贴复制,不同处却没有修改,导致仿真不能得到预期波形。经仔细检查修改代码后,问题得到了解决。2) 程序下载到开发板后,发现数码管全显示“0”,LED灯没有亮灭变换,分析后发现原先代码中的分频模块存在问题,没有将频率降至1Hz,修改相关代码后,问题得到解决。九、 总结通过本次设计,初步了解掌握了硬件描述语言,体会了自顶向下的设计思想,对FPGA的应用有了一定了解。同时,锻炼了查阅资料与知识应用的能力,极大地提高了学习热情。另外,在课设过程中,通过对遇到问题的思考与解决,更加深了对相关知识的了解,也使自己更加的细心。十、 参考文献【1】 贺敬凯,Verilog HDL数字设计教程 ,西安电子科技大学出版社(2010)【2】 夏宇闻,数字系统设计Verilog实现,高等教育出版社(2002)十一、 附录管脚对应关系
展开阅读全文