나는 시프트 키 탐지기를 설계하고 있습니다. 테스트 벤치를 작성했습니다. 테스트 결과 구현이 잘못되었다고 나타났습니다.VHDL - 키 검색에서 정의되지 않은 동작
다음은 ModelSim의 시뮬레이션입니다.
은 빨간색 선은 정의되지 지적했다. 이 동작은 두 번 발생했습니다.
나를 혼란스럽게 만든 것은 왜 그 두 값 사이에 큰 격차가 있습니까? 테스트 벤치를 보면 3 단계와 4 단계 절차는 1 단계와 2 단계에 사용 된 형식을 사용합니다.
테스트 벤치는 여기에 있습니다 :
http://pastebin.com/BJVFFgGr
검출기 코드는 여기에 있습니다 :
http://pastebin.com/di42FLqT
당신이 볼 수 있듯이. 내 디자인에는 두 가지 주들이 있습니다. PS2 수신기는 키를 누르거나 떼면 클린 8 비트 코드를 필터링하고 생성합니다. 중단 코드는 방금 릴리스 된 키의 작성 코드 다음에 오는 F0입니다. 내 상태 머신은 두 개의 추가 비트를 사용하여 어떤 시프트 키가 눌려 졌는지 추적합니다.
디버그를 거쳤으며 세 번째 테스트 값을 입력하면 이전 값에서 1 대신 SHIFT = U가됩니다.
-- release left shift
hex <= "11110000";
wait for 5 ns;
clk <= NOT clk;
wait for 50 ns;
clk <= NOT clk;
wait for 50 ns;
hex <= "00010010"; <----- when I am here shift is already U
wait for 5 ns;
clk <= NOT clk;
wait for 50 ns;
clk <= NOT clk;
wait for 50 ns;
if (shift /= '0')then
error <= '1';
end if;
left_pressed 및 right_pressed는 변수가 아닌 신호입니다. 그래서 그들은 어떤 경우에도 가치를 가져야합니다. 그 중 하나가 변경되면 시프트 신호로의 연결이 자동으로 업데이트됩니다.
누군가 나를 도울 수 있습니까? 감사.
감사합니다.
감사합니다. 어디에 next_state <= current_state를 삽입합니까? 나는 다른 일을했지만, 나는 그 사람이 나를 망쳐 놓고 있다고 생각한다. 감사합니다 – CppLearner
next_state를 업데이트하는 프로세스를 시작하십시오. 기본 사례이므로 다른 할당이 하나도 없으면 다음 상태를 정의해야합니다. –