Esto es principalmente para Jonathan Drolet, pero también hay una lección aquí.
Tenga en cuenta que el argumento de parámetro para my_function proporciona una marca de tipo con una indicación de subtipo. Esto es válido en VHDL.
library ieee;
use ieee.std_logic_1164.all;
entity myfunc is
end entity;
architecture foo of myfunc is
function my_function(lv: std_logic_vector(3 downto 0))
return std_logic_vector is
begin
return lv & "000";
end function;
constant fumble: std_logic_vector (3 downto 0) := x"E";
signal humble: std_logic_vector (6 downto 0);
begin
humble <= my_function(fumble);
end architecture;
Este código analiza, elabora y simula.
Tenga en cuenta que la marca de retorno es un subtipo sin restricciones y el valor del resultado se asigna a una señal declarada con una indicación de subtipo (que proporciona una restricción de índice).
Existen reglas específicas para determinar el valor efectivo de una señal que requiere que se comprueben los límites después de una conversión implícita de subtipo. Proporcionar un valor de retorno que no coincida con los límites de humble
daría lugar a un error de tiempo de ejecución que hace que la simulación finalice sin completarse con éxito.
En otras palabras, una restricción no es necesaria aquí. La indicación de subtipo de valor de retorno se deriva internamente, y como se muestra en esto desde el parámetro de entrada.