ETSEIAT-UPC EXAMEN FINAL CIRCUITOS ELECTRÓNICOS

Anuncio
ETSEIAT-UPC
EXAMEN FINAL CIRCUITOS ELECTRÓNICOS/ ENERO 2008
Nombre y Apellidos:
Fecha:
I.- A, B y C son tres números codificados en BCD. Se desea mostrar en un display 7-segmentos el
número mayor entre los tres. Para el diseño del sistema digital se propone el siguiente esquema.
M0
M2
M1
M1
M0
a) Describir en lenguaje VHDL el bloque comparador binario de dos números de 4 bits (M0).
(1.5 puntos)
b) Describir en lenguaje VHDL el bloque multiplexor 2x4 (M1). (1.5 puntos)
c) Describir en lenguaje VHDL el bloque convertidor BCD-7segmentos (M2). (1.5 puntos)
d) Describir la unión de todo el sistema en lenguaje VHDL. (2.5 puntos)
II.- Se desea diseñar un circuito secuencial para la simulación de un sistema de azar. Dicho sistema
consiste en el lanzamiento de una moneda que conmuta alternativamente entre cara y cruz a una
velocidad suficientemente elevada para considerar que el resultado obtenido es aleatorio. Para la
implementación del sistema se disponen de tres pulsadores correspondientes a las entradas S, A y B,
La entrada S iniciará el lanzamiento de la moneda siempre que las entradas A y B no estén activadas,
mediante las entradas A y B se efectuará la apuesta: A cara y B cruz. Al activar una de las entradas A
y B después de iniciar el lanzamiento de la moneda, esta se detiene, y si su posición coincide con la
entrada activada, señala "premio" (O=’1’), en caso contrario, señala "fallo" (O=’0’), en caso de que se
activen ambas entradas A y B a la vez, se inhibe la apuesta y el resultado es como si no se hubiera
efectuado aún ninguna apuesta.
S
A
B
Sistema
Secuencial
O
clk
reset
a) Diagrama de estados que describe el funcionamiento del sistema secuencial a diseñar. (1.5 puntos)
b) Descripción del sistema utilizando lenguaje VHDL. (1.5 puntos)
ETSEIAT-UPC
EXAMEN FINAL CIRCUITOS ELECTRÓNICOS/ ENERO 2008
Nombre y Apellidos:
Fecha:
I.- A, B y C son tres números codificados en BCD. Se desea mostrar en un display 7-segmentos el
número mayor entre los tres. Para el diseño del sistema digital se propone el siguiente esquema.
M0
M2
M1
M1
M0
a) Describir en lenguaje VHDL el bloque comparador binario de dos números de 4 bits (M0).
(1.5 puntos)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Comparador is
port(A,B : in std_logic_vector (3 downto 0);
AmayorB : out std_logic);
end Comparador;
architecture Behavioral of Comparador is
begin
AmayorB <='1' when A>B else '0';
end Behavioral;
b) Describir en lenguaje VHDL el bloque multiplexor 2x4 (M1). (1.5 puntos)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Mux2x4 is
port(A,B : in std_logic_vector (3 downto 0);
S : in std_logic;
Y: out std_logic_vector (3 downto 0));
end Mux2x4;
architecture Behavioral of Mux2x4 is
begin
Y<=A when S ='1' else B;
end Behavioral;
c) Describir en lenguaje VHDL el bloque convertidor BCD-7segmentos (M2). (1.5 puntos)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Convertidor_BCD_7seg is
port( N : in std_logic_vector (3 downto 0);
display: out STD_LOGIC_VECTOR (6 downto 0));
end Convertidor_BCD_7seg;
architecture Behavioral of Convertidor_BCD_7seg is
begin
with N select
display<="1111110" when "0000",
"0110000" when "0001",
"1101101" when "0010",
"1111001" when "0011",
"0110011" when "0100",
"1011011" when "0101",
"1011111" when "0110",
"1110000" when "0111",
"1111111" when "1000",
"1111011" when "1001",
"-------" when others;
end Behavioral;
d) Describir la unión de todo el sistema en lenguaje VHDL. (2.5 puntos)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity ejercicio1 is
Port ( A : in STD_LOGIC_VECTOR (3 downto 0);
B : in STD_LOGIC_VECTOR (3 downto 0);
C : in STD_LOGIC_VECTOR (3 downto 0);
display : out STD_LOGIC_VECTOR (6 downto 0));
end ejercicio1;
architecture Behavioral of ejercicio1 is
Component Comparador
port(A,B : in std_logic_vector (3 downto 0);
AmayorB : out std_logic);
End Component;
Component Mux2x4
port(A,B : in std_logic_vector (3 downto 0);
S : in std_logic;
Y: out std_logic_vector (3 downto 0));
End Component;
Component Convertidor_BCD_7seg
port( N : in std_logic_vector (3 downto 0);
display: out STD_LOGIC_VECTOR (6 downto 0));
End Component;
signal C1 : std_logic;
signal C2 : std_logic;
signal R1 : std_logic_vector (3 downto 0);
signal R2 : std_logic_vector (3 downto 0);
begin
U1: Comparador port map (A,B,C1);
U2: Mux2x4 port map (A,B,C1,R1);
U3: Comparador port map (R1,C,C2);
U4: Mux2x4 port map (R1,C,C2,R2);
U5: Convertidor_BCD_7seg port map (R2,display);
end Behavioral;
II.- Se desea diseñar un circuito secuencial para la simulación de un sistema de azar. Dicho sistema
consiste en el lanzamiento de una moneda que conmuta alternativamente entre cara y cruz a una
velocidad suficientemente elevada para considerar que el resultado obtenido es aleatorio. Para la
implementación del sistema se disponen de tres pulsadores correspondientes a las entradas S, A y B,
La entrada S iniciará el lanzamiento de la moneda siempre que las entradas A y B no estén activadas,
mediante las entradas A y B se efectuará la apuesta: A cara y B cruz. Al activar una de las entradas A
o B después de iniciar el lanzamiento de la moneda, esta se detiene, y si su posición coincide con la
entrada activada, señala "premio" (O=’1’), en caso contrario, señala "fallo" (O=’0’), en caso de que se
activen ambas entradas A y B a la vez, se inhibe la apuesta y el resultado es como si no se hubiera
efectuado aún ninguna apuesta.
S
A
B
Sistema
Secuencial
O
clk
reset
a) Descripción del sistema utilizando lenguaje VHDL. (1.5 puntos)
Diagrama de estados:
SAB
X00
X11
Cara
0
100
0XX
101
110
X00
X11
X10
X01
100
Fallo
0
Reset
Cruz
0
0XX
101
110
X10
Premio
1
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity ejercicio2 is
Port ( S : in STD_LOGIC;
A : in STD_LOGIC;
B : in STD_LOGIC;
CLK : in STD_LOGIC;
Reset : in STD_LOGIC;
O : out STD_LOGIC);
end ejercicio2;
architecture Behavioral of ejercicio2 is
--Definimos un tipo con los estados posibles
type estados_posibles IS (fallo,premio,cara,cruz);
--Declaramos una señal que puede tomar cualquiera de los estados posibles
signal estado: estados_posibles;
begin
--Definimos un proceso sensible al reloj y al reset para modificar el estado.
process(CLK, Reset)
begin
--Reset asíncrono de nivel activo alto.
if (Reset='1') then estado <= fallo;
elsif (CLK 'event and CLK='1') then
case estado is
when fallo => --Estado fallo.
if (S='0' and A='0' and B='0') then estado <= cara;
end if;
when cara => --Estado cara.
if (A='0' and B='1') then estado <= fallo;
elsif (A='1' and B='0') then estado <= premio;
else estado <= cruz;
end if;
when cruz => --Estado cruz.
if (A='1' and B='0') then estado <= fallo;
elsif (A='0' and B='1') then estado <= premio;
else estado <= cara;
end if;
when premio => --Estado premio.
if (S='0' and A='0' and B='0') then estado <= cara;
end if;
end case;
end if;
end process; --Ahora en función del estado, generamos la salida
O<='1' when (estado = premio) else '0';
end Behavioral;
Descargar