PROGRAMACION VHDL
Declaraciones condicionales asignadas a una señal (when-else)
La declaración when-else se utiliza para asignar valores a una señal, determinando así la
ejecución de una condición propia del diseño.
EJEMPLO:
library ieee;
use ieee.std_logic_1164.all;
entity asignacion is port(
a,b,c: in std_logic;
f: out std_logic);
end asignacion;
architecture ejemplo of asignacion is
begin
f <='1' when (a= '0' and b= '0' and c= '0') else
'1' when (a= '0' and b= '1' and c= '1') else
'1' when (a= '1' and b= '1' and c= '0') else
'1' when (a= '1' and b= '1' and c= '1') else
'0';
end ejemplo;
EJEMPLO 2:
Una función F depende de cuatro variables D, C, B, A, que representan un número binario, donde
A es la variable menos significativa. La función F adopta el valor de uno si el número formado
por las cuatro variables es inferior o igual a 7 y superior a 3. En caso contrario la función F es
cero.
library ieee;
use ieee. std_logic_1164. all;
entity asignacion2 is port (
D,C,B,A: in std_logic;
F: out std_logic);
end asignacion2;
architecture a_func of asignacion2 is
begin
F <= '1' when (A = '0' and B = '0' and C = '1' and D = '0') else
'1' when (A = '1' and B = '0' and C = '1' and D = '0') else
'1' when (A = '0' and B = '1' and c = '1' and D = '0') else
'1' when (A = '1' and B = '1' and c = '1' and D = '0') else
'0';
end a_func;
EJERCICIO PROPUESTO
1.
Realizar el programa VHDL.
2. Dada la tabla de verdad mostrada a continuación, halle las ecuaciones X, Y, Z, de la forma
suma de productos y prográmelas en VHDL, utilizando declaraciones concurrentes
asignadas a señales.
𝑥 = 𝐴̅𝐵̅𝐶̅ + 𝐴̅𝐵̅𝐶 + 𝐴̅𝐵𝐶 + 𝐴𝐵𝐶
𝑦 = 𝐴̅𝐵̅𝐶 + 𝐴𝐵̅𝐶 + 𝐴𝐵𝐶
𝑧 = 𝐴̅𝐵̅𝐶̅ + 𝐴̅𝐵𝐶̅ + 𝐴̅𝐵𝐶
Selección de una señal (with - select - when)
La declaración w i t h -S e l e c t - w h e n se utiliza para asignar un valor a una señal con base en
el valor de otra señal previamente seleccionada. Por ejemplo, en el listado correspondiente a la
figura se muestra el código que representa a este tipo de declaración. Como puede observarse,
el valor de la salida C depende de las señales de entrada seleccionadas a(0) y a(1), de acuerdo
con la tabla de verdad correspondiente.
library ieee;
use ieee.std_logic_1164.all;
entity asignacion3 is port(
a: in std_logic_vector (1 downto 0) ;
c: out std_logic);
end asignacion3;
architecture arq_cir of asignacion3 is
begin
with a select
c <= '1' when "00",
'0' when "01",
'1' when "10",
'0' when others;
end arq_cir;
EJERCICIO PROPUESTO
Se requiere diseñar un circuito combinacional que detecte números primos de 4 bits. Realice
la tabla de verdad v elabore un programa que describa su función. Utilice instrucciones del
tipo with - select - when.