Laboratorio No2 - Diseño Digital -UNMSM (2012-II)

13
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS FACULTAD DE INGENIERÍA ELECTRÓNICA ESCUELA DE INGENIERÍA ELECTRÓNICA DISEÑO DIGITAL LABORATORIO No2 ESTILO ALGORÍTMICO PARA EL DISEÑO E IMPLEMENTACIÓN DE CIRCUITOS COMBINACIONALES Y SECUENCIALES

Transcript of Laboratorio No2 - Diseño Digital -UNMSM (2012-II)

Page 1: Laboratorio No2 - Diseño Digital -UNMSM (2012-II)

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOSFACULTAD DE INGENIERÍA ELECTRÓNICAESCUELA DE INGENIERÍA ELECTRÓNICA

DISEÑO DIGITAL

LABORATORIO No2

ESTILO ALGORÍTMICO PARA EL DISEÑO E IMPLEMENTACIÓN DE CIRCUITOS

COMBINACIONALES Y SECUENCIALES

Ing. Alfredo Granados Ly.

Page 2: Laboratorio No2 - Diseño Digital -UNMSM (2012-II)

UNMSM – FIEE Diseño Digital

ESTILO ALGORITMICO

El estilo algorítmico describe el diseño del circuito o sistema digital de acuerdo a su comportamiento. Se basa en una sentencia concurrente llamada Process. La sentencia process permite describir secuencialmente el modo en que se calculan un conjunto de señales.

Tiene las siguientes características: El código de un proceso se ejecuta en tiempo de simulación 0. Es el método de descripción de conductas más versátil. Es el método de descripción más cercano al modelo de simulación y más

lejano del modelo de hardware. Conceptualmente es muy importante ya que el proceso de análisis

convierte el resto de sentencias concurrentes a un conjunto de procesos equivalentes.

El número de procesos es fijo, sólo cambia su estado: activo o suspendido.

Inicialmente todos los procesos están activos, conforme su código se ejecuta se suspende, conforme la simulación avanza alterna su estado entre activo o suspendido.

Sintácticamente existen dos tipos: Procesos con lista de sensibilidad (cuyo cuerpo no puede contener

sentencias wait)- Cada vez que hay un evento EN CUALQUIERA DE LAS SEÑALES de la

lista, el proceso se activa. - Se ejecuta (en tiempo de simulación 0) todo el código contenido en el

cuerpo del proceso.- El proceso se suspende.

Sintaxis:[etiqueta:] process (lista de sensibilidad)

[declaraciones] begin

[sentencias secuenciales;] end process [etiqueta];

Procesos sin lista de sensibilidad (cuyo cuerpo puede contener sentencias wait).

- Se ejecuta (en tiempo de simulación 0) hasta que se encuentre una sentencia wait

- El proceso se suspende.- El proceso se vuelve a activar cuando la condición de espera se

satisfaga.- Cuando la ejecución alcanza el final del cuerpo del proceso, se

continúa ejecutando el código por el principio.- Un proceso sin lista de sensibilidad que no contenga sentencias wait,

bloquea el simulador.

Cátedra: Ing. Alfredo Granados Ly Laboratorio No22

Page 3: Laboratorio No2 - Diseño Digital -UNMSM (2012-II)

UNMSM – FIEE Diseño Digital

Sintaxis:[etiqueta:] process

[declaraciones] begin

[sentencias secuenciales;]wait on lista de sensibilidad;

end process [etiqueta];

Los procesos con lista de sensibilidad se usan comúnmente para modelar HW a nivel de RT y lógico:

- Con listas de sensibilidad completas para modelar hardware combinacional.

- Con listas de sensibilidad parciales para modelar hardware secuencial.

Los procesos sin listas de sensibilidad se usan comúnmente para crear procesos de estímulo y de análisis de respuesta de otras sentencias que si modelan HW.

- Si se restringe el tipo de sentencias wait usadas, pueden utilizarse para modelar hardware a nivel algorítmico.

Para todo proceso con lista de sensibilidad existe un proceso sin ella equivalente

Lo contrario no siempre es cierto.

IMPLEMENTACION DE CIRCUITOS SECUENCIALES

Los elementos de memoria se implementan con la sentencia if, aprovechando el efecto memoria que tiene debido al no uso de la condición else. Analicemos el siguiente código VHDL:

Process(A,B) begin

If A=’1’ thenQ <= B;

elseQ <= ‘0’;

end if;end process;

Es la implementación de una compuerta AND, se aprecia que si no se cumple la condición de todas maneras debe haber una asignación a la señal de salida.

Cátedra: Ing. Alfredo Granados Ly Laboratorio No23

Page 4: Laboratorio No2 - Diseño Digital -UNMSM (2012-II)

UNMSM – FIEE Diseño Digital

Ahora, volvamos a analizar el siguiente código VHDL:

Process(A,B)begin

if A=’1’ thenQ <= B;

End if;End process;

Es la implementación correspondiente a un latch donde A realiza la función del habilitador y cuando se encuentre en nivel alto cualquier cambio de B hará que se refleje directamente a la salida. Ahora, que pasa si A=’0’ y B cambia de valor, el Process se dispara pero como la condición no se cumple no afecta a Q, memorizando de esta manera el valor que tenía Q.

Es importante notar que las dos entradas del circuito están presentes en la lista sensible, esto hará que cualquier cambio en A ó B hará que todo el proceso se dispare.

Ahora, analicemos el siguiente código VHDL:

Process(A)begin

if A=’1’ thenQ <= B;

End if;End process;

Es la implementación de un Flip – Flop que dispara por flanco de subida, donde la entrada A hace la función de la señal de reloj y cada vez que A cambie de valor sólo en el flanco de subida hará que Q tome el valor de B, memorizando el valor de Q bajo cualquier otra condición. Note que las sentencias del proceso es igual a la implementación anterior (latch), la diferencia está en las señales que aparecen en la lista sensible, que en el último caso es sensible sólo a la señal A.

- Implementación de un flip-flop tipo D

Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;

Entity ff_d isPort (D: in std_logic;

Clk: in std_logic;Q: out std_logic);

End ff_d;

Cátedra: Ing. Alfredo Granados Ly Laboratorio No24

Page 5: Laboratorio No2 - Diseño Digital -UNMSM (2012-II)

UNMSM – FIEE Diseño Digital

Architecture algoritmo of ff_d isBegin

Process(clk)Begin

If clk=’1’ thenQ <= D;

End if;End process;

End algoritmo;

- Implementación de un contador binario de 4 bits.

Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all; Use ieee.std_logic_unsigned.all;

Entity contador isPort ( clk: in std_logic;

q: buffer std_logic_vector (3 downto 0));End contador;Architecture of algoritmo of contador isBegin

Process(clk)begin

if clk=’1’ and clk’event then

q <= q + 1;end if;

end process;end algoritmo;

- Implementación de un contador binario de 4 bits con una señal clear asíncrona y una señal up síncrona.

Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all; Use ieee.std_logic_unsigned.all;Entity contador is

Port ( clk: in std_logic;q: buffer std_logic_vector (3 downto 0);clear: in atd_logic;up: in std_logic);

End contador;Architecture of algoritmo of contador isBegin

Process(clk,clear)

Cátedra: Ing. Alfredo Granados Ly Laboratorio No25

Page 6: Laboratorio No2 - Diseño Digital -UNMSM (2012-II)

UNMSM – FIEE Diseño Digital

BeginIf clear = ‘1’ then

q <= “0000”;elsif clk=’1’ and clk’event then

if up=’1’ thenq <= q + 1;

elseq <= q – 1;

end if;end if;

end process;end algoritmo;

Implemente, simule y explique el comportamiento de los siguientes circuitos en el Max-Plus II (con cuenta a presentar en el informe final).

1. Latch library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity flip_flop is Port ( d : in std_logic; clk : in std_logic; q : out std_logic);end flip_flop;

architecture Behavioral of flip_flop isbegin

process(clk)begin

if clk='1' thenq <= d;

end if;end process;

end Behavioral;

2. Flip-Flop library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity flip_flop is Port ( d : in std_logic;

Cátedra: Ing. Alfredo Granados Ly Laboratorio No26

Page 7: Laboratorio No2 - Diseño Digital -UNMSM (2012-II)

UNMSM – FIEE Diseño Digital

clk : in std_logic; q : out std_logic);end flip_flop;

architecture Behavioral of flip_flop isbegin

process(clk)begin

if clk='1' and clk'event thenq <= d;

end if;end process;

end Behavioral;

3. Flip-Flop con clear y preset asíncronas.

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity flip_flop_cp is Port ( clear : in std_logic; preset : in std_logic; clk : in std_logic; d : in std_logic; q : out std_logic);end flip_flop_cp;

architecture Behavioral of flip_flop_cp isbegin

process(clk,clear,preset)begin

if clear='1' thenq <='0';

elsif preset='1' thenq <='1';

elsif clk='1' and clk'event thenq <= d;

end if;end process;

end Behavioral;

Cátedra: Ing. Alfredo Granados Ly Laboratorio No27

Page 8: Laboratorio No2 - Diseño Digital -UNMSM (2012-II)

UNMSM – FIEE Diseño Digital

4. Registro de entrada/paralela-salida/paralela, carga y habilitador.

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity registro_pipo is Port ( data : in std_logic_vector(7 downto 0); load : in std_logic; clk : in std_logic; q : out std_logic_vector(7 downto 0));end registro_pipo;

architecture Behavioral of registro_pipo isbegin

process(clk,load)begin

if clk='1' and clk'event thenif load='1' then

q <= data;end if;

end if;end process;

end Behavioral;

5. Contador binario con señal

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity contador is Port ( clk : in std_logic; q : buffer std_logic_vector(3 downto 0));end contador;

Cátedra: Ing. Alfredo Granados Ly Laboratorio No28

Page 9: Laboratorio No2 - Diseño Digital -UNMSM (2012-II)

UNMSM – FIEE Diseño Digital

architecture Behavioral of contador isbegin

process(clk)begin

if clk='1' and clk'event thenq <= q + 1;

end if;end process;

end Behavioral;

Contador binario con variable

process(clk)variable contador: std_logic_vector(3 downto 0);

beginif clk='1' and clk'event then

contador := contador + 1;q <= contador;

end if;end process;

6. Contador binario con clear y carga de datos en paralelo.

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity contador_clear_load is Port ( data : in std_logic_vector(3 downto 0); load : in std_logic; clear : in std_logic; clk : in std_logic; q : out std_logic_vector(3 downto 0));end contador_clear_load;

architecture Behavioral of contador_clear_load is

beginprocess(data,load,clear,clk)

variable contador: std_logic_vector(3 downto 0);begin

if clear='1' thencontador := "0000";

Cátedra: Ing. Alfredo Granados Ly Laboratorio No29

Page 10: Laboratorio No2 - Diseño Digital -UNMSM (2012-II)

UNMSM – FIEE Diseño Digital

elsif load ='1' thencontador := data;

elsif clk='1' and clk'event thencontador := contador + 1;

end if;q <= contador;

end process;

end Behavioral;

7. Divisor de frecuencia de 50MHz a 1Hz

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity DIV_1HZ is Port ( clk : in std_logic; reloj : buffer std_logic);end DIV_1HZ;

architecture Behavioral of DIV_1HZ isbegin

process(clk)variable cuenta: std_logic_vector(24 downto 0);

beginif clk='1' and clk'event then

cuenta:= cuenta+1;if cuenta = 25000000 then

reloj <= not reloj;end if;

end if;end process;

end Behavioral;

Prolemas propuestos:

8. Implemente un contador con ENABLE y CLEAR que cuente de 0 a 5.

9. Implemente un contador con ENABLE y CLEAR que cuente de 4,7,0,1,5, 4,7,0,1,5,…….

10.Implemente un divisor de frecuencia programable:Selector Fo 00 Fi / 2 01 Fi / 4 10 Fi / 8 11 Fi / 32

Donde:Fi: frecuencia de entrada.Fo: frecuencia de salida.

11.Implemente un contador con control de cuenta UP/DOWN de módulo 8.

12.Implemente el siguiente circuito:

Cátedra: Ing. Alfredo Granados Ly Laboratorio No210

Page 11: Laboratorio No2 - Diseño Digital -UNMSM (2012-II)

UNMSM – FIEE Diseño Digital

Donde: f Donde la señal Y varia de frecuencia de manera periódica. Así tenemos que durante 100ms genera una señal de 100KHz y durante el otro 100ms genera otra frecuencia de 300KHz, repitiéndose de esta manera.

Se debe presentar el código y las simulaciones correspondientes a los problemas propuestos.

Cátedra: Ing. Alfredo Granados Ly Laboratorio No211