VHDL Multi-Process - PullRequest
       8

VHDL Multi-Process

0 голосов
/ 04 июня 2019

У меня проблема с синхронизацией моего кода. Сначала я попытался поместить все свои функции в один процесс, но для проверки инструкции к другому потребуется дополнительный цикл, и я не хотел, чтобы это происходило, поэтому я помещаю всеинструкции в процессе, чтобы все функции могли быть обработаны в одном и том же цикле. Но я обнаружил проблему с использованием многопроцессорности и сделал операцию с переменной, это даст мне значение «xxxx» для этой переменной, несмотря на то, что я их не использовалв том же цикле

 Process ( T )
  begin
      If ( T(0)='1' )Then
          AR <= PC;
      End If ; 
end process;
process ( T )
begin
      If ( T(1)='1' )Then
          IR<=Data;
          PC<=PC+1;
      End If ;
End process;
process ( T )
begin
      If ( T(2)='1' )Then
          I<=IR(15);
          AR<=IR( 11 downto 0 );
      End If ;
End Process ;

этот код работает хорошо в случае t (0) и t (1), но в случае t (2) AR vale равен "xxxx".

почему в т (2) дать мне это значение ??

1 Ответ

0 голосов
/ 04 июня 2019

Извините, но здесь так много неправильного, что я не знаю, с чего начать.

Давайте начнем с заявления о том, что вы предоставили только небольшой фрагмент кода. Для лучшей оценки вы должны предоставить полный код плюс тестовый стенд. Так что я должен сделать некоторые предположения здесь и там.

Далее, здесь нет «циклов», поскольку нет часов. У вас просто есть набор из трех процессов. Если вы действительно хотите иметь «циклы», вы должны добавить часы и работать с их краями (есть много примеров).

Тогда: процессы не имеют правильного списка чувствительности. Вы используете только T: Process ( T ). Любые изменения в data или Ir или PC игнорируются. Ваш код может симулировать, но он не будет соответствовать тому, что делает оборудование.

Что касается "t (2) AR vale - это" xxxx "." У вас есть два процесса, меняющих AR. Это состояние гонки. Вы не знаете, кто из этих двух победит (и ваш инструмент синтеза откажется строить логику для этого). Я также ожидаю, что ваш симулятор VHDL будет жаловаться на это. Вы сделали что-то, чтобы обойти это?

Исправить некоторые, если это перестает писать, как если бы VHDL был стандартным языком последовательного программирования. В HDL все происходит / меняется одновременно , и ваш код должен справиться с этим.
Например: ваш T имеет как минимум три «бита»? Может быть, больше или другие значения, но мы не можем видеть это, так как вы опустили определения. Таким образом, ваш T может иметь значения восемь! .

Поместите весь код в один процесс с правильным списком чувствительности и проработайте комбинацию T Восемь . Решите, каким должен быть результат в каждом из восьми случаев.

Я повторяюсь: вышеизложенное - мое лучшее предположение о том, что вам нужно, много информации отсутствует.

...