实验十一 交通灯实验 一、实验目的 熟悉VHDL语言编程,了解实际设计中的优化方案。 二、硬件要求 1、主芯片EP1K10TC100一3: 2、实验箱上交通灯模块。 三、实验内容与实验原理 本实验要求设计一个模拟的十字路口的交通红绿灯,间隔的时间是15秒。当时间只有 5秒时,绿灯开始闪烁:当时间只有2秒时黄灯开始闪烁。当只有0秒时红绿灯交换方向显 示,时间从15秒开始倒计时。 要完成本实验,首先必须了解交通路灯的燃灭规律。本实验需要用到实验箱上交通灯模 块中的发光二极管,即红、黄、绿各三个。依人们的交通常规,“红灯停,绿灯行,黄灯提 醒”。其交通灯的燃灭规律为:初始态是两个路口的红灯全亮,之后,东西路口的绿灯亮, 南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。闪 烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时 间后,南北路口的绿灯灭,黄灯开始闪烁。闪烁若干次后,再切换到东西路口方向,重复上 述过程。 在实验中使用数码管显示时间。时间控制由TBJSA和DK两个模块联合控制。其中TBJSA 为计数器,将脉冲信号从0到15循环计数。DK控制在不同时间段的发光二极管的输出提示。 四、连线指导 CPD:接1Hz左右的时钟信号。 CPS:接10KHz左右的时钟信号。 LR1、LR2接交通灯模块的R的左右两个管脚。 LG1、LG2接交通灯模块的G的左右两个管脚。 LY1、LY2接交通灯模块的Y的左右两个管脚。 D0-D6:接数码管模块的A,B,C,D,E,F,G。 SEL0-SLE2:接数码管模块的SEL0-SEL2。 五、实验部分VHDL语言程序如下 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY tI IS PORT( cpd,cps IN STD LOGIC: Ir,lg,ly:OUT STD_LOGIC_VECTOR (2 downto 1); d:OUT STD LOGIC VECTOR(6 downto 0); sel:OUT STD LOGIC VECTOR(2 downto 0)); END tl; ARCHITECTURE a OF t1 IS COMPONENT tbisa PORT( cp:IN STD LOGIC;
实验十一 交通灯实验 一、实验目的 熟悉 VHDL 语言编程,了解实际设计中的优化方案。 二、硬件要求 1、主芯片 EP1K10TC100—3; 2、实验箱上交通灯模块。 三、实验内容与实验原理 本实验要求设计一个模拟的十字路口的交通红绿灯,间隔的时间是 15 秒。当时间只有 5 秒时,绿灯开始闪烁;当时间只有 2 秒时黄灯开始闪烁。当只有 0 秒时红绿灯交换方向显 示,时间从 15 秒开始倒计时。 要完成本实验,首先必须了解交通路灯的燃灭规律。本实验需要用到实验箱上交通灯模 块中的发光二极管,即红、黄、绿各三个。依人们的交通常规,“红灯停,绿灯行,黄灯提 醒”。其交通灯的燃灭规律为:初始态是两个路口的红灯全亮,之后,东西路口的绿灯亮, 南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。闪 烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时 间后,南北路口的绿灯灭,黄灯开始闪烁。闪烁若干次后,再切换到东西路口方向,重复上 述过程。 在实验中使用数码管显示时间。时间控制由 TBJSA 和 DK 两个模块联合控制。其中 TBJSA 为计数器,将脉冲信号从 0 到 15 循环计数。DK 控制在不同时间段的发光二极管的输出提示。 四、连线指导 CPD:接 1Hz 左右的时钟信号。 CPS:接 10KHz 左右的时钟信号。 LR1、LR2 接交通灯模块的 R 的左右两个管脚。 LG1、LG2 接交通灯模块的 G 的左右两个管脚。 LY1、LY2 接交通灯模块的 Y 的左右两个管脚。 D0-D6:接数码管模块的 A,B,C,D,E,F,G。 SEL0-SLE2:接数码管模块的 SEL0-SEL2。 五、实验部分 VHDL 语言程序如下 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY t1 IS PORT( cpd,cps : IN STD_LOGIC; lr,lg,ly : OUT STD_LOGIC_VECTOR(2 downto 1); d : OUT STD_LOGIC_VECTOR(6 downto 0); sel : OUT STD_LOGIC_VECTOR(2 downto 0)); END t1; ARCHITECTURE a OF t1 IS COMPONENT tbjsa PORT( cp : IN STD_LOGIC;
q:OUT STD_LOGIC_VECTOR(4 downto 0)); END COMPONENT: COMPONENT tbjsb PORT( cp:IN STD LOGIC; q:OUT STD LOGIC_VECTOR(2 downto 0)): END COMPONENT: COMPONENT dk PORT( cp IN STD_LOGIC; si:IN STD LOGIC VECTOR(4 downto 1): Ir,lg.ly:OUT STD_LOGIC_VECTOR(4 downto 1)): END COMPONENT: COMPONENT sx PORT( sj:IN STD LOGIC VECTOR(3 downto 0); kz IN STD_LOGIC; d:OUT STD LOGIC VECTOR(6 downto 0)): END COMPONENT: SIGNAL nsj STD_LOGIC_VECTOR(4 downto 0); SIGNAL nwk:STD LOGIC VECTOR(2 downto 0); BEGIN 1 a:tbjsa PORT MAP(cpd,nsj); 1_b:tbjsb PORT MAP(cps,nwk); 1_c:dk PORT MAP(cpd,nsj(4 downto 1),Ir,Ig,ly); 1_d:sx PORT MAP(nsj(3 downto 0),nwk(0),d); sel <nwk; END a; LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY sx IS PORT( sj IN STD_LOGIC_VECTOR(3 downto 0); kz IN STD LOGIC: d:OUT STD_LOGIC_VECTOR(6 downto 0)); END sx; ARCHITECTURE a OF sx IS SIGNAL nsjh,nsjl STD_LOGIC_VECTOR(6 downto 0); BEGIN with sj select nsjh<="0000110"when"1111
q : OUT STD_LOGIC_VECTOR(4 downto 0)); END COMPONENT; COMPONENT tbjsb PORT( cp : IN STD_LOGIC; q : OUT STD_LOGIC_VECTOR(2 downto 0)); END COMPONENT; COMPONENT dk PORT( cp : IN STD_LOGIC; sj : IN STD_LOGIC_VECTOR(4 downto 1); lr,lg,ly : OUT STD_LOGIC_VECTOR(4 downto 1)); END COMPONENT; COMPONENT sx PORT( sj : IN STD_LOGIC_VECTOR(3 downto 0); kz : IN STD_LOGIC; d : OUT STD_LOGIC_VECTOR(6 downto 0)); END COMPONENT; SIGNAL nsj : STD_LOGIC_VECTOR(4 downto 0); SIGNAL nwk : STD_LOGIC_VECTOR(2 downto 0); BEGIN l_a: tbjsa PORT MAP (cpd,nsj); l_b: tbjsb PORT MAP (cps,nwk); l_c: dk PORT MAP (cpd,nsj(4 downto 1),lr,lg,ly); l_d: sx PORT MAP (nsj(3 downto 0),nwk(0),d); sel <= nwk; END a; LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY sx IS PORT( sj : IN STD_LOGIC_VECTOR(3 downto 0); kz : IN STD_LOGIC; d : OUT STD_LOGIC_VECTOR(6 downto 0)); END sx; ARCHITECTURE a OF sx IS SIGNAL nsjh,nsjl : STD_LOGIC_VECTOR(6 downto 0); BEGIN with sj select nsjh <= "0000110" when "1111", ……
"0000000"when others; with sj select nsjl="01111l1"when"0000", "1101101"when"1111" "0000000"when others; with kz select d<=nsjl when'1', nsjh when'0', "0000000"when others; END a; LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY dk IS PORT( cp IN STD_LOGIC: sj:IN STD LOGIC VECTOR(4 downto 1): Ir,lg,ly:OUT STD LOGIC VECTOR(4 downto 1)); END dk: ARCHITECTURE a OF dk IS SIGNAL ra,rb,ga,gb,ya,yb:STD LOGIC; BEGIN ra<=si(4): rb<=not sj(4)方 ga<=(not sj(4))and(sj(3)or(sj(2)and sj(1))or((sj(2)xor sj(1))and cp)); gb <si(4)and(si(3)or(si(2)and sj(1))or((si(2)xor si(1))and cp)); ya<=(not sj(4))and(not(sj(3)or sj(2)or sj(1))); yb <sj(4)and(not(sj(3)or sj(2)or sj(1))); Ir(1)<=ra; lr(2)<=rb: lg(1)<=ga; 1g(2)<=gb, ly(1)<=ya; y(2)<=yb: END a; 六、实验报告 1、仔细分析该实验程序,可以试着将其分成几个基本模块,以备将来设计时随时调用: 2、仔细分析该实验程序,看是否将其优化: 3、可以仔细观察街道上的交通实况,根据实际情况或假想情况调整设计思路
"0000000" when others; with sj select nsjl <= "0111111" when "0000", …… "1101101" when "1111", "0000000" when others; with kz select d <= nsjl when '1', nsjh when '0', "0000000" when others; END a; LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY dk IS PORT( cp : IN STD_LOGIC; sj : IN STD_LOGIC_VECTOR(4 downto 1); lr,lg,ly : OUT STD_LOGIC_VECTOR(4 downto 1)); END dk; ARCHITECTURE a OF dk IS SIGNAL ra,rb,ga,gb,ya,yb : STD_LOGIC; BEGIN ra <= sj(4); rb <= not sj(4); ga <= (not sj(4))and(sj(3)or(sj(2)and sj(1))or((sj(2)xor sj(1))and cp)); gb <= sj(4)and(sj(3)or(sj(2)and sj(1))or((sj(2)xor sj(1))and cp)); ya <= (not sj(4))and(not(sj(3)or sj(2)or sj(1))); yb <= sj(4)and(not(sj(3)or sj(2)or sj(1))); lr(1) <= ra; lr(2) <= rb; lg(1) <= ga; lg(2) <= gb; ly(1) <= ya; ly(2) <= yb; END a; 六、实验报告 1、 仔细分析该实验程序,可以试着将其分成几个基本模块,以备将来设计时随时调用; 2、 仔细分析该实验程序,看是否将其优化; 3、 可以仔细观察街道上的交通实况,根据实际情况或假想情况调整设计思路