Часть 10: СИМУЛЯЦИЯ


plug

10-6: Вентиль - Gate Entity (ALS)

plug



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

Сущность вентиля озаглавлена объявлением gate и сопровождается телом информации. Объявление вентиля содержит имя и список экспортированных узлов симуляции (на которые ссылаются на верхнем уровне описания модели). Формат этого заявления показан ниже:

Format:

gate name(signal1, signal2, signal3, ... signalN)

Example:

gate nor2(in1, in2, out)


gate and3(a, b, c, output)

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

Заявления i: и o: (Input и Output)

Заявления i: и o: используются для конструирования логической таблицы истинности примитива вентиля. Имена сигналов и логические утверждения, которые сопровождают заявление i:, представляют одно или много возможных входных условий. Если логическое состояние всех входных сигналов находят условия определенные в заявлении i:, симулятор запланирует выходы для обновления (как обозначено в соответствующем заявлении o:). Логическая таблица истинности для двух входов вентиля AND показана ниже:



   gate and2(in1, in2, output)  
   i: in1=H in2=H  o: output=H 
   i: in1=L        o: output=L 
   i: in2=L        o: output=L 
   i:              o: output=X

Последняя строчка таблицы истинности представляет условие по умолчанию для события, которому предыдущие условия не отвечают (например, in1=H and in2=X). Следует отметить, что симулятор проверяет входные условия в очередности их появления в таблице истинности. Если действительное входное условие найдено, симулятор планирует соответствующие выходные назначения и немедленно прекращает просмотр таблицы истинности. 

Ссылки сигнала в заявлении i:

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

Format:

signal <operator> state_value

or:

signal <operator> other_signal

Operators:

= Test if equal


! Test if not equal


< Test if less than


> Test if greater than

Example:

node1 = H


input1 ! input2


node3 < 16

Нет ограничений на количество проверок сигналов, которые могут следовать за заявлением i:. Если не достаточно места на единственной строке для размещения всех условий проверки, пользователь может продолжить список на следующей линии netlist.

Ссылки сигнала в заявлении o:

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

Format:

signal [ <operator> operand [ @ <strength> ] ]

Operators:

- decrement signal by value of operand


= equate signal to value of operand


+ increment signal by value of operand


- decrement signal by value of operand


* multiply signal by value of operand


/ divide signal by value of operand


% modulo signal by value of operand

Strengths:

0 off


1 node


2 gate


3 VDD

Example:

qbar = H@3


out1 + 3


out + out1@4


node1 % modulus_node

Следует заметить, что логическое состояние операнда может быть задано непосредственно (так, как H, 3) или он может быть косвенно адресован через имя сигнала (так, как out1, modulus_node). При косвенной адресации значение сигнала, указанное как операнд, используется в математических расчетах. Объявление интенсивности необязательно, и, если оно опущено, выходному сигналу назначается интенсивность по умолчанию 2 (gate).

Заявление t: (Time Delay - временная задержка)

Время распространения задержки (скорость переключения) вентиля может быть установлена заявлением t:. Формат этого заявления показан ниже:

Format:

t: <mode> = value { + <mode> = value ... }

Mode:

delta: fixed time delay in seconds


linear: random time delay with uniform distribution


random: probability function with values between 0 and 1.0

Example:

t: delta=5.0e-9


t: delta=1.0e-9 + random=0.2

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

Заявление t: устанавливает временные параметры для каждой строки таблицы истинности (пара заявлений i: и o:), которые следуют в описании вентиля. Можно установить разные времена для фронта и спада у вентиля, используя более одного заявления t: в описании вентиля.  Полагая, что 2х-входовый вентиль NAND имеет временные характеристики t(lh) = 1.0 nanoseconds и t(hl) = 3.0 nanoseconds, описание вентиля для устройства будет следующим:

   gate nand2(in1, in2, output)  
   t: delta=3.0e-9  
   i: in1=H in2=H   o: output=L  
   t: delta=1.0e-9  
   i: in1=L         o: output=H  
   i: in2=L         o: output=H

Этот пример показывает, что когда оба входа в высоком состоянии, выход будет в низком после задержки в 3.0 наносекунды (nanoseconds), и что если любой из входов в низком состоянии, выход будет в высоком состоянии после задержки в 1.0 наносекунду.

Временное распределение Delta (Delta Timing Distribution) заявления t:

Временное распределение Delta используется для задания фиксированной, не случайной задержки (non-random delay). Формат объявления (delta timing) показан ниже:

Format:

delta = value

Example:

delta = 1.0


delta = 2.5e-9

Значение, ассоциированное с дельта объявлением, представляет фиксированную временную задержку в секундах (1.0 = 1 second, 2.5e-9 = 2.5 nanoseconds, и т.д.)

Временное распределение (Linear) заявления t:

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

Format:

linear = value

Example:

linear = 1.0


linear = 2.0e-9

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

Функция случайного распределения (Random Probability Function) заявления t:

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

Format:

random = value

Example:

random = 0.75


random = 0.25

Значение, ассоциированное со случайным распределением, должно быть в пределах 0.0 <= value <= 1.0. Это значение представляет время в процентах, в которое событие должно обнаружиться.

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

В качестве примера ниже показана система, которая моделирует в канале коммуникации потерю 1% байт данных, проходящих через него:

Figure 10.5

   model main(in, out)
   trans1: good(in, out)
   trans2: bad(in, out)
   gate good(in, out)
   t: delta=1.0e-6
   i: in>0x00    o: out=in  in=0x00
   gate bad(in, out)
   t: delta=1.0e-6 + random=0.01
   i: in>0x00    o: out=0xFF in=0x00

Netlist описывает систему, где символы ASCII представлены как 0x01-0x7F. Значение 0x00 показывает здесь, что данных в канале нет, а значение 0xFF  показывает испорченный символ. Предполагается, что есть внешний источник данных, который вводит символы во входной канал. Следует отметить, что объявление случайного распределения размещено только в одном из двух описаний вентилей, а не в обоих. Появляются не предсказуемые события, если объявление случайного распределения размещается в описаниях обоих вентилей.

Заявление коэффициента ветвления (Fanout Statement)

Заявление fanout используется для выборочного enable/disable (доступно/не доступно) ветвления при расчетах вентиля, когда база данных скомпилирована. Формат заявления fanout показан ниже:

Format:

fanout = on

or:

fanout = off

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

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

Заявление нагрузки (Load Statement)

Заявление load используется для установки относительной нагрузки (емкостной) для входов или выходов сигнала. Формат заявления load показан ниже:

Format:

load signal1 = value { signal2 = value ... }

Example:

load in1=2.0 in2=1.5 in3=1.95


load sa=2.5

Значение, ассоциированное с сигналом, представляет относительную емкость узла симуляции. Когда временные параметры указаны в описании вентиля, предполагается, что они выбраны для симуляции, где вентиль управляет единицей (1.0) нагрузки, такой как инверсный вход минимального размера. Команда нагрузки говорит симулятору, что некоторые структуры входов меньше или больше (с большей емкостью), чем стандартная ссылка. Симулятор, по определению, предполагает, что все сигналы, ассоциированные с примитивами вентиля, имеют оценку нагрузки в 1.0 (единица нагрузки), пока они не переписываются заявлением load.

Заявление приоритета (Priority Statement)

Заявление priority используется для основания планируемого приоритета для примитива вентиля. Формат заявления priority показан ниже:

Format:

priority = level

Example:

priority = 1


priority = 7

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

Заявление установки (Set Statement)

Заявление set используется для инициализации сигналов к специальным логическим состояниям до начала симуляции. Формат заявления set показан ниже:

Format:

set signal1 = <state> @ { <strength> }


signal2 = <state> @ { <strength> }

Example:

set input1=H@2 input2=L input3=X@0


set count=4 multiplier=5 divisor=7@2

Если пользователь не укажет значения интенсивности, сигналу будет присвоено предопределенное значение логической интенсивности 3 (VDD). Эти установки по умолчанию будут переписаны для любого выхода вентиля (поскольку установленная интенсивность 2 используется для выходов вентиля).

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


Prev

Предыдущий

   

Contents

Содержание

   

Следующий

Next