저는 Altera DE1 보드에서 구현중인 간단한 16 비트 프로세서 용 VHDL 코드로 유한 상태 기계를 작성하려고했습니다. Finite State Machine에서는 16 비트 STD_LOGIC_VECTOR에 의해 FSM으로 가져 오는 다른 16 비트 명령어를 처리하는 CASE
문이 있습니다. 그러나 Finite State Machine이 명령을 디코딩하는 디코드 상태에서 약간 문제가 있습니다. 명령 중 하나는 두 레지스터를 피연산자로 사용하고 세 번째를 대상 레지스터로 사용하는 ADD입니다. 그러나, 나는 또한 레지스터와 5 비트 즉치 값을 피연산자로 취하고 두 번째 레지스터를 대상으로하는 ADD 명령을 가지고있다. 내 문제는 CASE
문에서 두 가지 다른 ADD 명령을 구별 할 수 있어야합니다. 그래서 나는 "-"또는 "X"와 같은 와일드 카드 값을 CASE
문에 사용하면 가능한 모든 레지스터/즉치 값 조합을 나열하는 대신 두 가지 경우로 구별 할 수있을 것이라고 생각했습니다. 예를 들어 :VHDL STD_LOGIC_VECTOR 와일드 카드 값
CASE IR IS --(IR stands for "Instruction Register")
WHEN "0001------0-----" => (Go to 3-register add);
WHEN "0001------1-----" => (Go to 2-register/immediate value add);
WHEN OTHERS => (Do whatever);
END CASE;
이 내가 가지고있는 유일한 두 가지 지침을하지, 난 그냥이 게시물은 조금 짧게하는이 두 가지를 넣어. 이 코드를 컴파일하고 실행할 때 프로세서는 "디코드"상태가되면 실행을 멈 춥니 다. 또한 Quartus는 "LC3FSM.vhd (37)에서의 VHDL 선택 경고 : 메타 값을 포함하는 선택 사항 무시" "0001 ------ 0 -----" ""많은 것을 경고합니다. 이것을 달성하는 방법에 관해서는 손실. 정말 모든 단일 16 비트 조합을 정의 할 필요가 없으며 아마 정의 할 필요가 없습니다. STD_LOGIC_VECTOR에서 와일드 카드를 사용하여 정의해야 할 조합의 수를 최소화하는 방법이 있기를 바랍니다.
아무도 이것을 수행하는 방법을 알고 있습니까?
고마워요.
아하, Paul Seeb에게 감사드립니다. 어제 질문을 한 후에 각 연산 코드에 대해 CASE 문을 사용한 다음 IF 문을 사용하여 다른 필요한 비교를 수행 할 것을 고려했습니다. 첫 번째 방법은 코드를 조금 더 짧게 만들었으므로 그 코드를 사용했습니다. Mark Thompson에게도 감사드립니다. –