2013-05-20 96 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,則只會計數前導零。