Escolar Documentos
Profissional Documentos
Cultura Documentos
REPORTE 2
NOMBRE:
N. C. M06120218
PROFESOR:
Programación estructural
CONTADOR
ASCENDENTE
ESTADO ACTUAL ESTADO FUTURO
Q(3) Q(2) Q(1) Q(0) Q(3) Q(2) Q(1) Q(0)
0 0 0 0 0 0 0 1
0 0 0 1 0 0 1 0
0 0 1 0 0 0 1 1
0 0 1 1 0 1 0 0
0 1 0 0 0 1 0 1
0 1 0 1 0 1 1 0
0 1 1 0 0 1 1 1
0 1 1 1 1 0 0 0
1 0 0 0 1 0 0 1
1 0 0 1 1 0 1 0
1 0 1 0 1 0 1 1
1 0 1 1 1 1 0 0
1 1 0 0 1 1 0 1
1 1 0 1 1 1 1 0
1 1 1 0 1 1 1 1
1 1 1 1 0 0 0 0
A partir de la Tabla de verdad de la Tabla 1 se obtuvieron los mapas de karnaugh del estado
siguiente en base a la tabla de verdad del Flip Flop D descrito en la tabla 2.
Q D Q+1
0 0 0
0 1 1
1 0 0
1 1 1
Q1 Q0 00 01 11 10
Q3 Q2
00 1 0 0 1
01 1 0 0 1
11 1 0 0 1
10 1 0 0 1
Q1 Q0 00 01 11 10
Q3 Q2
00 0 1 0 1
01 0 1 0 1
11 0 1 0 1
10 0 1 0 1
Q1 Q0 00 01 11 10
Q3 Q2
00 0 0 1 0
01 1 1 0 1
11 1 1 0 1
10 0 0 1 0
Tabla 6. Mapa de Karnaugh del contador ascendente para D3.
Q1 Q0 00 01 11 10
Q3 Q2
00 0 0 0 0
01 0 0 1 0
11 1 1 0 1
10 1 1 1 1
En la Tabla 7 se muestran los estados actuales y estados futuros del contador en código gray de 4
bits.
CONTADOR
EN CODIGO
GRAY
ESTADO ACTUAL ESTADO FUTURO
Q(3) Q(2) Q(1) Q(0) Q(3) Q(2) Q(1) Q(0)
0 0 0 0 0 0 0 1
0 0 0 1 0 0 1 1
0 0 1 1 0 0 1 0
0 0 1 0 0 1 1 0
0 1 1 0 0 1 1 1
0 1 1 1 0 1 0 1
0 1 0 1 0 1 0 0
0 1 0 0 1 1 0 0
1 1 0 0 1 1 0 1
1 1 0 1 1 1 1 1
1 1 1 1 1 1 1 0
1 1 1 0 1 0 1 0
1 0 1 0 1 0 1 1
1 0 1 1 1 0 0 1
1 0 0 1 1 0 0 0
1 0 0 0 0 0 0 0
A partir de la Tabla de verdad de la Tabla 7 se obtuvieron los mapas de karnaugh del estado
siguiente en base a la tabla de verdad del Flip Flop D descrito en la tabla 2.
Tabla 8. Mapa de Karnaugh del contador en código gray para D0.
Q1 Q0 00 01 11 10
Q3 Q2
00 1 1 0 0
01 0 0 1 1
11 1 1 0 0
10 0 0 1 1
Q1 Q0 00 01 11 10
Q3 Q2
00 0 1 1 1
01 0 0 0 1
11 0 1 1 1
10 0 0 0 1
Tabla 10. Mapa de Karnaugh del contador en código gray para D2.
Q1 Q0 00 01 11 10
Q3 Q2
00 0 0 0 1
01 1 1 1 1
11 1 1 1 0
10 0 0 0 0
Tabla 11. Mapa de Karnaugh del contador en código gray para D3.
Q1 Q0 00 01 11 10
Q3 Q2
00 0 0 0 0
01 1 0 0 0
11 1 1 1 1
10 0 1 1 1
Para la parte de selección de contador o código gray lo que se realizó fue utilizar un bit de
selección y a la parte que se utilizó para seleccionar con 0 (cero) se le agregó una compuerta AND
NEGADA a todas las ecucaciones con el bit de selección y para la parte que se seleccionó en 1
(uno) se le agregó una compuerta AND. Una vez obtenidos los resultados para las diferentes
salidas se obtuvieron las ecuaciones descritas en el programa de VHDL.
El código se muestra a continuación:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity FFDcontador is
Port ( clk : in STD_LOGIC;
SEL: in STD_LOGIC;
Q : INout STD_LOGIC_VECTOR (3 downto 0):= (others => '0'));
end FFDcontador;
begin
D(0) <= (((not(Q(1))and not(Q(2)) and not(Q(3))) or (Q(1) and Q(2)and not (Q(3))) or (not(Q(1))and
Q(2) and Q(3)) or (Q(1)and not(Q(2)) and Q(3)))and not SEL)or (((not(Q(0))and not(Q(1))) or
(not(Q(0)) and Q(1)))and SEL);
D(1) <= (((Q(0)and not(Q(2)) and not(Q(3)))or (Q(0)and Q(2) and Q(3)) or (not(Q(0))and Q(1)))and
not SEL)or(((Q(0)and not(Q(1)))or (not(Q(0))and Q(1)))and SEL);
D(2) <= (((not(Q(0))and Q(1) and not(Q(3))) or (not(Q(1))and Q(2))or (Q(0) and Q(2)))and not
SEL)or (((not(Q(1))and Q(2)) or (not(Q(0))and Q(2))or (Q(0) and Q(1)and not (Q(2))))and SEL);
D(3) <= (((not(Q(0))and not (Q(1)) and Q(2))or (Q(0)and Q(3)) or (Q(1) and Q(3)))and not
SEL)or(((not(Q(1))and Q(3)) or (not (Q(0)) and Q(1) and Q(3))or (not (Q(2)) and Q(3))or (Q(0)and
Q(1) and Q(2) and not (Q(3))))and SEL);
end process;
end Behavioral;
Simulación estructural
Una vez sintetizado el programa se realizó una simulación para comprobar el resultado, descrito a
continuación:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
ENTITY TB_FFDcontador IS
END TB_FFDcontador;
COMPONENT FFDcontador
PORT(
SEL : IN std_logic;
clk : IN std_logic;
Q : INOUT std_logic_vector(3 downto 0)
);
END COMPONENT;
--Inputs
signal D : std_logic_vector(3 downto 0) := (others => '0');
signal SEL: std_logic := '0';
signal clk : std_logic := '0';
--Outputs
signal Q : std_logic_vector(3 downto 0):= (others => '0');
BEGIN
-- Stimulus process
stim_proc: process
begin
END;
En las figuras 1-5 se muestra la simulación del contador ascendente y en código gray. Notandose
que cuando el Bit de selección “sel” está en 0 (cero) el contador es en gray y cuando el bit de
selección está en 1 (uno) el contador es ascendente.
Figura 2. Simulación del contador ascendente y gray en programación estructural (50 a 120 nS).
Figura 3. Simulación del contador ascendente y gray en programación estructural (120 a 180 nS).
Figura 4. Simulación del contador ascendente y gray en programación estructural (180 a 240 nS).
Figura 5. Simulación del contador ascendente y gray en programación estructural (240 a 320 nS).
Programación secuencial
Para la parte del contador ascendente y gray en modo secuencial se realizó con un process para
realizar el contador y la selección de contador-gray, con un decodificador para la realización del
código gray. Las instrucciones se muestran en el siguiente programa de VHDL.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity conta4bits is
Port ( clk : in STD_LOGIC;
seleccion : in STD_LOGIC;
end if;
end if;
end process;
end Behavioral;
Simulación en secuencial
Una vez sintetizado el programa se realizó una simulación para comprobar el resultado, descrito a
continuación:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
ENTITY TB_conta4bits IS
END TB_conta4bits;
COMPONENT conta4bits
PORT(
clk : IN std_logic;
seleccion : IN std_logic;
salida : OUT std_logic_vector(3 downto 0)
);
END COMPONENT;
--Inputs
signal clk : std_logic := '0';
signal seleccion : std_logic := '0';
BEGIN
-- Stimulus process
stim_proc: process
begin
seleccion<='0' after 170ns;
seleccion<='1' after 170ns;
wait;
end process;
END;
En las figuras 6-9 se muestra la simulación del contador ascendente y en código gray. Notándose
que cuando el Bit de selección “sel” está en 0 (cero) el contador es en gray y cuando el bit de
selección está en 1 (uno) el contador es ascendente.
Figura 6. Simulación del contador ascendente y gray en programación secuencial (0 a 100 nS).
Figura 7. Simulación del contador ascendente y gray en programación secuencial (100 a 200 nS).
Figura 8. Simulación del contador ascendente y gray en programación secuencial (200 a 300 nS).
Figura 9. Simulación del contador ascendente y gray en programación secuencial (300 a 400 nS).
CONCLUSIONES
Para el desarrollo de esta práctica fue necesario el uso de las declaraciones de los puertos de
entrada y de salida necesarios para hacer el contador, tanto en programación estructural como en
secuencial. Se contaba con un bit de selección para la parte de contador y la parte de código gray.
Pudiéndose notar la para esta práctica fue más fácil desarrollarla en forma secuencial, ya que el
estar escribiendo las ecuaciones en el código es algo laborioso y hay que tener demasiado cuidado
en la escritura ya que con algún elemento que ponga uno mal, nos va dar un resultado erróneo.