std_logic_vectorからintegerへ型変換する函数を作る / process内に

std_logic_vectorからintegerへ型変換する函数をprocess内に記述する。

pp.357-358

library ieee;
use ieee.std_logic_1164.all;

entity test_circuit is
    generic(
        WIDTH: natural := 8
    );
    port(
        clk: in std_logic;
        inp: in std_logic_vector(WIDTH-1 downto 0);
        
        outp: out integer range 0 to 2**WIDTH-1
    );
end entity;

architecture rtl of test_circuit is
begin
    process
       -- 函数を記述する。
        function slv_to_integer (slv: std_logic_vector) return integer is
            variable result: integer range 0 to 2**slv'length-1 := 0;
        begin
            for i in slv'range loop
                result := result * 2;
                if slv(i)='1' then
                    result := result + 1;
                end if;
            end loop;
            return result;
        end function;
    begin
        wait until clk;
        outp <= slv_to_integer(inp);
    end process;

end architecture;