Beruflich Dokumente
Kultur Dokumente
Código: 12190016
INFORME FINA # 3
SEMÁFORO INTELIGENTE
I. OBJETIVO
Utilizar el estilo algorítmico y máquinas de estados para describir el
comportamiento de un circuito.
II. MATERIALES Y EQUIPOS
Placa modulo con FPGA Altera Cyclone I
PC con la herramienta de síntesis MAX Plus II y el entorno de desarrollo
Quartus II de Altera
Contador≠1
Contador=1
Contador=20 𝑆1
0 𝑅𝐴̅𝑉̅
𝑆0 Contador=25
𝑅𝐴̅𝑉̅ Contador=contador-1
𝑆2
𝑅̅ 𝐴̅𝑉
Contador≠3
0
Contador=contador-1
𝑆4
𝑅̅ 𝐴𝑉̅ 𝑆3
𝑅 𝐴̅𝑉
̅
Contador=3 Contador=contador-1
Contador≠1
0
1
DISEÑO DIGITAL 17-5-2016
Tenemos 5 estados en total a los que denominaremos estado S0, S1, S2 S3 y S4.
En el primer estado el led rojo esta encendido y el display esta en el número 20,
luego de un flanco de subida se pasa al segundo estado, donde el led sigue
encendido, pero ha empezado una cuenta descendente hasta el cero. Después de
llegar a cero se pasa al siguiente estado, donde se enciende la luz verde,
posteriormente el contador decreciente se muestra en el display, flotando unos
segundos para llegar a cero se a pasa el siguiente estado donde la luz ámbar se
enciende por unos instante para luego pasar al rojo y volver a repetir todo.
Una vez hecho el análisis se propone el siguiente diagrama de bloques del circuito
a implementar:
2
DISEÑO DIGITAL 17-5-2016
3
DISEÑO DIGITAL 17-5-2016
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity semaforo_inteligente is
port( clk: in std_logic;
R,V,A: out std_logic;
enable: out std_logic_vector(3 downto 0);
display: out std_logic_vector(7 downto 0));
end semaforo_inteligente;
architecture solucion of semaforo_inteligente is
type estados is (S0,S1,S2,S3,S4);
signal ea: estados;
signal cuenta: integer range 0 to 25;
signal x: std_logic;
signal AA: std_logic;
signal U,D: std_logic_vector(3 downto 0);
component divisor
port(clk:in std_logic;
z:out std_logic);
end component;
component visor
port(clk_v: in std_logic;
B,A: in std_logic_vector(3 downto 0);
enable: out std_logic_vector(3 downto 0);
display: out std_logic_vector(7 downto 0));
end component;
component decodificador
port(cuenta: in integer;
D,U: out std_logic_vector(3 downto 0));
end component;
begin
u0: divisor port map(clk,x);
u1: visor port map(clk,D,U,enable,display);
u2: decodificador port map (cuenta,D,U);
process(x)
begin
if x='1' and x'event then
case ea is
when S0=> R<='1'; V<='0'; AA<='0'; ea<=S1; cuenta<=20;
4
DISEÑO DIGITAL 17-5-2016
Componente divisor::::::
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity divisor is
port(clk: in std_logic;
z:out std_logic);
end divisor;
Componente visor::::::
5
DISEÑO DIGITAL 17-5-2016
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity visor is
port(clk_v: in std_logic;
B,A: in std_logic_vector(3 downto 0);
enable: out std_logic_vector(3 downto 0);
display: out std_logic_vector(7 downto 0));
end visor;
process(clk_mux)
begin
if clk_mux='1' and clk_mux'event then
sel<=sel+1;
if sel=3 then
sel<="00";
end if;
end if;
end process;
-- Decodificador de enable
6
DISEÑO DIGITAL 17-5-2016
--Decodificador a 7 segmentos
Componente decodificador::::::
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity decodificador is
port(cuenta: in integer;
D,U: out std_logic_vector(3 downto 0));
end decodificador;
7
DISEÑO DIGITAL 17-5-2016
end case;
end process;
end solucion;
8
DISEÑO DIGITAL 17-5-2016