西电通院VHDL交通灯大作业
VHDL上机作业-交通灯
![VHDL上机作业-交通灯](https://img.taocdn.com/s3/m/02331ad784254b35eefd3446.png)
数字电路与逻辑设计(EDA)实验报告班级:姓号:学号:实验时间:一.命题设计有一个实际的十字路口设置有东西、南北两个方向的干道,为确保车辆安全通行,在每条干道的每个入口设置了一组两位数码管显示装置和四组红、绿、黄信号灯,分别用来指示东西、南北方向车辆的通行和人横穿公路(1)数码管倒计时指示红绿灯的亮灭时间:红灯亮45秒,绿灯40秒,黄灯5秒,循环周期为90秒(2)东西方向红灯亮时,前40秒南北方向绿灯亮,后5秒黄灯亮之后东西方向路灯亮40秒,黄灯亮5秒,期间南北红灯亮45秒如此循环(3)扩展命题:由按键控制,实现紧急情况时计时暂停,两方向都亮红灯二.方案设计该交通灯程序由一个模块组成,并不复杂的功能决定其程序的简单。
主要就四个小块:(1)用分频电路实现一秒计时(2)用计数器控制LED和数码管的功能(3)LED译码电路(4)数码管译码电路交通灯的状态真值表三.程序设计(1)一秒时钟信号:由于开发板上给的时钟是49MHz的信号clk,故需要一个分频器实现一秒计时用计数的方式,以时钟改变48000000次为周期,上升沿触发,前24000000次分频信号clk1为1,后24000000次分频信号为0,分频后的信号做为内部1秒时钟计时分频器占用一个进程(2)计数器控制LED和数码管定义一个变量js,在秒信号上升沿时触发,变量加1,变量周期为90,共计90秒(3)LED的亮灭控制输出端口led的值对应红绿灯亮灭状态(由于开发板是共阳极,故低电位点亮即0为亮),前三位为东西方向红绿黄灯,后三位代表南北方向的红绿黄灯(具体点亮计数值见程序)。
(4)数码管倒计时的显示和LED的控制程序一样,由计数程序控制数码管的显示状态,7段数码管相当于7个LED灯,同够控制它们的亮灭来显示数字,实现倒计时。
数码管译码时,信号对应位为abcdefg四.系统框图五.程序流程图六.仿真时序图由于信号频率太高,仿真时不能实现。
故将分频改为4分频时序图如下:七.开发板引脚定义八.附录:程序源码--交通灯程序,LED显示和4段数码管显示程序--LED前三个代表一个方向的交通灯,其显示时间由前两段数码管显示:--第一个LED代表绿灯,点亮时间为10秒;第二个代表黄灯,点亮4秒,第三个代笔的是红灯,点亮14秒--时间由数码管以倒数的形式显示--后三个为另外一个方向的红绿灯:第四个为红灯,点亮14秒,第五个为绿灯,点亮10秒,最后一个是--黄灯,点亮4秒,倒计时为最后面的两段数码管显示--数码管,本来设计的是有片选的数码管显示,由于开发板不数码管不需要片选,故又改掉了--前两个(一二)数码管是一个方向的红绿灯计时,后两个(五六)—是另外一个方向的计时library ieee;use ieee.std_logic_1164.all;useieee.std_logic_signed.all;entityjtd isport(clk : in std_logic; --49MHznum1,num2,num3,num4 : out std_logic_vector(6 downto 0); --Digital tube the first sec and fifth sixled : out std_logic_vector(5 downto 0) --led);endjtd;architecture one of jtd issignal clk1:std_logic; -- Clock :1Ssignal q1 :std_logic :='0';beginprocess(clk)variable temp1 :integer range 0 to 3; --Change to 48999999;beginif(clk'event and clk='1') thenif temp1=3 thentemp1:=0;else temp1 :=temp1+1;if (temp1<=1)thenclk1<='1';else clk1<='0';end if;end if;end if;end process;L1: process(clk1) --LED Traffic lightsvariablejs :integer range 0 to 27; --change to 89beginif(clk1'event and clk1='1') thenifjs=27 thenjs:=0;elsejs:=js+1;end if;end if;if (js>=0 and js<=9) then --change to 39led<="011110";elsif (js>=10 and js<=13) then --change to 44led<="101110";elsif (js>=14 and js<=23) then --change to 84led<="110011";elsif (js>=24 and js<=27) then --change to 89led<="110101";else led<="111111";end if;casejs iswhen 0=> num1<="0000001";num2<="0000100";num3<="1001111";num4<="0000110";when 1=> num1<="0000001";num2<="0000000";num3<="1001111";num4<="0010010";when 2=> num1<="0000001";num2<="0001111";num3<="1001111";num4<="1001111";when 3=> num1<="0000001";num2<="0100000";num3<="1001111";num4<="0000001";when 4=> num1<="0000001";num2<="0100100";num3<="0000001";num4<="0000100";when 5=> num1<="0000001";num2<="1001100";num3<="0000001";num4<="0000000";when 6=> num1<="0000001";num2<="0000110";num3<="0000001";num4<="0001111";when 7=> num1<="0000001";num2<="0010010";num3<="0000001";num4<="0100000";when 8=> num1<="0000001";num2<="1001111";num3<="0000001";num4<="0100100";when 9=> num1<="0000001";num2<="0000001";num3<="0000001";num4<="1001100";when 10=> num1<="0000001";num2<="0000110";num3<="0000001";num4<="0000110";when 11=> num1<="0000001";num2<="0010010";num3<="0000001";num4<="0010010";when 12=> num1<="0000001";num2<="1001111";num3<="0000001";num4<="1001111";when 13=> num1<="0000001";num2<="0000001";num3<="0000001";num4<="0000001";when 14=> num1<="1001111";num2<="0000110";num3<="0000001";num4<="0000100";when 15=> num1<="1001111";num2<="0010010";num3<="0000001";num4<="0000000";when 16=> num1<="1001111";num2<="1001111";num3<="0000001";num4<="0001111";when 17=> num1<="1001111";num2<="0000001";num3<="0000001";num4<="0100000";when 18=> num1<="0000001";num2<="0000100";num3<="0000001";num4<="0100100";when 19=> num1<="0000001";num2<="0000000";num3<="0000001";num4<="1001100";when 20=> num1<="0000001";num2<="0001111";num3<="0000001";num4<="0000110";when 21=> num1<="0000001";num2<="0100000";num3<="0000001";num4<="0010010";when 22=> num1<="0000001";num2<="0100100";num3<="0000001";num4<="1001111";when 23=> num1<="0000001";num2<="1001100";num3<="0000001";num4<="0000001";when 24=> num1<="0000001";num2<="0000110";num3<="0000001";num4<="0000110";when 25=> num1<="0000001";num2<="0010010";num3<="0000001";num4<="0010010";when 26=> num1<="0000001";num2<="1001111";num3<="0000001";num4<="1001111";when 27=> num1<="0000001";num2<="0000001";num3<="0000001";num4<="0000001";end case;end process L1;end one;。
基于VHDL的智能交通灯控制器
![基于VHDL的智能交通灯控制器](https://img.taocdn.com/s3/m/5c2938d5f705cc1754270927.png)
基于VHDL的智能交通灯控制器1 设计任务及要求交通灯在指挥道路交叉部分的车辆,行人安全,有序,高效地通行,缓解城市交通拥堵状况起着重要作用,交通灯的出现大大降低了交汇路段的交通事故率,极大地提高了通行效率,是现代交通控制系统不可缺少的一部分。
本次将设计基于VHDL语言的交通灯控制系统,实现如下功能: 1. 本设计用总共8个LED灯分别指示南北和东西方向的红黄绿以及左转信号灯。
并规定在非紧急情况下各个方向车辆在不影响其他直行车道车辆正常行驶是情况下均能右转向,因此本设计未包含右转向信号。
2. 本设计具有状态实时显示功能,即各个状态的剩余时间将在对应的数码管上显示。
3. 复位功能:在紧急情况键未按下时复位键可以使系统从任意状态回到第一种状态。
4. 紧急状态限行功能:在紧急情况时可以按下紧急情况按钮,可使系统在任意情况,转向限制所有方向车辆通行,同时数码管显示“00”,发出警告音 5. 系统的六个状态为:东西方向绿灯,南北方向红灯,持续30s;东西方向黄灯,南北方向红灯,持续5s;东西方向绿灯,南北方向左转,持续10;东西方向红灯,南北方向绿灯,持续30s;东西方向红灯,南北方向黄灯,持续5s;东西方向左转,南北方向绿灯,持续10s;6.要求在无人工干预条件下各个状态能自动转换,系统正常运行。
2设计原理及总体框图本交通灯设计总共用8个数码管分别指示东西和南北方向的红灯,黄灯,绿灯以及左转指示灯。
共有六种状态,如下表所示:状态 1 2 3 4 5 6 南北方向东西方向LED指示LED状态绿灯黄灯绿灯红灯红灯左转计数器初值30 5 10 35 5 10 LED状态红灯红灯左转绿灯黄灯绿灯计数器初值35 5 10 305 10 LED代码00101000 01001000 00100001 10000010 10000100 00010010 设计的总体框图为:时钟输入交通灯控制核心模块东西方向数码管时间显示南北方向数码管时间显示LED显示交通灯控制模块在时钟的控制下,实现各个状态的自动转换,并且负责输出LED的控制信号和,数码管倒计时的BCD码输入信号。
基于VHDL的交通灯控制器设计
![基于VHDL的交通灯控制器设计](https://img.taocdn.com/s3/m/8a6253672e3f5727a5e9627a.png)
生物医学工程王春雨基于VHDL的交通灯控制器设计应用VHDL语言设计数字系统,大部分设计工作可在计算机上完成,从而缩短系统开发时间,提高工作效率。
下面介绍基于VHDL设计交通灯控制器的一种方案,并给出源程序和仿真结果。
1 系统功能与要求实现交通繁忙的主路和偶有车行的小路交会路口的交通管理。
要求:1、交通灯控制器控制主干道和小路交叉路口的交通。
2、小路口来车,主线路口绿灯切换到黄灯5秒钟后变为红灯。
3、红灯燃亮20秒后,自动切换为绿灯。
4、指示左转弯的绿灯亮12 s,绿灯变至红灯时,黄灯亮3 s。
5、主路的交通管制重新切换到绿灯后5分钟内不理睬小路上的车况,即使又有车辆驶入小路路口。
上述主路上的灯光显示,小路口的灯信号与之逻辑配合。
2 程序设计根据交通灯控制器的功能与要求,将其总体电路分为分频器、信号控制器两个模块。
外部脉冲振荡器的频率选为32768 kHz,经分频器分频得1 Hz的信号,1 Hz信号用做信号控制器的计数脉冲,用VHDL设计组成交通灯控制器的分频器、信号控制器两个模块,在M AX+plus Ⅱ平台上,编译VHDL程序,然后用原理图输入法形成总体框图。
实验程序:Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.STd_Logic_Unsigned.All;Entity Frequency10Hz IsPort(Clk20M: In Std_Logic;Clk10Hz:Out Std_Logic);End;Architecture Count Of Frequency10Hz Is Signal Tout:Integer Range 0 to ;Signal Clk:Std_Logic;BeginProcess(Clk20M)BeginIf rising_edge(Clk20M) thenIf Tout= thenTout<=0;Clk<=Not Clk;Else Tout<=Tout+1;End If;End If;End Process;Clk10Hz<=Clk;End;Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.STd_Logic_Unsigned.All; Entity Frequency IsPort(Clk10Hz: In Std_Logic;Clk1Hz:Out Std_Logic);End;Architecture Count Of Frequency Is Signal Tout:Integer Range 0 to 4;Signal Clk:Std_Logic;BeginProcess(Clk10Hz)BeginIf rising_edge(Clk10Hz) thenIf Tout=4 thenTout<=0;Clk<=Not Clk;Else Tout<=Tout+1;End If;End If;End Process;Clk1Hz<=Clk;End;Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.Std_Logic_Unsigned.All;Entity Controller IsPort(Clock:In Std_Logic;Hold:In Std_Logic;CountNum:IN Integer RANgE 0 TO 49;Flash:Out Std_Logic;NumA,NumB:Out Integer Range 0 To 25;RedA,GreenA,YellowA:Out Std_Logic;RedB,GreenB,YellowB:Out Std_Logic);End;ARCHITECTURE Behavior OF Controller IS BEGINPROCESS(CLOCK)BeginIf falling_edge(Clock) thenIf Hold='1' thenRedA<='1';RedB<='1';GreenA<='0';GreenB<='0';YellowA<='0';YellowB<='0';Flash<='1';ElseFlash<='0';If CountNum<=19 thenNumA<=20-CountNum;RedA<='0';GreenA<='1';YellowA<='0';Elsif (CountNum<=24) thenNumA<=25-CountNum;RedA<='0';GreenA<='0';YellowA<='1';ElseNumA<=50-CountNum;RedA<='1';GreenA<='0';YellowA<='0';End If;If CountNum<=24 thenNumB<=25-CountNum;RedB<='1';GreenB<='0';YellowB<='0';Elsif CountNum<=44 thenNumB<=45-CountNum;RedB<='0';GreenB<='1';YellowB<='0';ElseNumB<=50-CountNum;RedB<='0';GreenB<='0';YellowB<='1';End If;End If;End If;End Process;End;LIBRARY IEEE;USE IEEE.Std_logic_1164.all;Use IEEE.Std_Logic_Unsigned.All; ENTITY Counter ISPORT(Clock:IN Std_logic;Reset:IN Std_logic;Hold:IN Std_logic;CountNum:BUFFER Integer RANGE 0 TO 49 );END;ARCHITECTURE Behavior OF Counter IS BEGINPROCESS(Reset,Clock)BEGINIF Reset='1'THENCountNum<=0;ELSIF rising_edge(Clock) THENIF Hold='1'THENCountNum<=CountNum;ELSEIF CountNum=49 THENCountNum<=0;ELSECountNum<=CountNum+1;END IF;END IF;END IF;END PROCESS;END Behavior;Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.Std_Logic_Unsigned.All;Entity Display IsPort( Clock:In Std_Logic;Flash:In Std_Logic;Qin:In Std_Logic_Vector(3 Downto 0); Display:Out Std_Logic_Vector(0 to 6)); End;Architecture Light Of Display IsSignal Timeout:Integer Range 0 To 11;BeginProcess(Clock)BeginIf rising_edge(Clock) thenIf (Flash='0') thenTimeout<=0;ElseIf (Timeout=11) thenTimeout<=0;ElseTimeout<=Timeout+1;End If;End If;If (Timeout<=6) thenCase Qin IsWhen "0000"=>Display<="";When "0001"=>Display<="";When "0010"=>Display<="";When "0011"=>Display<="";When "0100"=>Display<="";When "0101"=>Display<="";When "0110"=>Display<="";When "0111"=>Display<="";When "1000"=>Display<="";When "1001"=>Display<="";When Others=>Display<="";End Case;ElseDisplay<="";End If;End If;End Process;End;Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.Std_Logic_Unsigned.All; Entity Fenwei IsPort(Numin:In Integer Range 0 To 25;NumA,NumB:Out Integer Range 0 To 9 );End;Architecture Fen Of Fenwei IsBeginProcess(Numin)BeginIf Numin>=20 thenNumA<=2;NumB<=Numin-20;Elsif Numin>=10 thenNumA<=1;NumB<=Numin-10;ElseNumA<=0;NumB<=Numin;End If;End Process;End;顶层框图:3.仿真结果。
基于VHDL的交通灯设计与实现
![基于VHDL的交通灯设计与实现](https://img.taocdn.com/s3/m/d1a6134589eb172dec63b70a.png)
华中科技大学基于xilinx FPGA的VHDL交通灯控制器的设计--基于Spartan3E开发板专业:电子信息工程一. 任务设计要求①设计一个十字路口交通信号灯的定时控制电路。
要求红、绿灯按一定的规律亮和灭,并在亮灯期间进行倒计时,并将运行时间用数码管/液晶显示出来。
②绿灯亮时,为该车道允许通行信号,红灯亮时,为该车道禁止通行信号。
要求主干道每次通行时间为99秒,支干道每次通行时间为30秒。
每次变换运行车道前绿灯闪烁,持续时间为5秒。
即车道要由主干道转换为支干道时,主干道在通行时间只剩下5秒钟时,绿灯闪烁显示,支干道仍为红灯,以便主干道上已过停车线的车继续通行,未过停车线的车停止通行。
同理,当车道由支干道转换为主干道时,支干道绿灯闪烁显示5秒钟,主干道仍为红灯。
③对红、绿灯的运行时间要能比较方便的进行重新设置。
④对器件进行在系统编程和实验验证。
⑤用VHDL语言对设计进行描述,设计一个测试方案,通过ISE对设计进行仿真验证。
并能够下载到实验板上调试成功。
任务扩展:在原设计的基础上加入指示方向的功能。
二. 系统设计1.系统原理图与说明由系统设计原理图,我以清楚地将系统分为六个模块:分频模块,时间设置模块,状态转换模块,时间计算模块,LED流水灯模块,LCD显示模块。
1)分频模块分频模块其作用为:由于Spartan3E板上提供的时钟信号为50MHz,而设计所需时钟信号为1Hz,故使用分频模块将50MHz信号分频为1Hz信号。
2)时间置数模块由于任务设计要求可以对主干道,支干道上左转、绿灯运行的时间进行重新设置调整,所以要对系统进行参数化设计。
首先引入一组参数,main_gh,main_gl,main_lh,main_ll,branch_gh,branch_gl,branch_lh,branch_ll(下划线后面的字母分别取green,left,high,low首字母).需要置数时,首先选择对主干道还是支干道时间置数,这里设置一个main_or_branch参数,当main_or_branch为高时设置支干道时间,为低时设置主干道时间。
用VHDL语言实现的交通灯
![用VHDL语言实现的交通灯](https://img.taocdn.com/s3/m/1dfecadb0029bd64783e2ca0.png)
目录序言 (3)第1章任务和要求 (4)1.1 设计任务 (4)1.2设计要求 (4)第2章功能分析 (6)2.1交通灯控制系统总体框架图 (6)2.2模块功能分析 (6)第3章设计过程 (7)3.1 分频模块的设计及仿真图 (7)3.2 显示模块的设计及仿真图 (7)3.3 数码管显示模块设计及仿真图 (8)3.4 译码驱动模块的设计及仿真图 (8)3.5顶层文件设计及仿真图 (9)3.6交通灯顶层原理图 (9)第4章外部电路结构图及引脚分配 (11)4.1电路主要结构 (11)4.2下载引脚分配 (12)第五章分析与小结5.1测试及结果分析 (13)5.2实验小结 (13)参考文献 (14)附录 (15)具有五种信号灯和倒计时显示的交通灯控制器序言随着社会经济的发展,城市交通问题越来越引起人们的关注。
人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。
城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。
、上海、南京等出现了交通超负荷运行的情况,因此,自80年代后期,这些城市纷纷修建城市高速道路,在高速道路建设完成的初期,它们也曾有效地改善了交通状况。
然而,随着交通量的快速增长和缺乏对高速道路的系统研究和控制,高速道路没有充分发挥出预期的作用。
而城市高速道路在构造上的特点,也决定了城市高速道路的交通状况必然受高速道路与普通道路耦合处交通状况的制约。
所以,如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市高速道路,缓解主干道与匝道、城区同周边地区的交通拥堵状况,越来越成为交通运输管理和城市规划部门亟待解决的主要问题。
交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
随着中国加入WTO,我们不但要在经济、文化、科技等各方面与国际接轨,在交通控制方面也应与国际接轨。
西电EDA实验报告
![西电EDA实验报告](https://img.taocdn.com/s3/m/5559f731c381e53a580216fc700abb68a982ad64.png)
西电EDA实验报告交通灯控制器设计报告交通控制器一.选题目的尝试用所学eda和vhdl编程知识,解决生活中常见的问题。
做到学而时习之。
二.设计目标(课题内容)设计一个十字路口交通控制系统,其东西,南北两个方向除了有红、黄、绿灯指示是否允许通行外,还设有时钟,以倒计时方式显示每一路允许通行的时间,绿灯,黄灯,红灯的持续时间分别是40、5和45秒。
当东西或南北两路中任一道上出现特殊情况,例如有消防车,警车要去执行任务,此时交通控制系统应可由交警手动控制立即进入特殊运行状态,即两条道上的所有车辆皆停止通行,红灯全亮,时钟停止计时,且其数字在闪烁。
当特殊运行状态结束后,管理系统恢复原来的状态,继续正常运行。
三.实现方案(包括原理框图和hdl设计流程图)1原理框图从题目中计数值与交通灯的亮灭的关系如图(1)所示1.交通灯的显示状况:东西南北图(1)计数值与交通灯亮灭的关系2.交通等的原理示意图如图(2)图(2)交通灯的示意图3.hdl设计流程图如图(3):四.设计过程(包括关键模块的仿真结果)1.总体思路第一部分:clk时钟秒脉冲发生电路在红绿灯交通信号系统中,大多数情况是通过自动控制的方式指挥交通的。
因此为了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作。
模块说明:系统输入信号:clk: 由外接信号发生器提供10hz的时钟信号;系统输出信号:clk_out:产生每秒一个脉冲的信号;第二部分:计数秒数选择电路计数电路最主要的功能就是记数负责显示倒数的计数值,对下一个模块提供状态转换信号。
模块说明:系统输入:clk_out: 接收由clk电路的提供的1hz的时钟脉冲信号;系统输出信号:countnum:倒计数值;第三部分:红绿灯状态转换电路本电路负责红绿灯的转换。
模块说明:系统输入信号:clock,hold,countnum;系统输出信号:numa,numb: 接收计数秒数选择电路状态转换信号;reda,greena,yellowa,redb,greenb,yellowb :负责红绿灯的状态显示。
VHDL编程实现交通灯控制(数电实验)解析
![VHDL编程实现交通灯控制(数电实验)解析](https://img.taocdn.com/s3/m/53f08c9e59f5f61fb7360b4c2e3f5727a5e92422.png)
•
emergencykey:in std_logic; --紧急开关
•
time_h,time_l:out std_logic_vector(3 downto 0); ; --定时
•
red,green,yellow:out std_logic_vector(3 downto 0) ; --红黄绿灯
•
);
描述状态机的进程
状态机的描述方式: 三进程、二进程、单进程(本实验采用)
一般采用三个进程来描述状态机 描述状态机寄存器的时序进程 描述次态产生逻辑的组合逻辑进程 描述输出组合逻辑进程
状态机寄存器的时序进程
process(reset,clk)
begin
if reset='1' then
current_state<=初始状态;
在进程中利用自定义数据类型定义交通灯的4个状态, 根据东西、南北方向的时间计数器的计数结果利用CASE 语句实现4个状态的转换,在每一个状态中利用内部信号 传递实现对红黄绿灯的显示控制。
FSM设计方法
• 分析控制器设计指标, 建立系统算法模型, 即状态转换图;
• 分析被控对象的时序, 确定控制器的有限 状态机的各个状态及输入、输出条件;
end if;
•
);
• end scandisplay;
• architecture behav of scandisplay is
• end if; •end process;
• signal num_in: std_logic_vector(3 downto 0); • signal counter:integer range 0 to 1; • signal led_chioce:std_logic; • Begin
基于EDA的VHDL语言设计的交通灯
![基于EDA的VHDL语言设计的交通灯](https://img.taocdn.com/s3/m/3c0125850912a21615792925.png)
师学院本科生课程设计论文基于Verilog HDL的RS编码器设计院系电子与通信工程学院专业通信工程学生班级通信111班姓名韦仁良学号 3指导教师单位电子与通信工程学院指导教师宇宁【摘要】随着社会上特别是城市中机动车辆保有量的不断增加,在现代城市的日常运行控制中,车辆的交通控制越来越重要,在十字交叉路口,越来越多的使用红绿灯进行交通指挥和管理。
本文以VHDL硬件描述语言为设计手段,完成了交通信号灯控制电路的设计,其通信号灯控制电路的开发目的是设计一个适用于主、支干道十字交叉路口的红黄绿交通灯的控制系统,通过合理设计系统功能,使红黄绿灯的转换有一个准确的时间间隔和转换顺序。
所设计的交通信号灯控制电路经过在QuartusⅡ软件下进行模拟仿真,观察其波形,证明所设计的交通信号灯控制电路完全可以实现预定的功能,并有一定的实用性。
【关键词】VHDL; QuartusⅡ; 交通灯【题目要求】用有限状态机设计一个交通灯控制器,设计要求:A路和B路,每路都有红、黄、绿三种灯,持续时间为:红灯45s、黄灯5s、绿灯40s。
A、B路交通灯的转换状态是:(1)A红、B绿(持续时间40s);(2)A红、B黄(持续时间5);(3)A绿、B红(持续时间40s);(4)A黄、B红(持续时间5s);【系统总体设计原理】bin2bcd以及显示模块display电路构成。
其中分频模块fen50m_1s主要将系统输入的基准时钟信号转换为1Hz的激励信号,驱动控制模块工作。
控制模块traffic_control根据计数情况对交通灯的亮灭及持续时间进行控制。
转换模块bin2bcd将控制模块设计的亮灯时间的二进制转换为bcd码。
显示模块display主要将亮灯时间以倒计时的形式通过数码显示出来【时钟分频模块】系统时钟脉冲为50MHz,为满足各个模块脉冲需求,需要分频成2Hz和4000Hz的脉冲。
fen50m_1s模块设计,实现频率由50MHz到2Hz的转变,达到我们需要的1s的要求,模块如下图:分频器一端口说明:clkin:输入50MHz时钟脉冲clkout:输出2Hz脉冲fen50m_1s实现Verilog语言描述如下:module fen50m_1s(clkin,clkout);input clkin;output clkout;reg clkout;reg [24:0] q;always (posedge clkin)beginif (q==24999999)beginq<=0;clkout<=~clkout;endelse q<=q+1;endendmodule编译结果:分频器二fen50m_4000模块设计,实现频率由50MHz到4000Hz的转变分频器二端口说明:clkin:输入50MHz时钟脉冲clkout:输出4000Hz脉冲分频器fen50m_4000模块实现程序:module fen50m_4000(clkin,clkout);input clkin;output clkout;reg clkout;reg [24:0] q;always (posedge clkin)beginif (q==12499)beginq<=0;clkout<=~clkout;endelse q<=q+1;endendmodule编译结果:【交通灯控制及计时模块】端口说明:Clock:输入时钟信号,上升沿有效。
基于VHDL语言的EDA设计——交通灯功能设计
![基于VHDL语言的EDA设计——交通灯功能设计](https://img.taocdn.com/s3/m/37a99b22bd64783e09122b13.png)
北京XX大学《数字电路逻辑设计》实训报告基于VHDL语言的EDA设计——交通灯控制系统课程名称:数字电路逻辑设计课程实训学院:信息学院专业:电子信息工程姓名:班级:200908030301学号:2009080303132 2009080303101指导教师:成绩:2011年12 月22日目录目录 ................................................................................................................................................ - 1 - 概述 .. (1)第一章交通灯控制系统工程设计要求 (2)1、基础功能要求 (2)2、拓展功能要求 (2)第二章基础功能模块电路设计 (3)1、南北方向控制模块设计 (3)2、东西方向控制模块设计 (5)3、顶层设计 (8)第三章电路基础功能时序仿真验证 (9)1、南北方向控制模块功能仿真验证 (9)2、东西方向控制模块功能仿真验证 (9)3、顶层设计整体功能仿真验证 (10)第四章电路拓展功能设计 (11)1、“左转向”指示灯功能设计 (11)2、“左转向”指示功能设计 (12)附录 (13)附录1-小组成员与成员分工 (13)附录2-参考资料 (13)概述1、EDA技术的概念EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC 版图或PCB版图的整个过程的计算机上自动处理完成。
用VHDL语言实现的交通灯
![用VHDL语言实现的交通灯](https://img.taocdn.com/s3/m/41adf79abe23482fb5da4c30.png)
目录序言 (3)第1章任务和要求 (4)1.1 设计任务 (4)1.2设计要求 (4)第2章功能分析 (6)2.1交通灯控制系统总体框架图 (6)2.2模块功能分析 (6)第3章设计过程 (7)3.1 分频模块的设计及仿真图 (7)3.2 显示模块的设计及仿真图 (7)3.3 数码管显示模块设计及仿真图 (8)3.4 译码驱动模块的设计及仿真图 (8)3.5顶层文件设计及仿真图 (9)3.6交通灯顶层原理图 (9)第4章外部电路结构图及引脚分配 (11)4.1电路主要结构 (11)4.2下载引脚分配 (12)第五章分析与小结5.1测试及结果分析 (13)5.2实验小结 (13)参考文献 (14)附录 (15)具有五种信号灯和倒计时显示的交通灯控制器序言随着社会经济的发展,城市交通问题越来越引起人们的关注。
人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。
城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。
、上海、南京等出现了交通超负荷运行的情况,因此,自80年代后期,这些城市纷纷修建城市高速道路,在高速道路建设完成的初期,它们也曾有效地改善了交通状况。
然而,随着交通量的快速增长和缺乏对高速道路的系统研究和控制,高速道路没有充分发挥出预期的作用。
而城市高速道路在构造上的特点,也决定了城市高速道路的交通状况必然受高速道路与普通道路耦合处交通状况的制约。
所以,如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市高速道路,缓解主干道与匝道、城区同周边地区的交通拥堵状况,越来越成为交通运输管理和城市规划部门亟待解决的主要问题。
交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
随着中国加入WTO,我们不但要在经济、文化、科技等各方面与国际接轨,在交通控制方面也应与国际接轨。
基于VHDL的交通灯控制器的设计和实现
![基于VHDL的交通灯控制器的设计和实现](https://img.taocdn.com/s3/m/63d5e7252f60ddccda38a08e.png)
基于VHDL语言的交通灯控制器设计与实现摘要 VHDL是Very High Speed Integrated Circuit Hardware Description Language 的缩写,意思是超高速集成电路硬件描述语言。
对于复杂的数字系统的设计,它有独特的作用。
它的硬件描述能力强,能轻易的描述出硬件的结构和功能。
这种语言的应用至少意味着两种重大的改变:电路的设计可以通过文字描述的方式完成;电子电路可以当作文件一样来存储。
随着现代技术的发展,这种语言的效益与作用日益明显,每年均能够以超过30%的速度快速成长。
交通灯控制系统通常要实现自动控制红绿灯的变化,基于FPGA设计的交通灯控制系统电路简单、可靠性好。
本系统可控制2个路口的红、黄、绿三盏交通灯。
对于Max+PlusⅡ开发工具,它是美国Altera公司自行设计的一种CAE软件工具。
他具有全面的逻辑设计能力,设计者可以自由组合文本、图形和波形输入法,建立起层次化的单器件或多器件设计。
利用该工具配备的编辑、编译、仿真、综合、芯片编程等功能,将设计的电路图或电路描述程序变成基本的逻辑单元写入到可编程芯片中(如CPLD、FPGA),做成ASIC芯片。
仿真实验结果表明了该编解码器的正确性和合理性。
关键词:交通灯;控制器;VHDL;MAX+PlusⅡAbstract VHDL is the Very Hight Speed Integrated Circuit Hardware Description Language acronym,meaning that high-speed integrated circuit hardware description language.For complex digital system design,it has a unique role.Its hardware descirption ability,can easily describe the structure and funtion of the hardware.The application of this language implies that at least two kinds of major changes:the design of the circuit can actually be completed by the manner described in the text;electronic circuits can be used as to store the same files.With modern technology,the benefits and role of this language has become more obvious every year to more than 30% of the rate of rapid growth.Traffic light control system is usually to achieve the automatic trafffic light changes,FPGA-based design of a traffic light control system circuit is simplem,and good reliability.The system can control two junctions of red,yellow,green,three traffic lights.For theMax-Plus II development tool,it is United States Altera’s own design of a CAE software tools.It has a comprehensive logic design capabilities,designers can freely mix text,graphics,and waveform input method,set up hierarchical design of a single device or multiple devices.The use of the tool is equipped with the editing,compiling,simulation,synthesis,chip programming features such as the design of the circuit or circuit described procedure into the basic logic unit is written into the programmable chip(eg,CPLD,FPGA),made of ASIC chips.The simulation results show that the correct codec and rationality.Keywords:traffic light;controller,VHDL,MAX+PlusII目录1 引言 (1)2 课题背景及相关技术 (2)2.1 Max+plusII简介 (2)2.2 VHDL语言简介 (3)2.3 VHDL设计的优点与设计方法 (5)3交通灯控制器分析 (7)3.1 分频器 (7)3.2 状态机 (8)4交通灯控制器的VHDL设计 (9)4.1程序流程图 (9)4.2交通灯顶层文件和管脚分配 (10)4.3分频器和状态机的图示符号 (11)4.4仿真波形图 (12)附录 (13)结束语 (17)参考文献 (18)1引言在交通发达的当代,交通灯控制器无疑是最实用的的工具。
EDA实验报告:基于VHDL语言的交通灯控制系统设计与实现
![EDA实验报告:基于VHDL语言的交通灯控制系统设计与实现](https://img.taocdn.com/s3/m/5284dc44cdbff121dd36a32d7375a417866fc1d3.png)
图为k1=0时的输出状态s1,输出恒为011110。即亮灯为R1,y2。保持时间1S。
(k2=0)
上图为k2=0时的输出状态s2,输出恒为101011。即亮灯为G1,R2。保持时间2S。
(k3=0)
上图为k3=0时的输出状态s3,输出恒为110011。即亮灯为R1,G2。保持时间1S。
四、小结及心得体会
else
if counter<5 then
next_state<=s3;
else
next_state<=s0;
end if;
end if;
end if;
end if;
end if;
end case;
end process;
ouput:process(current_state)
begin ——显示程序
begin
u1: jiaotongdeng port map(
clk=>clki,
k0=>k0,
k1=>k1,
k2=>k2,
k3=>k3,
r1=>r1,r2=>r2,g1=>g1,g2=>g2,y1=>y1,y2=>y2
);
u2: div port map(clk=>clk1,clk_out=>clki);
end if;
end if;
end if;
when s3=>
if k0='0' then
next_state<=s0;
else
if k1='0' then
next_state<=s1;
基于VHDL语言的交通灯设计DEA
![基于VHDL语言的交通灯设计DEA](https://img.taocdn.com/s3/m/a011241b2f60ddccda38a07d.png)
交通信号控制器的VHDL的设计1.设计任务模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED 作为交通信号灯,设计一个交通信号灯控制器,示意图如图1-1所示。
要求:(1)交通灯从绿变红时,有4秒黄灯亮的间隔时间;(2)交通灯红变绿是直接进行的,没有间隔时间;(3)主干道上的绿灯时间为40秒,支干道的绿灯时间为20秒;(4)在任意时间,显示每个状态到该状态结束所需的时间。
支干道主干道图1-1 路口交通管理示意图表1-1 交通信号灯的4种状态A B C D主干道交通灯绿(40秒)黄(4秒)红(20秒)红(4秒)支干道交通灯红红绿黄2.设计要求采用VHDL语言编写程序,并在QuartusII工具平台中进行开发,下载到EDA 实验箱进行验证。
编写设计报告,要求包括方案选择、程序清单、调试过程、测试结果及心得体会。
3.设计方案CLK时间显示数据输出信号灯输出图3-1 交通信号灯控制器程序原理框图进程将CLK 信号分频后产生1秒信号,然后构成两个带有预置数功能的十进制计数器,并产生允许十位计数器计数的控制信号。
状态寄存器实现状态转换和产生状态转换的控制信号,下个模块产生次态信号和信号灯输出信号,以及每一个状态的时间值。
经过五个模块的处理,使时间计数、红绿灯显示能够正常运行。
程序原理图如图3-1所示。
4.各模块具体设计4.1顶层文件的设计顶层文件的原理图可以依据系统的框图进行,由控制模块JTD_CTRL 、计时模块JTD_TIME 、译码驱动模块JTD_LIGHT 、显示模块JTD_DIS 和分频模块JTD_FQU 五部分组成,其顶层原理图文件如图3-1所示。
秒脉冲信号发生器 计数器 状态寄存器 次态发生器信号灯输出信号图4-1交通灯顶层文件原理图顶层模块的程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TRAFFIC ISPORT(CLK1K,CLR:IN STD_LOGIC;M:IN STD_LOGIC_VECTOR(2 DOWNTO 0);LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);ABL:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END TRAFFIC;ARCHITECTURE BEHAVE OF TRAFFIC ISCOMPONENT JTD_FQU IS --分频器元件的例化PORT(CLK1K:IN STD_LOGIC;CLK:OUT STD_LOGIC);END COMPONENT;COMPONENT JTD_DIS IS --数码显示的元件例化PORT(CLK1K,CLK,CLR:IN STD_LOGIC;M:IN STD_LOGIC_VECTOR(2 DOWNTO 0);AT,BT:IN STD_LOGIC_VECTOR(7 DOWNTO 0);LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END COMPONENT;COMPONENT JTD_LIGHT IS --译码驱动的元件例化PORT(CLR:IN STD_LOGIC;M,S:IN STD_LOGIC_VECTOR(2 DOWNTO 0);ABL:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END COMPONENT;COMPONENT JTD_TIME IS --计时元件的例化PORT(CLK,CLR:IN STD_LOGIC;M,S:IN STD_LOGIC_VECTOR(2 DOWNTO 0);AT,BT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END COMPONENT;COMPONENT JTD_CTRL IS --控制模块的元件例化PORT(CLK,CLR:IN STD_LOGIC;AT,BT:IN STD_LOGIC_VECTOR(7 DOWNTO 0);M:IN STD_LOGIC_VECTOR(2 DOWNTO 0);S:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END COMPONENT;SIGNAL CLK:STD_LOGIC;SIGNAL AT:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL BT:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL S:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINU1:JTD_FQU PORT MAP( --名字关联方式赋值 CLK1K=>CLK1K,CLK=>CLK);U2:JTD_TIME PORT MAP(CLR=>CLR,AT=>AT,BT=>BT,CLK=>CLK,M=>M,S=>S);U3:JTD_CTRL PORT MAP(M=>M,S=>S,CLK=>CLK,CLR=>CLR,AT=>AT,BT=>BT);U4:JTD_DIS PORT MAP(CLK1K=>CLK1K,CLK=>CLK,CLR=>CLR,AT=>AT,BT=>BT,LED=>LED,SEL=>SEL,M=>M);U5:JTD_LIGHT PORT MAP(CLR=>CLR,S=>S,ABL=>ABL,M=>M);END BEHAVE;4.2 控制模块JTD_CTRL的设计控制的模块根据外部输入信号M2~M0和计时模块JTD_TIME的输入信号,产生系统的状态机,控制其他部分协调工作。
-基于VHDL的交通信号灯设计
![-基于VHDL的交通信号灯设计](https://img.taocdn.com/s3/m/68289657cf84b9d528ea7a49.png)
基于VHDL的交通信号灯设计曾辉,物理与电子信息工程学院摘 要:针对交通信号灯控制器的设计问题,采用层次化的设计方法,应用VHDL语言编制了可变多相位交通信号灯控制器的程序,并利用QuartusⅡ进行了仿真。
仿真结果表明:该系统可分别实现2、3、4相位交通信号灯控制,并且各相位的灯时分配能方便地通过设定输入进行调节,增强了系统的灵活性和适用范围。
关键字:交通信号灯,VHDL,设计, 多相位Design and simulation of traffic signal lamp circuitbased on VHDLZengHui,College of Physics and Electronic Information Abstract:To the design problem of traffic light controller ,the program of controller with VHDL is given and simulated by MAXPLUS Ⅱby using bierarchical design means. The simulation results show that the system could realize two phase. Three phase and four phase traffic light control, and light time of each phase could be changed by setting input value ,the adaptability of the system can be increased by changing the phase ang light time of traffic light ,I tab,6 figs 10 refs.Key words: traffic light,VHDL,design,multi phase引 言:随着城市的不断发展,城市交通的需求量快速加大,交通信号灯的数量急速加大,目前很多城市的交通信号灯还是应用传统的电路设计一旦交通信号灯出现故障不能及时维修和处理势必会造成道路的交通混乱.传统的交通信号灯控制电路的设计是基于中小规模集成电路电路元件多焊接复杂故障率高可靠性低而且控制系统的功能扩展及调试都需要硬件电路的支持为日常维护和管理增加了难度.为了更好地实现交通畅通不断优化交通信号灯的智能化管理通过采用EDA技术对交通信号灯控制电路进行改进,应用VHDL语言实现电路的设计和仿真消除了传统交通信号灯控制电路的弊端使交通信号灯控制电路的性能更稳定调试和维护更便捷。
EDA 交通灯控制器VHDL设计
![EDA 交通灯控制器VHDL设计](https://img.taocdn.com/s3/m/586829dae009581b6bd9eb65.png)
EDA课程设计题目:交通灯控制器VHDL设计专业:通信工程班级:通信082姓名:XXX学号:XXXXXXXX设计要求乐曲硬件演奏电路的VHDL设计要求:1、设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。
2、红、绿、黄发光二极管作信号灯,。
3、主干道处于常允许通行的状态,支干道有车来时才允许通行。
主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。
4、主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,设立45秒、25秒计时、显示电路。
5、在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡,使行驶中的车辆有时间停到禁行线外,设立5秒计时、显示电路。
教学提示:1、选择1HZ时钟脉冲作为系统时钟。
2、45秒、25秒、5秒定时信号可用顺计时,也可用倒计时,计时起始信号由主控电路给出,每当计满所需时间,即向主控电路输出“时间到”信号,并使计数器清零,由主控电路启、闭三色信号灯或启动另一计时电路。
显示结果:设计一个十字路口的交通灯控制器,能显示十字路口东西、南北两个方向的红、黄、绿灯的指示状态。
用两组红、黄、绿三种颜色的灯分别作为东西、南北两个方向的红、黄、绿灯,变化规律为:东西绿灯亮,南北红灯亮→东西黄灯亮,南北红灯亮→东西红灯亮、南北绿灯亮→东西红灯亮,南北黄灯亮→东西绿灯亮,南北红灯亮….,这样依次循环。
南北方向是主干道车道,东西方向是支干道车道,要求两条交叉道路上的车辆交替运行,主干道每次通行时间都设为45秒,支干道每次通行时间都设为25秒,时间可设置修改。
在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道。
要求交通灯控制器有复位功能,在复位信号使能的情况下能够实现交通灯的自动复位,并且要求所有交通灯的状态变化,包括复位信号引起的均发生时钟脉冲的上升沿处。
(完整word版)基于VHDL状态机的交通灯控制器设计
![(完整word版)基于VHDL状态机的交通灯控制器设计](https://img.taocdn.com/s3/m/dd19d866c5da50e2524d7fcd.png)
基于VHDL状态机的交通灯控制器设计0 引言交通灯是城市交通监管系统的重要组成部分,对于保证机动车辆的安全运行,维持城市道路的顺畅起到了重要作用。
本文在VHDL状态机的基础上,利用FPGA的相关知识设计了交通灯控制系统。
可以根据实际情况对灯亮时间进行自由调整,整个设计系统通过QuartusII软件平台进行了模拟仿真,并下载到FPGA器件中进行硬件的调试,验证了设计的交通信号灯控制电路完全可以实现预定的功能,具有一定的实用性。
1 设计要求有一条主干道和一条支干道的汇合点形成的十字路口,为确保车辆安全,迅速通行,在干道和支道的入口设置了红、绿(包括直行和左拐)、黄3色信号灯(如图1所示)。
图1 十字路口交通灯示意图设计要求:(1)A方向和B方向各设红(R)、黄(Y)、绿(G)、和左拐(L)四盏指示灯;(2)四种灯按合理的顺序亮灭,并能将灯亮的时间以倒计时的形式显示出来;(3)主、支干道交替通行,假设B方向是主干道,车流量大,因此B方向通行的时间应比A方向长一些。
B方向每次放行40秒,A方向每次放行30秒,在每次亮绿灯、左拐灯与红灯的转换过程中,亮5秒的黄灯作为过渡;(4)两个方向各种灯亮的时间应该能够进行非常方便的设计和修改;(5)上电复位后,主干道先通行。
2 VHDL设计实现2.1 系统整体设计该系统主要由控制模块、分频模块以及显示电路构成。
其中分频模块主要将系统输入的基准时钟信号转换为1 HZ的激励信号,驱动控制模块工作。
控制模块根据计数情况对交通灯的亮灭及持续时间进行控制,并将灯亮时间以倒计时的形式通过数码管显示出来。
其中Reset是复位信号,高电平有效。
2.2 分频模块设计在红绿灯交通信号系统中,电路必须给一个稳定的时钟源才能够使系统正常运行。
用晶振电路提供4 MHz的稳定时钟信号,把其分频为1 HZ脉冲信号,原理是用VHDL语言if——elsif的并行运行关系,把分频频数的前半部分进行计数并置高电平“1”,把分频频数的后半部分进行计数并置低电平“0”,最后输出即为1 Hz时钟信号。
VHDL交通灯
![VHDL交通灯](https://img.taocdn.com/s3/m/a4dffc7131b765ce050814d3.png)
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div isport(clk3:IN std_logic;clkout1,clkout2:OUT std_logic);end div;architecture one of div isbeginprocess(clk3)variable cnt:integer range 0 to 25000000;variable tmp:std_logic;beginif(clk3'event and clk3='1')thenif cnt>=24999999 then --1s分频cnt:=0;tmp:=not tmp;else cnt:=cnt+1;end if;end if;clkout1<=tmp;end process;process(clk3)variable cnt:integer range 0 to 100000;variable tmp:std_logic;beginif(clk3'event and clk3='1')then --1ms分频if cnt>=25000 thencnt:=0;tmp:=not tmp;else cnt:=cnt+1;end if;end if;clkout2<=tmp;end process;end one;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY KZ ISPORT(CLK,dtufa,dytufa:IN STD_LOGIC;Gn,Yn,Rn,L1,L2, Gd,Yd,Rd :OUT STD_LOGIC); END;ARCHITECTURE ART OF KZ ISBEGINPROCESS(CLK,dtufa,dytufa) ISVARIABLE S,y:INTEGER RANGE 0 TO 124;BEGINif dtufa='1'thenGn<='1'; --南北向绿灯亮Yn<='1';Rn<='0';L1<='1';Gd<='1';Yd<='1';Rd<='0'; --东西向红灯亮L2<='1';elsif dytufa='1'thenGn<='1'; --南北向绿灯亮Yn<='0';Rn<='1';L1<='1';Gd<='1';Yd<='0';Rd<='1'; --东西向红灯亮L2<='1';elsIF(CLK'EVENT AND CLK='1')THENIF S>98 THENS:=0;elseS:=S+1;end if;IF 0<=s and S<33 THEN --40s内Gn<='0'; --南北向绿灯亮Yn<='1';Rn<='1';L1<='1';Gd<='1';Yd<='1';Rd<='0'; --东西向红灯亮L2<='1';ELSIF s=33 THEN --南北向绿灯闪烁的第1秒Gn<='1';Yn<='1';Rn<='1';L1<='1';Gd<='1';Rd<='0';L2<='1';ELSIF s=34 THEN --南北向绿灯闪烁的第2秒Gn<='0';Yn<='1';Rn<='1';L1<='1';Gd<='1';Yd<='1';Rd<='0';L2<='1';ELSIF s=35 THEN --南北向绿灯闪烁的第3秒Gn<='1';Yn<='1';Rn<='1';L1<='1';Gd<='1';Yd<='1';Rd<='0';L2<='1';ELSIF s=36 THEN --南北向绿灯闪烁的第4秒Gn<='0';Yn<='1';Rn<='1';L1<='1';Gd<='1';Yd<='1';Rd<='0';L2<='1';ELSIF s=37 THEN --南北向绿灯闪烁的第5秒Gn<='1';Yn<='1';Rn<='1';L1<='1';Gd<='1';Yd<='1';Rd<='0';L2<='1';ELSIF s=38 THEN --南北向绿灯闪烁的第6秒Gn<='0';Yn<='1';Rn<='1';L1<='1';Yd<='1';Rd<='0';L2<='1';ELSIF s=39 THEN --南北向黄灯闪烁1秒Gn<='1';Yn<='0';Rn<='1';L1<='1';Gd<='1';Yd<='1';Rd<='0';L2<='1';ELSIF 39<s and s<46 THEN --北向左转灯亮Gn<='1';Yn<='1';Rn<='0';L1<='0';Gd<='1';Yd<='1';Rd<='0';L2<='1';ELSIF s=46 THEN --北向左转灯闪烁的第1秒Gn<='1';Yn<='1';Rn<='0';L1<='1';Gd<='1';Yd<='1';Rd<='0';L2<='1';ELSIF s=47 THEN --北向左转灯闪烁的第2秒Gn<='1';Yn<='1';Rn<='0';L1<='0';Gd<='1';Yd<='1';Rd<='0';L2<='1';ELSIF s=48 THEN --北向左转灯闪烁的第3秒Gn<='1';Yn<='1';Rn<='0';Gd<='1';Yd<='1';Rd<='0';L2<='1';ELSIF s=49 THEN --北向左转灯闪烁的第4秒Gn<='1';Yn<='1';Rn<='0';L1<='0';Gd<='1';Yd<='1';Rd<='0';L2<='1';elsIF 49<S AND S<83 THEN --33s内Gn<='1'; --南北向红灯亮Yn<='1';Rn<='0';L1<='1';Gd<='0';Yd<='1';Rd<='1'; --东西向绿灯亮L2<='1';ELSIF s=83 THEN --东西向绿灯闪烁的第1秒Gn<='1';Yn<='1';Rn<='0';L1<='1';Gd<='1';Yd<='1';Rd<='1';L2<='1';ELSIF s=84 THEN --东西向绿灯闪烁的第2秒Gn<='1';Yn<='1';Rn<='0';L1<='1';Gd<='0';Yd<='1';Rd<='1';L2<='1';ELSIF s=85 THEN --东西向绿灯闪烁的第3秒Gn<='1';Yn<='1';L1<='1';Gd<='1';Yd<='1';Rd<='1';L2<='1';ELSIF s=86 THEN --东西向绿灯闪烁的第4秒Gn<='1';Yn<='1';Rn<='0';L1<='1';Gd<='0';Yd<='1';Rd<='1';L2<='1';ELSIF s=87 THEN --东西向绿灯闪烁的第5秒Gn<='1';Yn<='1';Rn<='0';L1<='1';Gd<='1';Yd<='1';Rd<='1';L2<='1';ELSIF s=88 THEN --东西向绿灯闪烁的第6秒Gn<='1';Yn<='1';Rn<='0';L1<='1';Gd<='0';Yd<='1';Rd<='1';L2<='1';ELSIF s=89 THEN --东西向黄灯闪烁1秒Gn<='1';Yn<='1';Rn<='0';L1<='1';Gd<='1';Yd<='0';Rd<='1';L2<='1';ELSIF 89<s and s<96 THEN --西向左转灯亮Gn<='1';Rn<='0';L1<='1';Gd<='1';Yd<='1';Rd<='0';L2<='0';ELSIF s=96 THEN --西向左转灯闪烁的第1秒Gn<='1';Yn<='1';Rn<='0';L1<='1';Gd<='1';Yd<='1';Rd<='0';L2<='1';ELSIF s=97 THEN --西向左转灯闪烁的第2秒Gn<='1';Yn<='1';Rn<='0';L1<='1';Gd<='1';Yd<='1';Rd<='0';L2<='0';ELSIF s=98 THEN --西向左转灯闪烁的第3秒Gn<='1';Yn<='1';Rn<='0';L1<='1';Gd<='1';Yd<='1';Rd<='0';L2<='1';ELSIF s=99 THEN --西向左转灯闪烁的第4秒Gn<='1';Yn<='1';Rn<='0';L1<='1';Gd<='1';Yd<='1';Rd<='0';L2<='0';end if;end if;end process;end art;LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY shuma ISPORT(clk1ms,clk1s,stufa,sytufa:IN std_logic; --1ms时钟weig,weid:OUT std_logic;duan:out std_logic_vector(6 downto 0));END shuma;ARCHITECTURE rtl OF shuma ISsignal temp,cnt:std_logic;signal CNT49:std_logic_vector(5 downto 0);signal duang,duand:std_logic_vector(6 downto 0);BEGINP0:process(clk1ms,duand,duang,temp)beginif clk1ms'event and clk1ms='1'thentemp<=not temp;end if;if temp='0'thenduan<="0000000"; --关闭段选weig<='0'; --选通高位weid<='1'; --关闭高位duan<=duang; --给段码赋值elseduan<="0000000";weid<='0';weig<='1';duan<=duand;end if;end process P0;P1:process(clk1s,stufa,cnt49)is --40s倒计时beginif stufa='1'thencnt49<=cnt49;elsif sytufa='1'thencnt49<="000000";elsif(clk1s'event and clk1s='1')thenif CNT49<49 thenCNT49<=CNT49+1;ELSECNT49<="000000";end if;end if;end process P1;P2:process(CNT49) isbeginCASE CNT49 isWHEN"000000"=>duang<="0110011";duand<="1111110"; --40WHEN"000001"=>duang<="1111001";duand<="1111011"; --39WHEN"000010"=>duang<="1111001";duand<="1111111"; --38WHEN"000011"=>duang<="1111001";duand<="1110000"; --37WHEN"000100"=>duang<="1111001";duand<="1011111"; --36WHEN"000101"=>duang<="1111001";duand<="1011011"; --35WHEN"000110"=>duang<="1111001";duand<="0110011"; --34WHEN"000111"=>duang<="1111001";duand<="1111001"; --33WHEN"001000"=>duang<="1111001";duand<="1101101"; --32WHEN"001001"=>duang<="1111001";duand<="0110000"; --31WHEN"001010"=>duang<="1111001";duand<="1111110"; --30WHEN"001011"=>duang<="1101101";duand<="1111011";--29WHEN"001100"=>duang<="1101101";duand<="1111111";--28WHEN"001101"=>duang<="1101101";duand<="1110000";--27WHEN"001110"=>duang<="1101101";duand<="1011111";--26WHEN"001111"=>duang<="1101101";duand<="1011011";--25WHEN"010000"=>duang<="1101101";duand<="0110011";--24WHEN"010001"=>duang<="1101101";duand<="1111001";--23WHEN"010010"=>duang<="1101101";duand<="1101101";--22WHEN"010011"=>duang<="1101101";duand<="0110000";--21WHEN"010100"=>duang<="1101101";duand<="1111110";--20WHEN"010101"=>duang<="0110000";duand<="1111011";--19WHEN"010110"=>duang<="0110000";duand<="1111111";--18WHEN"010111"=>duang<="0110000";duand<="1110000";--17WHEN"011000"=>duang<="0110000";duand<="1011111";--16WHEN"011001"=>duang<="0110000";duand<="1011011";--15WHEN"011010"=>duang<="0110000";duand<="0110011";--14WHEN"011011"=>duang<="0110000";duand<="1111001";--13WHEN"011100"=>duang<="0110000";duand<="1101101";--12WHEN"011101"=>duang<="0110000";duand<="0110000";--11WHEN"011110"=>duang<="0110000";duand<="1111110";--10WHEN"011111"=>duang<="1111110";duand<="1111011";--09WHEN"100000"=>duang<="1111110";duand<="1111111";--08WHEN"100001"=>duang<="1111110";duand<="1110000";--07WHEN"100010"=>duang<="1111110";duand<="1011111";--06WHEN"100011"=>duang<="1111110";duand<="1011011";--05WHEN"100100"=>duang<="1111110";duand<="0110011";--04WHEN"100101"=>duang<="1111110";duand<="1111001";--03WHEN"100110"=>duang<="1111110";duand<="1101101";--02WHEN"100111"=>duang<="1111110";duand<="0110000";--01WHEN"101000"=>duang<="0110000";duand<="1111110";--10WHEN"101001"=>duang<="1111110";duand<="1111011";--09WHEN"101010"=>duang<="1111110";duand<="1111111";--08WHEN"101011"=>duang<="1111110";duand<="1110000";--07WHEN"101100"=>duang<="1111110";duand<="1011111";--06WHEN"101101"=>duang<="1111110";duand<="1011011";--05WHEN"101110"=>duang<="1111110";duand<="0110011";--04WHEN"101111"=>duang<="1111110";duand<="1111001";--03WHEN"110000"=>duang<="1111110";duand<="1101101";--02WHEN"110001"=>duang<="1111110";duand<="0110000";--01WHEN OTHERS=>duang<="0000000";duand<="0000000";END CASE;END PROCESS P2;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY tralight ISport(jclk5mhz,jtufa,ytufa:IN std_logic;jweig,jweid:OUT std_logic;jduan:out std_logic_vector(6 downto 0);jGn,jYn,jRn,jL1,jL2, jGd,jYd,jRd :OUT STD_LOGIC);end tralight;architecture rtl of tralight iscomponent divport(clk3:IN std_logic;clkout1,clkout2:OUT std_logic);end component;component kzPORT(CLK,dtufa,dytufa:IN STD_LOGIC;Gn,Yn,Rn,L1,L2, Gd,Yd,Rd :OUT STD_LOGIC);end component;component shumaPORT(clk1ms,clk1s,stufa,sytufa:IN std_logic;weig,weid:OUT std_logic;duan:out std_logic_vector(6 downto 0));end component;signal temp1,temp2,jclk1s,jclk1ms:std_logic;beginP0:process(jtufa)beginif jtufa='0'thentemp1<=not temp1;end if;end process P0;P1:process(ytufa)beginif ytufa='0'thentemp2<=not temp2;end if;end process P1;U0:div port map(clk3=>jclk5mhz,clkout1=>jclk1s,clkout2=>jclk1ms);U1:kz port map(clk=>jclk1s,Gn=>jgn,Yn=>jyn,Rn=>jrn,L1=>jl1,L2=>jl2, Gd=>jgd,Yd=>jyd,Rd=>jrd,dtufa=>temp1,dytufa=>temp2);U2:shuma port map(clk1ms=>jclk1ms,clk1s=>jclk1s,weig=>jweig,weid=>jweid,duan=>jduan,stufa=>temp1,sytu fa=>temp2);end rtl;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西电通院VHDL大作业
交通灯控制器
一、设计要求
设计一个十字路口交通控制系统,要求如下:
(1)东西(用A表示),南北(用B表示)方向均有绿灯、黄灯、红灯指示,其持续时间分别是60秒,5秒,65秒。
(2)系统设有时钟,以倒计时方式显示每一路允许同行的时间。
(3)当东西或南北两路中任一路出现特殊情况,系统可由交警手动控制立即进入特殊状态,即红灯全亮,时钟停止计时,当特殊行状态结束,系统恢复工作,继续照常运行。
二、确定状态数
S0:A方向绿灯亮,B方向红灯亮,此状态持续60s;
S1:A方向黄灯亮,B方向红灯亮,此状态持续5s;
S2:A方向红灯亮,B方向绿灯亮,此状态持续60s;
S3:A方向绿灯亮,B方向黄灯亮,此状态持续5s;
S4:紧急制动状态,A方向红灯亮,B方向红灯亮,当紧急制动信号有效时(hold=’0’)进入这种状态。
当紧急制动信号无效时(hold=’0’),状态机按照s0—s1—s2—s3—s0循环;当紧急制动有效时(hold=’0’),状态机立即进入s4,俩个方向红灯全亮,计数器停止计数。
三、编写源代码,编译等
第一进程:复位,检测时钟上升沿,完成状态切换current_state<=nest_state
第二进程:检测控制器当前输入和状态变化,用case语句决定控制器的状态和当前输出。
源代码:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity control is
port(
clk,hold:in std_logic;
ared,agreen,ayellow,bred,bgreen,byellow:out std_logic
);
end control;
architecture behave of control is
type state_type is(s0,s1,s2,s3,s4);
signal current_state,next_state:state_type;
signal counter:std_logic_vector(6 downto 0);
begin
synch:process
begin
wait until clk'event and clk='1';
if hold='0' then
counter<=counter;
else
if counter<129 then
counter<=counter+1;
else
counter<=(others=>'0');
end if;
end if;
end process;
process
begin
wait until clk'event and clk='1';
current_state<=next_state; end process;
state_trans:process(current_state) begin
case current_state is
when s0=>
if hold='0'then
next_state<=s4;
else
if counter<59 then
next_state<=s0;
else
next_state<=s1;
end if;
end if;
when s1=>
if hold='0'then
next_state<=s4;
else
if counter<64 then
next_state<=s1;
else
next_state<=s2;
end if;
end if;
when s2=>
if hold='0'then
next_state<=s4;
else
if counter<124 then
next_state<=s2;
else
next_state<=s3;
end if;
end if;
when s3=>
if hold='0'then
next_state<=s4;
else
if counter<129 then
next_state<=s3;
else
next_state<=s0;
end if;
end if;
when s4=>
if hold='0'then
next_state<=s4;
else
if counter<59 then
next_state<=s0;
elsif counter<64 then
next_state<=s1;
elsif counter<124then
next_state<=s2;
elsif counter<129 then
next_state<=s3;
end if;
end if;
end case;
end process;
output:process(current_state) begin
case current_state is
when s0=>
ared<='0';
agreen<='1';
ayellow<='0';
bred<='1';
bgreen<='0';
byellow<='0';
when s1=>
ared<='0';
agreen<='0';
ayellow<='1';
bred<='1';
bgreen<='0';
byellow<='0'; when s2=>
ared<='1';
agreen<='0';
ayellow<='0';
bred<='0';
bgreen<='1';
byellow<='0'; when s3=>
ared<='1';
agreen<='0';
ayellow<='0';
bred<='0';
bgreen<='0';
byellow<='1'; when s4=>
ared<='1';
agreen<='0';
ayellow<='0';
bred<='1';
bgreen<='0';
byellow<='0'; end case;
end process;
end behave;。