РАЗРЕШЕНИЕ НЕОДНОЗНАЧНОСТИ УСТАНОВЛЕНИЯ СИГНАЛА НА ЯЗЫКЕ VHDL



При использовании механизма задержек могут возникать неоднозначные ситуации. Значение одному и тому же сигналу могут устанавливаться не­сколькими операторами присваивания значений. Эти операторы могут уста­навливать разные значения, определять их с разными задержками. В резуль­тате в программе на VHDL может создаваться неоднозначная ситуация, когда на каком-то интервале модельного времени значения, устанавливае­мые разными операторами присваивания, входят в противоречие друг с дру­гом.

В семантике языка VHDL приняты специальные правила для разрешения такой неоднозначности. В основе этих правил лежит сопоставление между последовательностью выполнения операторов присваивания значений сиг­налам и заданных ими моментов изменения сигналов.

В VHDL принято, что если возникает ситуация, когда транзакция измене­ния значения сигнала, порожденная позже, планируется на более раннее время, то транзакция, порожденная раньше по ходу исполнения программы, но запланированная на более позднее время, уничтожается.

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

Пример

process (а)

constant Т_01:time:=800 ns;

constant Т_10 : time: =500 ns;

Begin

if a='1' then

z<= transport a after T_01;

else

z<=transport a after T_10;

end if;

end process;


ПРОЦЕССЫ, ИХ ОПИСАНИЯ НА ЯЗЫКЕ VHDL . СПИСОК ЧУВСТВИТЕЛЬНОСТИ

Одной из форм параллельных операторов являются процессы. Процессы яв­ляются базовыми конструкциями для задания поведения описываемой ар­хитектуры с учетом параллельности выполняемых действий.

Процессы выполняются параллельно относительно друг друга, а действия внутри тела процесса выполняются последовательно. Выполнение процес­сов осуществляется в соответствии с изменениями значений сигналов.

Описание процесса имеет следующий синтаксис:

 

[process label:] process [(signal_name {,...})][is]

{process_declarative_item}

Begin

{sequential_statement}

end process [process__label] ;

 

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

В секцию process _ declarative _ item могут включаться описания локальных констант, типов и переменных, используемых в описываемом процессе.

Сигналы не могут быть описаны как локальные данные процесса.

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

Наличие метки процесса process _ label (фактически — имени процесса) облегчает отладку программы на VHDL, включающей множество процессов.


ВИДЫ ЗАДЕРЖЕК И ИХ ОПИСАНИЕ НА ЯЗЫКЕ VHDL

Инерционная задержка. Цифровые схемы обладают определенной инерционностью. Для формирования сигнала на выходном контакте, в ответ на изменение входного сигнала, требуется некоторое количество энергии и определенное время. Чтобы на выходе сформировался устойчивый сигнал, входной сигнал должен продержаться в новом состоянии не менее некоторого промежутка времени. Если же входной сигнал не простоит в этом состоянии нужное время, то вызванные им изменения состояния схемы не успеют распространиться до рассматриваемого выхода. Для представления этого вида задержек распространения сигналов в языке VHDL используется понятие инерционной задержки(inertial delay), в операторе присваивания — ключевое слово inertial.

До тех пор, пока входной сигнал изменяется не чаще, чем время, указанное в секции after , изменения выходного сигнала происходят в соответствии с изменениями входного, но с учетом указанной задержки. Если же изменения входного сигнала происходят чаще, чем время, указанное в секции af ter , они игнорируются. Когда минимальная длительность входного сигнала, приводящая к изменению выходного сигнала, меньше заданной задержки, для ее указания используется секция reject .

Например, в операторе присваивания значения сигналу можно указать:

z <= reject 3 ns inertial (x xor у) after 7 ns; т.е. сигнала на выходе нет.

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

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

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

Особая ситуация складывается в модели устройства на языке VHDL, если оператор присваивания нового значения сигналу устанавливает нулевую задержку. Если отсутствует секция after, то считается, что задержка изменения сигнала составляет 0 нс. В реальных устройствах такие ситуации невозможны.

Решение проблемы: система моделирования, закончив текущий цикл моделирования для момента t1 модельного времени, не сразу переходит к следующему моменту модельного времени t2 > t1(например, t2 = t1 + 1). Она проверяет, имеются ли изменения сигналов, вновь запланированные на момент t1. Если выявлены новые изменения сигналов на тот же момент t1 модельного времени, то система моделирования выполняет новый цикл моделирования, отрабатывая эти изменения. И так далее, пока не будет определено, что по результатам текущего цикла моделирования не появилось новых сигналов, запланированных на момент t1, после чего система переходит к моделированию момента t2модельного времени.


Дата добавления: 2020-04-08; просмотров: 192; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!