Действительно ли нам нужен VHDL

       

Описание Поведения при помощи Процессов


Действительно ли нам нужен VHDL? Представление Системы в VHDL: Единицы Проекта Объекты VHDL:Сигнал Спецификация Интерфейса Системы Конструкции VHDL для Описания Поведения Системы Описание Поведения при помощи Процессов Многократные Процессы в Архитектуре Определение Структуры Системы Испытание Проекта при помощи Испытательного стенда

Глава 6

Описание Поведения при помощи Процессов

Содержание Главы 6

6.1. Краткий обзор Главы

6.2. Введение в Процессы

6.2.1. Спецификация Поведения



6.2.2. .Что такое - Процесс?

6.2.3. Структура Процесса

6.2.4. Выполнение Процесса

6.3. Выполнение Процесса управления

6.3.1. Потребность в Приостановке и Возобновлении Процессов

6.3.2. Оператор Wait

6.3.3. Различные Типы Операторов Wait

6.3.4. Различное Местоположение Оператора Wait

6.3.5. Список Чувствительности Процесса

6.3.6. Как Работает Список Чувствительности

6.4. Процесс -Specific Объект: Переменная

6.4.1. Сигналы в Процессах

6.4.2. . Иногда Не Достаточно Сигналов

6.4.3. Декларация и Присваивание Переменным

6.4.4. Сигналы против Переменных

6.5. Управление Последовательностью положений

6.5.1. Введение

6.5.2. Оператор Условный

6.5.3. Альтернативные Условные Операторы

6.5.4. Множественный Выбор

6.5.5. Условные Циклы

6.5.6. Цикл со Счетчиком

6.5.7. Неполные Циклы Резюме

Резюме

6.1. Краткий обзор Главы

Точно так же, как сигналы описывают, как сделана электронная система, процессы определяют поведение системы. Эта глава объясняет что такое процесс и как он определяется и выполняется.

Секция 2, " Введение в Процессы ", вводит концепцию процесса и объясняет, как описать его поведение Описание выполнения процесса заканчивает эту секцию.

Выполнение Процесса подобно выполнению программы. Имеется, однако, одно важное различие: процесс вообще повторяется неопределенно, если специальные операторы не останавливают его. Секция 3, " Влияние На выполнение Процесса ", показывает, как такие операторы могут применяться к процессу и как они влияют на его выполнение.


Секция 4 представляет второй ключевой объект в VHDL - переменную. Переменные имеют много общего с сигналами, но имеются также некоторые значительные различия. Для уяснения деталей См. Секцию 4.
Все операторы внутри процесса выполняются последовательно. Однако, Вы можете влиять на последовательность их выполнения, используя условия их выполнения, определяя ветви и повторяя избранные участки в циклах. Все эти методы представлены в секции 5.

6.2.1. Спецификация Поведения

Ключевые вопросы:

Что означает " поведение системы " ? Главная цель любой электронной системы или элемента состоит в том, чтобы преобразовать входные данные в результаты в выходные результаты. Этот вид деятельности назван "поведеним" или "функционированием " системы, а спецификация системы описывает, как входные данные преобразовываются в выходные результаты.
Поведенческая спецификация - список действий, которые должны выполниться, чтобы получить ожидаемые результаты.

Примеры:

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

Рисунок:

6.2.2. Что такое - Процесс?

Ключевые вопросы:

Действие дозатора напитка из рисунка на предыдущей странице зависело от последовательности действий. Фактически, это совершенно типично для большинства спецификаций проекта. Когда кто - то делает процедуру для выполнения чего - нибудь, он, или она представляет список действий, которые будут предприняты шаг за шагом или последовательной форме.
Процесс - формальный способ создания такого списка последовательных действий. Он имеет очень структурный формат, даже если он представляет поведение только небольшой секции проекта.
Примечание: рисунок с права (без действий) и приведен здесь только, потому чтобы напомнить процесс из предыдущей страницы.

Примеры:

Псевдокод, созданный на предыдущей странице может быть перезаписан в VHDL:

Рисунок:

6.2.3. Структура Процесса


Ключевые вопросы:

Написание VHDL спецификации требует знания языка. К счастью, имеются только несколько правил для написания процессов, которые описывают поведение системы.
Сначала, Вы должны определить, что часть кода, который Вы собираетесь написать в процесс. Это объявляется ключевым словом process. Вы можете присвоить имя процессу, если Вы желаете улучшить удобочитаемость проекта. Такое имя должно появиться перед ключевым словом process и должно сопровождаться двоеточием. Это имя может быть повторено в конце, с права после оператора end process, но без двоеточия.
Как Вы уже знаете, процесс это последовательность операций (операторов). Список операторов процесса стартует начиная с ключевого слова begin, и заканчивается ключевым словом end process, и далее следует имя процесса, если это необходимо.
Чтобы ясно отделить последовательнность операторов из деклараций таких как Variable или Сonstant, который могут появляться ниже операторов процесса, ключевое слово, begin размещают ниже декларации и сопровождают ‘ списком последовательных операций.

Примеры:

Ниже приведенный пример показывает D-триггер. Триггер имеет информационный вход D, счетный вход CLK и два асинхронных входа (CL-сброс и PR-предварительная устанавка).

Рисунок:

6.2.4. Выполнение Процесса

Ключевые вопросы:

С тех пор конструкции VHDL, представляют реальные системы, концепция завершения процесса заслуживает некоторого дополнительного толкования. Рассмотрим, например, действие типичной системы. Она выполняет последовательность действий, а затем останавливается навсегда? Или она повторяет эти действия в бесконечном цикле?
Второе утверждение - много ближе к действительности, не так ли? По этой причине, процесс гарантирует, что после выполнения последнего оператора система немедленно начинает выполнение первого оператора. В результате " процесс НИКОГДА не прерывается ".
В следующей Секции Вы увидите, что процесс может быть приостановлен, а затем возобновлен, этим приближаясь к реальному поведению систем.

Примеры:


Рисунок:

6.3.1. Потребность в Приостановке и Возобновлении Процессов

Ключевые вопросы:

Электронные приборы обычно функционируют в бесконечном цикле; после их активации они выполняют внесенные в список задачи а затем возвращаются и ожидают условия, при котором будет встречено нужное состояние. Другими словами, элемент приостанавливает действие, когда он заканчивает текущую задачу и возобновляет действие, когда указанные условия появляются снова.
Такие операции элементов в VHDL описываются оператором wait. Он приостанавливает процесс, когда указанная задача закончена, а затем возобновляет ее снова, когда указанное условие выполнено. Возобновление процесса может быть выполнено только одним оператором в форме, ожидания условие , которое будет выполнено.

Примеры:

Ниже на рисунке показано действие оператора wait.

Рисунок:

6.3.2. Оператор Wait

Ключевые вопросы:

Прежде, чем приостановленный процесс может возобновиться, он должен дождаться условия, которое будет выполнено. Оператор wait используется для этой цели:
  • Он безоговорочно останавливается (приостанавливает) выполнение процесса.
  • Он вносит в список условие, которое возобновит процесс.
  • Если процесс содержит оператор wait , то он выполняет последовательно все операторы, пока не сталкивается с wait. Затем процесс приостанавливается и ждет условие, которое внесено в список оператора wait, и которое будет выполнено. Когда это случиться, процесс возобновляется и выполняет все операторы, пока снова не встретится с оператором wait

    Примеры:

    Если два или больше wait операторов находятся в процессе, процесс будет приостановлен и возобновлен на каждом из операторе wait:

    Рисунок:

    6.3.3. Различные Типы Операторов Wait

    Ключевые вопросы:

    Так как в реальных приложениях различные условия могут возобновлять процесс, то вVHDL предлагается три типа операторов wait: заданное время ожидание возобновления процесса, ожидание пока не будет выполнено некоторое Булево условие, и ожидание изменения значения сигнала. Эти три типа конструкций имеют следующую форму:


  • wait for type_expression;
  • wait until condition;
  • wait on sensitivity_list.
  • Совместное применение некоторых или всех этих конструкций определяет, конструкцию названную комплексное условие.
    Все четыре случая иллюстрируются в примерах справа.

    Примеры:

    signal Sig_1, Sig_2 : bit;
    . . .
    My_process : process
    begin
    . . .
    wait on Sig_1, Sig_2;
    end process My_process;
    После выполнения всех операторов, процесс будет приостановлен на операторе wait и будет возобновлен, когда один из сигналов Sig_1 или Sig_2 изменит свое значение.
    wait until EN = '1';
    В этом примере, оператор wait возобновит процесс в том случае когда сигнал изменит значение на '1'.
    wait for 50 ns;
    Процесс, содержащий этот оператор будет приостановлен на 50 ns.
    My_process : process
    begin
    wait on In_A, In_B until Clock = '1';
    . . .
    end process My_process;
    Процесс My_process возобновится после изменения сигналов In_A или In_B только в том случае, когда значение сигнала датчика меток времени станет равным '1'.

    Рисунок:

    6.3.4. Различное Местоположение Оператора Wait

    Ключевые вопросы:

    Все операторы процесса выполняются в бесконечном цикле, то есть когда последний оператор, размещенный справа перед end process заканчивается, то первый который находится после begin начинается. Вначале мы предполагали, что не имеет значения размещен ли оператор wait в начале или в конце процесса.
    Однако, в общем случае это не верно. Например, если моделирующее устройство сталкивается с оператором wait с права в начале процесса, то процесс будет приостановлен немедленно без выполнения любых операторов. С другой стороны, если wait размещен в конце процесса, то часть операторов будет выполнена до того как процесс будет остановлен.
    Оператор wait может появляться где-нибудь в процессе. Обычно, он размещается или в начале или в конце процесса. В процессе допускается кратный оператор wait. Это наиболее часто используются в испытательных стендах (testbenches), которые будут обсуждаться в Главе 9.

    Примеры:

    Цифровая схема приведенная ниже может быть определена разными способами.


    Внесенные в список процессы только отличаются по локализации оператора wait. Однако, все это производит к различным результатам.

    VHDL определяет процессы следующим образом:
    First_process : process Second_process : process
    begin begin
    wait on A, B, C; Y1 <= A and B;
    Y1 <= A and B; Y2 <= B and C;
    Y2 <= B and C; wait on A, B, C;
    end process First_process; end process Second_process;

    Рисунок:

    6.3.5. Список Чувствительности Процесса

    Ключевые вопросы:

    Ожидание в списке чувствительности, то есть ожидание изменения значения сигнала, возможно является наиболее часто используемым условием для возобновления процессов; причем VHDL поддерживает конструкцию называемую - список чувствительности процесса. Список определен после ключевого слова process и приводит к тому же, что и wait sensitivity_list в конце процесса.
    Примечание: В соответствии с правилами выполнения (приведенными на предыдущей странице), wait в начале процесса - НЕ, эквивалент к наличию wait sensitivity_list.
    Также важно заметить, что процесс со списком чувствительности не может содержать любой явный оператор wait. ПРИМЕРЫ:
    Второй процесс из предыдущего примера может быть преобразован в эквивалентный процесс со списком чувствительности:

    Рисунок:

    6.3.6. Как Работает Список Чувствительности

    Ключевые вопросы:

    Так как процессы со списками чувствительности доминируют в спецификациях VHDL ,то небольшая трата времени оправдана, чтобы уяснить, как выполняются такие процессы.
    Когда начинается моделирование, процесс выполнится, один раз, потому что список чувствительности эквивалентен оператору wait в конце процесса и оператор wait останавливает выполнение процесса.
    Процесс приостановлен, пока любой из сигналов в списке чувствительности не изменит значение. Такая замена возобновляет процесс и все операторы в процессе, от начала до конца, выполняются последовательно. Заметьте, что слово all относится к всем операторам в процессе, а не только к тем, которые касались сигналов, позволяющих возобновить процесс.


    Когда выполнение последнего оператора закончено, процесс приостановлен снова.

    Примеры:

    Ниже процесс чувствителен к сигналам RST и CLK, то есть результат на любом из этих сигналов заставит процессу возобновиться. Этот процесс эквивалентен тому, который описанный в секции комментария.
    DFF : process (CLK,RST)
    begin
    if RST = '1'
    then Q <= '0';
    elsif (CLK'event) and (CLK = '1')
    then Q <= D;
    end if;
    end process DFF;
    -- DFF : process
    -- begin
    -- if RST = '1'
    -- then Q <= '0';
    -- elsif (CLK'event) and (CLK = '1')
    -- then Q <= D;
    -- end if;
    -- wait on RST, CLK;
    -- end process DFF;

    Рисунок:

    6.4.1. Сигналы в Процессах

    Ключевые вопросы:

    Основная цель поведенческой спецификации VHDL состоит в том, чтобы описать реакцию выходов на входы. И входы и выходы - сигналы, так что реакции выходных сигналов даются как назначения сигнала. Сигналы и присвоенные сигналы появляются внутри процессов. Однако, использование сигналов в процессах регулируется в соответствии с тремя важными ограничениями:
  • Сигналы не могут быть объявлены внутри процессов.
  • Любое присвоение сигналу воздействует только, когда процесс приостанавливает. Пока это не случается, все сигналы хранят их предыдущие значения.
  • Только последнее присвоение сигналу, внесенное в список внутри процесса эффективно. Таким образом, в данном процессе не имеет смысла присваивать больше чем одно значение сигналу.
  • Примеры:

    Если значение присвоено сигналу в процессе и сигнале находится в списке чувствительности этого процесса, то изменение значения этого сигнала может привести к восстановлению процесса:
    signal A, B, C, X, Y, Z : integer;
    process (A, B, C)
    begin
    X <= A + 1;
    Y <= A * B;
    Z <= C – X;
    B <= Z * C;
    end process;
    Когда процесс активизирован результатом на сигнале C, то это приведет к замене сигнала B внутри процесса. В свою очередь это восстановит процесс, так как B находится в списке чувствительности.

    Рисунок:

    6.4.2. Иногда Не Достаточно Сигналов

    Ключевые вопросы:

    Ограничения на использование сигналов имеют серьезное значение в ряде практических приложений.


    Неспособность объявлять сигналы внутри процессов - не главная проблема, но правила присваивания имеют серьезные последствия.
    Так как сигналы могут хранить только последнее присвоенное значение, то они не могут использоваться для хранения промежуточных или временных данных внутри процессов.
    Другое главное неудобство – это то, что новые значения присвоенные сигналам не в течение выполнения, а после приостановки процесса. Это делает анализ проекта, совершенно громоздким. Эксперименты с примером для лучшего понимания, как ведут себя сигналы в процессах затруднительны.
    Так как сигналы не могут быть объявлены внутри процессов, и присваивание значений происходит после того, как процесс приостановлен, то имеется потребность в объекте, который мог бы быть объявлен внутри процесса и который обеспечил бы мгновенное хранение временных данных. Такой объект в VHDL существует и назван переменной.

    Примеры:

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

    Эта проблема может быть решена через применение переменных в процессе:

    Рисунок:

    6.4.3. Декларация и Присваивание Переменным

    Ключевые вопросы:

    Переменные подобны сигналам. Однако, из-за их характерных особенностей они могут использоваться в некоторых приложениях, для которых сигналы подходят плохо. Например, они могут использоваться для описания алгоритмов внутри процессов.
    Поэтому переменные ограничены процессами, они объявляются в процессах и не могут быть используемы вне их. Декларация переменных выглядит подобной декларации сигнала. Единственное различие состоит в том, что переменная объявляется с ключевым словом variable вместо ключевого слова signal, которое зарезервировано только для сигналов.
    Присваивание значения переменной осуществляется символом ': = '. Такое присваивание мгновенно, и каждой переменной могут быть назначены новые значения столько раз сколько это необходимо.

    Примеры:


    Переменная может быть объявлена так, чтобы быть любого типа или доступного подтипа:
    type Mem is array (natural range <>, natural range <>) of std_logic;
    variable Delay1, Delay2 : time;
    variable RAM1: Mem (0 to 1023, 0 to 8);
    Начальное значение переменной может быть назначено глобально статическим выражением. Выражение непосредственно должно сослаться на значение того же самого типа как и переменная:
    Variable TempCond : boolean := true;
    Разные операторы присваивания изменяют значения пременной:
    Variable X, Y : real;
    variable A, B : bit_vector (0 to 7);
    X := 1000.0;
    A := B;
    A := "11111111";
    A (3 to 6) := ('1','1','1','1');
    A (0 to 5) := B (2 to 7);
    A (7) := '0';
    B (0) := A (6);

    Рисунок:

    6.4.4. Сигналы против Переменных

    Ключевые вопросы:

    В VHDL Вы имеете два типа объектов для определения процессов: сигналы и переменные. Каковы основные подобия и различия между ними?
    Каждый сигнал имеет три реквизита: тип, значение, и время. Имеется, особенно близкая связь между значением и временем и каждым сигналом имеет временную диаграмму. Этот отчет назван хронологией сигнала и разрешает контролировать что происходило с сигналом или какие значения он раньше принимал.
    С другой стороны переменная, , имеет только два реквизита: тип и значение. Так как не имеется никакого выбора времени, присвоенного переменной, то в этом случае сигнал может иметь только текущее значение.
    Поскольку это было показано ранее, пока сигналы и переменные имеют один и тот же тип, они могут быть присвоены друг другу.

    Примеры:

    Если значение последовательного сигнала появляется внутри процесса, то это воздействует, на процесс приостановки. Если имеется больше чем одно присваивание для одного и того же сигнала в процессе, то для приостановки имеет значение только последний :
    signal A, B, C, X, Y, Z : integer;
    process (A, B, C)
    begin
    X <= A + 1;
    Y <= A * B;
    Z <= C – X;
    Y <= B;
    end process;
    Когда этот процесс выполнен, операторы присваивания сигнала выполняются последовательно, но второе назначение (Y < = * B) никогда не будет выполнено, потому что только последнее присваивание для Y будет активизировано.


    end if;
    if Code_of_Operation(1) = '1'
    then F := Operand_1 - Operand_2;
    end if;
    if Code_of_Operation(0) = '1'
    then F := "00000000";
    end if;

    Рисунок:

    6.5.3. Альтернативные Условные Операторы

    Ключевые вопросы:

    Выше описанные условные операторы совершенно просты и требуют некоторых расширений для большей гибкости. Например, нам нужно реализовать случай типа, ", если условие выполнено, некоторые действия предприняты, но если нет, другой набор действий выполняется ". Это конструирует, представления типа " если … затем … еще … " операторы.
    Эти операторы ветвления могут быть далее расширены. Когда 'еще' предложение активно, то оно может содержать другое условные операторы, формируя иерархические условия. Такая ситуация может быть обработана в VHDL конструкцией " если … затем … elsif … ".

    Примеры:

    Ниже приведена поведенческая модель схем ExOr и Or.В модели применяют операторы если … затем … еще … и если … затем … elsif …, соответственно. Все сигналы (In1, In2 и Y) имеют бит тип.
    architecture ExOr_Gate_Arch1 of ExOr_Gate is
    begin
    process (InA, InB)
    begin
    if InA=InB then Y <= '0';
    else Y <= '1';
    end if;
    end process;
    end architecture ExOr_Gate_Arch1;
    architecture Or_Gate_Arch1 of Or_Gate is
    begin
    process (InA, InB)
    begin
    if InA='1' then Y <= '1';
    elsif InB='1'
    then Y <= '1';
    else Y <= '0';
    end if;
    end process;
    end architecture ExOr_Gate_Arch1;

    Рисунок:

    6.5.4. Множественный Выбор

    Ключевые вопросы:

    Конструкции " Если … затем … elsif … " – это операторы множественного выбора, которые позволяют выбирать отдельные ветви в зависимости от проанализированных условий. Однако, такие конструкции трудночитаемы, если число ветвей больше трех. В этих случаях применение операторов множественного выбора - намного лучший выбор.
    Вместо Булева условия, операторы проверяют выражение дискретного типа (любое перечисление или тип целого числа) или типа массив литер. Практически, это выражение – обычно имя объекта.


    Каждая альтернативная группа действий определяется выражением " когда выбор = > " предложение "выбора", которое определяет значения выражения. Одни значения могут быть единственные, другие находиться в диапазоне значений, однако они не могут использоваться совместно друг с другом.

    Примеры:

    Конструкции из предыдущей страницы, если … затем … еще …, могут быть заменены оператором case:
    architecture ExOr_Gate_Arch2 of ExOr_Gate is
    begin
    process (InA, InB)
    variable temp : bit_vector (1 downto 0);
    begin
    temp := InA & InB;
    case temp is
    when "00" => Y <= '0';
    when "01" => Y <= '1';
    when "10" => Y <= '1''
    when "11" => Y <= '0';
    end case;
    end process;
    end architecture ExOr_Gate_Arch2;

    Рисунок:

    6.5.5. Условные Циклы

    Ключевые вопросы:

    Операторы условных циклов начинаются с логических условий и функционируют аналогично условному оператору " если … затем … ", но выполняют переход к началу цикла после самого последнего оператора.
    Цикл повторяется до тех пор пока условие в начале цикла истинно. Сначала, условие проверяется и если оно истинно, то операторы внутри цикла выполняются. Если условие ложно, цикл заканчивается, и управление передается к самому первому оператору, который следует после цикла.
    Обычно, такие циклы используются, для того чтобы многократно выполнять набор действий, до тех пор пока сигнал или переменная принимает выбранное значение.
    Пример приведенный справа счетчик, который считает накопление CLK до тех пор, пока сигнал Level '1'. Заметьте, что устойчивость сигнала Level не анализируется. Все что только проверяется в начале цикла - это то является ли Level = '1', тогда ребро накопления CLK обнаружено. При этом не имеет значение, если Level изменил значение по сравнению с предыдущей проверкой.

    Примеры:

    Shift_1: process (Input_X)
    variable i : positive := 1;
    begin
    L1: while i <= 8 loop
    Output_X(i) <= Input_X(i+8) after 5 ns;
    i := i + 1;


    end loop L1;
    end process Shift_1;

    Рисунок:

    6.5.6. Цикл со Счетчиком

    Ключевые вопросы:

    Цикл с условием продолжения повторяет тело неограниченное число раз, пока условие, указанное в заголовке цикла истинно. Однако, иногда необходимо повторить действия заданное число раз. Чтобы выполнить это, более удобно использовать цикл со счетчиком вместо цикла с условием продолжения. Фактически такой цикл используются на практике намного чаще чем циклы с условием продолжения.
    Цикл со счетчиком не содержит Булево условие. Вместо него, дискретный диапазон начала и конца цикла задается. После того, как закончен один проход цикла , переменной цикла присваивается следующее значение из указанного диапазона. Счетчик, который не объявляется (по спецификации в заголовке цикла он равен декларации), трактуется как постоянный внутренний цикл и не может использоваться в операциях присваивания, индексации или выражениях, где он может быть изменен. Кроме того, счетчик существует только внутри цикла, в котором он объявлен.
    Счетный диапазон не должен быть определен в классической форме как от … до …. Он может быть внесен в список как перечисляемый тип или подтип. В таком случае только подтип определен как диапазон счетчика.

    Примеры:

    Shift_2: process (Input_X)
    begin
    L2: for count_value in 1 to 8 loop
    Output_X(count_value) <= Input_X(count_value + 8) after 5 ns;
    end loop L2;
    end process Shift_2;
    Shift_3: process (Input_X)
    subtype Range_Type is positive range 1 to 8;
    begin
    L3: for count_value in Range_Type loop
    Output_X(count_value) <= Input_X(count_value +8) after 5 ns;
    end loop L3;
    end process Shift_3;

    Рисунок:

    6.5.7. Неполные Циклы

    Ключевые вопросы:

    Итерации условных и безусловных циклов повторяются и выполняют все свои операторыдо тех пор, пока условие цикла истино. Однако иногда, , желательно игнорировать некоторые из операторов цикла на текущей итерации и идти непосредственно на следующую итерацию того же самого цикла. Такая ситуация встречается например при подсчете битов со значением '1' в бит векторе (рисунок справа): когда бит – 1 то происходит приращение счетчика, а если бит нулевой, цикл должна игнорировать эту итерацию.


    Оператор next выполняет этот вид действий.
    Помимо оператора next, который выполняет переход на следующую итерацию, имеются ситуации, которые требуют завершения итераций, даже если условие истинно. Оператор exit может выполнять это.
    Переход на следующую итерацию и выход из цикла может быть назначен при помощи условия их выполнения. Так как это действие используется довольно часто, VHDL имеет упрощенный метод поддержки для next и exit операторов: это условие определено в предложении when, которое следует за оператором.

    Примеры:

    L4: loop
    A:= A+1;
    exit L4 when A > 10;
    end loop L4;
    L5: for count_value in 1 to 10 loop
    exit L5 when reset = '1';
    A_1: A(count_value) := '0';
    end loop L5;
    A_2: B <= A after 10 ns;

    Рисунок:

    Резюме

    1. Поведение системы - способ, которым система преобразовывает входные данные в выходные. Спецификация Поведения - последовательность действий, которые должны выполниться, чтобы получить ожидаемые результаты.
    2. Процесс представляет поведение некоторого блока проекта. Он состоит из последовательности операторов, порядок выполнения которых определяется пользователем.
    3. Выполнение операторов однако не заканчивается при выполнении последнего оператора в процессе, они повторяются в бесконечном цикле. Цикл может быть приостановлен и возобновлен оператором wait.
    4. Когда с оператором wait сталкивается в процесс,то он становится приостановленным, то есть при этом останавливается его выполнение, пока условие, поддержанное оператором wait не выполнено. В зависимости от типа оператора wait, могут иметься отдельные условия для продолжения выполнения приостановленного процесса: блокировка по указанному времени истекла (оператор wait), логическое условие выполнено (оператор wait for), пришел нужный сигнал (оператор wait on)
    5. Возобновленный процесс выполняет операторы последовательно в цикле, пока не сталкиваются с оператором wait. Когда это происходит, процесс становится приостановленным снова.
    6. Оператор wait может появляться в любом месте процесса. Обычно, он используется, или в начале (процесс будет приостановлен немедленно без любых выполняемых операторов) или в конце процесса (некоторые операторы будут выполнены до приостановки процесса).
    7. VHDL обеспечивает конструкции, которые назваются список чувствительности процесса, и используются для возобновления процесса.


      Список чувствительности - способ определения набора сигналов или результатов, которые могут возобновлять процесс. Список чувствительности - указывается справа после ключевого слова process. Список чувствительности эквивалентен оператору wait, который является последним оператором в секции операторов (оператор wait on в начале процесса - НЕ эквивалент к списку чувствительности процесса).
    8. Также очень важно заметить, что процесс со списком чувствительности не может содержать любой оператор wait.
    9. Присваивание значения сигналу имеет эффект только, когда процесс приостанавливает и только последнее назначение на любой частный сигнал внутри процесса эффективно в данном выполнении процесса. Сигналы не могут быть объявлены внутри процессов.
    10. Переменные - объекты, совместимые с сигналами. Они способны обслужить цели, для которых сигналы не подходят - описание алгоритмов внутри процессов. Переменные объявляются внутри процессов и не могут быть использованы в их наружной части.
    11. Сигнал имеет три реквизита, присущие ему: type, value, и time. Имеется особенно близкая связь между значением и временем: сигнал имеет временную диаграмму, которая называется хронологией сигнала. Этим способом, возможно проверить то, какое значение сигнал имел ранее или когда последнее изменение значения происходило.
    12. Переменная имеет два реквизита: тип и значение. Не имеется никакого выбора времени, присущего переменной, и единственное значение - текущая значение.
    13. Процессы, которые выполняют операторы последовательно, являются совершенно редкими. Практические, процессы представляют реальные действия

    Далее>>

    Содержание раздела