음, 그렇습니다. 하지만 쓸 수 없습니다 :
subtype ADDRESS is UNSIGNED range (f(x)) downto 0;
올바르지 않기 때문에 VHDL. 당신이 작성해야합니다 :
subtype ADDRESS is UNSIGNED (f(x) downto 0);
x
는 정적해야합니다 경우. 즉 x
은 리터럴, 상수 또는 일반이어야합니다.
이 방법으로 함수를 사용하여 상수 및 기타 정적 값의 값을 정의 할 수 있습니다. 그러한 함수에 대한 모든 입력은 정적이어야합니다. 흥미롭게도 이러한 기능은 정교화 과정에서 실행되므로 디버깅하기가 어려울 수 있습니다. 이러한 함수를 디버깅하는 데 문제가있는 경우 일시적으로 함수의 반환 값 대상을 정적이 아닌 무언가 (예 : 변수)로 변경할 수 있습니다. 함수는 시간 0 후에 실행되어 더 쉽게 디버깅 할 수 있습니다. 는 여기에 실제 예제 :
package P is
function F(I : integer) return integer;
end package P;
package body P is
function F(I : integer) return integer is
begin
if I > 16 then
return I - 1;
else
return (I * 2) - 1;
end if;
end function F;
end package body P;
library IEEE;
use IEEE.numeric_std.all;
use work.P.all;
entity E is
constant X : integer := 16;
end entity E;
architecture E of E is
subtype ADDRESS is UNSIGNED (f(x) downto 0);
begin
process
begin
report "ADDRESS'left= " & integer'image(ADDRESS'left);
wait;
end process;
end architecture E;
그리고 여기가 EDA Playground에 있습니다.