VHDL STD_LOGIC_VECTOR Значения подстановочных знаков
Я пытался написать Finite State Machine на 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 есть способ использовать подстановочные знаки, чтобы минимизировать количество комбинаций, которые мне придется определять.
Кто-нибудь знает, как этого добиться?
Спасибо