1、如果每个方向的灯是独立变化的,那么交通灯就没有了意义。2.2 主控模块2.2.1 FPGA芯片FPGA采用了LCA这样一个概念,内部包括可配置逻辑模块CLB、输入输出模块IOB和内部连线三个部分。本设计采用Altera公司ACEX1K EP1K10TC100-3芯片,具有低内核电压、低功耗的特点。芯片内门电路高达一万门,内部使用RAM作电路结构,速度高达几百MHZ,其输出可用管脚已全部开放,位于芯片的四周,用户可以根据自己的要求和芯片本身的功能自己任意定义管脚。同时为了体现实验箱的可扩展性,在芯片的两边各有一个34脚的IDE插口,可以通过数据排线与其它应用模块相连接。2.2.2. 控制类模块交
2、通灯:由12个红黄绿灯按交通灯方式排列的交通灯模块,可做交通灯或舞台灯光实验。其工作原理与LED灯相似。2.2.3.显示类模块8位7段数码管:采用2个进口共阴的7段数码管组成,其连接管脚位选信号在数码管的左边由连接孔SEL0、SEL1、SEL2与其它模块连接。数码管采用动态扫描显示,位选信号SEL0、SEL1、SEL2经3-8译码后选择一位数码管,段选信号为A、B、C、D、E、F、G、DP。其输入由位于其下方的8位连接孔与其它模块连接,可以模拟二进制数据输出。2.2.4.输入类模块在这个模块中采用的是两个时钟源,一个是24M的高频时钟;一个是32768HZ能完成二次分频的时钟。时钟输出通过其上
3、方的四组跳线改变其频率的输出,每一组频率相对独立。其频率值在电路板上均已标明。用户也可以通过软件的方式来实现分频。每一组的频率输出端位于其上方对应的CLK1、CLK2、CLK3、CLK4连接孔。3.系统软件设计3.1 软件整体设计3.1.1 交通灯控制系统原理图3.1.2 交通灯控制系统框图3.2控制模块3.2.1状态机与倒计时状态机用两个进程分别控制两个方向的灯,引入有限状态机控制交通灯的状态转化,即由绿灯到黄灯然后到左拐灯再回到黄灯最后到红灯。复位时红灯全亮。交通灯状态图如下:在正常情况下的一个完整周期内,交通灯控制器系统一共有四种状态,分别为S0、S1、S2、S3。其运行方式从S0S1S
4、2S3S4,S结束后回到S0状态。各个状态具体的运行方式如下:S0:自南向北方向绿灯亮,自东向西方向红灯亮。此时允许自南向北方向车辆通行,禁止自东向西方向车辆通行。S1:自南向北方向黄灯亮,自东向西方向红灯亮。此时提醒自南向北方向车辆准备停车,禁止自东向西方向车辆通行。S2: 自南向北方向左拐灯亮,自东向西方向红灯亮。此时自南向北方向车辆允许左拐,禁止自东向西方向车辆通行。S3: 自南向北方向黄灯亮,自东向西方向红灯亮。S4:自南向北方向红灯亮,自东向西方向绿灯亮。此时禁止自南向北方向车辆通行,此时允许自东向西方向车辆通行。倒计时用两个减法计数器实现倒计时,当某个状态的剩余时间减到零时则切换状
5、态。3.2.2控制模块RTL图与流程图控制模块RTL图CLK连接1Hz时钟,EN接高电平时使能,系统正常工作,接低电平时系统不能正常工作,红灯全为亮。LAMPA0、LAMPA1、LAMPA2、LAMPA3分别控制自南向北方向的左拐、绿、黄和红灯,LAMPB0、LAMPB1、LAMPB2、LAMPB3分别控制自东向西方向的左拐、绿、黄和红灯。ACOUNT 用于自南向北方向的时间显示,驱动两个数码管。BCOUNT用于自东向西方向的时间显示,驱动两个数码管。控制模块流程图:3.3显示模块3.3.1位选扫描模块数码管扫描时钟接clk为1KHz。输出out与数码管的位选信号SEL0、SEL1相连,接至F
6、PGA芯片。每来一个时钟脉冲,做一次相应输出,频率为1KHz达到动态扫描。位选扫描模块流程图:3.3.2段选扫描模块数码管的位选信号SEL0、SEL1分别连接FPGA芯片。十六位数据经数据总线输入到段选扫描模块,十六位数据分为四段,通过sel选择相应段来输出。段选扫描模块流程图如下:3.3.3显示译码模块输出为数码管的段选信号,其段选信号A、B、C、D、E、F、G、DP分别连接FPGA芯片。根据相应的输入,输出相应的信号。例如:假设输入为1001,则相应输出所对应的段选信号为11110110。需要注明的是,这里采用的是共阴极数码管。显示译码模块流程图3.4顶层文件设计交通灯控制系统的顶层文件是
7、一个原理图文件,首先用Verilog 语言编写好所需的四个模块后,编译正确后保存,生成相应的可视化元件后,然后新建一个原理图文件,插入所生成的可视化元件它包含有四个元件,其实每个元件均由一个模块生成。四个元件分别为:位选扫描模块、段选扫描模块、显示译码模块、控制模块。然后将各元件用具有电气性质的导线连接好,保存编译。4.系统测试与总结4.1 系统测试建立一个vwf波形文件,将所需管脚加到波形文件中,设置相应的输值,保存并仿真,观察输出数据。实验证明仿真结果正确。也因此证明设置的该系统能按预期的设计进行工作,达到预期结果。仿真波形图:4.2 设计体会通过这次课程论文设计,我进一步加深了对EDA(
8、电子设计自动化)的了解。并进一步熟练了对QuartusII软件的操作。在做本次设计论文的过程中,遇到了很多问题,使我发现自己学习上存在的不足。并加深了对交通灯原理和设计思路的了解。同时也掌握了做课程论文的一般流程,为以后的设计积累了一定的经验。做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。最后参照每个模块把输入和输出引脚设定,运用我们所学的VHDL语言进行编程。本设计采用VHDL 硬件描述语言文本输入方式和顶层文件设计两种方式,在确立总体预期实现功能的前提下,分层次进行描述,其中所用到的数据均可依现场情况而设置,修改方便
9、灵活。两种方式各有侧重,一种直观,一种则需要我们对语言有一定了解。二者的结合体现了基于FPGA技术和VHDL语言进行数字系统设计的优越性和广阔前景。城市交通情况较为复杂,所以在设计十字路口交通灯时考虑了左拐弯的功能。并设计实现了此功能。数字化时代的到来给人们的生活带来了极大的改变,有理由相信随着数字化的深入,交通灯控制器的功能将日趋完善。而且,VHDL 语言对EDA 产生的影响也是深远的,它缩短了电子产品的设计周期,为设计者提供了方便。总之,通过这次的设计,我进一步了解了EDA技术,收获很大,对软件编程、排错调试等方面得到了提高。另外,我也意识到,不管做什么事,我们都需要耐心、踏实、勤奋、严谨
10、的处事态度。更重要的是,学习上,我们必须从理论应用到实践,再从实践中验证理论,只有这样我们才能真正学会、学透并应用我们所学的知识,真正做到理论与实践相结合。附录控制模块源程序代码:/* 信号定义CLK 同步时钟EN 使能信号LAMPA 03分别控制A方向的左拐、绿、黄和红灯LAMPB 03分别控制B方向的左拐、绿、黄和红灯ACOUNT 用于A方向的时间显示,驱动两个数码管BCOUNT 用于B方向的时间显示 */module traffic( CLK, EN, LAMPA, LAMPB, ACOUNT, BCOUNT );output7:0 ACOUNT, BCOUNT;output3:0 LA
11、MPA, LAMPB;input CLK, EN;reg3:reg7:0 numa, numb; / 剩余时间reg tempa, tempb; / 切换状态reg2:0 counta, countb; / 状态量0 ared, ayellow, agreen, aleft, / 保持时间 bred, byellow, bgreen, bleft;assign ACOUNT = numa;assign BCOUNT = numb;/* 设置灯的计数初值 */always ( EN )begin if( !EN ) begin ared = 8h55; ayellow h5; agreen h4
12、0; aleft h15; bred h65; byellow bgreen h30; bleft endend/* 控制A方向的灯*/always ( posedge CLK ) if( EN ) / 正常情况tempa ) / 切换状态 tempa = 1; case( counta ) / 控制亮灯的顺序 0: begin numa=agreen; LAMPA=2; counta=1; 1:=ayellow;=4; 2:=aleft;=3; 3: 4:=ared;=8;=0; default: LAMPA 1 ) if( numa3:0 = 0 ) numa3:0 = 4b1001; n
13、uma7:4 = numa7:4 - 1; end else numa3:= numa3:0 - 1; if( numa = 2 ) tempa = 0; else / 返回初态b1000; counta tempa /* 控制B方向*/ if( EN )tempb ) tempb case( countb ) / 控制亮灯的顺序 begin numb=bred; LAMPB countb=bgreen;=byellow;=bleft; LAMPB if( numb3: numb3: numb7:= numb7: else numb3:= numb3: if( numb = 2 ) tempb
14、 else countb tempb endmodule位选模块源程序代码:module weixuan(out,clk);output1:0 out;input clk;reg1:always (posedge clk) if(out=3) out=out+1;译码显示模块源程序代码:module yima(dout,num);input0:3 dout;output0:7num;reg0:7 num;always(*) case(dout) 4b0000:num=8b11111100;b0001:b01100000;b0010:b11011010;b0011:b11110010;b0100
15、:b01100110;b0101:b10110110;b0110:b10111110;b0111:b11100000;b1000:b11111110;b1001:b11110110; default:b11111111;endmodule 段选模块源程序代码:module select1_4(dout,din,sel);0 dout;input15:0 din;input1:0sel;always (*) case(sel) 2b11:dout=din3:0;b10:=din7:4;b01:=din11:8;b00:=din15:12;参考文献1康华光.电子技术基础一一数字部份M .北京:高等教育出版社, 2006.2王金明. 数字系统设计与Verilog HDL(第四版). 北京:电子工业出版社,20103湖南理工学院. 专业实验辅导资料. 20104包明. EDA 技术与数字系统设计M.北航出版社 20025田瑞利.陈海滨.基于VHDL有限状态机的交通灯信号控制系统设计J.广州航海高等专科院校学报.20086徐春娇. 基于VHDL状态机设计的智能交通控制灯.20077 陈金玉. 吴振铨.广东工业大学第五届电子设计竞赛.8万军华. 现代数字系统设计课件. 2010
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1