1.7 - Diseño Logico Secuencial en VHDL
1.7 - Diseño Logico Secuencial en VHDL
1.7 - Diseño Logico Secuencial en VHDL
La ejecución del proceso es sensible a los cambios en el Ej2: Descripción del flip flop SR disparado
pulso de reloj clk: cuando clk cambia de valor de una por flanco positivo.
transición de 0 a 1, el valor de D se asigna a Q y se
conserva hasta que se genera un nuevo pulso. A la
inversa, si clk no presenta dicha transición, el valor de
Q se mantiene igual.
Atributo event: En VHDL, los atributos sirven para
definir características que se pueden asociar con
cualquier tipo de datos, objetos o entidades. El atributo
LIBRARY IEEE;
event se utiliza para describir un hecho o una USE IEEE.STD_LOGIC_1164.ALL;
ocurrencia de una señal en particular.
ENTITY flipflopSR
Ej1: Descripción del flip flop D PORT(S, R , clk: IN STD_LOGIC;
En los ejemplos disparado por flanco positivo. Q, Qcmp: INOUT STD_LOGIC);
Ej1 y Ej2, la END flipflopSR;
condición if
ARCHITECTURE arq_ffSR OF flipflopSR IS
clk’event es
BEGIN
verdadera sólo
PROCESS (clk, S, R)
cuando ocurre
BEGIN
un cambio de
LIBRARY IEEE; IF (clk’EVENT AND clk =’1’) THEN
valor. La
USE IEEE.STD_LOGIC_1164.ALL; IF (S = ‘0’ AND R =’1’) THEN
declaración if
Q <=´0’;
no maneja la
ENTITY flipflopD Qcmp<= ‘1’;
condición else,
PORT(D , clk: IN STD_LOGIC; ELSIF (S = ‘1’ AND R =’0’) THEN
debido a que el
Q: OUT STD_LOGIC); Q <=´1’;
compilador
END flipflopD; Qcmp<= ‘0’;
mantiene el
ELSIF (S = ‘0’ AND R =’0’) THEN
valor de Q ARCHITECTURE arq_ff OF flipflopD IS
Q <= Q;
mientras no BEGIN
Qcmp<= Qcmp;
exista un PROCESS (clk, D)
ELSE
cambio de valor BEGIN
Q <= ’-‘ ;
en la señal clk. IF (clk’EVENT AND clk =’1’) THEN
Qcmp<= ‘-‘;
Q <=D;
END IF;
END IF;
END IF; Valores “no
END PROCESS;
END PROCESS; importa”
END arq_ff;
END arq_ffSR;
LIBRARY IEEE;
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_1164.ALL; USE WORK.STD_ARITH.ALL;
ENTITY cont4
ENTITY registro PORT(
PORT( D: IN STD_LOGIC_VECTOR (0 TO 7); clk: IN STD_LOGIC;
clk: IN STD_LOGIC; Q: INOUT STD_LOGIC_VECTOR(3 DOWNTO 0));
Q: OUT STD_LOGIC_VECTOR(0 TO 7)); END cont4;
END registro;
ARCHITECTURE arq_cont4 OF cont4 IS
ARCHITECTURE arq_reg OF registro IS BEGIN
BEGIN PROCESS (clk)
PROCESS (clk, D) BEGIN
BEGIN IF (clk’EVENT AND clk =’1’) THEN
IF (clk’EVENT AND clk =’1’) THEN Q <= Q + 1;
Q <= D; END IF;
END IF; END PROCESS;
END PROCESS; END arq_cont4;
END arq_reg;
Como primer paso del diseño se debe considerar los estados: A, B y C. Para TYPE estados IS (A, B, C);
representarlos en VHDL se lo define como tipo de datos enumerados mediante la SIGNAL ep, ef: estados;
declaración TYPE.
Proceso1: PROCESS (ep, x)
BEGIN
El siguiente paso consiste en la declaración del proceso Proceso1 que definirá el
CASE ep IS
comportamiento del sistema. En este caso debe considerarse que el estado WHEN A => Z <=’0’;
futuro ef depende del valor del estado presente ep y de la entrada X. Dentro del IF (X = ‘1’) THEN
proceso se describe la transición de ep al ef. Se inicia con la declaración CASE ef <= B;
ELSE
para especificar el primer estado que se va a evaluar (en este caso, el estado A), ef <= A;
donde la salida Z siempre es cero sin importar el valor de X. Si la entrada X es END IF;
igual a 1 el estado futuro es B, caso contrario es A.
Proceso2: PROCESS (clk)
BEGIN
En un segundo proceso Proceso2, se realiza de manera síncrona la IF (clk’EVENT AND clk =’1’) THEN
asignación del estado futuro al estado presente: cuando se aplica un pulso ep <= ef;
END IF;
de reloj este proceso se ejecuta.
END PROCESS Proceso2;