1、交通灯控制电路设计与仿真交通灯控制电路设计和仿真一、 实验目的 1、 了解交通灯的燃灭规律。 2、 了解交通灯控制器的工作原理。 3、 熟悉 VHDL 语言编程,了解实际设计中的优化方案。 二、 实验原理 交通灯的显示有很多方式,如十字路口、丁字路口等,而对于同一个路口又有很多不同的显示要求,比如十字路口,车辆如果只要东西和南北方向通行就很简单,而如果车子可以左右转弯的通行就比较复杂,本实验仅针对最简单的南北和东西直行的情况。 要完成本实验,首先必须了解交通路灯的燃灭规律。本实验需要用到实验箱上交通灯模块中的发光二极管,即红、黄、绿各三个。依人们的交通常规, “红灯停, 绿灯行,黄灯提醒” 。
2、 其交通的燃灭规律为: 初始态是两个路口的红灯全亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。闪烁若干次后,再切换到东西路口方向,重复上述过程。 在实验中使用 8 个七段码管中的任意两个数码管显示时间。东西路和南北路的通车时间均设定为 20s。数码管的时间总是显示为 19、18、172、1、0、19、18。在显示时间小于 3 秒的时候,通车方向的黄灯闪烁。三、 实验内容 本实验要完成任务就是设计一个简单的交通灯控制器
3、,交通灯显示用实验箱的交通灯模块和七段码管中的任意两个来显示。系统时钟选择时钟模块的 1KHz时钟,黄灯闪烁时钟要求为 2Hz,七段码管的时间显示为 1Hz脉冲,即每 1s 中递减一次,在显示时间小于 3 秒的时候,通车方向的黄灯以 2Hz 的频率闪烁。系统中用 S1 按键进行复位。 实验箱中用到的数字时钟模块、按键开关、数码管和 FPGA 的接口电路,以及数字时钟源、按键开关、数码管和 FPGA 的管脚连接在以前的实验中都做了详细说明,这里不在赘述。交通灯模块原理和 LED 灯模块的电路原理一致,当有高电平输入时 LED 灯就会被点亮,反之不亮。只是 LED 发出的光有颜色之分。其和 FPG
4、A 的管脚连接如下表 19-1 所示:四、 实验步骤 1、 打开 QUARTUSII 软件,新建一个工程。 2、 建完工程之后,再新建一个 VHDL File,打开 VHDL 编辑器对话框。 3、 按照实验原理和自己的想法,在 VHDL 编辑窗口编写 VHDL 程序,用户可参照光盘中提供的示例程序。 4、 编写完 VHDL 程序后,保存起来。(1)-jtdkz.vhdlibrary ieee;use ieee.std_logic_1164.all;entity jtdkz is port(clk,sm,sb:in std_logic; mr,my0,mg0,br,by0,bg0:out std
5、_logic);end entity jtdkz;architecture art of jtdkz istype state_type is(A,B,C,D);signal state:state_type;begincnt:process(clk) isvariable s:integer range 0 to 45;variable clr,en:bit;begin if(clkevent and clk=1)then if clr=0then s:=0; elsif en=0 then s:=s; else s:=s+1; end if; case state is when A=mr
6、=0;my0=0;mg0=1;br=1;by0=0;bg0=0; if(sb and sm)=1 then if s=45 then state= B;clr:=0;en:=0; else state=A;clr:=1;en:=1; end if; elsif(sb and(not sm)=1then state=B;clr:=0;en:=0; else statemr=0;my0=1;mg0=0;br=1;by0=0;bg0=0; if s=5 then state=C;clr:=0;en:=0; else statemr=1;my0=0;mg0=0;br=0;by0=0;bg0=1; if
7、(sb and sm)=1 then if s=25 then state= D;clr:=0;en:=0; else state=C;clr:=1;en:=1; end if; elsif sb=0 then state=D;clr:=0;en:=0; else statemr=1;my0=0;mg0=0;br=0;by0=1;bg0=0; if s=5 then state=A;clr:=0;en:=0; else state=D;clr:=1;en:=1; end if; end case; end if; end process cnt; end architecture art; (
8、2)cskz.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cskz isport(ina:in std_logic; outa:out std_logic);end entity cskz;architecture art of cskz isbeginprocess(ina) isbegin if ina=1 then outa=1;else outa=0;end if;end process;end architecture art;(3)cnt45s.vhd libr
9、ary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt45s isport(sb,clk,en45:in std_logic; dout45m,dout45b:out std_logic_vector(7 downto 0);end entity cnt45s;architecture art of cnt45s issignal cnt6b:std_logic_vector(5 downto 0);beginprocess(sb,clk,en45)is begin if sb=0then
10、cnt6b=cnt6b-cnt6b-1; elsif(clkevent and clk=1)then if en45=1then cnt6b=cnt6b+1; elsif en45=0 then cnt6bdout45m=01000101;dout45bdout45m=01000100;dout45bdout45m=01000011;dout45bdout45m=01000010;dout45bdout45m=01000001;dout45bdout45m=01000000;dout45bdout45m=00111001;dout45bdout45m=00111000;dout45bdout4
11、5m=00110111;dout45bdout45m=00110110;dout45bdout45m=00110101;dout45bdout45m=00110100;dout45bdout45m=00110011;dout45bdout45m=00110010;dout45bdout45m=00110001;dout45bdout45m=00110000;dout45bdout45m=00101001;dout45bdout45m=00101000;dout45bdout45m=00100111;dout45bdout45m=00100110;dout45bdout45m=00100101;
12、dout45bdout45m=00100100;dout45bdout45m=00100011;dout45bdout45m=00100010;dout45bdout45m=00100001;dout45bdout45m=00100000;dout45bdout45m=00011001;dout45bdout45m=00011000;dout45bdout45m=00010111;dout45bdout45m=00010110;dout45bdout45m=00010101;dout45bdout45m=00010100;dout45bdout45m=00010011;dout45bdout4
13、5m=00010010;dout45bdout45m=00010001;dout45bdout45m=00010000;dout45bdout45m=00001001;dout45bdout45m=00001000;dout45bdout45m=00000111;dout45bdout45m=00000110;dout45bdout45m=00000101;dout45bdout45m=00000100;dout45bdout45m=00000011;dout45bdout45m=00000010;dout45bdout45m=00000001;dout45bdout45m=00000000;
14、dout45b=00000000;end case;end process;end architecture art;(4)cnt05s.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt05s isport(clk,en05m,en05b:in std_logic;dout5:out std_logic_vector(7 downto 0);end entity cnt05s;architecture art of cnt05s issignal cnt3b:std_lo
15、gic_vector(2 downto 0);beginprocess(clk,en05m,en05b)isbeginif(clkevent and clk=1)then if en05m=1then cnt3b=cnt3b+1; elsif en05b=1then cnt3b=cnt3b+1; elsif en05b=0then cnt3bdout5dout5dout5dout5dout5dout5=00000000;end case;end process;end architecture art;(5)cnt25s.vhdlibrary ieee;use ieee.std_logic_1
16、164.all;use ieee.std_logic_unsigned.all;entity cnt25s isport(sb,sm,clk,en25:in std_logic;dout25m,dout25b:out std_logic_vector(7 downto 0);end entity cnt25s;architecture art of cnt25s issignal cnt5b:std_logic_vector(4 downto 0);beginprocess(sb,sm,clk,en25)isbeginif sb=0then cnt5b=cnt5b-cnt5b-1; elsif
17、 sm=0 then cnt5b=cnt5b-cnt5b-1; elsif(clkevent and clk=1) then if en25=1 then cnt5b=cnt5b+1; elsif en25=0 then cnt5bdout25b=00100101;dout25mdout25b=00100100;dout25mdout25b=00100011;dout25mdout25b=00100010;dout25mdout25b=00100001;dout25mdout25b=00100000;dout25mdout25b=00011001;dout25mdout25b=00011000
18、;dout25mdout25b=00010111;dout25mdout25b=00010110;dout25mdout25b=00010101;dout25mdout25b=00010100;dout25mdout25b=00010011;dout25mdout25b=00010010;dout25mdout25b=00010001;dout25mdout25b=00010000;dout25mdout25b=00001001;dout25mdout25b=00001000;dout25mdout25b=00000111;dout25mdout25b=00000110;dout25mdout
19、25b=00000101;dout25mdout25b=00000100;dout25mdout25b=00000011;dout25mdout25b=00000010;dout25mdout25b=00000001;dout25mdout25b=00000000;dout25m=00000000; end case; end process; end architecture art;(6)xskz.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity xskz isport(en
20、45,en25,en05m,en05b:in std_logic;ain45m,ain45b,ain25m,ain25b,ain05:in std_logic_vector(7 downto 0);doutm,doutb:out std_logic_vector(7 downto 0);end entity xskz;architecture art of xskz isbeginprocess(en45,en25,en05m,en05b,ain45m,ain45b,ain25m,ain25b,ain05)isbeginif en45=1then doutm=ain45m(7 downto 0
21、);doutb=ain45b(7 downto 0); elsif en05m=1then doutm=ain05(7 downto 0);doutb=ain05(7 downto 0); elsif en25=1then doutm=ain25m(7 downto 0);doutb=ain25b(7 downto 0); elsif en05b=1then doutm=ain05(7 downto 0);doutb=ain05(7 downto 0);end if;end process;end architecture art;(7)ymq.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ymq isport(clk:in std_logic; ain41,ain42,ain43,ain44:in std_logic_vector(3 downto 0); del:out std_logic_vector(2 downto 0); dout7:out std_logic_vector
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1