You are on page 1of 35

Cap.

4 VHDL: Diseo Lgico Secuencial

Qu es el Diseo Lgico Secuencial?

Estructura de un Sistema Lgico Secuencial Estructura de un Sistema Lgico Secuencial Clasificacin Clasificacin
Entradas Asncronos
Elementos de Memoria

Salidas Lgica Combinatoria Entradas Salidas

Sncronos Lgica Combinatoria


Elementos de Memoria Seal de Reloj

Seal de Reloj

Elementos de Memoria

Lgica Combinatoria

Seal de Reloj

Elementos de Memoria Seal de Reloj

Elementos de Memoria

Entradas

Mixtos

Salidas

Seal de Reloj

Elementos de Memoria

Seal de Reloj

Cap.4 VHDL: Diseo Lgico Secuencial

Elementos de Memoria: flip-flops

Elementos de Memoria: Flip-Flops


Q Q Q Q
clk K 0 0 1 1 0 0 1 1 Qt 0 1 0 1 0 1 0 1 Qt+1 0 1 0 0 1 1 1 0

S R clk S 0 0 0 0 1 1 1 1 R 0 0 1 1 0 0 1 1 Qt 0 1 0 1 0 1 0 1

J K clk

Q Q

Q Q

clk

Qt+1 0 1 0 0 1 1 X X

J 0 0 0 0 1 1 1 1

D 0 0 1 1

Qt 0 1 0 1

Qt+1 0 0 1 1

T 0 0 1 1

Qt 0 1 0 1

Qt+1 0 1 1 0

Cap.4 VHDL: Diseo Lgico Secuencial

Arquitectura de la GAL

Arquitectura GAL 22V10

Se tiene un trmino producto para el reset asncrono (AR) y otro para el preset sncrono (SP). La seal de reloj (CLK) esta conectada al pin 1 de la GAL. Todos los FFs funcionan en flanco de subida del CLK. Estas seales (AR,SP,CLK) son comunes a todos los FFs de las macroceldas.

Cap.4 VHDL: Diseo Lgico Secuencial

Arquitectura de la GAL

Arquitectura GAL 22V10

Se tiene un # variable de trminos producto por macrocelda

Cap.4 VHDL: Diseo Lgico Secuencial

Arquitectura de la GAL

Arquitectura GAL 22V10

Cada macrocelda tiene dos modos de funcionamiento primario: registrado y combinatorio.

Cap.4 VHDL: Diseo Lgico Secuencial

Arquitectura de la GAL

Arquitectura GAL 22V10

Cada macrocelda tiene dos modos de funcionamiento primario: registrado y combinatorio.

Cap.4 VHDL: Diseo Lgico Secuencial

Elementos de Memoria: flip-flops

En el Diseo Secuencial con VHDL, las construcciones: En el Diseo Secuencial con VHDL, las construcciones: if-then-else // if-then-elsif-then son las ms utilizadas. if-then-else if-then-elsif-then son las ms utilizadas. D Q Ejemplo N 1 Flip-Flop tipo D library ieee; use ieee.std_logic_1164.all; entity ffd is port (D, clk: in std_logic; Q: out std_logic); end ffd; architecture arq_ffd of ffd is begin process (clk) begin if (clkevent and clk=1) then Q <= D; end if; end process; end arq_ffd;

clk D 0 0 1 1 Qt 0 1 0 1 Qt+1 0 0 1 1

Instrucciones equivalentes:
if rising_edge(clk) verdadero con el flanco de subida if ( clkevent and clk= 1 and clklast_value= 0 )

if falling_edge(clk) verdadero con el flanco de bajada if ( clkevent and clk= 0 and clklast_value= 1 )

Cap.4 VHDL: Diseo Lgico Secuencial

Elementos de Memoria: flip-flops Qt+1 0 1 0 0 1 1 X X

S 0 0 0 0 1 1 1 1

R 0 0 1 1 0 0 1 1

Qt 0 1 0 1 0 1 0 1

R clk

Qn

Ejemplo N 2 Flip-Flop tipo RS library ieee; use ieee.std_logic_1164.all; entity ffsr is port (S, R, clk: in std_logic; Q, Qn: inout std_logic); end ffsr; architecture a_ffsr of ffsr is begin process (clk, S, R) begin if (clkevent and clk=1) then

if (S = 0 and R = 1) then Q <= 0; Qn <= 1; elsif (S = 1 and R = 0) then Q <= 1; Qn <= 0; elsif (S = 0 and R = 0) then Q <= Q; Qn <= Qn; else Q <= -; Qn <= -; end if; end if; end process; end a_ffsr;

Cap.4 VHDL: Diseo Lgico Secuencial

Registros

D[0:7]

Q[0:7]

Ejemplo N 3 Registro Paralelo de 8-Bits library ieee; use ieee.std_logic_1164.all; entity reg is port (D: in std_logic_vector (0 to 7); clk: in std_logic; Q: out std_logic_vector (0 to 7)); end reg; architecture arqreg of reg is begin process (clk) begin if (clkevent and clk=1) then Q <= D; end if; end process; end arqreg;

clk

Cap.4 VHDL: Diseo Lgico Secuencial

Registros Ejemplo N 4 Registro Paralelo de 4-Bits con Clear sncrono. library ieee; use ieee.std_logic_1164.all; entity reg4 is port (D: in std_logic_vector (3 downto 0); CLK, CLR: in std_logic; Q, Qn: out std_logic_vector (3 downto 0)); end reg4; architecture a_reg4 of reg4 is begin process (CLK, CLR) begin if (CLKevent and CLK=1) then if (CLR = 1) then Q <= D; Qn <= not D; else Q <= 0000; Qn <= 1111; end if; end if; end process; end a_reg4;

CLK CLR
D0 D1 D2 D3

Q0 Q0 Q1 Q1 Q2 Q2 Q3 Q3

CLR 0 1

D - D

Q 0 D

Qn 1 Dn

Cap.4 VHDL: Diseo Lgico Secuencial

Registros Ejemplo N 5 Registro con carga en paralelo/sin cambio, con CLR y FOR. --CLR Asncrono, library ieee; use ieee.std_logic_1164.all; entity reg4 is port (D: in std_logic_vector (3 downto 0); CLK, CLR: in std_logic; Q, Qn: out std_logic_vector (3 downto 0)); end reg4; architecture a_reg4 of reg4 is begin process (CLK, CLR) begin --CON FOR-end process; end a_reg4;

CLK CLR D0 D1 D2 D3

Q0 Q0 Q1 Q1 Q2 Q2 Q3 Q3

CLR 0 1

D - D

Q 0 D

Qn 1 Dn

Cap.4 VHDL: Diseo Lgico Secuencial

Registros Ejemplo N 6 Registro de propsito general (CASE).


LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;

CLK CLR

ES
OPER [1 : 0 ]

D0 D1 D2 D3 D4 D5 D6 D7

Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7

ENTITY REGISTRO IS PORT( CLK, CLR, ES : IN STD_LOGIC; D : IN STD_LOGIC_VECTOR(6 DOWNTO 0); OPER : IN STD_LOGIC_VECTOR(1 DOWNTO 0); Q : INOUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); END REGISTRO; ARCHITECTURE CIRCUITO OF REGISTRO IS BEGIN PREG : PROCESS( CLK, CLR ) BEGIN IF( CLR = 0' )THEN Q <= "0000000"; ELSIF( CLK'EVENT AND CLK = '1' )THEN CASE OPER IS WHEN "00" => Q <= Q; WHEN "01" => Q <= D; WHEN "10" => Q <= TO_STDLOGICVECTOR(TO_BITVECTOR(Q) SLL 1); Q(0) <= ES; WHEN OTHERS => Q <= TO_STDLOGICVECTOR(TO_BITVECTOR(Q) SRL 1); Q(6) <= ES; END CASE; END IF; END PROCESS PREG; END CIRCUITO;

OPER 00 01 10 11

Funcin Sin cambio Carga en paralelo Despla. IZQ. Despla. DER.

Cap.4 VHDL: Diseo Lgico Secuencial

Registros Ejemplo N 7 Registro de propsito general (FOR-LOOP).


LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY REGISTRO IS PORT( CLK, CLR, ES : IN STD_LOGIC; D : IN STD_LOGIC_VECTOR(6 DOWNTO 0); OPER : IN STD_LOGIC_VECTOR(1 DOWNTO 0); Q : INOUT STD_LOGIC_VECTOR(6 DOWNTO 0) END REGISTRO; ARCHITECTURE CIRCUITO OF REGISTRO IS BEGIN PREG : PROCESS( CLK, CLR ) BEGIN IF( CLR = '1' )THEN Q <= "0000000"; ELSIF( CLK'EVENT AND CLK = '1' )THEN FOR I IN 0 TO 6 LOOP CASE OPER IS WHEN "00" => Q(I) <= Q(I); WHEN "01" => Q(I) <= D(I); WHEN "10" => IF( I = 0 )THEN Q(I) <= ES; ELSE Q(I) <= Q(I-1); END IF; WHEN OTHERS => IF( I = 6 )THEN Q(I) <= ES; ELSE Q(I) <= Q(I+1); END IF; END CASE; END LOOP; END IF; END PROCESS PREG; END CIRCUITO;

CLK CLR

ES
OPER [1 : 0 ]

D0 D1 D2 D3 D4 D5 D6 D7

Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7

);

OPER 00 01 10 11

Funcin Sin cambio Carga en paralelo Despla. IZQ. Despla. DER.

Cap.4 VHDL: Diseo Lgico Secuencial

Prctica: Registro de propsito general.

PRACTICA 3. Registro de propsito general.


-- Realizar un circuito de propsito general de 7 bits, con: 1. Entradas: CLK, CLR, ES 2. Entrada en paralelo 3. Seleccin de funcin: 00- Sin cambio 01- Carga en paralelo 10- Desplazamiento a la izquierda 11- Desplazamiento a la derecha 4. Salida en paralelo. Adicionalmente, se deber emplear la estrategia para un registro de N bits. Sentencia: GENERIC (N: INTEGER:=16);

Cap.4 VHDL: Diseo Lgico Secuencial

Mquinas Secuenciales

Mquina de Mealy.- Su salida est Mquina de Mealy.- Su salida est en funcin de las entradas y del en funcin de las entradas y del estado en que se encuentre. estado en que se encuentre. Existen dos tipos de Mquina Existen dos tipos de Mquina Mquina de Moore.- Su salida Mquina de Moore.- Su salida est en funcin slo del estado en est en funcin slo del estado en que se encuentre. que se encuentre.

Cap.4 VHDL: Diseo Lgico Secuencial

Mquinas Secuenciales

Salidas Entradas Lgica Combinatoria Registros Lgica Combinatoria

Mquina de Mealy con Salidas Mquina de Mealy con Salidas Asncronas Asncronas

Entradas

Lgica Combinatoria

Registros

Lgica Combinatoria

Salidas Registros

Mquina de Mealy con Salidas Mquina de Mealy con Salidas Sncronas Sncronas

Cap.4 VHDL: Diseo Lgico Secuencial

Mquinas Secuenciales

Ejemplo N 8 Ejemplo N 8

Representacin de una Mquina de Mealy Representacin de una Mquina de Mealy


0/0

B 0/1 1/1 1/0 A 0/0 C 1/0

Estado Presente A B C

Entrada X 0 B/1 B/0 A/0 1 C/0 A/1 C/0

Prximo Estado / Salida Y

Cap.4 VHDL: Diseo Lgico Secuencial

Mquinas Secuenciales

Entradas Lgica Combinatoria Registros Lgica Combinatoria

Salidas

Mquina de Moore con Salidas Mquina de Moore con Salidas Asncronas Asncronas

Entradas

Lgica Combinatoria

Salidas Registros

Mquina de Moore con Salidas Mquina de Moore con Salidas Sncronas Sncronas

Cap.4 VHDL: Diseo Lgico Secuencial

Mquinas Secuenciales

Ejemplo N 9 Ejemplo N 9

Representacin de una Mquina de Moore Representacin de una Mquina de Moore

B/0

0 1

Estado Presente A

Entrada X 0 B C C 1 C A B

Salida Y
(Para el Estado Presente)

0 0 1

A/0

C/1 1 0

B C

Prximo Estado

Cap.4 VHDL: Diseo Lgico Secuencial

Diseo de Sistemas Secuenciales Sncronos

Flujo de Diseo de una Mquina de Estados Finitos (FSM) 1 2 Dibujar el Diagrama de Transiciones de Estados. Verificacin del Diagrama de Estados: Asegurarse que todos los estados estn representados. La funcin OR de todas las transiciones que dejan un estado = 1 (TRUE)
Esto permite determinar si existe una salida (por lo menos) de un estado dado, una vez que se ha llegado a l.

La funcin XOR de todas las transiciones-salida de un estado = 1 (TRUE)


Esto asegura que no existan condiciones en conflicto que conduzcan a tener ms de una transicin de salida activas en forma simultnea.

3 4 5 6 7

Asignacin de Estados. Descripcin del Comportamiento: Uso de Lenguajes de Descripcin de Hardware (HDL) VHDL y Verilog Compilacin / Sntesis del Diseo Generacin de Lgica (Ecuaciones Lgicas) / Asignacin de Estados Simulacin Funcional Implementacin / Realizacin del Diseo: Realizacin de la Lgica con una Tecnologa y/o Dispositivos predefinidos, p.ej. Biblioteca de Celdas CMOS, Lgica Comercial, PLDs/CPLDs/FPGAs (para estos dispositivos, esta fase se le conoce como: Mapping, Place & Route), Microcontroladores, etc. Simulacin Temporizada

Cap.4 VHDL: Diseo Lgico Secuencial

Diseo de Sistemas Secuenciales Sncronos

Ejemplo N 10 Ejemplo N 10

Circuito Secuencial que detecta 4-Unos (1s) consecutivos, sin traslape. Circuito Secuencial que detecta 4-Unos (1s) consecutivos, sin traslape.
0/0 1/0 0/0 d0 1/0 d1 0/0 0/0 0/0 1/0 d2 1/0 d3 1/1 d4

Edo. Presente d0 d1 d2 d3 d4

Edo. Siguiente x=0 d0 d0 d0 d0 d0 x=1 d1 d2 d3 d4 d1

z (Salida) x=0 0 0 0 0 0 x=1 0 0 0 1 0

Edo. Presente d0 d1 d2 d3 d4

Edo. Siguiente/Sal x=0 d0/0 d0/0 d0/0 d0/0 d0/0 x=1 d1/0 d2/0 d3/0 d4/1 d1/0

Cap.4 VHDL: Diseo Lgico Secuencial

Diseo de Sistemas Secuenciales Sncronos

Cmo describir o declarar los estados (usando VHDL) a partir del Diagrama de Estados? Cmo describir o declarar los estados (usando VHDL) a partir del Diagrama de Estados? Para entender el proceso de declaracin de los estados, se comprender primeramente el Para entender el proceso de declaracin de los estados, se comprender primeramente el siguiente grupo de declaraciones siguiente grupo de declaraciones type std_logic is (0,1,U,X,Z,W,L,H,-); signal x: std_logic; signal y: std_logic_vector (3 downto 0); x puede tener cualquiera de los valores: 0,1,U,X,Z,W,L,H,-

y est formado por 4-bits, cada uno de los cuales puede tener cualquiera de los valores: 0,1,U,X,Z,W,L,H,-

Cap.4 VHDL: Diseo Lgico Secuencial

Diseo de Sistemas Secuenciales Sncronos Cmo son codificados: d0, d1, d2, d3, d4? Cmo son codificados: d0, d1, d2, d3, d4? Tipos de Codificacin utilizados: One-Hot Compact Secuencial Gray Johnson Definido por Usuario 000 001 010 011 El Nmero de Bits utilizados en la codificacin est en funcin del Nmero de Estados (Tarea realizada por el Compilador o Sintetizador)* 100 101 110 111 d0 d1 d2 d3 d4 101 110 111

As, para declarar los estados de una Mquina As, para declarar los estados de una Mquina de Estados Finitos se realiza lo siguiente: de Estados Finitos se realiza lo siguiente: Valores que pueden tener el edo.presente y el edo.futuro en el ejemplo N 10: edo_presente d0 d1 d2 d3 d4
Declaracin de Estados en una FSM

edo_futuro d1 d2 d3 d4

type estados is (d0, d1, d2, d3, d4); signal edo_presente, edo_futuro: estados;
Donde: estados es el nombre o identificador dado por el usuario al conjunto de datos conformado por d0, d1,d2 d3, d4. A este tipo de datos se le conoce como Tipo de Datos Enumerados edo_presente, edo_futuro son seales (signal) que pueden adquirir cualquiera de los valores (d0, d1, d2, d3, d4) que describen al tipo de dato enumerado identificado con el nombre de estados, es decir, edo_presente y edo_futuro son tambin datos del tipo enumerado

estados

d0

Cap.4 VHDL: Diseo Lgico Secuencial

Diseo de Sistemas Secuenciales Sncronos


when d2=> if x = 1 then edo_futuro <= d3; z <= 0; else edo_futuro <= d0; z <= 0; end if; when d3 => if x = 1 then edo_futuro <= d4; z <= 1; else edo_futuro <= d0; z <= 0; end if; when d4 => if x = 1 then edo_futuro <= d1; z <= 0; else edo_futuro <= d0; z <= 0; end if; end case; end process proceso1; proceso2: process (clk) begin if (clkevent and clk = 1) then edo_presente <= edo_futuro; end if; end process proceso2; end arq_diagrama;

Ejemplo N 10 Detector de Secuencia library ieee; use ieee.std_logic_1164.all; entity diagrama is port (clk, x: in std_logic; z: out std_logic); end diagrama; architecture arq_diagrama of diagrama is type estados is (d0, d1, d2, d3, d4); signal edo_presente, edo_futuro: estados; begin proceso1: process (edo_presente, x) begin case edo_presente is when d0 => if x = 1 then edo_futuro <= d1; z <= 0; else edo_futuro <= d0; z <= 0; end if; when d1 => if x = 1 then edo_futuro <= d2; z <= 0; else edo_futuro <= d0; z <= 0; end if;

Cap.4 VHDL: Diseo Lgico Secuencial

Diseo de Sistemas Secuenciales Sncronos

Ejemplo N 11 Ejemplo N 11 0 Mquina de Moore Mquina de Moore S0/0 0 1

1 S2/1 0 1 S3/0 0 1

S1/1

Cap.4 VHDL: Diseo Lgico Secuencial

Diseo de Sistemas Secuenciales Sncronos

Ejemplo N 11 Mquina de Moore library ieee; use ieee.std_logic_1164.all; entity MOORE is port (X, CLK: in std_logic; Z: out std_logic); end MOORE; architecture ARQ_MOORE of MOORE is type Estados is (S0, S1, S2, S3); signal Edo_Pres, Edo_Fut: Estados; begin proceso1: process (Edo_Pres, X) begin case Edo_Pres is when S0 => Z<= 0; if X = 0 then Edo_Fut <= S0; else Edo_Fut <= S2; end if; when S1 => Z <= 1; if X = 0 then Edo_Fut <= S0; else Edo_Fut <= S2; end if;

when S2=> Z <= 1; if X = 0 then Edo_Fut <= S2; else Edo_Fut <= S3; end if; when S3 => Z <= 0; if X = 0 then Edo_Fut <= S3; else Edo_Fut <= S1; end if; end case; end process proceso1; proceso2: process (CLK) begin if (CLKevent and CLK = 1) then Edo_Pres <= Edo_Fut; end if; end process proceso2; end ARQ_MOORE;

Cap.4 VHDL: Diseo Lgico Secuencial

Diseo de Sistemas Secuenciales Sncronos

Ejemplo N 12 Ejemplo N 12 0/0 S0 0/0 1/0

Mquina de Mealy Mquina de Mealy

1/1 S2 0/1

S1

1/1 S3 0/0

1/0

Cap.4 VHDL: Diseo Lgico Secuencial

Diseo de Sistemas Secuenciales Sncronos


when S2=> if x = 0 then z <= 1; Edo_Fut <= S2; else z <= 0; Edo_Fut <= S3; end if; when S3 => if x = 0 then z <= 0; Edo_Fut <= S3; else z <= 1; Edo_Fut <= S1; end if; end case; end process proceso1; proceso2: process (clk) begin if (clkevent and clk = 1) then Edo_Pres <= Edo_Fut; end if; end process proceso2; end ARQ_MEALY;

Ejemplo N 12 Mquina de Mealy library ieee; use ieee.std_logic_1164.all; entity MEALY is port (clk, x: in std_logic; z: out std_logic); end MEALY; architecture ARQ_MEALY of MEALY is type Estados is (S0, S1, S2, S3); signal Edo_Pres, Edo_Fut: Estados; begin proceso1: process (Edo_Pres, x) begin case Edo_Pres is when S0 => if x = 0 then z <= 0; Edo_Fut <= S0; else z <= 1; Edo_Fut <= S2; end if; when S1 => if x = 0 then z <= 0; Edo_Fut <= S0; else z <= 0; Edo_Fut <= S2; end if;

Cap.4 VHDL: Diseo Lgico Secuencial

Diseo de Sistemas Secuenciales Sncronos

Ejemplo N 13 Ejemplo N 13

0 q0/0 1 q1/0 0 1 0 q4/0 0 1 q2 0/0 1/1 q3/0 1

Qu tipo de Mquina es? Es correcta su Descripcin en VHDL? Cumple las Reglas de Verificacin de un Diagrama de Estados?

Cap.4 VHDL: Diseo Lgico Secuencial

Diseo de Sistemas Secuenciales Sncronos


when q2=> if x = 0 then edo_fut <= q4; z <= 0; else edo_fut <= q3; z <= 1; end if; when q3 => z <= 0; if x = 0 then edo_fut <= q3; else edo_fut <= q3; end if; when q4 => z <= 0; if x = 0 then edo_fut <= q4; else edo_fut <= q1; end if; end case; end process proceso1; proceso2: process (clk) begin if (clkevent and clk = 1) then edo_pres <= edo_fut; end if; end process proceso2; end arq_diag;

Ejemplo N 13 - Mquina Mixta library ieee; use ieee.std_logic_1164.all; entity diag is port (clk, x: in std_logic; z: out std_logic); end diag; architecture arq_diag of diag is type estados is (q0, q1, q2, q3, q4); signal edo_pres, edo_fut: estados; begin proceso1: process (edo_pres, x) begin case edo_pres is when q0 => z<= 0; if x = 0 then edo_fut <= q4; else edo_fut <= q1; end if; when q1 => z <= 0; if x = 0 then edo_fut <= q4; else edo_fut <= q2; end if;

Cap.4 VHDL: Diseo Lgico Secuencial

Contadores

Contador.- Es en esencia un registro que pasa por una Contador.- Es en esencia un registro que pasa por una secuencia predetrminada de estados, despues secuencia predetrminada de estados, despues de la aplicacin de pulsos de entrada. de la aplicacin de pulsos de entrada.

Contadores de ondulacin.- En este contador la transicin de Contadores de ondulacin.- En este contador la transicin de salida del flip-flop sirve como una fuente para disparar otro salida del flip-flop sirve como una fuente para disparar otro flip-flop (en la entrada de reloj). flip-flop (en la entrada de reloj).

Contadores

Contador sncrono.- En este tipo de contador todos los flipContador sncrono.- En este tipo de contador todos los flipflops tiene sus entradas de reloj cortocircuitadas a una flops tiene sus entradas de reloj cortocircuitadas a una misma seal, CLK. El cambio de estado de un flip-flop misma seal, CLK. El cambio de estado de un flip-flop particular depende del estado presente de otros flip-flops. particular depende del estado presente de otros flip-flops.

Nota: Existen contadores de propstito general.

Disear: a)Contador ascendente, b)C. descendente y c)C. ascendente/descendente.

Cap.4 VHDL: Diseo Lgico Secuencial

Contadores

clk

Contador Q3 Q2 Q1 Q0

clk Q0 Q1 Q2 Q3

Diagrama de tiempo de un contador de 4 bits Diagrama de tiempo de un contador de 4 bits

Cap.4 VHDL: Diseo Lgico Secuencial

Contadores

Ejemplo N 15 Contador de 4-Bits library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity cont4 is port (clk: in std_logic; Q: inout std_logic_vector (3 downto 0)); end cont4; architecture arqcont of cont4 is begin Es verdadera con el flanco de bajada de clk process (clk) begin if (clkevent and clk = 0) then Q <= Q +1; end if; end process; end arqcont;

Cap.4 VHDL: Diseo Lgico Secuencial

Contadores Ejemplo N 16 Contador Ascendente/Descendente 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 is port (clk: in std_logic; UD: in std_logic; Q: inout std_logic_vector (3 downto 0)); end contador; architecture a_contador of contador is begin process (UD, clk) begin if (clkevent and clk = 1) then if (UD = 0) then Q <= Q +1; else Q <= Q -1; end if; end if; end process; end a_contador;

clk UD Q3 Q2 Q1 Q0

UD 0 1

Accin Cuenta Ascendente Cuenta Descendente

Cap.4 VHDL: Diseo Lgico Secuencial

Contadores Ejemplo N 17 Contador de 4-bits con reset y carga en paralelo library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity cont is port (P: in std_logic_vector (3 downto 0); clk, Load, Enp, Reset: in std_logic; Q: inout std_logic_vector (3 downto 0)); end cont; architecture arq_cont of cont is begin process (clk, Reset, Load, Enp) begin if (Reset = 1) then Operacin Asncrona Q <= 0000; elsif (clkevent and clk = 1) then if (Load = 0 and Enp = -) then Q <= P; elsif (Load = 1 and Enp = 0) then Q <= Q; elsif (Load = 1 and Enp = 1) then Q <= Q + 1; end if; end if; end process; end arq_cont;

P3 P2 P1 P0 clk Enp Q3 Q2 Q1 Q0

Reset

Load

Enp 0 0 1 1

Load 0 1 0 1 Carga

Accin Mantiene Estado Carga Cuenta

You might also like