VHDL STD_LOGIC_VECTOR Подстановочные знаки

Я пытался написать конечный автомат в коде VHDL для простого 16-разрядного процессора, который я реализую на плате Altera DE1. В конечном автомате у меня есть оператор CASE , который обрабатывает различные 16-битные инструкции, которые вводятся в FSM с помощью 16-битного STD_LOGIC_VECTOR. Однако у меня возникли небольшие проблемы в состоянии декодирования, когда конечный автомат декодирует инструкцию. Одна из инструкций - это ADD, которая принимает два регистра как операнды, а третий - как регистр назначения. Однако у меня также есть инструкция ADD, которая принимает регистр и 5-битное непосредственное значение в качестве операндов и второй регистр для назначения. Моя проблема в том, что в операторе CASE мне нужно иметь возможность различать две разные инструкции ADD. Итак, я подумал, что если я использую подстановочные знаки, такие как «-» или «X» в операторе CASE , я смогу различать их всего двумя регистрами вместо того, чтобы перечислять все возможные регистры / немедленные комбинации значений. Например:

    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 выдает много-много предупреждений вроде «Предупреждение о выборе VHDL в LC3FSM.vhd (37): игнорируемый вариант, содержащий мета-значение» «0001 ------ 0 -----« »» Я не понимаю, как это сделать. Я ДЕЙСТВИТЕЛЬНО не делаю и, вероятно, не нуждаюсь в определении каждой отдельной 16-битной комбинации, и я надеюсь, что есть способ использовать подстановочные знаки в STD_LOGIC_VECTOR, чтобы минимизировать количество комбинаций, которые мне придется определять.

Кто-нибудь знает, как это сделать?

Спасибо

6
задан Eric Townsend 9 February 2012 в 05:36
поделиться