0

我确实了解如何将二进制数转换为十进制数,但是下面应该这样做的代码没有意义。我的意思是让我们有一个二进制数 10,然后 v(i) 将为 0,因此结果保持为 0。在下一次迭代时 v(i) 将为 1,因此结果将为 0 + 1 。循环停止,函数将返回结果值 1 而不是 2,这是放入函数的二进制数的值。有人能告诉我为什么我错了吗?此代码附带大学作业,因此它应该是正确的。谢谢。:)

-------------------------------------------------------------------------------
-- 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;
4

1 回答 1

1

'range循环从左到右工作。惯例是最重要的位在左边

通过首先对其进行解码,该*2操作在 MSB 上运行的次数最多,正如您所期望的那样。

(顺便说一句,如果您出于某种原因希望范围相反,您可以使用该'reverse_range属性)

于 2012-05-21T12:04:59.437 回答