2017-01-16 5 views
0

다음 코드에서 정수 값 1로 cipher_temp2를 초기화했습니다. 그러나 코드를 시뮬레이트 할 때 cipher_temp2의 값이 0 대신 초기화됩니다. 나는 내가 어디로 잘못되었는지 알아낼 수 없다.신호가 VHDL에서 정수 값으로 초기화 할 수 없습니다.

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
entity ciphercalculation is 
     Port (Msg_temp2 : in integer; 
       cipher : out integer); 
end ciphercalculation; 

architecture Behavioral of ciphercalculation is 
CONSTANT e1: std_logic_vector(0 TO 2) := ('1', '0', '1'); 
CONSTANT Pk:integer:=377; 
CONSTANT le:integer:=2; 
Signal cipher_temp2:integer:=1; 
begin 
process(cipher_temp2,Msg_temp2) 
begin 
for i in 0 to le loop 
     if (e1(i)= '0') then 
      cipher_temp2<=((cipher_temp2*cipher_temp2) mod Pk); 
     else 
      cipher_temp2<=((cipher_temp2*cipher_temp2) mod Pk); 
      cipher_temp2<=((cipher_temp2*Msg_temp2)mod Pk); 
     end if; 
    end loop; 

cipher<=cipher_temp2; 
    end process; 

end Behavioral; 
+1

이 것을 보여주는 최소 테스트 벤치 게시. 또한 사용중인 시뮬레이터/버전을 언급하십시오. ghdl에서 나는 그것이 1로 초기화되는 것을 본다. 그 다음 프로세스는 활성화되고 340으로 설정되고 0으로 설정된다. –

+0

http://imgur.com/a/B2Lgj 여기 시뮬레이션의 스크린 샷입니다. 나는 비바도 (Vivado)를 사용했다. 2014.4 –

+0

그리고 내가 설명했듯이 그것은 당신이 볼 필요가있는 것을 쌓아 두지 않을 것이다. –

답변

0

우선 나는 당신의 포트 매핑에 std_logic_vector 또는 std_logic를 사용하여 시작하는 몇 가지를 제안하고 싶습니다. 다른 모듈을 사용하거나 Verilog/VHDL/SystemVerilog를 인터페이스해야 할 때 훨씬 쉽게 할 수 있습니다. 또한 인터페이스에 시계가 있으면 일이 더 매끄럽게 실행되고 디버깅이 쉬워집니다.

이제 시뮬레이션은 FPGA의 실제 시뮬레이션이 아니라 자일링스 툴이 최선을 다하고 있음을 알아야한다. FPGA에는 전원 켜기, GSR 또는 전역 설정/재설정시 모든 로직에 신호가 흐릅니다. 이 신호는 모든 와이어/레지스터/리프/셀이 어떻게 초기화 될지를 지시합니다.

GSR이 설정하는 초기 값을 사용할 때 항상주의해야 할 한 가지 문제는 GSR이 비동기 이벤트이므로 클러킹과 상관없이 발생하는 것입니다.

일반적으로 값은 선언문에서 지시하는대로 초기화해야하지만 시뮬레이션이기 때문에 (그리고 vivado의 엔진을 사용하여) 사용자가 생각하는대로 시뮬레이션 할 수 없기 때문에 값을 초기화해야합니다. 이것을 자일링스로 합성하는 경우, 초기 값은 합성 표준의 일부가 아니라는 점에 유의하십시오. 툴은 값을 LUT에 넣어야합니다. 그러나 시뮬레이션을 수행하는 동안 도구는 FPGA 인 것처럼 작동하지만 사용자가 지정한 자극 만 시뮬레이션합니다. vivado 시뮬레이터가 ISE보다 조금 나은 점은 문제가 될 수 있습니다 (여전히 동일한 코드 명을 사용하지만 vivado 엔진이 개선되었습니다).

이 문제를 해결하려면 초기 값을 지정하는 간단한 재설정 조건이 필요합니다. 또한 Xilnix 표준은 ~ 5us에 대한 재설정을 보류하는 것입니다.