Почему у вас второй процесс? Похоже, он содержит то, что предназначено для асинхронного кода.
Если вам нужен процесс, чтобы вы могли использовать конструкции if и case, вам нужно поместить все, что может повлиять на желаемый результат, в список чувствительности процесса (т. Е.: Done AND current_state & hex).
Вы также можете назначить next_state два разных значения, что, как правило, плохо при настройке FPGA. Я предлагаю переместить «next_state <= current_state» внутри оператора case и явно назначить все термины во всех ветвях ваших операторов case / if (я немного догадываюсь о том, что вы ожидаете от поведения, но вы должны получить общее идея): </p>
case current_state is
when IDLE=>
if(done = '1') then
if (hex = "00011101") then
up <= '1';
down <= '0';
next_state <= current_state;
elsif(hex = "00011011") then
up <= '0';
down <= '1';
next_state <= current_state;
--check to see if a break code is sent
elsif (hex = "11110000") then
up <= '0';
down <= '0';
next_state <= RECEIVED_BREAK;
...
Вы также можете использовать выбранное назначение сигналов вне процесса, если вы собираетесь генерировать асинхронную логику.
Если вы действительно пытаетесь определить защелки для сигналов up / down / next_state, вам нужно быть намного более точным в отношении того, что вы хотите, либо прямо в своем коде, либо в своем вопросе к нам, чтобы мы могли помочь вы.