Sunteți pe pagina 1din 35

Cap.

4 VHDL: Diseo Lgico Secuencial

Qu es el Diseo Lgico Secuencial?

Estructura Estructura de de un un Sistema Sistema Lgico Lgico Secuencial 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 En el el Diseo Diseo Secuencial Secuencial con con VHDL, VHDL, las las construcciones: construcciones: if-then-else if-then-else // if-then-elsif-then if-then-elsif-then son son las las ms ms utilizadas. 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 Mquina de de Mealy.Mealy.- Su Su salida salida est est en en funcin funcin de de las las entradas entradas y y del del estado estado en en que que se se encuentre. encuentre. Existen Existen dos dos tipos tipos de de Mquina Mquina Mquina Mquina de de Moore.Moore.- Su Su salida salida est est en en funcin funcin slo slo del del estado estado en en que que se se encuentre. encuentre.

Cap.4 VHDL: Diseo Lgico Secuencial

Mquinas Secuenciales

Salidas Entradas Lgica Combinatoria Registros Lgica Combinatoria

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

Entradas

Lgica Combinatoria

Registros

Lgica Combinatoria

Salidas Registros

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

Cap.4 VHDL: Diseo Lgico Secuencial

Mquinas Secuenciales

Ejemplo Ejemplo N N 8 8

Representacin Representacin de de una una Mquina Mquina de de Mealy 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 Mquina de de Moore Moore con con Salidas Salidas Asncronas Asncronas

Entradas

Lgica Combinatoria

Salidas Registros

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

Cap.4 VHDL: Diseo Lgico Secuencial

Mquinas Secuenciales

Ejemplo Ejemplo N N 9 9

Representacin Representacin de de una una Mquina Mquina de de Moore 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 Ejemplo N N 10 10

Circuito Circuito Secuencial Secuencial que que detecta detecta 4-Unos 4-Unos (1s) (1s) consecutivos, consecutivos, sin sin traslape. 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 Cmo describir describir o o declarar declarar los los estados estados (usando (usando VHDL) VHDL) a a partir partir del del Diagrama Diagrama de de Estados? Estados? Para Para entender entender el el proceso proceso de de declaracin declaracin de de los los estados, estados, se se comprender comprender primeramente primeramente el el siguiente siguiente grupo grupo de de declaraciones 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 Cmo son son codificados: codificados: d0, d0, d1, d1, d2, d2, d3, d3, d4? 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, As, para para declarar declarar los los estados estados de de una una Mquina Mquina de de Estados Estados Finitos Finitos se se realiza realiza lo lo siguiente: 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 Ejemplo N N 11 11 0 Mquina Mquina de de Moore 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 Ejemplo N N 12 12 0/0 S0 0/0 1/0

Mquina Mquina de de Mealy 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 Ejemplo N N 13 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 Contador..- Es Es en en esencia esencia un un registro registro que que pasa pasa por por una una secuencia secuencia predetrminada predetrminada de de estados, estados, despues despues de de la la aplicacin aplicacin de de pulsos pulsos de de entrada. entrada.

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

Contadores

Contador Contador sncrono sncrono..- En En este este tipo tipo de de contador contador todos todos los los flipflipflops flops tiene tiene sus sus entradas entradas de de reloj reloj cortocircuitadas cortocircuitadas a a una una misma misma seal, seal, CLK. CLK. El El cambio cambio de de estado estado de de un un flip-flop flip-flop particular particular depende depende del del estado estado presente presente de de otros otros flip-flops. 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 Diagrama de de tiempo tiempo de de un un contador contador de de 4 4 bits 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

S-ar putea să vă placă și