2013-05-20 55 views
-3
back:while (sub1_mantissa(52)='0') loop 
     sub1_mantissa := sub1_mantissa(51 downto 0) & '0'; 
     count := count + "000000000001"; 
end loop back; 

喜。我想在矢量计算前导零......就像如果我的结果是0001,因此将显示3 zeros..so我的计数器将被3递增..当我将得到第一个1在MSB然后我的循环将停止...如何计算矢量领先0

即时通讯使用上述代码..但它不工作...计数器值需要太大像1100111 ...我我没有得到哪里是d问题......你们plz帮助我... N回复很快

+2

据我所知,你没有得到预期的结果。然而,你发布的代码应该基本上工作;你应该发布完整的代码让我们重现这个问题!先说一个评论:如果你的矢量“sub1_mantissa”只包含“0”,你将会有一个无限循环!避免! – baldyHDL

回答

1

我会用一个for循环来算这个,是这样的:

variable zero_count : natural := 0; 
    for i in sub1_mantissa'range loop 
    if sub1_mantissa(i) = '0' then 
     zero_count := zero_count + 1; 
    else 
     exit; 
    end if; 
    end loop; 

注意:如果使用DOWNTO表示法声明sub1_mantissa,则只会计数前导零。