Registro (Hardware)
En arquitectura de ordenadores, un registro es una memoria de alta velocidad y poca capacidad, integrada en el microprocesador, que permite guardar transitoriamente y acceder a valores muy usados, generalmente en operaciones matemáticas.
Los registros están en la cumbre de la jerarquía de memoria, y son la manera más rápida que tiene el sistema de almacenar datos. Los registros se miden generalmente por el número de bits que almacenan; por ejemplo, un "registro de 8 bits" o un "registro de 32 bits". Los registros generalmente se implementan en un banco de registros, pero antiguamente se usaban biestables individuales, memoria SRAM o formas aun más primitivas.
El término es usado generalmente para referirse al grupo de registros que pueden ser directamente indexados como operandos de una instrucción, como está definido en el conjunto de instrucciones. Sin embargo, los microprocesadores tienen además muchos otros registros que son usados con un propósito específico, como el contador de programa. Por ejemplo, en la arquitectura IA32, el conjunto de instrucciones define 8 registros de 32 bits.
Tipos de registros
Los registros de datos son usados para guardar números enteros. En algunas computadoras antiguas, existía un único registro donde se guardaba toda la información, llamado acumulador.
Los registros de memoria son usados para guardar exclusivamente direcciones de memoria. Eran muy usados en la arquitectura Harvard, ya que muchas veces las direcciones tenían un tamaño de palabra distinto que los datos.
Los registros de propósito general (en inglés GPRs o General Purpose Registers) pueden guardar tanto datos como direcciones. Son fundamentales en la arquitectura de von Neumann. La mayor parte de las computadoras modernas usa GPR.
Los registros de coma flotante son usados para guardar datos en formato de coma flotante.
Los registros constantes tienen valores creados por hardware de sólo lectura. Por ejemplo, en MIPS el registro cero siempre vale 0.
Los registros de propósito específico guardan información específica del estado del sistema, como el puntero de pila o el registro de estado.
Diseño de un registro de 4 bits en VHDL
Codigo para el modulo de VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_unsigned.all;
entity registro is
Port ( Ver,Guardar,Clean : inout STD_LOGIC;
Reloj : in std_logic;
Entrada : in STD_LOGIC_VECTOR (3 downto 0);
Salida : out STD_LOGIC_VECTOR (3 downto 0));
end registro;
architecture Behavioral of registro is
Signal Registro : std_logic_vector (3 downto 0);
Signal Contador : integer := 0;
begin
process(reloj)
begin
if reloj'event and reloj = '1' then
contador <= contador + 1;
if contador = 1 then
if guardar = '1' then
Registro <= Entrada;
end if;
if ver = '1' then
Salida <= Registro;
end if;
if Clean = '1' then
Registro <= "0000";
Salida <= Registro;
end if;
contador <= 0;
end if;
end if;
end process;
end Behavioral;
Codigo UCF
NET "Salida[0]" LOC = m5;
NET "Salida[1]" LOC = m11;
NET "Salida[2]" LOC = p7;
NET "Salida[3]" LOC = p6;
NET "Entrada[0]" LOC = p11;
NET "Entrada[1]" LOC = l3;
NET "Entrada[2]" LOC = k3;
NET "Entrada[3]" LOC = b4;
NET "Ver" LOC = c11;
NET "Reloj" LOC = b8;
NET "Guardar" LOC = g12;
NET "Clean" LOC = m4;
En arquitectura de ordenadores, un registro es una memoria de alta velocidad y poca capacidad, integrada en el microprocesador, que permite guardar transitoriamente y acceder a valores muy usados, generalmente en operaciones matemáticas.
Los registros están en la cumbre de la jerarquía de memoria, y son la manera más rápida que tiene el sistema de almacenar datos. Los registros se miden generalmente por el número de bits que almacenan; por ejemplo, un "registro de 8 bits" o un "registro de 32 bits". Los registros generalmente se implementan en un banco de registros, pero antiguamente se usaban biestables individuales, memoria SRAM o formas aun más primitivas.
El término es usado generalmente para referirse al grupo de registros que pueden ser directamente indexados como operandos de una instrucción, como está definido en el conjunto de instrucciones. Sin embargo, los microprocesadores tienen además muchos otros registros que son usados con un propósito específico, como el contador de programa. Por ejemplo, en la arquitectura IA32, el conjunto de instrucciones define 8 registros de 32 bits.
Tipos de registros
Los registros de datos son usados para guardar números enteros. En algunas computadoras antiguas, existía un único registro donde se guardaba toda la información, llamado acumulador.
Los registros de memoria son usados para guardar exclusivamente direcciones de memoria. Eran muy usados en la arquitectura Harvard, ya que muchas veces las direcciones tenían un tamaño de palabra distinto que los datos.
Los registros de propósito general (en inglés GPRs o General Purpose Registers) pueden guardar tanto datos como direcciones. Son fundamentales en la arquitectura de von Neumann. La mayor parte de las computadoras modernas usa GPR.
Los registros de coma flotante son usados para guardar datos en formato de coma flotante.
Los registros constantes tienen valores creados por hardware de sólo lectura. Por ejemplo, en MIPS el registro cero siempre vale 0.
Los registros de propósito específico guardan información específica del estado del sistema, como el puntero de pila o el registro de estado.
Diseño de un registro de 4 bits en VHDL
Codigo para el modulo de VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_unsigned.all;
entity registro is
Port ( Ver,Guardar,Clean : inout STD_LOGIC;
Reloj : in std_logic;
Entrada : in STD_LOGIC_VECTOR (3 downto 0);
Salida : out STD_LOGIC_VECTOR (3 downto 0));
end registro;
architecture Behavioral of registro is
Signal Registro : std_logic_vector (3 downto 0);
Signal Contador : integer := 0;
begin
process(reloj)
begin
if reloj'event and reloj = '1' then
contador <= contador + 1;
if contador = 1 then
if guardar = '1' then
Registro <= Entrada;
end if;
if ver = '1' then
Salida <= Registro;
end if;
if Clean = '1' then
Registro <= "0000";
Salida <= Registro;
end if;
contador <= 0;
end if;
end if;
end process;
end Behavioral;
Codigo UCF
NET "Salida[0]" LOC = m5;
NET "Salida[1]" LOC = m11;
NET "Salida[2]" LOC = p7;
NET "Salida[3]" LOC = p6;
NET "Entrada[0]" LOC = p11;
NET "Entrada[1]" LOC = l3;
NET "Entrada[2]" LOC = k3;
NET "Entrada[3]" LOC = b4;
NET "Ver" LOC = c11;
NET "Reloj" LOC = b8;
NET "Guardar" LOC = g12;
NET "Clean" LOC = m4;