Hola nuevamente! :) eh estado un poco desaparecida por estos lares, el día de hoy les dejo un programa de un Convertidor de Código Binario a Gray que realice en VHDL.
Espero que sea de gran utilidad para ustedes, es un código muy sencillo y fácil de entender ;) cualquier duda o comentario es bienvenido.
El
código binario reflejado o código Gray, nombrado así en honor del investigador
Frank Gray, es un sistema de numeración binario en el que dos valores sucesivos
difieren solamente en uno de sus dígitos. El código Gray fue diseñado
originalmente para prevenir señales ilegales (señales
falsas o viciadas en la representación) de los switches electromecánicos, y
actualmente es usado para facilitar la corrección de errores en los sistemas de
comunicaciones, tales como algunos sistemas de televisión por cable y la
televisión digital terrestre.
El
Código Gray es un caso particular del sistema binario. Consiste en una
ordenación de 2n números binarios de tal forma que cada número sólo tenga un
dígito binario distinto a su predecesor. Esta técnica de codificación se
originó cuando los circuitos lógicos digitales se realizaban con válvulas de
vacío y dispositivos electromecánicos. Los contadores necesitaban potencias muy
elevadas a la entrada y generaban picos de ruido cuando varios bits cambiaban
simultáneamente. El uso de código Gray garantizó que en cualquier transición
variaría tan sólo un bit. En la actualidad, el código Gray se sigue empleando
para el diseño de cualquier circuito electrónico combinatorio, ya que el
principio de diseño de buscar transiciones más simples y rápidas entre estados
sigue vigente, a pesar de que los problemas de ruido y potencia se hayan
reducido.
Es
posible realizar esta conversión mediante una operación lógica XOR entre
el número binario a convertir y el mismo número con un desplazamiento lógico a
la derecha.
Objetivo
Realizar la descripción en VHDL del convertidor de código Binario a Gray mediante el algoritmo de conversión mencionado.
Tabla de Conversión |
Código en VHDL
library IEEE;use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity convertidor is
Port (b : in bit_vector (7 downto 0);
g : out bit_vector (7 downto 0));
end convertidor;
architecture Behavioral of convertidor is
begin
g <= b xor (b srl 1);
end Behavioral;
Código de Simulación
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
ENTITY sim IS
END sim;
ARCHITECTURE behavior OF sim IS
-- Component
Declaration for the Unit Under Test (UUT)
COMPONENT
convertidor
PORT( b : in bit_vector (7 downto 0);
g :
out bit_vector (7 downto 0));
END
COMPONENT;
--Inputs
signal b :bit_vector(7 downto 0) := (others =>
'0');
--BiDirs
signal g
: bit_vector (7 downto 0);
-- No clocks
detected in port list. Replace <clock> below with
--
appropriate port name
BEGIN
-- Instantiate
the Unit Under Test (UUT)
uut:
convertidor
PORT MAP (
b
=> b,
g
=> g );
-- Stimulus
process
stim_proc:
process
begin
-- hold
reset state for 100 ns.
wait for
100 ns;
-- wait for
<clock>_period*10;
-- insert
stimulus here
b <= "00000000"; wait for 100 ns;
b
<= "00000001"; wait for 100 ns;
b
<= "00000010"; wait for 100 ns;
b
<= "00000011"; wait for 100 ns;
b
<= "00000100"; wait for 100 ns;
b
<= "00000101"; wait for 100 ns;
b
<= "00000110"; wait for 100 ns;
b <= "00000111"; wait for 100
ns;
b
<= "00001000"; wait for 100 ns;
b
<= "00001001"; wait for 100 ns;
b
<= "00001010"; wait for 100 ns;
b
<= "00001011"; wait for 100 ns;
b
<= "00001100"; wait for 100 ns;
b <= "00001101"; wait
for 100 ns;
b <= "00001110"; wait for 100 ns;
b <= "00001111"; wait for 100 ns;
wait;
end
process;
END;
Implementación del código en la tarjeta Spartan 3E
Con las siguientes imágenes se demuestra que el código funciona, podemos observar que el encendido de los leds corresponde al numero Gray correspondiente al Decimal.
Implementación del convertidor para el número 3. |
Convertidor binario a gray para el número 4. |
En verdad espero que sea de gran utilidad este código, si necesitan ayuda pueden escribirme. Gracias por leerme y que tengan un gran día :).
Saludos a todos!!
Esta cool to proyecto :P
ResponderBorrarMuchsa gracias Guillrmo :)
Borrarquisiera que me ayudaras en que programa desarrollastes el codigo, nose si me epxlico, se que es en vhdl peor en que software
ResponderBorrar