4. Funciones

Anuncio
Funciones
El mismo concepto que los LANs
Sintaxis de la definición de una función en VHDL
function nombre-función
(nombre-señal : tipo-señal;
nombre-señal : tipo-señal;
...
nombre-señal : tipo-señal
)
-- parámetros formales que serán sustituidos por los
-- parámetros reales que serán del mismo tipo o subtipo
return tipo-devuelto is
Diseño lógico
-- se devuelve un valor de este tipo
EUI-ULPGC
Jose Torres
type declarations
-- Una función puede definir sus
propios objetos
declaraciones de constantes y variables
definiciones de función
definiciones de procedimientos
begin
instrucción-secuencial
instrucción-secuencial
...
instrucción-secuencial
end nombre-función;
Diseño lógico
-- instrucciones secuenciales
(las veremos en su momento)
EUI-ULPGC
Jose Torres
Ejemplo: programa VHDL para una función “inhibit”
architecture Inhibit_archf of Inhibit is
function ButNot (A, B: bit) return bit is
begin
if B = '0' then return A;
-- ´return´ indica lo que devuelve la
else return '0';
-- función a quien la llamó
end if;
end ButNot;
begin
Z <= ButNot(X,Y);
end Inhibit_archf;
Diseño lógico
EUI-ULPGC
Jose Torres
Ejemplo: conversión de std_logic_vector a entero
function conv_integer (X: std_logic_vector) return integer is
variable result: integer;
begin
result := 0;
for i in X'range loop
result := result * 2;
case X(i) is
when '0' | 'L' => null;
-- no hacer nada
when '1' | 'H' => result := result + 1;
when others => null;
end case;
end loop;
return result;
end conv_integer;
Diseño lógico
EUI-ULPGC
Jose Torres
En la otra dirección:
function conv_std_logic_vector(arg: integer; size: integer) return
std_logic_vector is
variable result: std_logic_vector (size-1 downto 0);
variable temp: integer;
begin
temp := arg;
for i in 0 to size-1 loop
if (temp mod 2) = 1 then result(i) := '1';
else result(i) := '0';
end if;
temp := temp / 2;
end loop;
return result; -- donde size es el número de bits del resultado
end conv_std_logic_vector;
Diseño lógico
EUI-ULPGC
Jose Torres
Descargar