已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于fpga的交通灯控制器课程设计学生姓名: 王军峰 学 号: 04076026 专业班级: 集成电路0701 指导教师: 刘有耀 2010 年 7月 2日目 录 一、 设计任务:3二、 题目分析与整体构思:3三、 硬件电路设计4四、 验证仿真 6五、 程序设计8六、 验证设计13七、 故障及问题分解 14八、 心得体会:14九、参考文献:15一、 设计任务(一)有一条主干道和一条支干道的汇合点形成十字交叉路口,主干道为东西向,支干道为南北向。为确保车辆安全,迅速地通行,在交叉道口的每个入口处设置了红,绿,黄3色信号灯。(二)要求:(1)主干道绿灯亮时,支干道红灯亮,反之亦然,两者交替允许通行,主干道每次放行45s,支干道每次放行40s。每次由绿灯变为红灯的过程中,黄灯亮5s作为过渡。(2)能实现正常的倒计时显示功能。(3)能实现总体清零功能:计数器由初始状态开始计数,对应状态的指示灯亮。(4)能实现特殊状态的功能显示:进入特殊状态时,东西、南北路口均显示红灯状态。二、题目分析与整体构思(一)该交通灯控制器应具备的功能主干道绿灯45sec,支干道绿灯40sec,黄灯5sec过渡。同时用数码管指示当前状态(红、黄、绿)剩余时间。另外,设计一个紧急状态和复位状态,当紧急状态出现时,两个方向都禁止通行,指示红灯;紧急状态解除后,指示紧急状态前的时间。当复位状态出现时,整个系统恢复起始状态。 (二)实现方案从题目中计数值与交通灯的亮灭的关系如图(1)所示。当主干道绿灯40秒和5秒黄灯过渡时,支干道必须禁止通行,即支干道红灯亮40+5=45秒;当支干道由红灯转为绿灯时,支干道亮40秒绿灯和5秒黄灯过渡,此时主干道红灯应亮40+5=45秒。 0 40s 45s 90s 绿灯亮 黄灯亮 红灯亮 主干道时间 支干道红灯亮 绿灯亮 黄灯亮 45s 85s 90s 图1图(2)为各个模块组成图,显示器模块其功能是输出主干道和支干道的倒计时数。该模块输入为1khz的动态扫描时钟信号和4个09的十进制数;输出由led七段数码管显示输入的4位十进制数。显示模块 控制器分频器50mflag retr1 y1 g1 r2 y2 g2 红绿灯显示 图2三硬件电路设计动态led显示的设计方法是将不同led模块的所有的led的驱动端一对一地连接到一起,而将其公共极(阴极或阳极)分别由不同的io口来驱动(主要针对7段码和led点阵模块)。动态显示方式主要是出于简化电路和产品成本考虑在大多数场合都可以达到用户要求。动态显示虽然占用的cpu时间多,但使用的硬件少,能节省线路板空间。另外,本设计显示需要使用的是4个七段显示数码管。在计时结果显示电路中,七段数码管显示部分是一个不容忽视的环节,如若处理不得当,可能引起系统功率过大,产生散热问题,严重时甚至会导致系统的烧毁。为了解决好以上问题,下面就对七段数码管显示电路做简要的分析和介绍。通常点亮一个led所需的电流是550 ma,通电的电流愈大,led的亮度愈高,相对的也会使其寿命缩短。一般以10 ma的导通电流来估算它所必须串联的阻值,其计算方式参考如图1所示。图1 单个led的串接电阻计算方式七段显示器可分为共阳极、共阴极型两种,它们都可以等效成8个led的连接电路,其中如图2就是共阴极型七段显示器的等效电路和每节led的定义位置图。 因此,若要点亮七段显示器以实现一个3的数字符号并不点亮p点led,则输入七段显示码是“10110000”(低电平点亮),而且这个码字的每个位所对应位置和如图2相同,顺序是“pgfedcba”。依此类推可得到09的显示码。 图2 共阴极型七段显示器的led位置定义和等效电路由于本设计的目标是设计倒计时显示系统,要求显示4个09的数字,依照图1的计算方式,同时点亮个七段显示器的8节led,结果将需电流为10 ma880 ma。若再进步同时点亮4个七段显示器,这时所需电流为80 ma4=320ma。这对于一般的电子电路来说,是一个不小的电流,不但cpldfpga无法负荷这样的电流驱动,而且这个功率也太大,散热也是问题,电路容易被烧毁。因此显示电路部分不能直接实现各个计时结果同时显示,只能另外通过一个扫描电路对计时输出进行逐个扫描,使七段数码管以两个为一个组,逐个进行显示。只要每个扫描频率超过人的眼睛视觉暂留频率24 hz,就可以达到点亮两个七段数码管,却能享有所有七段数码管同时显示的视觉效果,而且显示也不致闪烁抖动,从而间接实现计时结果同时显示。故输入除了四个十进制数外,还需要1khz的时钟信号进行扫描显示。对于输出,则需要设置一个片选信号(高电平选中),如下图所示要点亮4个数码显示灯则需要4位的片选信号,即如右图所示的ledout30,在1khz的时钟频率扫描下即可显示出主干道和支干道的倒计时数。四、验证仿真1.分频器的仿真:由于分频器将50mhz的时钟信号分频为1hz的时钟信号仿真时耗时大,故仿真时采用100ns时钟并进行分频,end time设为100ms,耗时5min左右。仿真结果如下: 仿真波形1仿真波形2仿真波形32.结果仿真:主干道显示45秒支干道显示40秒时,主干道显示44秒支干道显示39秒时,主干道显示43秒支干道显示38秒时,主干道显示42秒支干道显示37秒时,经功能仿真测试,符合预期结果,程序设计正确。五、程序设计1.端口声明:module tra (clk,ret,flag,led0,led1,led2,led3,red1,yellow1,green1,red2,yellow2,green2);input clk,ret,flag;output 7:0 led0,led1,led2,led3;output red1,yellow1,green1,red2,yellow2,green2; wire clk,ret,flag;reg red1,yellow1,green1,red2,yellow2,green2;reg 7:0 led0,led1,led2,led3;wire 3:0 h_sec1,l_sec1,h_sec2,l_sec2;reg 1:0 state;reg 5:0 light;reg 7:0 num1,num2;reg 25:0 count=26b0;reg 15:0 mount;reg clk_1hz,en,en1,en2;2.分频模块:分频器实现的是将高频时钟信号转换成低频的时钟信号,用于触发控制器和显示器。,因为开发板上的时钟比较大,如果要想观察到结果必须对它进行分频,在分频的时候由于开发板上的时钟是50m的所以采用了一个32的计数器,当时钟的上升沿到来的时候判断计数器是不是为 500000,如果是的话清零,否侧加一然后在进行判断。分频器是将50mhz的时钟信号分频成1hz的时钟信号,程序代码如下:always (posedge clk )if(count26b 01011111010111100001000000) count=count+1;else begin count=0; clk_1hz=clk_1hz;end3.交通灯控制模块:两个方向各种灯亮的时间能够进行设置与修改,此外假设a方向是主干道,车流量最大,因此a方向通行的时间应该比b方向长。a方向和b方向的红,黄,绿分别用red1,yellow1,green1;red2,yellow2, green2来表示。每个方向四种灯按以下顺序点亮,并不断循环:红灯黄灯绿灯。并且每个方向红灯亮的时间应该与另一方向绿,黄灯亮的时间相等。黄灯所起的作用是用来在绿灯后进行缓冲,以提醒行人该方向马上要禁止了。程序代码如下:assign h_sec1,l_sec1,h_sec2,l_sec2=num1,num2;always (posedge clk_1hz or negedge ret)if (!ret)beginstate=2d0;red1,yellow1,green1,red2,yellow2,green2=6b010010;num1=8b00000000;num2=8b00000000;en=1b0;en1=1b1;en2=1b1;endelsebegin if(!flag) begin if(en) begin num1,num2=mount; red1,yellow1,green1,red2,yellow2,green2=light; en=1d0; en1=1b1; end else case(state) 2d0: begin red2=1b0; red1=1b1; yellow1=1b0; yellow2=1b0; green2=1b1; num1=8b01000101; num2=8b01000000; state=2b1; end 2d1: begin if(!num13:0) if(!num17:4) begin state=2d2; end else begin num17:4=num17:4-4d1; num13:0=4d9; end else num13:0=num13:0-4d1; if(!num23:0) if(!num27:4) if(en2) begin green2=1d0; yellow2=1d1; num23:0=4d4; en2=1b0; end else begin green1=1b1; red1=1b0; yellow2=1b0; red2=1b1; num1=8b01000000; num2=8b01000101; en2=1b1; end else begin num27:4=num17:4-4d1; num23:0=4d9; end else num23:0=num23:0-4d1; end2d2: begin if(!num23:0) if(!num27:4) begin state=2d1; end else begin num27:4=num27:4-4d1; num23:0=4d9; end else num23:0=num23:0-4d1; if(!num13:0) if(!num17:4) if(en2) begin green1=1d0; yellow1=1d1; num13:0=4d4; en2=1b0; end else begin red2=1b0; red1=1b1; yellow1=1b0; yellow2=1b0; green2=1b1; en2=1b1; num1=8b01000101; num2=8b01000000; end else begin num17:4=num17:4-4d1; num13:0=4d9; end else num13:0=num13:0-4d1; endendcaseendelse begin if (en1) begin en1=1b0; en=1b1; mount=num1,num2; light=red1,yellow1,green1,red2,yellow2,green2; end else begin num1,num2=16b1000100010001000; red1,yellow1,green1,red2,yellow2,green2=6b100100; endendend4. 显示器模块:本模块的设计是在fpga开发板上设置输出与输入来验证自己的设计是不是正确。采用的是静态数码管显示。程序代码如下:always (posedge clk_1hz) begin case(h_sec1)4b0000: led0=8b00000011;4b0001:led0=8b10011111;4b0010:led0=8b00100101;4b0011: led0=8b00001101;4b0100:led0=8b10011001;4b0101:led0=8b01001001; 4b0110:led0=8b01000001;4b0111:led0=8b00011111;4b1000: led0=8b00000001;4b1001:led0=8b00001001; endcasecase(l_sec1)4b0000: led1=8b00000011;4b0001:led1=8b10011111;4b0010:led1=8b00100101;4b0011: led1=8b00001101;4b0100:led1=8b10011001;4b0101:led1=8b01001001; 4b0110:led1=8b01000001; 4b0111:led1=8b00011111;4b1000: led1=8b00000001;4b1001:led1=8b00001001; endcasecase(h_sec2)4b0000: led2=8b00000011;4b0001:led2=8b10011111;4b0010:led2=8b00100101;4b0011: led2=8b00001101;4b0100:led2=8b10011001;4b0101:led2=8b01001001; 4b0110:led2=8b01000001;4b0111:led2=8b00011111;4b1000: led2=8b00000001;4b1001:led2=8b00001001; endcasecase(l_sec2)4b0000: led3=8b00000011;4b0001:led3=8b10011111;4b0010:led3=8b00100101;4b0011: led3=8b00001101;4b0100:led3=8b10011001;4b0101:led3=8b01001001; 4b0110:led3=8b01000001;4b0111:led3=8b00011111;4b1000: led3=8b00000001;4b1001:led3=8b00001001; endcaseendendmodule六、 验证设计;通过在quartus2软件里布局布线然后把程序下载到fpga开发板上在数码管上观察显示的结果是不是符合自己的设计。布局布线的结果如下:七、故障及问题分解:1 开始时,对实验及模块概念理解不透彻,以致思路不够清楚,处于模糊状态,通过查看参考资料,对模块及实验对象有了清楚的认识,重新设计各模块,使条理清楚、思路明朗,程序后来的编制也就容易了很多。2 计时模块,是显示部件的核心。开始时,在赋值及输出控制信号部分无法正确配合,状态机各状态之间的转换成为最大的问题(各模块编译成功后,顶层编译也能通过,可就是总体仿真出问题,问题主要是它总是处于一个状态不改变)。分析原因是交通灯的状态由计时模块输出的使能信号确定,因此问题就出在计时模块上。后来发现只需在控制模块加一个输出信号即可。3. 开关的连接方式很多,对于不同的要求有不同的连接方法。八、心得体会:这次eda课程设计历时两个星期,在整整两个星期的日子里,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次设计,进一步加深了对eda的了解,让我对它有了更加浓厚的兴趣。特别是当每一个子模块编写调试成功时,心里特别的开心。但是在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。在波形仿真时,也遇到了一点困难,想要的结果不能在波形上得到正确的显示:在设定输入的时钟信号后,始终看不到主干道按绿-黄-红而同时支干道按红-绿-黄的周期变化。后来,在数十次的调试之后,才发现是因为输入的时钟信号对于一个红绿灯显示的周期时间来说太短了。经过屡次调试,终于找到了比较合适的输入数值:时钟周期设置在100us左右比较合适。另外,endtime的值需要设置的长一点:100ms左右,这样就可以观察到完整的仿真结果;如果不想看到因时间设置得较小时序仿真时出现微小延时,则进行功能仿真。其次,在连接各个模块的时候一定要注意各个输入、输出引脚的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人事个人工作计划5篇
- 防溺水的讲话稿8篇
- 水电工年度工作总结
- 2024年国开电大【本科】《个人理财》形考任务1234(含答案)
- DB31-T 1396-2023 风机系统运行能效评估技术规范
- 兰亭集序、滕王阁序、赤壁赋比较阅读
- 金融事业说明会
- 公路土工试验规程(JTG-E40-2007)
- 《矛盾定义新课教学》课件
- 《用电检查与稽查》课件
- 医院消防安全宣教
- 遇见朗读者智慧树知到期末考试答案2024年
- 第10课时-小人物-大情怀-单元总结-七年级语文下册(部编版)
- 搬运装卸服务外包搬运装卸实施方案
- (正式版)HGT 22820-2024 化工安全仪表系统工程设计规范
- 医院手术室地震应急预案
- 上肢内固定取出的手术配合
- 宝丰县永顺铝土有限公司铝土矿、高铝粘土矿、水泥灰岩矿矿山地质环境保护与土地复垦方案
- 2024年合肥高新公共资源交易有限公司招聘笔试参考题库附带答案详解
- (高清版)TDT 1058-2020 第三次全国国土调查县级数据库建设技术规范
- (高清版)TDT 1075-2023 光伏发电站工程项目用地控制指标
评论
0/150
提交评论