属性

pp.28-29

オブジェクトの持つさまざまな属性が読み出せる。ここでは排列要素の最大値を求める。

entity sute_vhdl is
    port(
        num_out: out natural range 0 to 15
    );
end entity;

architecture rtl of sute_vhdl is
    type nat8_vect_t is array(natural range <>) of natural;
    constant SUTE_ARRAY: nat8_vect_t := (1,6,9,1,4,5,6,7,14,8,5,3);
begin

    process(all)
        variable max: natural;
    begin
       -- 排列の'leftは左端のインデックス(ここでは0)。
        max:= SUTE_ARRAY(SUTE_ARRAY'left);
        
       -- 排列の'rangeはインデックスの範囲(ここでは0 to 11)。
        for i in SUTE_ARRAY'range loop
       --for i in 1 to SUTE_ARRAY'right loop -- 先にインデックス0の値を取り出したのでループは1から始めたほうが無駄がない。排列の'rightは右端のインデックス。
       --for i in 1 to SUTE_ARRAY'length - 1 loop -- これも同じ。排列の'lengthは排列の要素数(ここでは12)。
            if SUTE_ARRAY(i) > max then
                max := SUTE_ARRAY(i);
            end if;
        end loop;
        num_out <= max;
    end process;

end architecture;

配列要素の最大値である14 (0b1110)が出力された。
f:id:ti-nspire:20210709064357j:plain:w600