2012-06-13 3 views
0

if 문에서 for 루프를 사용하는 것에 대한 질문이 있습니다. if 문은 프로세스 문 안에 있습니다. 문제는 for 루프가 실행되었지만 B의 값에 관계없이 한 번만 코드의이 부분을 실행할 때입니다. 명시 적 값을 입력하고 B를 무시하려고 시도했지만 루프는 한 번만 실행됩니다. 내가 놓친 게 있니?for 루프는 한 번만 실행합니다.

이 코드는 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); 
관련 문제