2012-06-13 137 views
0

我有一個關於在if語句中使用for循環的問題。 if語句在進程聲明中。問題是,當我執行for循環的代碼部分時,只執行一次,而不考慮B的值。我甚至嘗試輸入顯式值並忽略B,但循環只執行一次。我錯過了什麼嗎?for循環只執行1次

該代碼是應用邏輯左移而不使用sll的ALU行爲模型的一部分。

 elsif ALU_Control = "100" then 
      -- implement shift logic left by B units 
      if (B > X"00000000") then 
       -- Use value of B input as the shift position 
       shift_value := TO_INTEGER(UNSIGNED(B)); 
       -- concatenate a 0 to end of A   
       for index in 0 to shift_value loop 
        temp_A := (A(30 downto 0) & '0'); 
       end loop; 

       ALU_out <= temp_A(31 downto 0) after 100 ps; 
      else 
       ALU_out <= A after 100 ps; 
      end if; 
+1

指數沒有在循環使用:?是被optmised遠離你可以添加一些日誌記錄,以證明temp_A被改變了?只有一次? –

+0

你有沒有結束'elsif'? –

+0

我不知道如何。不幸的是,我剛開始學習VHDL。當我在Isim(Xilinx)上運行測試平臺時,無論在索引範圍中使用什麼值,此ALU控制輸入的輸出僅「移位」1位。 – user1452627

回答

3

在這裏看看這部分代碼的:

for index in 0 to shift_value loop 
    temp_A := (A(30 downto 0) & '0'); 
end loop; 

,做同樣的事情循環的每一次迭代,所以無論循環多少次運行時,你會得到相同的結果。也許你真正的意思有財產以後這樣的:

temp_A := A; 
for index in 0 to shift_value loop 
    temp_A := temp_A(30 downto 0) & '0'; 
end loop; 
2

沒有一個循環:

temp_A := (others => '0'); 
temp_A(A'high downto shift_value) := A(A'high-shift_value downto A'low);