北邮数字电路综合实验报告——交通灯控制器的VHDL实现
VHDL报告
VHDL数字系统设计交通灯实验报告姓名:李奕洋学号:010790021.实验目的:使用VHDL语言在FPGA实验板上模拟一个十字路口两对交通灯的亮灭情况。
2.实验原理:本实验要实现的效果是:0s~5s,第1对灯为绿,第2对灯为红;5s~6s,第1对灯为黄,第2对灯为红;6s~11s,第1对灯为红,第2对灯为绿;11s~12s,第1对灯为红,第2对灯为黄;12s为一个状态循环周期。
可以选择实验板上的8个LED中的6个来模拟上述功能。
为了便于区分两对灯我们选择除去中间2个的6个LED,用LED<7>、LED<6>、LED<5>分别表示第1对灯的红黄绿3盏灯,用LED<2>、LED<1>、LED<0>分别表示第2对灯的红黄绿3盏灯。
程序中,输出端口light (5)~ light (0)分别映射到LED<7>、LED<6>、LED<5>、LED<2>、LED<1>、LED<0>。
本实验需要在每个周期的特定时间点发生状态转移,所以需要实现较精确的定时。
我们使用实验板上的50MHz晶振作为时钟信号,该晶振的50M个时钟周期近似为1s。
因此可以在每个时钟周期的上升沿使用变量count计数,每计够250000000表示到第5s,每计够300000000表示到第6s,每计够550000000表示到第11s,每计够600000000表示到第12s。
程序中输入端口clk映射到50MHz晶振。
本实验的VHDL程序中,首先在实体lights中定义了输入端口clk和6个输出端口light (5)~ light (0)。
然后在实体lights的结构体Behavioral中使用2个进程。
第1个进程中在clk的每个上升沿对变量count加1,当分别计数到0、250000000、300000000、550000000时分别输出100010、001100、010100、100001。
交通灯控制器的VHDL程序设计
万方数据
460
河北师范大学学报(自然科学版)
第26卷
人员摆脱了电路细节的束缚,减少了设计的时间和可能发生的错误,降低了开发成本,必将给硬件设计 电路带来一次重大的变革.
参考文献: [1]侯伯亨,顾新.VHDL硬件描述语肓与数字逻辑电路设计[M].西安;西安电子科技大学出版社,1999
VHDL Programmer Design of the Traffic—light Controller
architecture rtl of light is——构造体定义设计单元的具体构造和操作.
type state js(agreen,ayellow,bgreen,byelIow); b。gin process(clk,jz,s1) variable currem—state:stat8;Variable timer:integer; va“able ligho:std—logic—vector(5 downt。0); variable f189:std—logic;
Unlvers L‘y.Hebei Shi】Lazhuang
050016tChma)
Abstract:Based on the designing of the traffic一1ight con”oller,the structure model and designlng
method of VHDL are introduced,and describes the advantage。f the designi“g with VHDL and the
1)交通灯控制器的工作流程如图2所示,其程序如下: library ieee;——调用IEEE库.
useieee.std—logIc一1164.all;——使用IEEE库中的sTD—LOGIc—1164
北邮数字逻辑课程设计实验报告(交通灯控制)
实验三:交通灯控制一、实验目的(1)学习采用状态机方法设计时序逻辑电路。
(2)掌握ispLEVER 软件的使用方法。
(3)掌握用VHDL 语言设计数字逻辑电路。
(4)掌握ISP 器件的使用。
二、实验所用器件和设备在系统可编程逻辑器件ISP1032 一片示波器一台万用表或逻辑笔一只TEC-5实验系统,或TDS-2B 数字电路实验系统一台三、实验内容以实验台上的4个红色电平指示灯,4个绿色电平指示灯模仿路口的东南西北4个方向的红,绿,黄交通灯。
控制这些交通灯,使它们按下列规律亮,灭。
VHDL源代码:LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY light isport (restfunc,emergency,clk: in std_logic;--restfunc为复位信号,emergency为紧急信号,clk为50kHz频率时钟light : out std_logic_vector(11 downto 0));--12个指示灯ARCHITECTURE func of light istype state is (s1,s2,s3,s4); --交通灯4个状态signal current_state,next_state: state;--current_state,next_state为别为当前状态,转移状态signal en1,en2,en3,en4, c,c1,c2,c3,c4: std_logic;--en为使能信号,c为进位信号signal temp1: integer range 0 to 49999;signal temp2: integer range 0 to 99999;signal temp3: integer range 0 to 249999;signal temp4: integer range 0 to 9999;begin--1s计数器,对50kHz进行50000分频process(clk,en1)beginif (clk'event and clk='1') then --上升沿判断if (temp1=49999 and en1='1' and emergency='0') thentemp1<=0;c1<='1';--进位elsif (en1='1' and emergency='0') thentemp1<=temp1+1;c1<='0';end if;end if;if (en1='0') thenc1<='0';temp1<=0;end if;end process;process(clk,en2)--2s计数器,对50kHz进行100000分频beginif (clk'event and clk='1') thenif (temp2=99999 and en2='1' and emergency='0') thentemp2<=0;c2<='1';elsif (en2='1'and emergency='0') thentemp2<=temp2+1;c2<='0';end if;end if;if (en2='0') thenc2<='0';temp2<=0;end if;end process;process(clk,en3)--5s计数器,对50kHz进行250000分频beginif (clk'event and clk='1') thenif (temp3=249999 and en3='1' and emergency='0') thentemp3<=0;c3<='1';elsif (en3='1' and emergency='0') thentemp3<=temp3+1;c3<='0';end if;end if;if (en3='0') thentemp3<=0;c3<='0';end if;end process;process(clk,en4) --0.2s计数器,对50kHz进行10000分频beginif (clk'event and clk='1') thenif (temp4=9999 and en4='1') thentemp4<=0;c4<=not c4;elsif (en4='1') thentemp4<=temp4+1;end if;end if;end process;c<=c1 or c2 or c3; --进位信号process (c,restfunc) --状态转移,复位情况beginif (restfunc='1') then--复位信号current_state<=s1;elsif (c'event and c='0') then--遇到计数器进位转移到下一状态current_state<=next_state;end if;end process;process (current_state,emergency) --状态转移,紧急情况beginif(emergency='1') then--紧急状态红灯全亮light<="000000001111";elsecase current_state iswhen s1=> --东西方向绿灯亮,南北方向红灯亮,延时5秒en1<='0';en2<='0';light<="010*********";en3<='1';next_state<=s2; --继续下一状态,下同when s2=>--东西方向黄灯闪,南北方向红灯亮,延时2秒en3<='0';en2<='1';en4<='1';light(11 downto 7 )<="00000";light(6)<=c4;light(5)<='0';light(4)<=c4;light(3 downto 0)<="1010";next_state<=s3;when s3=>--东西方向红灯亮,南北方向绿灯亮,延时5秒en2<='0';en4<='0';en3<='1';light<="101000000101";next_state<=s4;when s4=> --东西方向红灯闪,南北方向黄灯闪,延时2秒en3<='0';en2<='1';en4<='1';light(11 downto 8 )<="0000";light(7)<=c4; --闪灯控制light(6)<='0';light(5)<=c4;light(4 downto 0)<="00101";next_state<=s1;end case;end if;end process;end func;四、实验小结依旧注意4个分频。
北邮数电VHDL实验报告
2009级数字电路实验报告实验名称:EDA基础实验学生姓名:班级:班内序号:学号:日期:1.实验要求【实验目的】1.熟悉用QuartusII原理图输入法进行电路设计和仿真;2.掌握QuartusII图形模块单元的生成与调用;3.熟悉用VHDL语言设计组合逻辑电路和时序电路的方法;4.熟悉用QuartusII文本输入法和图形输入法进行电路设计;5.熟悉不同的编码及其之间的转换;6.掌握触发器的逻辑功能及使用方法;7.熟悉计数器、寄存器、锁存器、分频器、移位寄存器的设计方法8.掌握VHDL语言的语法规范,掌握时序电路描述方法;9.掌握多个数码管动态扫描显示的原理及设计方法。
【实验所用仪器及元器件】1.计算机2.直流稳压电源3.数字系统与逻辑设计实验开发板【实验内容】1.用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。
2.用实验内容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。
3.用3线-8线译码器(74LS138)和逻辑门设计实现函数F,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
4.用VHDL语言设计实现一个3位二进制数值比较器,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
5.用VHDL语言设计实现一个4选1的数据选择器;一个8421码转换为格雷码的代码转换器;一个举重比赛裁判器;一个带同步置位和同步复位功能的D触发器;一个带异步复位的4位二进制减计数器;一个带异步复位的8421码十进制计数器;一个带异步复位的4位自启动环形计数器;一个带控制端的8位二进制寄存器,当控制端为‘1’时,电路正常工作,否则输出为高阻态;一个分频系数为12,分频输出信号占空比为50%的分频器。
仿真验证其功能,并下载到实验板测试。
VHDL交通灯控制器_实验评测研究报告
一、设计要求-------------------------------------------------------------------------------- 二、设计目地-------------------------------------------------------------------------------- 三、设计方案--------------------------------------------------------------------------------四、设计程序---------------------------------------------------------------------------------五、管脚分配---------------------------------------------------------------------------------六、硬件下载实现现象描述------------------------------------------七、体会、对设计工作地总结与展-------------------------------------------一、设计要求:① 在十字路口地两个方向上各设一组红、绿、黄灯,显示顺序为其中一方向(东西方向)是绿灯、黄灯、红灯;另一方向(南北方向)是红灯、绿灯、黄灯.② 设置一组数码管,以倒计时地方式显示允许通行或禁止通行地时间,其中绿灯、黄灯、红灯地持续时间分别是20s 、5s 和25s.③ 当各条路上任意一条上出现特殊情况时,如当消防车、救护车或其他需要优先放行地车辆通过时,各方向上均是红灯亮,倒计时停止,且显示数字在闪烁.当特殊运行状态结束后,控制器恢复原来状态,继续正常运行.二、设计方案:计数器地计数值与交通灯亮灭地关系如图1所示.49东西方向南北方向2419图1 计数值与交通灯亮灭地关系显然,本课题地核心是一个计数范围为0~49(共50 s )地计数器和一个根据计数值做出规定反应地控制器.另外,所用实验箱配备地晶振为20MH z,因此还需要一个分频电路.最后,要驱动七段数码管,显然还需要一个译码电路.根据上面地分析,可以画出如图2所示地系统框图.图2 交通灯控制器系统框图2、计数器地设计这里需要地计数器地计数范围为0~49.计到49后,下一个时钟沿回复到0,开始下一轮计数.此外,当检测到特殊情况(Hold=’1’)发生时,计数器暂停计数,而系统复位信号Reset 则使计数器异步清0.3、控制器地设计控制器地作用是根据计数器地计数值控制发光二极管地亮、灭,以及输出倒计时数值给七段数译管地分位译码电路.此外,当检测倒特殊情况(Hold=’1’)发生时,无条件点亮红色地发光二级管.由于控制器要对计数值进行判断,很容易想到用IF语句来实现.本控制器可以有两种设计方法,一种是利用时钟沿地下降沿读取前级计数器地计数值,然后做出反应;另一种则是将本模块设计成纯组合逻辑电路,不需要时钟驱动.这两种方法各有所长,必须根据所用器件地特性进行选择:比如有些FPGA有丰富地寄存器资源,而且可用于组合逻辑地资源则相对较少,那么使用第1种方法会比较节省资源;而有些CPLD地组合逻辑资源则相对较多,用第2种方法可能会更好.大家可尝试两种方法,比较一下哪种方法所用资源较少,然后在最后地方案中采用这个方法.4、分位译码电路地设计因为控制器输出地倒计时数值可能是1位或者2位十进制数,所以在七段数码管地译码电路前要加上分位电路(即将其分为2个1位十进制数,如25分为2和5,7分为0和7).与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路.控制器中,引入了寄存器.三、程序语言:-----------交通灯带有点阵显示---------------------LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY jtd ISPORT(duan : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-- 数码管显示bcd码from 100 to 91hang,lie:out std_logic_vector(7 downto 0); -----点阵行输出和列输出led,light_cs : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-- 数码管和灯扫描led 6 5 2 1 || light 66 67 68 69led_no: OUT STD_LOGIC_VECTOR(1 DOWNTO 0);-- 4 3 light : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);--灯72 70 71B1eep : OUT STD_LOGIC; -- 7clk,jinji : IN STD_LOGIC-- 频率输入和紧急处理端-----);END jtd;ARCHITECTURE one OF jtd ISSIGNAL clk_1k,clk_1 : STD_LOGIC;SIGNAL cnt4 : INTEGER RANGE 0 TO 3; ------------用于计数--------------SIGNAL num,num1,num2,num3,num4 : INTEGER RANGE 0 TO 9;SIGNAL L1,L2: STD_LOGIC_VECTOR(2 DOWNTO 0);---------灯显示---------------SIGNAL time1,time2: INTEGER RANGE 0 TO 25;--------------时间显示--------------signal t:std_logic_vector(2 downto 0); -----点阵信号传输signal q:std_logic_vector(1 downto 0);---------点阵输出显示信号--------BEGINled_no<="11";------------把数码管第三第四位屏蔽---------------------1KHz频率输出--------------------------process(clk)variable cnt1: integer range 0 to 250;variable cnt2: integer range 0 to 100;Beginif clk'event and clk='1' thenif cnt1=250 thencnt1:=0;if cnt2=100 thencnt2:=0;clk_1k<=not clk_1k;elsecnt2:=cnt2+1;end if;elsecnt1:=cnt1+1;end if;end if;end process;-----------------点阵扫描-----------process(clk_1k)variable count:integer range 0 to 8;beginif clk_1k'event and clk_1k='1' thenif count<=8 then ------count数用于循环扫描行用if count=8 thencount:=0;end if;case count iswhen 0 => hang<="00000001";t<="000";------扫描第一行,并把t赋予000 由于信号t地变化触发下一个进程when 1 => hang<="00000010";t<="001";------扫描第二行when 2 => hang<="00000100";t<="010";------扫描第三行when 3 => hang<="00001000";t<="011";when 4 => hang<="00010000";t<="100";when 5 => hang<="00100000";t<="101";when 6 => hang<="01000000";t<="110";when 7 => hang<="10000000";t<="111";when others =>hang<="00000000";t<="000";end case;count:=count+1;end if;end if;end process;----------------------------process(t)variable shu:integer range 0 to 7;begincase t is -----根据t地值去查表when "000" => shu:=0;when "001" => shu:=1;----变量地赋值是立即发生地when "010" => shu:=2;when "011" => shu:=3;when "100" => shu:=4;when "101" => shu:=5;when "110" => shu:=6;when "111" => shu:=7;when others =>null;end case;case q is-----再根据相应地值送到列上去when "01"=>case shu iswhen 0 => lie<="11111111";when 1 => lie<="11111111";when 2 => lie<="11111111";when 3 => lie<="10111101";when 4 => lie<="00000000";when 5 => lie<="10111101";when 6 => lie<="11111111";when 7 => lie<="11111111";END CASE;when "10"=>case shu is when 0 => lie<="11101111"; when 1 => lie<="11000111"; when 2 => lie<="10000011"; when 3 => lie<="11101111"; when 4 => lie<="11101111"; when 5 => lie<="10000011"; when 6 => lie<="11000111"; when 7 => lie<="11101111"; when others =>lie<="11111111"; END CASE;when "11"=>case shu is when 0 => lie<="00111100"; when 1 => lie<="00111100"; when 2 => lie<="11011011"; when 3 => lie<="11100111"; when 4 => lie<="11100111"; when 5 => lie<="11011011"; when 6 => lie<="00111100"; when 7 => lie<="00111100";END CASE;when others=>null;end case;end process;-------------1s分频加计数-------------------PROCESS(clk_1k)V ARIABLE count_1k : INTEGER RANGE 0 TO 499; BEGINIF clk_1k'EVENT AND clk_1k='1' THENIF cnt4=3 THENcnt4<=0;ELSEcnt4<=cnt4+1;END IF;IF count_1k=499 THENcount_1k:=0;clk_1<= NOT clk_1;ELSEcount_1k:=count_1k+1;END IF;END IF;END PROCESS;-----------------倒计时和灯显示-----------------------PROCESS(cnt4,L1,L2,time1,time2)BEGINCASE time1 IS -------------输出时间1------------WHEN 0 TO 9 => num1<=0;WHEN 10 TO 19 => num1<=1;WHEN 20 TO 25 => num1<=2;WHEN OTHERS => num1<=0;END CASE;num2<=time1 REM 10; ------------取余-----CASE time2 ISWHEN 0 TO 9 => num3<=0;WHEN 10 TO 19 => num3<=1;WHEN 20 TO 25 => num3<=2;WHEN OTHERS => num3<=0;END CASE;num4<=time2 REM 10;CASE cnt4 ISWHEN 0 =>led<="1110"; -------------动态扫描数码管(从右到左)--------num<=num1;light_cs<="1110";light<=L1;WHEN 1 =>led<="1101";num<=num2;light_cs<="1101";light<=L2;WHEN 2 =>led<="1011";num<=num3;light_cs<="1011";light<=L1;WHEN 3 =>led<="0111";num<=num4;light_cs<="0111";light<=L2;WHEN OTHERS =>led<="1111";light_cs<="1111";END CASE;END PROCESS;--------------------译码------------------------PROCESS(num)BEGINCASE num ISWHEN0=>duan<="00111111"; ------0到9-------------WHEN 1=>duan<="00000110";WHEN 2=>duan<="01011011";WHEN 3=>duan<="01001111";WHEN 4=>duan<="01100110";WHEN 5=>duan<="01101101";WHEN 6=>duan<="01111101";WHEN 7=>duan<="00000111";WHEN 8=>duan<="01111111";WHEN 9=>duan<="01101111";WHEN OTHERS=>duan<="00000000";END CASE;END PROCESS;--------------------------------------PROCESS(clk_1)V ARIABLE i,j : INTEGER RANGE 0 TO 2 :=0;V ARIABLE w: INTEGER RANGE 0 TO 1 :=0;BEGINIF clk_1'EVENT AND clk_1='1' THENIF jinji='0' then ----------------判断是否要紧急制动------------IF time1=0 THENIF i=2 THENi:=0;ELSEi:=i+1;END IF;CASE i ISWHEN 1 =>time1<=20;L1<="001";B1eep<='0';WHEN 2 =>time1<=5;L1<="010";B1eep<='1';WHEN 0 =>time1<=25;L1<="100";B1eep<='0';q<="01"; --------------点阵显示前进方向-----------WHEN OTHERS =>time1<=24;END CASE;ELSEtime1<=time1-1;END IF;IF time2=0 THENIF j=2 THENj:=0;ELSEj:=j+1;END IF;CASE j ISWHEN 1 =>time2<=25;L2<="100";B1eep<='0';q<="10"; --------------点阵显示前进方向-----------WHEN 2 =>time2<=20;L2<="001";B1eep<='0';WHEN 0 =>time2<=5;L2<="010";B1eep<='1';WHEN OTHERS =>time2<=24;END CASE;ELSEtime2<=time2-1;END IF;else ------------------出现紧急制动情况地表现-----------B1eep<='1';time1<=0;time2<=0;q<="11";IF w=1 THENw:=0;ELSEw:=w+1;END IF;CASE w IS ---------------红灯地闪烁-------------- WHEN 1 =>L1<="100";L2<="100";WHEN 0 =>L1<="000";L2<="000";end case;end if;END IF;END PROCESS;END one;四、管脚分配五、硬件下载实现现象描述硬件上地实现是(1)、东西方向地绿灯,跟黄灯亮25s时,南北方向亮着红灯,当南北方向红灯亮到25s时,将变成绿灯,而在东西方向黄灯亮5s时蜂鸣器同时响5s,(2)、而与此同时,一组数码管,以倒计时地方式显示允许通行或禁止通行地时间,其中绿灯、黄灯、红灯地持续时间分别是20s、5s和25s.(3)、点阵也会显示出东西,南北方向通行是地指示标. (4)、当拨码开关拨表示出现特殊情况时,如当消防车、救护车或其他需要优先放行地车辆通过时,各方向上均是红灯亮,倒计时停止,且显示数字在闪烁,点阵出现X禁止通行地标号.当特殊运行状态结束后(即拨回拨码开关),控制器恢复原来状态,继续正常运行.六:体会、对设计工作地总结及展望这次地交通灯控制器是将点阵,彩灯,数码管地程序结合起来编写地,刚开始是真地觉得很难,但是通过慢慢地分析开来,最后终于成功了.版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有This article includes some parts, including text, pictures, and design. Copyright is personal ownership.gIiSp。
用VHDL语言实现的交通灯
目录序言 (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实验报告
大连理工大学本科实验报告题目:十字路口交通灯控制系统课程名称:数字电路课程设计学院(系):电子信息与电气工程学部专业:班级:学生姓名:学号:完成日期:成绩:年月日题目:1 设计要求设计并调试好一个十字路口的交通灯控制系统,具体功能如下:(1).主干道、支干道方向分别有红、黄、绿指示灯以及两个显示数码管。
(2).当主干道方向允许通行亮绿灯时,支干道方向亮红灯,而支干道方向允许通行亮绿灯时,主干道方向亮红灯。
(3).工作顺序为支干道方向红灯亮40秒,前35秒支干道方向绿灯亮,后5秒黄灯亮。
然后主干道方向红灯亮20秒,前15秒支干道方向绿灯亮,后5秒黄灯亮。
(4).主干道和支干道的数码管分别以倒计时的方式显示该道路当前状态所剩余的时间。
2 设计分析及系统方案设计根据设计要求整个系统需要包括交通灯状态控制以及倒计时显示控制两部分,包括了计时器、交通灯状态转换控制器以及译码显示电路的设计。
交通等状态转换控制器用来控制交通灯的颜色转换;计时器用来产生交通灯状态转换的条件以及数码管倒计时所需显示的数据;译码显示电路用来控制数码管完成倒计时的功能。
交通灯控制流程图mg my mr sg sy sr1 0 0 0 0 10 1 0 0 0 10 0 1 1 0 00 0 1 0 1 03系统以及模块硬件电路设计下载时选择开发系统模式54 系统的VHDL设计library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity traffic isport(clk: in std_logic;mg,my,mr,sg,sy,sr: out std_logic;showmh: out std_logic_vector(3 downto 0);showml: out std_logic_vector(3 downto 0);showsh: out std_logic_vector(3 downto 0);showsl: out std_logic_vector(3 downto 0));end;architecture sys of traffic istype state is (a0,a1,a2,a3); --交通灯亮灭状态type mstate is (m0,m1,m2); --主干道显示状态type sstate is (s0,s1,s2); --支干道显示状态signal presents,nexts : state;signal mpresent,mnext : mstate;signal spresent,snext : sstate;signal ch35,mh35 : std_logic_vector(3 downto 0) :="0011";signal cl35,ml35 : std_logic_vector(3 downto 0) :="0100";--ch35(高位),cl35(低位)为交通灯状态计时信号(35s)--mh35(高位),ml35(低位)为主干道显示计时信号(35s) signal ch15,sh15 : std_logic_vector(3 downto 0) :="0001";signal cl15,sl15 : std_logic_vector(3 downto 0) :="0100";--ch15(高位),cl15(低位)为交通灯状态计时信号(15s)--sh15(高位),sl15(低位)为支干道显示计时信号(15s) signal cl5,sl5,ml5 : std_logic_vector(3 downto 0) :="0100";signal ch5,sh5,mh5 : std_logic_vector(3 downto 0) :="0000";--ch5(高位),cl5(低位)为交通灯状态计时信号(5s)--sh5(高位),sl5(低位)为支干道显示计时信号(5s)--mh5(高位),ml5(低位)为主干道显示计时信号(5s)signal sh40 : std_logic_vector(3 downto 0) :="0011";signal sl40 : std_logic_vector(3 downto 0) :="1001";--sh40(高位),sl40(低位)为支干道显示计时信号(40s) signal mh20 : std_logic_vector(3 downto 0) :="0001";signal ml20 : std_logic_vector(3 downto 0) :="1001";--mh20(高位),ml20(低位)为主干道显示计时信号(20s) signal sreach40,mreach20,mreach5,sreach5,mreach35 : std_logic:='0';sreach15,reach5,reach35,reach15 : std_logic:='0';--表示各计时信号计时一次结束的信号signal srst40,mrst20,mrst5,srst5,mrst35,srst15,rst5,rst35,rst15 : std_logic :='0';--将各计时信号重新置数的信号beginshift: process(clk) --状态转换beginif clk'event and clk='1' thenpresents<=nexts; --交通灯状态转换mpresent<=mnext; --主干道显示状态转换spresent<=snext; --支干道显示状态转换end if;end process;lightctrl: process(presents,reach35,reach15,reach5) --交通灯控制begincase presents iswhen a0 => mg<='1';my<='0';mr<='0';sg<='0';sy<='0';sr<='1';if reach35='1' then nexts<=a1;else nexts<=a0;rst35<='0';rst15<='1';rst5<='1';end if;--若reach35为1则转到a1状态,否则维持a0状态when a1 => mg<='0';my<='1';mr<='0';sg<='0';sy<='0';sr<='1';if reach5='1' then nexts<=a2;else nexts<=a1;rst35<='1';rst15<='1';rst5<='0';end if;--若reach5为1则转到a2状态,否则维持a1状态when a2 => mg<='0';my<='0';mr<='1';sg<='1';sy<='0';sr<='0';if reach15='1' then nexts<=a3;else nexts<=a2;rst35<='1';rst15<='0';rst5<='1';end if;--若reach15为1则转到a3状态,否则维持a2状态when a3 => mg<='0';my<='0';mr<='1';sg<='0';sy<='1';sr<='0';if reach5='1' then nexts<=a0;else nexts<=a3;rst35<='1';rst15<='1';rst5<='0';end if;--若reach5为1则转到a0状态,否则维持a3状态end case;end process;c35: process(clk,rst35) --35s交通灯状态计时beginif rst35='1' then ch35<="0011";cl35<="0100";elsif (clk'event and clk='1') thenif (cl35="0001" and ch35="0000") then reach35<='1';else reach35<='0';--计数到1时reach35置1,否则置0if cl35="0000" thenif ch35="0000" thench35<="0011";cl35<="0100";else cl35<="1001";ch35<=ch35-1;end if;else cl35<=cl35-1;end if;end if;end process;c15: process(clk,rst15) --15s交通灯状态计时beginif rst15='1' then ch15<="0001";cl15<="0100";elsif clk'event and clk='1' thenif (cl15="0001" and ch15="0000") then reach15<='1';else reach15<='0';end if;--计数到1时reach15置1,否则置0if cl15="0000" thenif ch15="0000" thenelse cl15<="1001";ch15<=ch15-1;end if;else cl15<=cl15-1;end if;end if;end process;c5: process(clk,rst5) --5s交通灯状态计时beginif rst5='1' then cl5<="0100";elsif clk'event and clk='1' thenif cl5="0001" then reach5<='1';else reach5<='0';--计数到1时reach5置1,否则置0cl5<=cl5-1;end if;end process;mcount: process(mpresent,mreach20,mreach35,mreach5) --主干道显示控制begincase mpresent iswhen m0 => mrst35<='0';mrst20<='1';mrst5<='1';showmh<=mh35;showml<=ml35;if mreach35='1' then mnext<=m1;else mnext<=m0;end if;--若mreach35为1则转到m1状态,否则维持m0状态when m1 => mrst35<='1';mrst20<='1';mrst5<='0';showmh<=mh5;showml<=ml5;if mreach5='1' then mnext<=m2;else mnext<=m1;end if;--若mreach5为1则转到m2状态,否则维持m1状态when m2 => mrst35<='1';mrst20<='0';mrst5<='1';showmh<=mh20;showml<=ml20;if mreach20='1' then mnext<=m0;else mnext<=m2;end if;--若mreach20为1则转到m0状态,否则维持m2状态end case;end process;m5: process(clk,mrst5) --5s主干道显示计时beginif mrst5='1' then ml5<="0100";mh5<="0000";elsif clk'event and clk='1' thenif ml5="0001" then mreach5<='1';else mreach5<='0';end if;--计数到1时mreach5置1,否则置0if ml5="0000" then ml5<="0100";else ml5<=ml5-1;end if;end if;end process;m20: process(clk,mrst20) --20s主干道显示计时beginif mrst20='1' then mh20<="0001";ml20<="1001";elsif clk'event and clk='1' thenif (ml20="0001" and mh20="0000") then mreach20<='1';else mreach20<='0';end if;--计数到1时mreach20置1,否则置0if ml20="0000" thenif mh20="0000" thenmh20<="0001";ml20<="1001";else ml20<="1001";mh20<=mh20-1;end if;else ml20<=ml20-1;end if;end if;end process;m35: process(clk,mrst35) --20s主干道显示计时beginif mrst35='1' then mh35<="0011";ml35<="0100";elsif (clk'event and clk='1') thenif (ml35="0001" and mh35="0000") then mreach35<='1';else mreach35<='0';end if;--计数到1时mreach35置1,否则置0if ml35="0000" thenif mh35="0000" thenmh35<="0011";ml35<="0100";else ml35<="1001";mh35<=mh35-1;end if;else ml35<=ml35-1;end if;end if;end process;scount: process(spresent,sreach40,sreach15,sreach5) --支干道显示控制begincase spresent iswhen s0 => srst40<='0';srst15<='1';srst5<='1';showsh<=sh40;showsl<=sl40;if sreach40='1' then snext<=s1;else snext<=s0;end if;--若sreach40为1则转到s1状态,否则维持s0状态when s1 => srst40<='1';srst15<='0';srst5<='1';showsh<=sh15;showsl<=sl15;if sreach15='1' then snext<=s2;else snext<=s1;end if;--若sreach15为1则转到s2状态,否则维持s1状态when s2 => srst40<='1';srst15<='1';srst5<='0';showsh<=sh5;showsl<=sl5;if sreach5='1' then snext<=s0;else snext<=s2;end if;--若sreach5为1则转到s0状态,否则维持s2状态end case;end process;s40: process(clk,srst40) --40s支干道显示计时beginif srst40='1' then sh40<="0011";sl40<="1001";elsif (clk'event and clk='1') thenif (sl40="0001" and sh40="0000") then sreach40<='1';else sreach40<='0';end if;--计数到1时sreach40置1,否则置0if sl40="0000" thenif sh40="0000" thensh40<="0011";sl40<="1001";else sl40<="1001";sh40<=sh40-1;end if;else sl40<=sl40-1;end if;end if;end process;s5: process(clk,srst5) --5s支干道显示计时beginif srst5='1' then sl5<="0100";sh5<="0000";elsif clk'event and clk='1' thenif sl5="0001" then sreach5<='1';else sreach5<='0';--计数到1时sreach5置1,否则置0end if;if sl5="0000" then sl5<="0100";else sl5<=sl5-1;end if;end if;end process;s15: process(clk,srst15) --15s支干道显示计时beginif srst15='1' then sh15<="0001";sl15<="0100";elsif clk'event and clk='1' thenif (sl15="0001" and sh15="0000") then sreach15<='1';else sreach15<='0';end if;--计数到1时sreach15置1,否则置0if sl15="0000" thenif sh15="0000" thensh15<="0001";sl15<="0100";else sl15<="1001";sh15<=sh15-1;end if;else sl15<=sl15-1;end if;end if;end process;end sys;5 结论以及结果说明采用GW48-CK开发系统,选用工作模式5,使用MAX+plus II软件调试环境,仿真过程中时钟周期设为200ns,仿真时间100us。
基于VHDL的交通灯控制器的设计和实现
基于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语言的交通灯控制系统设计与实现
图为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;
北邮数电实验报告
北京邮电大学实验报告实验名称: 数电电路与逻辑设计实验学院:信息与通信工程学院班 级: 姓 名: 学 号: 班内序号:日期:一. 实验一:QuartusII 原理图输入法设计1. 实验名称和实验任务要求(1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块 元。
(2)用(1)中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号入信号。
(3)用3线-8线译码器(74LS138)和逻辑门设计实现函数F=A B C +A B C +AB C +A B C 。
2.实验原理图及波形图(1)半加器(2)全加器(3)74LS383.仿真波形图分析(1)半加器:输入为a,b,输出S,CO(进位)。
当ab都为0时,半加和s=0,进位端co=0。
当ab都为1时,半加和s=0,进位端co=1。
当a=1,b=0或a=0,b=1时,半加和s=1,进位端co=0。
(2)全加器:输入a,b,输出S,CO(进位),ci(低进位)。
当a=0,b=0,ci=0,输出s=0,co=0。
当a=0,b=1或a=1,b=0又ci=0,输出s=1,co=0。
当a=0,b=0,ci=1,输出s=1,co=0。
(3)74LS138输入A,B,C,输出为3。
四个输出对应F中的四个最小项,Y0、Y2、Y4、Y7,以实现函数功能。
二.实验二:用VHDL设计与实现组合逻辑电路1.实验名称和实验任务要求(1)用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能。
要求用拨码开关设定输入信号,7段数码管显示输出信号。
(2)用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
(3)用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个’1’时,输出为’1’,否则输出’0’,仿真验证其功能。
交通灯VHDL课程设计报告
《电子设计自动化(EDA)技术》课程实训报告题目: 交通信号控制器VHDL设计姓名:* *院系:应用技术学院专业:电子信息工程(仪器仪表)学号: ************ 指导教师:徐正坤2010 年6 月29 日目录1 课程设计题目、内容与要求…………………………………4页1.1 设计题目…………………………………………………4页1.2 设计内容…………………………………………………4页1.3 具体要求…………………………………………………4页2 系统设计………………………………………………………5页2.1 设计思路…………………………………………………5页2.2 系统原理…………………………………………………5页3 系统实现………………………………………………………5页3.1 VHDL源程序的具体程序和说明………………………5页3.2 交通信号控制器程序中使用到得信号及其对应的管脚…7页4 系统仿真………………………………………………………7页5 硬件验证(操作)说明………………………………………7页6 总结…………………………………………………………8页7 参考书目……………………………………………………8页交通灯控制器周晓重庆三峡学院应用技术学院电子信息工程(仪器仪表)2008级重庆万州 404000摘要基于VHDL的交通灯控制器设计,芯片采用ALTERA公司的ACEX1K 系列的EP1K10TC100-3,使用硬件描述语言VHDL进行描述,对交通灯进行模块化,在VHDL编程环境Quartus II下编译通过。
此报告对该设计的思想原理,详细程序和引脚配置以及波形仿真进行了详细的阐述。
关键词:VHDL 模块化交通灯设计1 课程设计题目、内容与要求1.1 设计题目交通信号控制器VHDL设计1.2 设计内容交通信号控制器的VHDL源程序;交通信号控制器的仿真波形;交通信号控制器的硬件测试结果。
北邮数字电路实验报告——交通灯控制器(VHDL)(最全的)
课题三:交通灯控制器学院:信息与通信工程学院专业:通信工程姓名:***学号:********课题三:交通灯控制器一.设计课题的任务要求(一)、实验目的1. 熟练掌握 VHDL 语言和QuartusII 软件的使用;2. 理解状态机的工作原理和设计方法;3. 掌握利用 EDA 工具进行自顶向下的电子系统设计方法;(二)、相关知识本实验要利用 CPLD 设计实现一个十字路口的交通灯控制系统,与其他控制系统一样,本系统划分为控制器和受控电路两部分。
控制器使整个系统按设定的工作方式交替指挥车辆及行人的通行,并接收受控部分的反馈信号,决定其状态转换方向及输出信号,控制整个系统的工作过程。
路口交通灯控制系统的有东西路和南北路交通灯 R(红)、Y(黄)、G(绿)三色,所有灯均为高电平点亮。
设置20s 的通行时间和5s 转换时间的变模定时电路,用数码管显示剩余时间。
提供系统正常工作/复位和紧急情况两种工作模式。
(三)、实验任务1.基本任务:设计制作一个用于十字路口的交通灯控制器。
1). 南北和东西方向各有一组绿、黄、红灯用于指挥交通,绿灯、黄灯和红灯的持续时间分别为20 秒、5 秒和25 秒;2). 当有特殊情况(如消防车、救护车等)时,两个方向均为红灯亮,计时停止,当特殊情况结束后,控制器恢复原来状态,继续正常运行;3). 用两组数码管,以倒计时方式显示两个方向允许通行或禁止通行的时间;2.提高要求:1). 增加左、右转弯显示控制功能;2). 紧急状况时增加声光警告功能;3). 自拟其它功能。
二.系统设计(包括设计思路、总体框图、分块设计)(一)设计思路利用有限状态机描绘出交通灯的状态转移图,并设置记录东西和南北路口可通行时间的全局变量count,共设置四个正常状态,状态间的转移以count的值作为判断条件。
对于两种特殊情况:当复位信号reset为高电平时,则回到最初状态;当紧急输入信号emergency 为高电平时,则转移到一特殊状态。
VHDL交通灯控制器-实验报告
可编程逻辑器件应用项目报告书项目名称:交通灯控制器指导老师:姓名:学号:班级:(以后写报告要包含以下一些内容:)一、设计要求--------------------------------------------------------------------------------二、设计目的--------------------------------------------------------------------------------三、设计方案--------------------------------------------------------------------------------四、设计程序---------------------------------------------------------------------------------五、管脚分配---------------------------------------------------------------------------------六、硬件下载实现现象描述------------------------------------------七、体会、对设计工作的总结与展-------------------------------------------一、设计要求:①在十字路口的两个方向上各设一组红、绿、黄灯,显示顺序为其中一方向(东西方向)是绿灯、黄灯、红灯;另一方向(南北方向)是红灯、绿灯、黄灯。
②设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,其中绿灯、黄灯、红灯的持续时间分别是20s、5s和25s。
③当各条路上任意一条上出现特殊情况时,如当消防车、救护车或其他需要优先放行的车辆通过时,各方向上均是红灯亮,倒计时停止,且显示数字在闪烁。
当特殊运行状态结束后,控制器恢复原来状态,继续正常运行。
北邮vhdl小学期实验报告
数字逻辑课程设计实验实验报告姓名徐同学、陈同学、连同学、朱同学、熊同学学院计算机学院专业计算机科学与技术班级 xxxxxxxxxx学号xxxxxxxxxx/xxxxxxxxxx/xxxxxxxxxx/xxxxxxxxxx/xxxxxxxxxx2015年7 月北京邮电大学课程设计报告课程设计名称数字逻辑学院计算机指导教师班级班内序号学号学生姓名成绩xxxxxxxxxx30 xxxxxxxxxx 徐同学xxxxxxxxxx14 xxxxxxxxxx 陈同学xxxxxxxxxx13 xxxxxxxxxx 连同学xxxxxxxxxx28 xxxxxxxxxx 朱同学xxxxxxxxxx26 xxxxxxxxxx 熊同学课程设计内容教学目的:掌握 QuartusII 软件的使用方法,用VHDL进行较复杂逻辑电路的设计和调试基本内容:1.交通灯控制 2.电子钟 3.药片装瓶系统团队分工:连同学:负责编写、调试交通灯。
徐同学、陈同学:负责编写、调试电子钟,其中徐同学负责实验报告的撰写朱同学、熊同学:负责编写调试药片装瓶系统。
课程设计报告(附页)课程设计成绩评定遵照实践教学大纲并根据以下四方面综合评定成绩:1、课程设计目的任务明确,选题符合教学要求,份量及难易程度2、团队分工是否恰当与合理3、综合运用所学知识,提高分析问题、解决问题及实践动手能力的效果4、是否认真、独立完成属于自己的课程设计内容,课程设计报告是否思路清晰、文字通顺、书写规范评语:成绩:指导教师签名:2015年月日注:评语要体现每个学生的工作情况,可以加页。
实验一:交通灯一、实验目的1)学习采用状态机方法设计时序逻辑电路2)掌握QuartusII软件的使用方法3)掌握用VHDL语言实现有限状态机4)掌握ISP器件的使用二、实验所用器件和设备可编程逻辑器件MAX7000S系列一片TEC_8实验系统一台USB—BLASTER下载线一条三、实验要求以实验台上的12个指示灯分别代表红,黄,绿三种信号的灯。
交通灯控制器的vhdl程序设计
交通灯控制器一、实验目的:1、学会使用VHDL语言编程解决实际问题;2、实现高速公路与乡间小路的交叉路口红绿灯的控制;3、熟悉MAX-plusⅡ的使用。
二、实验设备:PC 机一台三、实验原理与内容:实现高速公路与乡间小路的交叉路口红绿灯的控制。
功能如下要求:1.只有在小路上发现汽车时,高速公路上的交通灯才可能变为红灯。
2.当汽车行驶在小路上时、小路的交通灯保持为绿灯,但不能超过给定的延迟时间。
〔注;这段时间定义为20S时间)。
3.高速公路灯转为绿灯后,即使小路上有汽车出现,而高速公路上并无汽车,也将在给定的时间内保持高速公路绿灯。
(注:这段时间定义为60S)。
程序流程图:高速公路通车小路有车T>60S5S黄灯小路通车T>20S 5S黄灯小路有车YYYN NN N Y四、实验步骤:1、在C 盘以后的盘上建一个文件夹,后缀名不能有中文。
2、打开MAX-plus Ⅱ,单击file ,在new 中选择text editorfile ,单击ok 打开文本编辑框。
3、保存到新建的文件夹中,名称与实体一致,类型为 .vhd 。
4、在编辑框中输入程序,保存,置顶(file->project->setproject current file );5、编译MAX-plusⅡ->compiler->star,如果有错误,可根据错误提示修改源程序,直到编译没有错误。
6、波形编辑MAX-plusⅡ->Wavefrom editor->Enter Nodes from Snf->list-> => ->ok;7、设置仿真信号(时钟信号,输入信号),保存。
8、仿真simulator,保存,改变输入信号仿真。
五、程序:LIBRARY IEEE; --库和程序包USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JTDKZ IS --实体JTDKZ的说明PORT(CLK:IN STD_LOGIC; --时钟信号SB:IN STD_LOGIC; --小路有无车信号(SB=1:小路有车)MR,MY,MG,BR,BY,BG:OUT STD_LOGIC);--交通灯信号END ENTITY JTDKZ;ARCHITECTURE ART OF JTDKZ IS--JTDKZ的结构体说明TYPE STATE_TYPE IS(A,B,C,D);--定义信号SIGNAL STATE:STATE_TYPE;BEGINCNT:PROCESS(CLK) ISV ARIABLE CLR:BIT;--在进程中定义变量CLR(CLR=0:计时清零)V ARIABLE S:STD_LOGIC_VECTOR(0 TO 5);--在进程中定义变量S(S为时钟计时器)BEGINIF(CLK'EVENT AND CLK='1')THEN--判断时钟信号上升沿IF CLR='0'THEN--当CLR=0时计时变量清零S:="000000";ELSES:=S+1;END IF;CASE STATE IS--状态A为大路通车(绿灯),小路禁止通车(红灯)WHEN A=>MR<='0';MY<='0';MG<='1';BR<='1';BY<='0';BG<='0';IF(SB='1') THEN--判断小路是否有车IF(S="111011") THEN--判断大路通行是否满60秒STATE<=B;CLR:='0';--大路满60秒,计时清零,转到状态BELSESTATE<=A;CLR:='1';--大路不满60秒,继续状态AEND IF;ELSESTATE<=A;CLR:='1';--小路没车,大路一直通车END IF;--状态B为大路禁止通车(黄灯),小路禁止通车(红灯)WHEN B=>MR<='0';MY<='1';MG<='0';BR<='1';BY<='0';BG<='0';IF S="000100" THEN--判断大路黄灯是否满5秒STATE<=C;CLR:='0';--满5秒,计时清零,跳转到C状态ELSESTATE<=B;CLR:='1';--不满5秒继续状态B。
交通灯控制器VHDL设计
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秒钟,才能变换运行车道。
要求交通灯控制器有复位功能,在复位信号使能的情况下能够实现交通灯的自动复位,并且要求所有交通灯的状态变化,包括复位信号引起的均发生时钟脉冲的上升沿处。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字电路综合实验报告班级:姓名:班内序号:学号:日期:目录一、实验摘要 (3)二、实验任务 (3)1.任务要求 (3)2.任务解析 (3)三、实验设计思路 (4)1.状态转移图 (4)2.流程图 (5)3.模块确定 (5)4.系统框图 (7)四、程序代码 (7)⒈主程序 (7)⒉分频模块 (9)⒊防抖模块 (10)⒋交通灯控制模块 (11)⒌数字译码模块 (14)五、实验结果 (15)1.仿真结果 (15)2.实物结果 (17)六、所遇问题分析 (17)七、实验总结 (18)交通灯控制器的VHDL实现一、实验摘要随着交通情况的日益复杂,交通灯在生活中所处的位置也越来越高。
本实验就是基于VHDL语言编程实现了十字路口的交通灯控制器。
对于交通等控制器的设计是分模块自顶向下的设计思想,软硬件结合来实现本设计。
关键字:交通灯、VHDL、控制器二、实验任务1.任务要求1)南北和东西方向各有一组绿、黄、红灯用于指挥交通,绿灯、黄灯和红灯的持续时间分别为20秒、5秒和25秒;2)当有特殊情况(如消防车、救护车等)时,两个方向均为红灯亮,计时停止,当特殊情况结束后,控制器恢复原来状态,继续正常运行;3)用两组数码管,以倒计时方式显示两个方向允许通行或禁止通行的时间;2.任务解析东西(A车道)和南北(B车道)方向各有一组绿、黄、红灯用于指挥交通(如图1),绿灯、黄灯和红灯的持续时间分别为20 秒、5 秒和25 秒。
图1 十字路口交通灯模型因此,可以设计如下四个状态,其关系为:状态亮灯情况车辆行驶状况持续时间(秒)下一状态A车道B车道S0 红亮红亮紧急状况,A/B车道均禁止通行~ S1S1 绿亮红亮A车道通行,B车道禁止通行20 S2S2 黄亮红亮A车道缓行,B车道禁止通行 5 S3S3 红亮绿亮A车道禁止通行,B车道通行20 S4S4 红亮黄亮A车道禁止通行,B车道缓行 5 S1三、实验设计思路1.状态转移图图2 状态转移图2.流程图图3 流程图3.模块确定⑴分频模块设计原因:由于实验板只能提供50MHz的时钟信号,而电路中只能使用较低频率的时钟:1Hz时钟信号:计数器count变化时使用;20Hz时钟信号:在防抖电路中使用的时钟信号;1kHz时钟信号哦:用于数码管位选信号的改变的时钟信号。
功能:用于将实验板上的50MHz的时钟信号经分频后输出:1kHz、20Hz、1Hz。
图4 分频模块的输入和输出⑵防抖动模块设计原因:只要有按键或是拨码开关,防抖电路就是不可缺少的一个模块。
否则,按键信号中的一些毛刺和抖动往往会引起电路不可预知的错误。
功能:将带有抖动的信号进行识别和判断,输出持续时间超过0.1s的高电平信号。
图5 防抖动模块的输入和输出⑶交通灯控制模块设计原因:这个模块是本程序设计的灵魂,是重中之重!这个模块用于控制电路的状态改变和按键响应,也就是系统中控制器的作用。
功能:根据按键信号和输入时钟,输出符合交通灯状态变化规律的LED驱动信号、数码管显示的数据、数码管位选信号。
图6 交通灯控制模块的输入和输出⑷数字译码模块设计原因:由于交通灯控制模块输出的为数码管显示的数据,为10进制数,因此必须要一个译码电路,将此十进制数转化为LED灯的驱动信号,而这个功能正是由此模块完成。
功能:将输入的十进制数转变为相应的8位2二进制数作为数码管的驱动信号。
图7 数字译码模块的输入和输出⑸整体模块连接图图8 模块整体连接图4.系统框图图9 系统框图四、程序代码⒈主程序--------------------------------主程序--------------------------------library ieee;use ieee.std_logic_1164.all;entity traffic_lights isport(clk:in std_logic; ----------时钟信号emerg,reset:in std_logic; ----------复位和紧急情况信号seg:out std_logic_vector(7 downto 0); ---------7段数码管显示select_led:out std_logic_vector(5 downto 0); ---------选通输出lights:out std_logic_vector(7 downto 0));-------led发光管输出end traffic_lights;architecture a of traffic_lights is -------分别调用各个模块signal cp1k,cp20,cp1,resetout,emergout:std_logic;signal number:integer range 0 to 9;component freq_divide -------分频模块 1k 100hz 1hzport(clk_in:in std_logic;clk_1,clk_20,clk_1k:out std_logic);end component;component noshake -------分频模块 1k 100hz 1hzport(clk_20,keyin:in std_logic;keyout:out std_logic);end component;component traffic -------交通灯控制模块port(clk1,clk1k:in std_logic;emerg,reset:in std_logic;num:out integer range 0 to 9;lights:out std_logic_vector(7 downto 0);select_led:out std_logic_vector(5 downto 0));end component;component display --------数字译码模块port(num:in integer range 0 to 9;seg:out std_logic_vector(7 downto 0));end component;beginu1:freq_divide port map(clk,cp1,cp20,cp1k); ----分频器产生时钟信号u2:noshake port map(cp20,reset,resetout); ----对复位信号防抖处理u3:noshake port map(cp20,emerg,emergout); ----对紧急信号防抖处理u4:traffic port map(cp1,cp1k,emergout,resetout,number,lights,select_led);----状态机运转u5:display port map(number,seg); ----数码管显示end;⒉分频模块--------------------------------分频模块--------------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity freq_divide isport(clk_in : in std_logic;clk_1,clk_20,clk_1k : out std_logic);end;architecture a of freq_divide issignal count1 : integer range 0 to 24999;signal count2 : integer range 0 to 24;signal count3 : integer range 0 to 9;signal clk_tmp1,clk_tmp2,clk_tmp3: std_logic;begin----------------50000分频进程-------------------输出:1kHz的时钟信号---功能:用于数码管显示时刷新频率p1:process(clk_in)beginif (clk_in'event and clk_in='1') thenif count1=24999 thencount1<=0;clk_tmp1<= not clk_tmp1;elsecount1<=count1+1;end if;end if;end process p1;----------------50分频进程-------------------输出:20Hz的时钟信号---功能:防抖动电路中使用p2:process(clk_tmp1)beginif (clk_tmp1'event and clk_tmp1='1') thenif count2=24 thencount2<=0;clk_tmp2<= not clk_tmp2;elsecount2<=count2+1;end if;end if;end process p2;----------------20分频进程-------------------输出:1Hz的时钟信号---用于状态转变的时钟信号p3:process(clk_tmp2)beginif (clk_tmp2'event and clk_tmp2='1') thenif count3=9 thencount3<=0;clk_tmp3<= not clk_tmp3;elsecount3<=count3+1;end if;end if;end process p3;clk_1<=clk_tmp3;clk_20<=clk_tmp2;clk_1k<=clk_tmp1;end;⒊防抖模块--------------------------------防抖动模块--------------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity noshake isport(clk_20,keyin: in std_logic;keyout: out std_logic);end;architecture a of noshake issignal cp:std_logic;begin----------------只有持续时间高于0.1s的高电平才有效---------------- process(clk_20)variable times:integer range 0 to 2;beginif (clk_20'event and clk_20='1') thenif keyin='1' thenif times=2 thentimes:=times;else times:=times+1;end if;else times:=0;end if;end if;if times=2 thencp<='1';else cp<='0';end if;keyout<=cp;end process;end;⒋交通灯控制模块--------------------------------交通灯控制模块--------------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity traffic isport(clk1,clk1k:in std_logic;emerg,reset:in std_logic;num:out integer range 0 to 9;lights:out std_logic_vector(7 downto 0);select_led:out std_logic_vector(5 downto 0));end traffic;architecture control of traffic istype states is(s0,s1,s2,s3,s4);signal state:states;signal num1,num2,num3,num4:integer range 0 to 9;signal emerg_status,reset_status:std_logic:='0';signal count:integer range 1 to 50 :=50;begin----------------紧急信号的处理进程----------------p1:process(emerg)beginemerg_status<=emerg;end process p1;----------------复位信号处理及计数器count控制进程----------------p2:process(reset)beginreset_status<=reset;end process p2;p3:process(clk1)beginif(reset_status='1') thencount<=50;elsif(emerg_status='1') thencount<=count;elseif(clk1'event and clk1='1') thenif count=1 thencount<=50;else count<=count-1;end if;end if;end if;end process;----------------核心状态机----------------p4:process(emerg_status,count)----根据计数器来选择交通灯状态beginif(emerg_status='1')then state<=s0; -------6个正常状态和1个紧急情况状态elseif(count>=31)then state<=s1;elsif(count<=30 and count>=26)then state<=s2;elsif(count<=25 and count>=6)then state<=s3;else state<=s4;end if;end if;case state is ---- 交通灯状态,用LED发光管模拟交通灯when s0=>lights<="10010000"; --;RA/RBwhen s1=>lights<="00110000"; --;GA/RBwhen s2=>lights<="01010000"; --;YA/RBwhen s3=>lights<="10000100"; --;RA/GBwhen s4=>lights<="10001000"; --;RA/YBend case;end process;----------------根据计数器值确定数码管显示数字---------------- p5:process(emerg_status,count)beginif(emerg_status='1') -------紧急状态下数码管显示8 then num1<=8;num2<=8;num3<=8;num4<=8;else----状态S1if(count=50)then num1<=2;num2<=0;num3<=2;num4<=5;elsif(count>=45 and count<50)then num1<=1;num2<=count-40;num3<=2;num4<=count-45;elsif(count>=40 and count<=44)then num1<=1;num2<=count-40;num3<=1;num4<=count-35;elsif(count>=35 and count<=39)then num1<=0;num2<=count-30;num3<=1;num4<=count-35;elsif(count>=31 and count<=34)then num1<=0;num2<=count-30;num3<=0;num4<=count-25;----状态S2elsif(count>=26 and count<=30)then num1<=0;num2<=count-25;num3<=0;num4<=count-25;----状态S3elsif(count=25)then num1<=2;num2<=5;num3<=2;num4<=0;elsif(count>=20 and count<=24)then num1<=2;num2<=count-20;num3<=1;num4<=count-15;elsif(count>=15 and count<=19)then num1<=1;num2<=count-10;num3<=1;num4<=count-15;elsif(count>=14 and count<=10)then num1<=1;num2<=count-10;num3<=0;num4<=count-5;----状态S4elsif(count>=6 and count<=9)then num1<=1;num2<=count;num3<=0;num4<=count-5;else num1<=0;num2<=count;num3<=0;num4<=count;end if;end if;end process;----------------数码管选通信号输出----------------p6:process(clk1k)variable temp:integer range 0 to 3;beginif(clk1k'event and clk1k='1')thencase temp iswhen 0=>num<=num1;temp:=1;select_led<="011111"; -------选用4个数码管输出倒计时when 1=>num<=num2;temp:=2;select_led<="101111";when 2=>num<=num3;temp:=3;select_led<="111101";when 3=>num<=num4;temp:=0;select_led<="111110";end case;end if;end process;end;⒌数字译码模块--------------------------------数字译码模块------------------------------ library ieee;use ieee.std_logic_1164.all;entity display isport(num:in integer range 0 to 9;seg:out std_logic_vector(7 downto 0));end;architecture a of display isbegind1:process(num)begincase num iswhen 0=>seg<="00111111"; ------------由七位二进制数表示0到9 when 1=>seg<="00000110";when 2=>seg<="01011011";when 3=>seg<="01001111";when 4=>seg<="01100110";when 5=>seg<="01101101";when 6=>seg<="01111101";when 7=>seg<="00000111";when 8=>seg<="01111111";when 9=>seg<="01101111";when others=>seg<="XXXXXXXX";end case;end process;end;五、实验结果1.仿真结果⑴仿真说明由于分频模块的存在,导致无法整体仿真(可能可以,但是很费时间)。