Verilog HDL基础之:实例5 交通灯控制器

2013-08-21 15:41:45 来源:EEFOCUS
标签:

 

实例的内容及目标

1.实例的主要训练内容

本实例通过Verilog HDL语言设计一个简易的交通等控制器,实现一个具有两个方向、共8个灯并具有时间倒计时功能的交通灯功能。

 

2.实例目标

通过本实例,读者应达到下面的目标。

  • 掌握Verilog设计一个交通等控制器的方法。
  • 初步掌握Verilog语言的设计方法。

 

原理简介

交通灯是城市交通中不可缺少的重要工具,是城市交通秩序的重要保障。本实例就是实现一个常见的十字路口交通灯功能。读者通过学习这个交通灯控制器,可以实现一个更加完整的交通灯。例如实现实时配置各种灯的时间,手动控制各个灯的状态等。

 

一个十字路口的交通一般分为两个方向,每个方向具有红灯、绿灯和黄灯3种,另外每个方向还具有左转灯,因此每个方向具有4个灯。

 

这个交通灯还为每一个灯的状态设计了倒计时数码管显示功能。可以为每一个灯的状态设置一个初始值,灯状态改变后,开始按照这个初始值倒计时。倒计时归零后,灯的状态将会改变至下一个状态。

 

值得注意的是,交通灯两个方向的灯的状态是相关的。也就是说,每个方向的灯的状态影响着另外一个方向的灯的状态,这样才能够协调两个方向的车流。如果每个方向的灯是独立变化的,那么交通灯就没有了意义。

 

如表1所示是两个方向(假设为A,B方向)灯的状态的对应情况。

表1                                              交通灯两个方向灯状态对应表

方向A

方向B

红灯亮

黄灯亮或绿灯亮

直行绿灯亮

红灯亮

黄灯亮

红灯亮

左转灯

红灯亮

 

在实际的交通系统中,直行绿灯、左转绿灯和红灯的变化之间都应该有黄灯作为缓冲,以保证交通的安全。因此假如我们假设方向A的黄灯亮的时间持续5s,直行绿灯灯亮的时间持续40s,左转灯灯亮的时间持续15s,则方向B红灯灯亮的时间持续为(直行绿灯+黄灯+左转绿灯+黄灯)所消耗的时间,一共为65s。

 

同样假设方向B黄灯亮的时间持续5s,直行绿灯灯亮的时间持续30s,左转灯灯亮的时间持续15s,则方向B红灯灯亮的时间持续为(直行绿灯+黄灯+左转绿灯+黄灯)所消耗的时间,一共为55s。

 

具体时间参数的设定读者可以根据需要进行修改,但是一定要保证两个方向的灯的状态符合表1的要求。

 

代码分析

下面给出交通灯控制器的Verilog HDL源代码,首先介绍交通灯端口信号的定义及说明,读者可以通过这些端口将此交通灯模块实例化至自己的工程设计中。

  • CLK:同步时钟。
  • EN:使能信号,为高电平时,控制器开始工作。
  • LAMPA:控制A方向4盏灯的状态;其中,LAMPA0~LAMPA3分别控制A 方向的左拐灯、绿灯、黄灯和红灯。
  • LAMPB:控制B方向4盏灯的状态;其中,LAMPB0~LAMPB3分别控制B 方向的左拐灯、绿灯、黄灯和红灯。
  • ACOUNT:用于A方向灯的时间显示,8位,可驱动两个数码管。
  • BCOUNT:用于B方向灯的时间显示,8位,可驱动两个数码管。

 

下面是交通灯的Verilog HDL源代码及说明。

 

module traffic(CLK,EN,LAMPA,LAMPB,ACOUNT,BCOUNT);     //端口说明

     output[7:0] ACOUNT,BCOUNT;

     output[3:0] LAMPA,LAMPB;

     input CLK,EN;                                  //内部信号说明

     reg[7:0] numa,numb;                         //ACOUNT和BCOUNT的内部信号

     reg tempa,tempb;                

     reg[2:0] counta,countb;                    //方向A和方向B的灯的状态

     reg[7:0] ared,ayellow,agreen,aleft,bred,byellow,bgreen,bleft;

     reg[3:0] LAMPA,LAMPB;

    

     //设置各交通灯的持续时间初始化值,红灯的值由另一个方向的黄灯和绿灯计算得出。

     always @(EN)

          if(!EN) begin                //使能信号EN无效时,对交通灯的计数值进行初始化

               ared       <=8'd55;    //55 s , 30 + 5 + 15 + 5

               ayellow    <=8'd5;     //5 s

               agreen     <=8'd40;    //40 s

               aleft      <=8'd15;     //15 s

               bred      <=8'd65;      //65 s , 40 + 5 + 15 + 5

               byellow    <=8'd5;      //5 s

               bleft      <=8'd15;     //15 s

               bgreen     <=8'd30;     //30 s

          end

          assign ACOUNT=numa;                   //8位数码管输出

     assign BCOUNT=numb;                       //8位数码管输出

          //控制A方向4种灯的模块

     always @(posedge CLK) begin        

          if(EN) begin                         //使能有效时,交通灯开始工作

               if(!tempa) begin

                    tempa<=1;

                    case(counta)               //控制灯状态的顺序

                         0: begin              //状态0

                              numa<=agreen;    //直行绿灯亮

                              LAMPA<=2;          //输出0010

                              counta<=1;         //进入下一个状态

                         end

                         1: begin                //状态1

                              numa<=ayellow; //黄灯亮

                              LAMPA<=4;          //输出0100

                              counta<=2;         //进入下一个状态

                         end

                         2: begin                 //状态2

                              numa<=aleft;       //左转绿灯亮

                              LAMPA<=1;          //输出0001

                              counta<=3;         //进入下一个状态

                         end

 
关注与非网微信 ( ee-focus )
限量版产业观察、行业动态、技术大餐每日推荐
享受快时代的精品慢阅读
 

 

作者简介
华清远见
华清远见

华清远见(www.farsight.com.cn)是国内领先嵌入师培训机构,2004年注册于中国北京海淀高科技园区,除北京总部外,上海、深圳、成都、南京、武汉、西安、广州均有直营分公司。华清远见除提供嵌入式相关的长期就业培训、短期高端培训、师资培训及企业员工内训等业务外,其下属研发中心还负责嵌入式、Android及物联网方向的教学实验平台的研发及培训教材的出版,截止目前为止已公开出版70余本嵌入式/移动开发/物联网相关图书。企业理念:专业始于专注 卓识源于远见。企业价值观:做良心教育、做专业教育,更要做受人尊敬的职业教育。

继续阅读
AD9854的工作原理和应用电路图

AD9854采用80脚LQFP封装,其内部共有40个8位的控制寄存器,分别用来控制输出信号频率、相位、幅度、步进斜率等,以及一些特殊控制位。下表给出了控制寄存器的分布情况。

基于AD9854信号发生电路和MSK调制信号
基于AD9854信号发生电路和MSK调制信号

由于AD9854支持FSK调制方式,实际上我们所需要的MSK信号就是一种特殊的正交FSK信号,其特殊性在于其两组频率之间的差值是满足这两组频率正交性的最小频差。值得注意的是,MSK信号的相位是连续的,在调制的过程中我们为了保证产生的MSK信号的相位连续性需要加入相位常量,这将增加MSK调制系统的复杂性。

英特尔 FPGA 助力 Microsoft Azure 人工智能

新特性:在近日举行的 Microsoft Build 大会上,Microsoft推出了 基于 Project Brainwave 的 Azure 机器学习硬件加速模型,并与 Microsoft Azure Machine Learning SDK 相集成以供预览。

中国FPGA新突破,到底解决了哪些问题?

日前,在一次军民融合展会上,中国电科下属单位展示了完全正向设计的3500万门级FPGA。随后,中国电子下属单位公开宣布成功研发7000万门级FPGA。

《集成电路专利态势报告(2018版)》透露了哪些信息?
《集成电路专利态势报告(2018版)》透露了哪些信息?

近日,中国集成电路知识产权联盟秘书处纲正知识产权中心发布了《集成电路专利态势报告(2018版)》。该报告分别从集成电路总体、DRAM 领域、FPGA 领域、光刻设备领域这四个方面,分析了各个领域的专利态势。

更多资讯
屌丝程序员的逆袭之路
屌丝程序员的逆袭之路

《十面阿里》 本屌现今四年开发经验;前前后后为进阿里面试十次(阿里旗下——蚂蚁金服,天猫的offer都被hr因学历而被拒,最后的菜鸟面幸运的被录用,拿到P6offer,真正的“十面”阿里!)。

想要学习PLC,我们该从何入手?

PLC编程语言符合IEC 61131标准。其中比较主流的语言是模块化的编程语言,也即IEC 61131-3语言。由于所有的PLC生产厂家都必须遵循IEC 61131标准,因此深入学习某一款PLC后,其它的PLC大体上是类似的。

FPGA的图像处理是怎么做到的?
FPGA的图像处理是怎么做到的?

基于软件的图像处理方法存在着一些局限性,尤其是计算速度和算法效率方面。所以大家很自然的就想到了FPGA作为嵌入式图像应用的平台。许多图像处理本身就是并行计算的,并且FPGA的编程硬件,本质上也是并行的。但是利用FPGA硬件进行图像处理存在很多的困难,需要学到很多的技巧。

在FPGA的编程语言里,这是你最容易犯的错误

我知道,我对与电子有关的所有事情都很着迷,但不论从哪个角度看,今天的现场可编程门阵列(FPGA),都显得“鹤立鸡群”,真是非常棒的器件。如果在这个智能时代,在这个领域,想拥有一技之长的你还没有关注FPGA,那么世界将抛弃你,时代将抛弃你。

算力大爆炸时代,加速云的FPGA有啥妙招在手?

加速云创始人CEO邬刚,拥有15年以上FPGA领域经验,在接受与非网记者采访时也只能表示:“在深度学习领域,FPGA并不是全部能够搞定。”但是FPGA也拥有让这个领域无法拒绝的理由。

Moore8直播课堂
电路方案