Registros y Contadores PDF
Registros y Contadores PDF
Registros y Contadores PDF
La síntesis de módulos secuenciales puede materializarse de forma directa a partir de descripciones RTL o
comportamental de los módulos secuenciales tradicionalmente conocidos, como son registros, registros de
desplazamiento, contadores, monoestables, LFSR, etc.
En este capítulo, a partir de los elementos descriptivos del VHDL ya introducidos en capítulos anteriores se
van a realizar diversas implementaciones de los módulos secuenciales más conocidos. Cada módulo se
modelará mediante una o varias descripciones. Como se observará, la descripción de los modelos a partir del
VHDL simplifica enormemente la síntesis de sistemas digitales.
Registro
El registro es un módulo secuencial capaz de almacenar un conjunto de datos que son cargados a partir de
una señal de carga o load. Los datos que se cargan en el registro provienen del bus externo de datos d. Puesto Figura 1. Registro.
que el registro contiene un conjunto de flip-flops, su estado viene dado directamente por los datos que
La figura 2 muestra la simulación temporal del registro.
almacena y se visualiza al exterior a través del bus de salida q.
El registro suele contener también una señal de reset o preset asíncrona que inicializa el registro a 0 o 1. Por
consiguiente, su tabla de estados puede describirse de la forma siguiente:
Estado actual (q) Próximo estado (Q)
nreset = 0 - 0
load = 0 y ck ↑ q q
load = 1 y ck ↑ q d
Tabla 1. Tabla de estados del registro. Figura 2. Gráfica termporal del registro.
Su funcionamiento es simple y, como tal, puede considerarse como el módulo punto de partida para la
construcción del resto de módulos secuenciales. Registro de desplazamiento.
La descripción VHDL, a nivel comportamental, es trivial a partir de la tabla 3. El registro de desplazamiento, además del almacenamiento de datos propio del registro, es capaz de
establecer comunicación entre los elementos (flip-flops) vecinos permitiendo el transporte de datos (de forma
Library ieee; serie) a derecha e izquierda del registro. Por consiguiente, las operaciones que un registro de desplazamiento
Use ieee.std_logic_1164.ALL; puede contener son: inicialización, carga de datos, desplazamiento a la derecha, desplazamiento a la
Entity Registro is izquierda y no operación.
generic (N:integer := 4);
Todas las operaciones, excepto la de inicialización asíncrona, pueden estar controladas a través de una señal
port ( d: in std_logic_vector(N-1 downto 0);
de control, ctrl, de dos bits.
ck, nreset, load: in std_logic;
q: out std_logic_vector(N-1 downto 0));
La tabla 2 muestra la tabla de estados del registro de desplazamiento. Para los desplazamientos a derecha e
izquierda se necesita, además, una señal de entrada serie por la izquierda, il, y otra por la derecha, ir,
end;
respectivamente.
architecture bhr of Registro is
begin Estado actual (q) Próximo estado
process (ck, nreset) (Q)
El código VHDL siguiente corresponde a un divisor de frecuencia por m=11. Para ello se ha tenido que
utilizar un N=4. Para simplificar el ejemplo se ha considerado el mínimo número necesario de señales. Como
entradas sólo son necesarias las señales de reloj y el reset asíncrono. Como salidas se da el estado y la salida
div que corresponde a la salida terminal cuando se llega al estado deseado. Esta misma señal se utiliza para
devolver al divisor al estado inicial.
Library ieee;
use ieee.std_logic_1164.ALL;
use ieee.std_logic_unsigned.ALL;
Entity divisor is
generic(N: integer:=4;
M: integer:=10); -- M = último estado Æ m = 11.
port( ck, nreset:in std_logic;
div: inout std_logic;
q: inout std_logic_vector(N-1 downto 0));
end divisor;
Architecture bhr of divisor is
begin
process(ck, nreset)
begin
if nreset='0' then q <= (others=>'0');
elsif ck'event and ck='1' then
if div= '1' then q <= (others=>'0');
else q <= q +1;
end if;
end if;
if (q = m) then div <= '1';
else div <= '0';
end if;
end process;
end bhr;
La síntesis realizada contra el circuito de Altera EPM7032, da como resultado el circuito de la figura 7.