Você está na página 1de 12

INTEGRACIÓN DE ENTIDADES EN

VHDL
PROGRAMACIÓN DE IDENTIDADES INDIVIDUALES
El siguiente circuito lógico está formado por subsistemas: teclado, codificador, registro,
decodificador de 7 segmentos activo en bajo y display de siete segmentos.
La finalidad es observar en el display el numero decimal equivalente al de la tecla presionada.
library ieee;
process (clk,A,D) begin
use ieee.std_logic_1164.all:
entity display is port ( if (clk’event and clk =‘1’) then
clk, x: in std_logic; Q<=A;
tecla: in std_logic_vector (0 to 8); D <= Q;
C: inout std_logic_vector (3 downto 0); end if;
A: inout std_logic_vector(3 downto 0); case D is
Q: inout std_logic_vector(3 downto 0); when “0000” => seg <= “0000001”;
D: inout std_logic_vector(3 downto 0); when “0001” => seg <= “1001111”;
seg: out std_logic_vector(0 to 6)); when “0010” => seg <= “0010010”;
end display;
when “0011” => seg <= “0000110”;
architecture arq_disp of display is
begin when “0100” => seg <= “1001100”;
C <= “0001” when tecla = “100000000” else when “0101” => seg <= “0100100”;
“0010” when tecla = “010000000” else when “0110” => seg <= “0100000”;
“0011” when tecla = “001000000” else when “0111” => seg <= “0001110”;
“0100” when tecla = “000100000” else when “1000” => seg <= “0000000”;
“0101” when tecla = “000010000” else when others => seg <= “0001100”;
“0110” when tecla = “000001000” else end case;
“0111” when tecla = “000000100” else end process;
“1000” when tecla = “000000010” else
End arq_disp.;
“1001”;
A <= C;
PROGRAMACIÓN DE ENTIDADES INDIVIDUALES
MEDIANTE ASIGNACIÓN DE SEÑALES
Este tipo de programación es posible solo cuando los bloques individuales se
relaciones mediante señales internas.
El circuito solo recibe como entradas las líneas provenientes del teclado y como
salidas las 7 terminales del decodificador.
library ieee;
use ieee.std_logic_1164.all; elsif (tecla = “000001000”) then
entity display is port ( C<=“0110”;
clk, x: in std_logic; elsif (tecla = “000000100”) then
tecla: in std_logic_vector (0 to 8); C<=“0111”;
seg: out std_logic_vector(0 to 6)); elsif (tecla = “000000010”) then
end display; C<=“1000”
architecture arq_disp of display is else
signal C: std_logic_vector (3 downto 0); C<= “1001”;
signal Q: std_logic_vector(3 downto 0); end if;
begin
process (clk,tecla,C,Q) begin
case Q is
if (clk’event and clk =‘1’) then when “0000” => seg <= “0000001”;
Q<=C; when “0001” => seg <= “1001111”;
end if; when “0010” => seg <= “0010010”;
if (tecla = “100000000”) then when “0011” => seg <= “0000110”;
C <= “0001”; when “0100” => seg <= “1001100”;
elsif (tecla = “010000000”) then when “0101” => seg <= “0100100”;
C <= “0010”; when “0110” => seg <= “0100000”;
elsif (tecla = “001000000”) then when “0111” => seg <= “0001110”;
C <= “0011”; when “1000” => seg <= “0000000”;
elsif (tecla = “000100000”) then when others => seg <= “0001100”;
C<=“0100”; end case;
elsif (tecla = “000010000”) then end process;
C<=“0101” ; end arq_disp.;
EJEMPLO
Realice la programación en
VHDL para integrar los
diferentes bloques lógicos
mostrados en el circuito.
DESCRIPCIÓN DEL PROBLEMA
El circuito se utiliza para automatizar el proceso de empaquetado de muñecas de porcelana.
Considere que las muñecas se pueden empaquetar en forma individual o con un máximo de
nueve unidades por paquete.

En un inicio el operador selecciona, mediante el teclado decimal, la cantidad de piezas que


va a empaquetar. Como sabemos, el número decimal se convierte a código BCD a través del
circuito codificador y luego pasa mediante el hacia el decodificador de 7 segmentos para
mostrar el valor seleccionado en el display.
Observe que este valor binario es a su vez la entrada del circuito comparador de 4 bits.
DESCRIPCIÓN DEL PROBLEMA
Después de seleccionar la cantidad de muñecas por empaquetar, el operador presiona el
botón de inicio, que desencadena una serie de acciones controladas por el bloque
denominado controlador. Comienza con una señal de salida llamada RESET, que coloca al
contador binario en estado CERO; enseguida, envía la señal de arranque (ENCENDIDO) al
motor que controla el avance de la banda transportadora.
Ahora bien, cada vez que una de las muñecas colocadas sobre la banda transportadora
para por el “sensor”, se origina un impulso eléctrico (pulso) que hace que el contador
aumente en 1 su conteo. Este proceso continúa incrementando al contador en una unidad
hasta el momento en que la cifra actual del contador (número B) es igual al número A dentro
del comparador (A=B). Cuando se cumple esta condición, el comparador envía una señal al
bloque del controlador que detiene la banda transportadora (APAGADO) y marca el fin del
proceso.
INTERCAMBIO DE SEÑALES QUE SE REALIZA ENTRE EL
CONTROLADOR Y CADA BLOQUE LÓGICO DEL SISTEMA
library ieee;
use ieee.std_logic_1164.all; elsif (tecla = “001000000”) then
use ieee.std_arith.all; C <= “0011”;
entity control is port ( elsif (tecla = “000100000”) then
C<=“0100”;
clk, reset: in std_logic; elsif (tecla = “000010000”) then
tecla: in std_logic_vector (0 to 8); C<=“0101” ;
sensor: in std_logic; elsif (tecla = “000001000”) then
seg: out std_logic_vector(0 to 6) C<=“0110”;
compara: out std_logic); elsif (tecla = “000000100”) then
end control; C<=“0111”;
architecture arq_con of control is elsif (tecla = “000000010”) then
signal C, Q, R: std_logic_vector (3 downto 0); C<=“1000”
begin else
C<= “1001”;
proceso1: process (sensor, reset, Q) begin end if;
if (sensor’event and sensor =‘1’) then case R is
Q<=Q+1; when “0000” => seg <= “0000001”;
if (reset = ‘1’ or Q = “1001”) then when “0001” => seg <= “1001111”;
Q<=“0000”; when “0010” => seg <= “0010010”;
end if; when “0011” => seg <= “0000110”;
end if; when “0100” => seg <= “1001100”;
end process proceso1; when “0101” => seg <= “0100100”;
when “0110” => seg <= “0100000”;
proceso2: process(clk, tecla, R) begin when “0111” => seg <= “0001110”;
If (clk’event and clk=‘1’) then when “1000” => seg <= “0000000”;
R <= C; when others => seg <= “0001100”;
if (tecla = “100000000”) then end case;
C <= “0001”; end process proceso2;
elsif (tecla = “010000000”) then
C <= “0010”; compara <=‘1’ when Q = R else ‘0’;
end arq_disp.;

Você também pode gostar