You are on page 1of 30

Contadores y

ndice

Contadores

Contadores asincrnicos

Contadores sincrnicos
 binarios

 decimales

registros

Registros tipo latch (PIPO)

Introduccin a los bancos de registros y memorias

Salvador E. Tropea, salvador@inti.gob.ar, 2012-2014

RAM

Registros sincrnicos (PIPO)

Obra licenciada bajo licencia Creative Commons

Registros de desplazamiento

Atribucin-NoComercial-DerivadasCompartirIgual 3.0 Unported

Aplicaciones de los registros de desplazamiento

Introduccin a las memorias FIFO

Jorge E. Sinderman, jorgesinderman@gmail.com, 2010

Salvador E. Tropea/Jorge E. Sinderman Julio 2014

JES/SET

JES/SET

Contadores
 Cuentan pulsos usando FFs
 Son circuitos secuenciales, su estado es la

cuenta actual.
 Sincrnicos: reloj compartido por todos los

Contadores

FFs
 Mayor velocidad
 Aptos para diseos medianos y grandes

(counters)

(PLDs)
 Asincrnicos: uno o ms FFs usan como
reloj la salida de otro
 Menos lgica combinacional

JES/SET

JES/SET

Mdulo
 El nmero de estados es finito.
 Depende de los FFs y la lgica.

Contadores

 Cuando se agotan las combinaciones

usualmente vuelven a la cuenta inicial.


 Mdulo: nmero de estados por los que

Asincrnicos

pasa antes de volver al estado inicial.


 Mdulo M, cuenta de 0 a M-1
 Para N FFs el mdulo mximo es 2N

(ripple counters)

 Un contador mdulo M puede usarse como

divisor de frecuencia por M.

JES/SET

JES/SET

Contador binario mdulo 8

Contador binario mdulo 8

y divisor de frecuencia x8

JES/SET

JES/SET

Q2

Q1

Q0

Contador mdulo 16 con

Contador binario mdulo 2

reset

maestro

 Con N flip-flops:
 El mdulo es 2N
 El tiempo de establecimiento es N
veces el tiempo de propagacin de
cada flip-flop

 N.t
P
 Importante: es necesario que sean
por flanco de bajada.

JES/SET

JES/SET

Contador mdulo 4096

10

Desventajas
 Por ser asincrnicos poseen todas las

 4096=212 => 12 FFs


 Al ponerlos es cascada sus mdulos se

desventajas de los circuitos

multiplican.

asincrnicos.
 Es ms simple el diseo sincrnico y

 4096=16x16x16

por eso no entraremos en detalle de


las posibilidades que ofrecen los
contadores asincrnicos.

JES/SET

11

JES/SET

12

Contadores sincrnicos
 Son circuitos sincrnicos y cuentan los

pulsos de reloj.
 Suelen incluir:
 Entrada de habilitacin: slo cuentan los

Contadores

pulsos de reloj cuando estn habilitados


 Reset: para volver a 0

sincrnicos

 En ocasiones tienen:
 Entradas de carga para comenzar en un

valor determinado
 Entrada para cuenta progresiva o
regresiva.

JES/SET

13

JES/SET

14

Contador binario sincrnico


empleando flip-flops T


Q0 cambia siempre:
 T0=E

Q1 cambia cuando Q0 es 1
 T1=Q0.E

Q2 cambia cuando Q0 y Q1
son 1
 T2=Q0.Q1.E=Q1.T1

Luego
T3=Q0.Q1.Q2.E=Q2.T2

La entrada es el producto de
los FF anteriores y la
habilitacin.

Es como un acarreo

JES/SET

16

Contador binario sincrnico

Contador binario sincrnico

mdulo 16 de acarreo escalonado

mdulo 16 de acarreo simultneo

Tiempo de establecimiento: El de un FF. Todos


sincronizados, mucho mejor que el asincrnico

Retardo lgica combinacional: aumenta conforme uso


ms flip-flops. Eso limita fmx

Es fcil conectarlos en cascada.

TC: Terminal Count o Cuenta Terminal o Acarreo de


salida. Indica que todos los FF estn en 1 y que, en el
prximo pulso de reloj van a 0.

 Usando la ecuacin completa.


 Lgica ms compleja, pero slo 1 nivel.
 Ms rpido.
 Se usa internamente en los MSI.

Notar que E afecta a TC, son entrada y salida de exp.

JES/SET

17

Contadores sincrnicos en cascada

JES/SET

18

Contadores sincrnicos en cascada

 Puedo usar acarreo simultneo internamente,

pero debo usar escalonado entre etapas.


 La f
mx del conjunto es menor que la de una

etapa sola.
 A medida que agrego etapas empeora.

Ejemplo con 3 contadores de 3 bits.


El F/F tiene un td de 10 ns y las compuertas 5 ns.
La cuenta terminal se calcula internamente con 1 nivel, pero
en cada etapa se agrega otro nivel.

JES/SET

19

JES/SET

20

Contador binario de N bits (sin TC)

architecture Simple of Cont_N_Bits is


signal qr : unsigned(N-1 downto 0);
begin
contador:
process (clk_i)
begin
if rising_edge(clk_i) then
if e_i='1' then
qr <= qr+1; -- sin acarreo
end if;
end if;
end process contador;
q_o <= std_logic_vector(qr);
end architecture Simple; -- Entity: Cont_N_Bits

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity Cont_N_Bits is
generic(
N : positive:=4);
port(
clk_i : in std_logic;
e_i
: in std_logic;
q_o
: out std_logic_vector(N-1 downto 0));
end entity Cont_N_Bits;

JES/SET

Contador binario de N bits (sin TC)

21

JES/SET

22

Contador bidireccional de N bits y

Contador bidireccional

habilitacin nica (1)

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity Cont_UpDown is
generic(
N : positive:=4);
port(
clk_i : in std_logic;
e_i
: in std_logic;
clr_i : in std_logic;
up_i : in std_logic;
q_o
: out std_logic_vector(N-1 downto 0));
end entity Cont_UpDown;

 Cuenta descendente
 Transporte: multiplicando los Q negados
 TC: Cuando todos estn en 0
JES/SET

23

JES/SET

24

Contadores sincrnicos con

Contador bidireccional (2)


architecture Simple of Cont_UpDown is
signal qr : unsigned(N-1 downto 0);
signal sentido : integer;
begin
sentido <= 1 when up_i='1' else -1;
contador:
process (clk_i)
begin
if rising_edge(clk_i) then
if clr_i='1' then
qr <= (others => '0');
elsif e_i='1' then
qr <= qr+sentido;
end if;
end if;
end process contador;
q_o <= std_logic_vector(qr);
end architecture Simple; -- Entity: Cont_UpDown
JES/SET

reset y carga paralelo


 Reset sincrnico (SR): til para
modificar el mdulo del contador sin
que deje de ser sincrnico
 Entrada de carga paralelo
sincrnica (PE) (con sus
correspondientes lneas de datos):
til para colocar al contador, en
determinado momento, en un estado
particular

25

JES/SET

26

Contador sincrnico con reset

Flip-flop SR-T-D

sincrnico y carga paralelo sincrnica


(tipo 74x163, aunque tiene PE y SR activos en bajo)

Full sincrnico:

Si SR est en 1 el flip-flop va a 0

Si PE est en 1 (y SR=0) el flip-flop toma el valor de D

Si PE est en 0 (y SR=0) la entrada T es la que gobierna el


comportamiento

JES/SET

27

JES/SET

28

Contador sincrnico con M<2

JES/SET

Contador BCD natural (sincro.)

29

Contador BCD Aiken (sincro.)

JES/SET

30

Contador sincrnico mdulo


configurable

 Cuando se alcanza el estado 01xx (el 4), el

siguiente debe ser el 1011 (el 5)

JES/SET

31

JES/SET

32

Aplicaciones de los contadores




Para contar eventos.

Divisores de frecuencia.

Medidores de tiempo: cuentan los pulsos


entregados por un generador de pulsos de
frecuencia patrn.

Medidores de frecuencia: cuentan los pulsos de


entrada durante un tiempo patrn.

Contadores de pasos: formando parte de circuitos


secuenciadores, para generar las seales que
ste debe emitir en cada paso de ejecucin de la
secuencia prevista.

Como parte de convertidores paralelo a serie o


serie a paralelo: casos particulares del tem
anterior.

JES/SET

33

Ejemplo: el semforo en un cruce

Semforo (1)

de 2 calles de igual importancia


 Perodo 90 segundos
 Reloj de 1 Hz

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

 Mdulo 90
 6 salidas
 La tabla muestra el

entity Semaforo is
port(
clk_i
: in std_logic;
r1, a1, v1 : out std_logic;
r2, a2, v2 : out std_logic);
end entity Semaforo;

estado de las luces a


lo largo del perodo

JES/SET

35

JES/SET

36

Semforo (2)

Semforo (3)

architecture Contador of Semaforo is


signal qr : unsigned(6 downto 0);
begin
cuenta:
process (clk_i)
begin
if rising_edge(clk_i) then
if qr<89 then
qr <= qr+1;
else
qr <= (others => '0');
end if;
end if;
end process cuenta;
JES/SET

logica_comb:
process (qr)
begin
case to_integer(qr) is
when 0 to 41 =>
r1<='0'; a1<='0';
r2<='1'; a2<='0';
when 42|43 =>
r1<='0'; a1<='1';
r2<='1'; a2<='0';
when 44 =>
r1<='1'; a1<='0';
r2<='1'; a2<='1';
when 45 to 86=>
r1<='1'; a1<='0';
r2<='0'; a2<='0';
37

Semforo (4)

when 87|88 =>


r1<='1'; a1<='0'; v1<='0';
r2<='0'; a2<='1'; v2<='0';
when 89 =>
r1<='1'; a1<='1'; v1<='0';
r2<='1'; a2<='0'; v2<='0';
when others =>
r1<='0'; a1<=qr(0); v1<='0';
r2<='0'; a2<=qr(0); v2<='0';
end case;
end process logica_comb;
end architecture Contador; -- Entity: Semaforo
JES/SET

39

JES/SET

v1<='1';
v2<='0';
v1<='0';
v2<='0';
v1<='0';
v2<='0';
v1<='0';
v2<='1';
38

Ejemplo: el semforo en un cruce de una

Secuencia a implementar

avenida y una calle de poco trnsito


 El semforo estar normalmente dando paso a la

Slo cuando el contador es


0 est en condiciones de

avenida.

comenzar.

 Si un sensor detecta que hay un vehculo en la

calle, detenido por la luz roja, le asigna, tras la


habitual secuencia de transicin, luz verde por 20
segundos.
 Cuando vuelve a restaurarse la luz verde en la

Permanecer en 0 mientras
no se detecte vehculo.

Al llegar a 85 volver a 0.

Estas dos ltimas


condiciones las podemos

avenida, la misma durar como mnimo 60

implementar con un SR.

segundos, y los eventuales vehculos que se


detecten en la calle en ese perodo debern
esperar para ser atendidos.

JES/SET

41

JES/SET

Semforo a demanda (1)

Semforo a demanda (2)

architecture Contador of Semaforo_Demanda is


signal qr : unsigned(6 downto 0);
signal sr : std_logic;
begin
cuenta:
process (clk_i)
begin
if rising_edge(clk_i) then
if sr='1' then
qr <= (others => '0');
else
qr <= qr+1;
end if;
end if;
end process cuenta;

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity Semaforo_Demanda is
port(
clk_i
: in std_logic;
sensor_i
: in std_logic;
r1, a1, v1 : out std_logic;
r2, a2, v2 : out std_logic);
end entity Semaforo_Demanda;
JES/SET

42

43

JES/SET

44

Semforo a demanda (3)


logica_comb:
process (qr, sensor_i)
begin
sr <= '0';
case to_integer(qr) is
when 0 =>
r1 <= '0'; a1 <= '0'; v1 <= '1';
r2 <= '1'; a2 <= '0'; v2 <= '0';
sr <= not(sensor_i);
when 1|2 =>
r1 <= '0'; a1 <= '1'; v1 <= '0';
r2 <= '1'; a2 <= '0'; v2 <= '0';
when 3 =>
r1 <= '1'; a1 <= '0'; v1 <= '0';
r2 <= '1'; a2 <= '1'; v2 <= '0';
when 4 to 23 =>
r1 <= '1'; a1 <= '0'; v1 <= '0';
r2 <= '0'; a2 <= '0'; v2 <= '1';
JES/SET

Semforo a demanda (4)

when 24|25 =>


r1 <= '1'; a1
r2 <= '0'; a2
when 26 =>
r1 <= '1'; a1
r2 <= '1'; a2
when 27 to 84 =>
r1 <= '0'; a1
r2 <= '1'; a2
when others =>
r1 <= '0'; a1
r2 <= '1'; a2
sr <= '1';
end case;
end process logica_comb;
end architecture Contador;
45

<= '0'; v1 <= '0';


<= '1'; v2 <= '0';
<= '1'; v1 <= '0';
<= '0'; v2 <= '0';
<= '0'; v1 <= '1';
<= '0'; v2 <= '0';
<= '0'; v1 <= '1';
<= '0'; v2 <= '0';

JES/SET

46

Conversor paralelo a serie

Generador
de fases
mltiples

Cmo se podra realizar un convertidor serie a paralelo con


un principio de funcionamiento similar?
JES/SET

47

JES/SET

48

Registros - clasificacin
 Registros de entrada paralelo y salida paralelo
(PIPO)
 Tipo latch
 Tipo sincrnico

 Registros de desplazamiento

Registros

 Registros de entrada serie y salida serie (SISO)


 Registros de entrada serie y salida paralelo (SIPO)
 Registros de entrada paralelo y salida serie (PISO)

 Veremos con ms detalle estos dispositivos


que ya fueron introducidos en unidades
anteriores.

JES/SET

49

JES/SET

50

Registro PIPO:
tipo latch vs. tipo sincrnico

Registros

Sincrnico!
Ms usado

tipo

Asincrnico!
Slo para

latch

pequeos
diseos

JES/SET

51

JES/SET

52

Banco de registros

Registros de 4 bits

(4 palabras de 3 bits)

sin y con salida de 3 estados

Similar
74xx373
(8 bits)

JES/SET

53

JES/SET

54

Memorias RAM estticas (SRAMs)




Usualmente asincrnicas (no en las FPGAs)

Son bancos de registros grandes.

Random Access Memory, por oposicin a las

SRAM de 128 KiB

Sequential Access Memories como las cintas


magnticas.

El trmino RAM se usa como opuesto a ROM,


pero las ROM son tambin RAM (excepto las Flash
NAND). Ms correcto sera denominarlas
Memorias de lectura y escritura.

Son voltiles (las PROM y Flash no lo son)

Su escritura se realiza a velocidades similares a la


lectura (las Flash son de escritura ms lenta que

Ntese las lneas de datos bidireccionales:

la lectura)

JES/SET

55

JES/SET

Reduce el nmero de terminales

Toma en cuenta que la escritura y lectura


simultnea no es necesaria

56

Registros de 4 bits
sin y con salida de 3 estados

Registros

Similar
74xx374

Sincrnicos

(8 bits)

(PIPO)

JES/SET

57

JES/SET

Registro sincrnico con CE y 3

Clock Enable

estados

 En el esquema anterior no es posible bloquear

la carga durante uno o ms ciclos de reloj.


 Se agrega un CE como vimos en la unidad de
FFs.

(1)

library IEEE;
use IEEE.std_logic_1164.all;

Similar

entity RegiSinc is
generic(
N : positive:=4);
port(
clk_i : in std_logic;
ce_i : in std_logic;
oe_i : in std_logic;
d_i
: in std_logic_vector(N-1 downto 0);
q_o
: out std_logic_vector(N-1 downto 0));
end entity RegiSinc;

74xx377
(8 bits)

JES/SET

58

59

JES/SET

60

Registro sincrnico con CE y 3


estados

Comunicacin entre registros

(2)

sincrnicos va buses

architecture Simple of RegiSinc is


signal qr : std_logic_vector(N-1 downto 0);
begin
registro:
process (clk_i)
begin
if rising_edge(clk_i) then
if ce_i='1' then
qr <= d_i;
end if;
end if;
end process registro;
q_o <= qr when oe_i='1' else (others => 'Z');
end architecture Simple; -- Entity: RegiSinc
JES/SET

61

JES/SET

62

Registro de desplazamiento con entrada serie


(SI), y salida serie (SO) y paralelo (Q0:Q3)

Registros de
desplazamiento
Pulsos de reloj

(Shift registers)

SI

Q3

Q2

Q1

Q0

recibidos

JES/SET

63

JES/SET

64

Registro bimodo

Registro bimodo

Desplazar y retener

Desplazar a derecha e izquierda


(desplazamiento bidireccional)

M=0 desplaza

M=0 desplaza a derecha (right)

M=1 retiene

M=1 desplaza a izquierda (left)

JES/SET

65

JES/SET

Registro bimodo

66

Registro de desp. c/PE (1)

Desplazar y cargar en paralelo

library IEEE;
use IEEE.std_logic_1164.all;
-- Implementa desplazamiento a derecha c/PE
entity Shift_PE is
generic(N : positive:=4);
port(
clk_i : in std_logic;
pe_i : in std_logic;
s_i : in std_logic;
d_i : in std_logic_vector(N-1 downto 0);
q_o : out std_logic_vector(N-1 downto 0));
end entity Shift_PE;

PE=Carga paralela
Tiene entradas y salidas tanto serie,
como paralelo.
JES/SET

67

JES/SET

68

Registro de desplazamiento

Registro de desp. c/PE (2)

universal

architecture Algorit of Shift_PE is


signal reg_r : std_logic_vector(N-1 downto 0);
begin
do_reg:
process (clk_i)
begin
if rising_edge(clk_i) then
if pe_i='1' then
reg_r <= d_i;
else
reg_r <= s_i&reg_r(N-1 downto 1);
end if;
end if;
end process do_reg;
q_o <= reg_r;
end architecture Algorit; -- Entity: Shift_PE
JES/SET

 Tiene entrada y salida serie


 Tiene salida paralelo (la que incluye la salida
serie)
 Tiene 4 modos de operacin sincrnicos:
 Desplazamiento a derecha

 Desplazamiento a izquierda
 Retencin
 Entrada paralelo
 En cada flip-flop hay un multiplexor de 4
entradas para elegir uno de estos 4 modos.
 Ejemplo: 74x194 (4 bits)

69

Registro de desp. Universal (1)

70

Registro de desp. Universal (2)

library IEEE;
use IEEE.std_logic_1164.all;
-- Implementa desplazamiento universal
entity Shift_Universal is
generic(N : positive:=4);
port(
clk_i : in std_logic;
rst_i : in std_logic;
modo_i : in std_logic_vector(1 downto 0);
sil_i : in std_logic;
sir_i : in std_logic;
d_i
: in std_logic_vector(N-1 downto 0);
q_o
: out std_logic_vector(N-1 downto 0));
end entity Shift_Universal;
JES/SET

JES/SET

71

architecture Algorit of Shift_Universal is


signal reg_r : std_logic_vector(N-1 downto 0);
signal sel
: std_logic_vector(N-1 downto 0);
begin
do_reg:
process (clk_i)
begin
if rising_edge(clk_i) then
if rst_i='1' then
reg_r <= (others => '0');
else
reg_r <= sel;
end if;
end if;
end process do_reg;
JES/SET

72

Transferencia de contenidos entre

Registro de desp. Universal (3)

q_o <= reg_r;


with modo_i select sel <=
sir_i&reg_r(N-1 downto 1) when "00",
reg_r(N-2 downto 0)&sil_i when "01",
reg_r
when "10",
d_i
when others; -- 11
end architecture Algorit; -- Entity: Shift_Universal

registros de desplazamiento
 Ambos de igual tamao y con el mismo reloj.
 Basta aplicar la SO del primer registro a la SI
del segundo, y aplicar a ambos tantos pulsos
de reloj como bits tengan (N pulsos)
 Si no se desea perder el contenido del
primero basta con realimentar su SO a su SI.

Rotacin

JES/SET

73

JES/SET

74

Algunas aplicaciones tpicas


1) Implementacin de cdigos detectores y correctores
de errores (Hamming, CRC, convolucionales).
2) Cifrado (encriptado) de mensajes.

Aplicaciones de los

3) Conversin entre informacin serie y paralelo (SIPO),


y viceversa (PISO).

registros de

4) Implementacin de circuitos secuenciales sincrnicos


de memoria de entrada finita (SIPO)
5) Retardo digital (SISO)

desplazamiento

6) Contadores en anillo y Johnson (SIPO)


7) Generadores de secuencia seudo-aleatoria (SIPO)
8) Multiplicador y divisor por 2 (SISO)
9) Realizacin de operaciones en serie (SISO)
1 y 2 estn fuera del alcance del curso.
La 3 es obvia y la 4 ya la vimos.

JES/SET

75

JES/SET

76

Retardo Digital

Pulsos de reloj

SI

Q3

Q2

Q1

Q0

4 ciclos de

reloj

recibidos

JES/SET

Demorado

77

Contador Johnson: decodificador

Contador Johnson: ventajas

Basta una compuerta AND o NOR de

 Menos flip-flops que el contador en

2 entradas por cada salida

anillo.
 Ms rpido que el generador de fases
mltiples.
 Libre de glitches (slo cambia un bit

Obtengo
Fases
Mltiples

entre estados, es cclico)

JES/SET

81

JES/SET

82

Generador de secuencia

Generador de secuencia

seudo-aleatoria (1)

seudo-aleatoria (2)


Secuencia seudo-aleatoria: aquella que a los fines


prcticos se comporta como aleatoria, salvo que

0s y 1s no es equiprobable (cuanto ms larga la

es posible regenerarla.

secuencia menos se nota)

Realimentacin lineal: aquella que aplica una

Hay tablas que nos dicen que seales realimentar.

transformacin lineal al valor realimentado. Un

Generan secuencias con todas las combinaciones

ejemplo es el uso de compuertas XOR.

Como la cantidad de bits es impar la cantidad de

posibles, menos la que todos los bits son 0.

LFSR: Linear Feedback Shift Register, es un


registro de desplazamiento que utiliza una
realimentacin lineal para SI.

Usando un LFSR de N bits se puede generar una


secuencia seudo-aleatoria de 2N-1 bits.

Basta con elegir la XOR de que bits realimentar.

JES/SET

85

Tabla de generadores de
secuencia seudo-aleatoria
N

Longitud 2N-1

SI

Q0

Q1

15

Q1

31

Q2

63

Q1

127

Q1

255

Q0
Q0
Q0
Q0

Q6 Q1 Q0

Q7

Q0

511

Q4

10

1023

Q3

11

2047

Q2

12

4095

Q11

Q10 Q2 Q0

13

8191

Q12

Q11 Q1 Q0

14

16383

Q13

Q12 Q2 Q0

15

32767

16

65535

JES/SET

Ejemplo usado

Q0
Q0

Q0

Q1

Q13 Q11 Q0

Q14

87

JES/SET

86

Registros de
desplazamiento y
operaciones serie

JES/SET

90

Desplazamiento a derecha

Convenciones

lgico vs aritmtico

 Almacenaremos magnitudes y enteros

 En el desplazamiento lgico se ingresa un 0

(Complemento a 2)
 El bit ms significativo lo colocaremos a la

por un extremo del SR y se descarta el bit del

izquierda.

extremo opuesto.
 En el desplazamiento aritmtico a derecha el

 Para simplificar los diagramas dibujaremos


los registros de desplazamiento de la

MSB se reinyecta.

siguiente manera:
Registro de
MSB

LSB

desplazamiento

MSB

LSB

Lgico

a derecha
Registro de
MSB

LSB

desplazamiento

Aritmtico

a izquierda
JES/SET

91

JES/SET

92

Multiplicacin por 2 de

Multiplicacin por 2 de enteros

magnitudes


Se realiza un desplazamiento lgico a izquierda.

El bit ms pesado sale por la izq. e indica si


hubo desborde.

Se realiza un desplazamiento lgico a izquierda.

El bit ms pesado sale por la izq. y se almacena

Se compara el signo resultante con el anterior.

Hay desborde si no coinciden.

Usualmente se almacena en el bit de carry.

MSB

LSB

JES/SET

93

Se realiza un desplazamiento lgico a derecha.

El bit menos pesado sale por la derecha y es el

LSB

JES/SET

Divisin por 2 de magnitudes




MSB

94

Divisin por 2 de enteros




Se realiza un desplazamiento aritmtico a


derecha.

resto de la divisin.

El bit menos pesado sale por la derecha y es el


resto de la divisin.

JES/SET

MSB

LSB

95

JES/SET

96

Desplazamientos en VHDL (1)




Para el tipo

std_logic_vector

Desplazamientos en VHDL (2)

srl
sll
sra
sla
ror
rol

se definen los dos

desplazamientos lgicos, los dos aritmticos y


dos rotaciones.

Son operadores y el formato es: vector operacin


pasos

Pasos es la cantidad de veces a repetir la


operacin, es un entero y puede ser negativo
(invierte sentido).

Ejemplo: Desplazar 2 veces a izquierda el

a (desplazamiento lgico),
almacenar el resultado nuevamente en a
a <= a sll 2;
contenido de

JES/SET

97

Desplazamientos en VHDL (3)


 Para los tipos

til slo si
el bit ms
significativo
est a la
derecha

JES/SET

98

Operaciones recursivas en serie

unsigned y signed se definen

 Se pueden realizar operaciones en serie

los desplazamientos lgicos y las rotaciones.

empleando un circuito apropiado en forma

 El detalle a tener en cuenta es que estos

recursiva, y reteniendo en flip-flops la

desplazamientos se convierten en aritmticos

informacin que debe ser transferida de

cuando el contexto as lo demanda.

una iteracin a la siguiente.


 Los registros de desplazamiento sirven, en

srl) de un

 As un desplazamiento a derecha (

unsigned se computa como lgico, pero


la misma operacin aplicada a un signed se
dato

esos casos, para proporcionar


progresivamente los datos, y/o almacenar

computa como aritmtica.

progresivamente los resultados.

 Esto es como en C.
 Cabe destacar que el comportamiento de
estos operadores no es compatible con VHDL
87 (IEEE 1076-1987).
JES/SET

99

JES/SET

100

Sumador de N bits (serie)




Comparador de N bits (serie)




El FF D arranca en 0, y los dos registros contienen los


sumandos. Q0 (izq.) contiene el MSB.

Los dos FF arrancan en 0, y los dos registros contienen


los nmeros a comparar. Q0 (izq.) contiene el LSB.

Al cabo de N pulsos de reloj, el registro A contiene la

Al cabo de N pulsos de reloj los registros recuperan su

suma, el B (que rota) recupera su valor original, y el

valor, y los FF almacenan el resultado de la

FF tiene cargado el Cy final.

comparacin.

JES/SET

101

JES/SET

102

Introduccin a las memorias FIFO




Las memorias FIFO (First In First Out), por acceder a los


datos de salida en forma seriada y yendo de los ms
antiguos a los ms recientemente recibidos).

Son por lo tanto una extensin conceptual de los


registros de desplazamiento, con las siguientes
importantes diferencias (que afectan los aspectos

Fin de la presentacin

constructivos):

 Los datos que maneja son palabras.


 El reloj que controla el ingreso de los datos puede ser

Contadores y registros 4.5

distinto del que controla la extraccin.

 La longitud del registro de desplazamiento mltiple


equivalente vara dinmicamente, ya que crece en
una unidad cada vez que se ingresa un nuevo dato, y
disminuye en una unidad cada vez que se extrae uno.

Son tiles para comunicar dos sistemas que utilizan


relojes distintos.

JES/SET

103

JES/SET

104

Conexin de contadores

Contador con 2 habilitaciones

acarreo anticipado

C1

C4

este caso hay hasta 2 niveles de lgica.


 Esto es lgico, C2 a C4 slo pueden necesitar

EP habilitacin de conteo en paralelo, y habilita


slo el conteo (no influye sobre TC)

contar si C1 desborda.
 El camino de ET no es crtico: ET3 y ET4 tienen

Para habilitar el conteo, ambas deben estar en 1.

Esto es un esquema, en realidad hay slo un nivel de


lgica (ET y EP van a todas las AND)

JES/SET

C3

 El TC de C1 habilita la cuenta de C2, C3 y C4. En

ET (trickle enable) habilitacin por propagacin,


similar a la E ya vista (afecta el conteo y TC)

C2

1 nivel!

tiempo de sobra (al menos todo lo que tarda C1


en desbordar).

105

JES/SET

106

Ejemplo acarreo anticipado


 ET va por el camino lento, pero tiene todo un
ciclo de un contador para resolverse.

JES/SET

108

Ejemplo acarreo anticipado

Arranque del contador en anillo

 ET va por el camino lento, pero tiene todo un

ciclo de un contador para resolverse.

Si arranca con ms de un flip-flop en 1, se queda


con ese nmero de unos (simplemente los rota)

Si arranca con todos los flip-flops en 0, no sale de


ese estado




Hay que agregar lgica que evite estos casos.


Nota: en FPGAs podemos hacer que el reset
fuerce el estados que querramos.

Arranque automtico: no impide que tras el


encendido aparezcan los estados indeseados,
pero logra que al cabo de unos pocos pulsos de
reloj se entre en la secuencia correcta,
suprimiendo los unos en exceso, o incorporando

Esto ya estaba

un 1 cuando no hubiera ninguno.

calculado!

JES/SET

109

JES/SET

Contador en anillo con arranque

C.J.: arranque automtico

automtico


Debe ingresar 1 por SI cuando:

 Todos son 0. Junto con lo anterior: sin importar


Q0, todos los otros son 0.

1 que hubiera en exceso)


2) todos los Q son 0, para meter el primer 1

=Q

.Q

.Q

.Q

Q

.Q

.Q

(1)

 Q =1 pero el resto no son todos 1


3

Debe ingresar un 1 si:


1) Q0 es 1, pero es el nico 1 (para ir sacando los

SI

110

.Q

=Q

.Q

.Q

SI

=Q  Q  Q
1

=Q

.Q

.Q

.Q

Q

.Q

.Q

Converge en N-2 pulsos de


reloj.
Ejemplo:
0101 0010 0001
0100 0010 0001
0110 0011
1011 1101 1110
1010 1101 1110

JES/SET

M-1 FFs

111

JES/SET

1001 1100

112

C.J.: arranque automtico




(2)

Debe ingresar 1 por SI cuando:

 Q es 0 y el estado es uno de los correctos.


0


Converge en N-1 pulsos de reloj.

Hay que hacer el mapa K.

SI

=Q

.Q .Q
2

Q

.Q .Q
1

Ejemplo:

0100 0010 0001


0101 0010 0001
1011 0101 0010 0001
1101 0110 0011
1001

1010

JES/SET

114

C.J.: arranque automtico




Si disponemos de un SR basta con activarlo

Converge en N-1 pulsos de reloj.

nico vlido que cumple es el que va a 0.

(3)

cuando Q0 es 1 y Q 1 es 0.

SI

=Q

y SR

=Q

.Q

Converge en N-1 pulsos de


reloj.
Ejemplo:
0110 1011 0101 0000
0100 1010 1101 0000
0010 1001 0000
SR slo
tambin
JES/SET

alcanza

116

C.J.: arranque automtico




(4)

Otras opciones de arranque rpido:


 Alterar el desplazamiento interno.

 Usar una solucin especial para ese N. Ya sea


porque es rpida o simple.

En el 74x4017 (N=5) se usa una alteracin del


desplazamiento, muy simple, pero puede tomar
hasta 10 ciclos de reloj.

JES/SET

118

You might also like