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)が出力された。