我确实理解如何将二进制数转换为十进制数,但是下面那些应该这样做的代码没有意义。我的意思是让我们坐拥二进制数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;
答案 0 :(得分:1)
'range
循环从左到右工作。惯例是最重要的位在左侧
首先解码,*2
操作在MSB上运行最多次,如你所料。
(顺便说一句,如果你想让范围因某种原因走另一条路,你可以使用'reverse_range
属性)