2進数を10進数に変換する方法は理解していますが、それを行うはずの次のコードは意味がありません。つまり、2 進数の 10 があるとすると、v(i) は 0 になるため、結果は 0 のままです。次の反復では、v(i) は 1 になるため、結果は 0 + 1 になります。ループが停止し、関数は、関数に入れられた 2 進数の値である 2 ではなく、1 である結果の値を返します。誰かが私が間違っている理由を教えてもらえますか? このコードは大学の課題に付属しているため、正しいはずです。ありがとう。:)
-------------------------------------------------------------------------------
-- convert std_logic vector v to natural
-------------------------------------------------------------------------------
FUNCTION s2n(v: std_logic_vector)
RETURN natural IS
VARIABLE result: natural := 0;
BEGIN
FOR i IN v'range LOOP
result := result * 2;
IF v(i) = '1' THEN
result := result + 1;
END IF;
END LOOP;
RETURN result;
END s2n;