2009-10-28 14 views
-1

AHDL에서 컨트롤 유닛 (UC)을 구현했으며, 시뮬레이트하고 해당 ASM 다이어그램에 정의 된대로 작동하는지 확인해야합니다. 시뮬레이션을 위해 MAX + plus II을 사용했는데 예상대로 작동하지 않지만 실제로 AHDL에 익숙하지 않아서 무엇이 잘못되었는지 말할 수 없습니다. TABLE 부분은 말할 것도 없습니다. 이해가 안 시뮬레이션에서이 상황이 있습니다TABLE은 AHDL에서 어떻게 작동합니까?

 
SUBDESIGN EXP1_UC 
(
CLKUC: INPUT; 
RES: INPUT; 
N1,N2,M1,M2: INPUT;
CLR1, CLR2, CLR3, EN1, EN2, EN3, SEL: OUTPUT; ) VARIABLE UC: MACHINE OF BITS (CLR1, CLR2, CLR3, EN1, EN2, EN3, SEL) WITH STATES ( s0 = B"1110000", s1= B"0001000", s2= B"0000100", s3= B"0000000", s4= B"0000010", s5= B"0000001", s6= B"0000011" ); BEGIN UC.CLK = CLKUC; UC.RESET = RES; TABLE UC, N1,N2,M1,M2 => UC; s0, 0, 0, X, X => s0; s0, 1, X, X, X => s1; s0, X, 1, X, X => s2; s1, X, X, X, X => s3; s2, X, X, X, X => s3; s3, 0, 0, 0, 0 => s3; s3, 1, X, X, X => s1; s3, X, 1, X, X => s2; s3, X, X, 1, X => s4; s3, X, X, X, 1 => s5; s4, X, X, X, X => s3; s5, X, X, X, X => s6; s6, X, X, X, X => s3; END TABLE; END;

: 여기

내 제어 장치입니다 현재 상태가 S3과 입력이 M1 있습니다

1) = 1 M2 = 1이면, 다음 상태는 S6이다. 나는 그것을 보지 못하기 때문에, S5를 먼저 지나치지 않고 S6으로 갈 길이 없다.

2) 현재 상태가 S0이고 입력이 N1 = 1 및 N2 = 1 인 경우 다음 상태는 시뮬레이션에서 "12"로 정의됩니다. 글쎄, 그런 상태가 ...

아무도 도와 줄 수 있습니까? 감사합니다. .

UPDATE : 같은 (이 대학의 서류, 그리고 내가 코드를 작성하지 않았기 때문에 나는 그것을 거의 도구의 최상의 조합 없다하더라도 ADHL 및 MAX + 플러스 II를 사용할 필요가

1) 나는 단지 그것을 시뮬레이션해야한다고 말했고, 나는 그것을 바꿀 수 없다).

답변

1

첫 번째 질문 : 정말로 AHDL을 사용해야합니까? - 수년간 알테라의 적절한 지원을받지 못했습니다. 그리고 MAX Plus II는 매우 오래된 소프트웨어입니다. Quartus를 사용하고 VHDL (또는 Verilog가 꼭 필요한 경우)을 배우면 제 제안이 될 것입니다. 그 소리가 거슬 린다면 미안 해요!

하지만 문제는 정말로 일반적인 논리 문제입니다. 상태 시스템의 입력이 적절하게 동기화되어 있습니까? 그렇지 않다면 시계 가장자리 가까이에서 변화하는 모든 종류의 별난 효과를 얻을 수 있습니다. 그런 다음 신호는 시계의 한쪽면에있는 상태 기계의 일부와 시계의 "다른면"에있는 다른 부분에 도달합니다 즉 다음 사이클까지는 보이지 않음). 이것은 두려운 일을 혼란스럽게 할 것입니다! 또한 리셋 신호가 clk 신호와 동기화되어 있는지 확인하십시오.

빠른 해킹 - 각 입력의 체인에 2 개의 플립 플롭을 붙입니다. 그런 다음 비동기 입력 동기화에 대해 읽어보십시오.

+0

먼저 감사합니다. 여기에 내 첫 번째 질문입니다. 그래서 직접 질문에 대답 할 것인지, 아니면 내 질문에 업데이트로 대답 할 것인지 확실하지 않았습니다. 글쎄, 나는 둘 다 할 것이다. 업데이트 1은 현재 VHDL을 배우는 중이지만 AHDL을 사용해야하는 이유에 대해 답변하고 MAX Plus II 대신 자일링스에서 ISE WebPack으로 옮겼습니다. 대답에 대해 모든 입력이 올바르게 동기화되었습니다. 나는 실행의 시간에 대해 걱정하지 않는다. 그래서 나는 상승하는 클럭 에지 이전에 입력의 절반을 시계의 반주기로 설정했고, 그들은 전체 시계 기간 동안 처럼 머무른다. 다른 생각? 다시 한번 감사드립니다. – dsetton

관련 문제