2012-02-14 3 views
0

내가 ModelSim을에 D 플립 플롭에 대한 VHDL 코드를 쓰고 있어요 내가 그것을 시뮬레이션하려고 할 때 오류가 발생하는가 :디버깅 반복 제한 오류

Error: (vsim-3601) Iteration limit reached at time 400 ps.

잘 모르겠어요 무엇을 그것은 의미하지만, 많은 성공을 거두지 못한 소스 코드를 보았습니다. 문제가 무엇인지 추측 할 수 있습니까?

+2

코드를 게시하면 좋을 것입니다. – ForceMagic

답변

2

반복 제한에 도달하면 시스템이 안정화되지 않았 음을 의미합니다. 대부분의 경우 그것은이다과 같은 :

a <= b;

--- and then later...

b <= a;

+0

당신의 단순화 된 예제가 너무 단순해서 문제를 일으킬 수 있다고 생각합니다. 좀 더'a <= someFuntionOf (b, c, d, e); b <= someOtherFunctionOf (a, f, g, h)'...... 그렇지만 OP에는 코드에 피드백 루프가있는 것 같습니다. –

0

당신은 당신이 루프를 볼 때까지 코드 및 단일 단계에서 중단 점을 추가해야합니다. 또 다른 기술은 어쩌면 생산적일지도 모르지만 반복 및 민감성 목록을 면밀히 검토하여 좋은 코드 검토 방법입니다.

0

위에서 언급 한 것처럼 신호가 안정화되지 않는 것이 문제입니다. 두 가지 조합 논리 신호가 계속해서 서로 바뀌는 것이 문제 일지 모르지만 후자를 위해 강조하고자하는 몇 가지 다른 가능성이 있습니다.

자일링스가 Answer Record #19068에 기록한대로 민감도 목록의 신호를 변경하는 프로세스가 원인 일 수 있습니다.

마지막으로 여기에서 내 문제를 해결하기위한 또 다른 확인은 시뮬레이션 해상도가 충분히 작은 지 확인하는 것입니다. 내 것이 너무 높았고 테스트 벤치의 시계가 단일 시뮬레이션 단계에서 너무 자주 실행되었습니다.

2

이 오류는 일반적으로 ModelSim이 무한 루프에 고정되어 있음을 나타냅니다. VHDL에서 이것은 신호가 민감도 목록에 배치되고이 신호가 프로세스에서 변경 될 때 발생할 수 있습니다. 신호가 변경되면서 프로세스가 트리거되어 신호가 변경되고 다시 프로세스가 시작되고주기가 계속됩니다.

은 다음 무한 루프가 발생하는 과정의 간단한 예입니다 :

PROCESS (count) 

BEGIN 

count <= not count; 

END PROCESS; 
1

하나의 문제 대부분의 사람들은 VHDL이나 다른 HDL 언어로해야하는 것은 그들이이 순차적 아니라는 것을 이해하지 못하는 것입니다 암호. 프로세스 내부에있는 모든 것들이 동시에 발생합니다. 아메드의 예는 좋은 하나입니다

PROCESS (count) 

BEGIN 

count <= not count; 

END PROCESS; 

HDL을 시뮬레이터는 각 시뮬레이션 틱 후 "계산하지"하는 계수의 값을 설정하려고 시도와 변화는 값 때문에 다른 진드기를 트리거 카운트가 변경되고 문제가 발생하거나 위의 문제가 발생할 때까지 계속 진행됩니다.

HDL이 제대로 작동하려면 실제 형태의 지연을 사용하기 위해 시계 형태 또는 합성용이 아닌 지연 형식을 사용해야합니다. 위의 코드를 변경하여

PROCESS (count) 
BEGIN 
    count <= not count after 1 ns; 
END PROCESS; 

에 시뮬레이션 작동 카운트는 모든 NS 1 전환한다.