Является ли процесс в реестре VHDL?

Возможно ли два или более последовательных запуска для процесса в VHDL ?

Что произойдет, если произойдет другое событие (в списке сигналов чувствительности), пока последовательное выполнение процесса не будет завершено?

Возможно ли это или моя модель VHDL в виду, что процесс полностью неправильный?

    4 Solutions collect form web for “Является ли процесс в реестре VHDL?”

    Никакое событие никогда не произойдет во время процесса!

    Когда процесс пробуждается событием, он выполняется до завершения («конечный процесс») или явного выражения «wait» и переходит в режим сна. Это занимает, как правило, время ZERO. Это означает, что если у вас есть циклы в вашем процессе, они эффективно развернуты полностью, и когда вы синтезируете, вы создадите достаточно аппаратного обеспечения для запуска КАЖДОЙ итерации параллельно. Кроме того, любые процедуры, функции и т. Д. Принимают нулевое время – если только они не содержат явного выражения ожидания (в этом случае процесс приостанавливается при «ожидании», как если бы процедура была встроена).

    Во всем этом процессе все сигналы имеют значение, которое они изначально имели, когда процесс разбудил, и все назначения сигналов сохраняются, что произойдет позже. (Переменные обновляются немедленно, а последующие операторы процесса видят новое значение).

    Когда процесс приостанавливается (при «wait» или «end process»), ничего не происходит до тех пор, пока ВСЕ другие процессы не приостанавливаются. (Но помните, что все они берут нулевое время!). Если процесс приостанавливается в «конечном процессе», он перезапускается с самого начала, когда его список чувствительности пробуждает его. Если он приостанавливается при явном «ожидании», «wait» будет указывать событие или будущее время, которое перезапустит его после «Wait». (ПРИМЕЧАНИЯ: 1: не смешивайте список чувствительности и стили ожидания в том же процессе! 2: Wait До тех пор, пока какое-либо событие не будет синтезировано (хотя некоторые инструменты могут возражать); Подождите некоторое время только для моделирования)

    Затем все назначения сигналов выполняются. Поскольку все процессы спали, это устраняет все условия гонки и временные опасности. Некоторые из этих назначений (например, «1» на часах) заставят события планироваться на чувствительных к ним процессах.

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

    Это продолжается до тех пор, пока не произойдет дельта-цикл, в котором запланированы НЕТ новых событий, и, наконец, имитация может продвигаться на шаг в реальном времени.

    таким образом

     process(clk) begin if rising_edge(clk) then A < = B; B <= A; end if; end process; 

    не имеет опасности в VHDL.

    Если вам когда-либо понадобится использовать Verilog, имейте в виду, что некоторые из них происходят по-другому, и вы не можете полагаться на тот же уровень предсказуемости результатов моделирования.


    В синтезе, конечно же, мы генерируем аппаратное обеспечение, которое займет некоторое время для выполнения этого процесса. Тем не менее, синтез и вспомогательные средства (место и маршрут) гарантируют, что они добросовестно подчиняются этой модели или не могут сообщить о том, почему они потерпели неудачу. Например, они суммируют все реальные задержки и проверяют, что сумма меньше указанного периода времени. (Если вы не установили слишком высокую тактовую частоту!).

    Таким образом, результат - до тех пор, пока инструменты сообщают об успехе (и вы правильно устанавливаете ограничения по времени, такие как тактовая частота), вы можете притворяться, что вышеуказанная модель «нулевого времени» истинна, а реальное поведение аппаратного обеспечения будет соответствовать симуляции. Гарантированный, запрет ошибок инструмента!

    Когда вы начинаете использовать VHDL (или любой другой HDL, если на то пошло), крайне важно отказаться от всех понятий последовательного кода и вместо этого сосредоточиться на streamе данных через аппаратное обеспечение. В аппаратном обеспечении все по сути является параллельным (все происходит одновременно), но использует постоянно изменяющиеся данные (входные сигналы) для вычисления постоянно изменяющихся результатов (выходных сигналов)!

    Не вдаваясь в более сложные темы, такие как переменные, команды ожидания и т. Д., Все внутри процесса происходит одновременно. Если конфликтующие вещи происходят в одном и том же процессе (многократная запись в один и тот же сигнал), выигрывает последнее утверждение в процессе, что часто приводит к путанице в отношении «последовательного» кода в VHDL.

    Это работает благодаря тому, что значения присваиваются сигналам. При присвоении значения сигналу значение сигнала сразу не изменяется! Вместо этого назначенное значение запоминается и будет передаваться как фактическое значение сигнала позже (при подготовке к следующему дельта-циклу, который фактически является следующим квантом времени).

    Поскольку следующий дельта-цикл не начнется до тех пор, пока все процессы из предыдущего дельта-цикла не будут завершены, значения сигнала будут изменены только тогда, когда процесс не будет запущен. После того, как все сигналы изменились, начнется следующий дельта-цикл, и любой процесс, чувствительный к одному из измененных сигналов, будет выполнен.

    Если процесс чувствителен к сигналу, который он также записывает, у вас есть так называемый комбинаторный цикл, например, затвор, в который вывод подает вход. Это (почти) всегда ошибка в вашей схеме и обычно приводит к тому, что тренажеры будут вводить бесконечный цикл дельта-цикла.

    Это все, что я сейчас напишу, так как ответ Брайана Драммонда только что появился, когда я писал это, но не стесняйтесь оставлять комментарий, и я добавлю несколько подробностей.

    Вы должны прочитать это сообщение в блоге: http://www.sigasi.com/content/vhdls-crown-jewel

    Как только процесс начинает запускаться (из-за события), он заканчивается до того, как любые другие события могут запускать что-либо еще.

    Interesting Posts

    В чем разница между строковой константой и строковым литералом?

    Как обрабатывать всплывающие windows в Selenium WebDriver с помощью Java

    Как я могу установить CentOS 6 без gui?

    Использование общих объектов std :: function с функциями-членами в одном classе

    Создайте много tar-файлов из каталога с 500000 файлами

    Рекурсивно заменяет каждый экземпляр слова в каталоге из командной строки linux

    Какая связь может быть перехвачена сетью, к которой я подключен через VPN?

    Как реализовать «Оставайтесь в системе», когда пользователь заходит в веб-приложение

    Узел выбора XPath с пространством имен

    Как создать беспроводную связь на большие расстояния?

    Что же такое Git Bash для Windows?

    «Примечание: неопределенная переменная», «Примечание: неопределенный индекс» и «Примечание: неопределенное смещение» с использованием PHP

    Контейнер-жидкость против контейнера

    Требовать пароли пользователей на linux только в будние дни

    Есть ли 64-битное программное обеспечение для Windows, которое гораздо предпочтительнее 32-разрядной копии в 64-разрядной ОС?

    Давайте будем гением компьютера.