Está en la página 1de 12

CIRCUITOS LOGICOS

DIGITALES
Registros de Desplazamiento
En VHDL, el concepto de registro hace referencia a la transferencia de
información que se da en la interconexión de varios flip-flops acomodados
en un arreglo en serie o en paralelo, o inclusive ambos.
Descripción
library ieee;
Registro Serie
use ieee.std_logic_1164.all;

entity regdespsiso is
port( d, clk: in std_logic;
q,qn: out std_logic);
end regdespsiso;

architecture siso of regdespsiso is


signal a,b,qd: std_logic;
begin
process (clk)
begin
if (clk'event and clk ='1') then
a<=d;
b<=a;
qd<=b;
end if;
end process;
q<=qd;
qn<= not(qd);
end siso;
Ejercicio:
Obtener los estados del registro de 5 bits de la Figura para las señales de
entrada de datos y la señal de reloj indicadas. Suponer que, inicialmente, el
registro se ha borrado (su contenido es todo ceros).
Descripción Registro Paralelo
library ieee;
use ieee.std_logic_1164.all;

entity regdespipo is
port( D: in std_logic_vector (0 to 7);
clk: in std_logic;
Q: out std_logic_vector (0 to 7));
end regdespipo;

architecture pipo of regdespipo is


begin
process (clk)
begin
if (clk'event and clk ='1') then
Q <= D;
end if;
end process;
end pipo;
Ejercicio:
Realizar el programa correspondiente a un registro paralelo de 4 bits; para
ello, considérese la función de sus entradas y salidas descritas en la tabla
correspondiente.

Programa VHDL v1

Programa VHDL v2
Contadores asíncronos – Divisores de Frecuencia
library ieee;
Programa VHDL
use ieee.std_logic_1164.all;
entity divisorfrec is Modo buffer: Permite realizar retroalimentaciones dentro de
port (clk : in std_logic; --RELOJ DE CPLD A 50 MHz la entidad; el puerto declarado se comporta como una terminal
q: buffer std_logic); exclusiva de salida.
end divisorfrec;
architecture divisor of divisorfrec is
constant cuentatope : integer := 1; Entre cuanto se está
begin
process(clk) dividiendo la frecuencia?
variable temp: integer range 0 to cuentatope;
begin

if rising_edge(clk) then
temp := temp + 1;
if temp = cuentatope then
temp := 0;
q <= not(q);
end if;
end if;
end process;
end divisor;
Contadores
Son entidades muy utilizadas en el diseño lógico, que hacen uso extensivo de
los operadores lógicos + y – para realizar operaciones de incremento o
decremento de datos.
Observaciones:
Se debe añadir la librería use ieee.std_logic_unsigned.all para realizar
operaciones aritméticas sin signo con variables tipo std_logic y
std_logic_vector.
Las variables definidas anteriormente como out (salidas), ahora deben ser
descritas como inout para establecer la retroalimentación.

Modo inout: Permite declarar a un puerto de forma


bidireccional, es decir como de entrada/salida, además hace
posible la retroalimentación de señales dentro o fuera de la
entidad.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity contaasc4bits is
port( clk: in std_logic;
Q: inout std_logic_vector (3 downto 0));
end contaasc4bits;

architecture contador of contaasc4bits is


begin
process (clk)
begin
if (clk'event and clk ='1') then

Q <= Q + 1;

end if;
end process;
end contador;
Ejercicios - Contadores
Ejercicio 1
Contador de 4 bits con
habilitador de cuenta y reseteo
Ejercicios - Contadores
Ejercicio 2
Ejercicios - Contadores
Ejercicio 3

También podría gustarte