循环代码的短VHDL我不明白

时间:2012-05-20 09:24:35

标签: vhdl

我确实理解如何将二进制数转换为十进制数,但是下面那些应该这样做的代码没有意义。我的意思是让我们坐拥二进制数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;

1 个答案:

答案 0 :(得分:1)

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

首先解码,*2操作在MSB上运行最多次,如你所料。

(顺便说一句,如果你想让范围因某种原因走另一条路,你可以使用'reverse_range属性)