Генераторы цифровых сигналов
Генераторы цифровых сигналов можно задать тремя способами.
1. Определение формы цифрового сигнала в задании на моделирование по формату (устройства STIM)
Uxxx STIM(<количество сигналов>,<формат>)
+ <+узел источника питания> <–узел источника питания>
+ <список узлов>*
+ <имя модели вход/выход>
+ [IO_LEVEL=<номер макромодели интерфейса вход/выход>]
+ [STIMULUS=<имя воздействия>]
+ [TIMESTEP=<шаг по времени>]
+ <команды описания формы сигнала>*
Переменная <количество сигналов> определяет количество выходов генератора, равное количеству генерируемых разных цифровых сигналов.
Переменная <формат> – это спецификация формата переменной <данные>, в котором представлены логические уровни сигналов генератора. Эта переменная представляет собой последовательность цифр, общее число которых равно значению переменной <количество сигналов>. Каждая цифра принимает значения 1, 3 или 4, что означает двоичную, восьмеричную и шестнадцатеричную систему счисления.
Подключение источника питания задается номерами узлов <+узел источника питания>, <–узел источника питания>.
Замечание. В PSpice 4 нельзя было создать несколько источников питания, поэтому номера узлов их подключения не указывались при описании генераторов цифровых сигналов и других цифровых устройств. Начиная с версии Design Center 5.0 появилась такая возможность, в связи с этим был изменен формат описания цифровых компонентов – добавлены номера узлов подключения источников питания <+узел источника питания> <–узел источника питания>. Для преобразования библиотек моделей цифровых компонентов PSpice 4 в новый формат предназначена специальная программа digconv.exe.
Номера подключения выходов генератора к схеме задаются <списком узлов>.
Имя модели вход/выход задается параметром <имя модели вход/выход>, как для любого цифрового устройства.
STIMULUS – необязательный параметр, обозначающий имя сигнала;
IO_LEVEL – необязательный параметр для выбора одной из четырех макромоделей интерфейса вход/выход (по умолчанию 0);
TIMESTEP – необязательный параметр для задания периода квантования (или шага). При задании моментов времени номером шага (имеют суффикс “С”) он умножается на величину шага. По умолчанию устанавливается TIMESTEP=0. Этот параметр не принимается во внимание, если заданы абсолютные значения моментов времени (имеют суффикс “S”).
Параметр <описание формы сигнала> представляет собой произвольную комбинацию одной или нескольких следующих строк:
<t>,<логический уровень>
LABEL=<имя метки>
<t> GOTO <имя метки> <n> TIMES
<t> GOTO < имя метки > UNTIL GT <данные>
<t> GOTO < имя метки > UNTIL GE <данные>
<t> GOTO < имя метки > UNTIL LT <данные>
<t> GOTO < имя метки > UNTIL LE <данные>
<t> INCR BY <данные>
<t> DECR BY <данные>
REPEAT FOREVER
REPEAT <n> TIMES
ENDREPEAT
FILE=<имя файла>
Каждая цифра переменной <данные> представляет собой логический уровень соответствующего выходного сигнала, который представлен в системе счисления 2m, где m – соответствующая цифра переменной <формат>.
Количество узлов в <списке узлов> должно быть равно значению переменной <количество сигналов>.
Переменная <t> определяет моменты времени, в которые задаются логические уровни сигнала. Если перед значением переменной <t> имеется символ “+”, то эта переменная задает приращение относительно предыдущего момента времени; в противном случае она определяет абсолютное значение относительно начала отсчета времени t=0. Суффикс “S” указывает размерность времени в секундах (допускается суффикс “nS” – наносекунды и т. п.). Суффикс “С” означает измерение времени в количестве циклов, размер которых определяется параметром TIMESTEP (переменная <шаг по времени>).
Переменная <данные> состоит из символов “0”, “1”, “X”, “R”, “F” или “Z”, интерпретируемых в заданном формате.
Переменная <n> задает количество повторяющихся циклов GOTO; значение n=–1 задает бесконечное повторение цикла.
Переменная <имя метки> используется при организации цикла с помощью оператора перехода GOTO, который передает управление на строку, следующую за оператором LABEL=<имя метки>.
REPEAT FOREVER – начало бесконечно повторяющегося цикла (эквивалентно конструкции REPEAT –1 TIMES).
REPEAT <n> TIMES – повторение n раз.
ENDREPEAT – конец цикла REPEAT.
FILE – указание имени файла, в котором находится описание одного или нескольких входных сигналов.
Приведем пример:
USIGNAL STIM(2,11) $G_DPWR $G_DGND 1 2 IO_STM
+ TIMESTEP=1ns
+ 0C 00 ; В момент времени t=0 состояния обоих узлов равны "0"
+ LABEL=M
+ 1C 01 ; При t=1 нс состояние узла 1 равно "0, узла 2 - "1"
+ 2C 11 ; При t=2 нс состояние обоих узлов равны "1"
+ 3С GOTO M 3 TIMES; В момент времени t=3 нс переход на
+ ; метку M и выполняется первая инструкция без
+ ; дополнительной задержки. Цикл повторяется 3 раза
2. Считывание временной диаграммы цифрового сигнала из файла (устройства FSTIM). Устройства FSTIM задаются по формату:
Uxxx FSTIM(<количество выходов>)
+ <+узел источника питания> <–узел источника питания>
+ <список узлов>*
+ <имя модели вход/выход>
+ FILE=<имя файла сигналов>
+ [IO_LEVEL=<номер макромодели интерфейса вход/выход>]
+ [STIMULUS=<имя воздействия>]
Параметр <количество выходов> определяет количество узлов, к которым подключаются сигналы. Остальные параметры имеют тот же смысл, что в п. 1. Обратим внимание, что задание с помощью параметра FILE имени файла, в котором описаны сигналы, обязательно.
Файл цифрового сигнала может быть получен путем редактирования файла результатов моделирования или составлен вручную с помощью любого текстового редактора.
Файл цифрового сигнала имеет две секции:
1) заголовок (header), содержащий список имен сигналов;
2) список значений сигнала (transitions), содержащий на одной или более строках моменты времени изменений сигналов и колонки их значений.
Приведем сначала пример файла цифровых сигналов:
* Заголовок: содержит имена сигналов
CLOCK, RESET, IN1, IN2; имена 4-х сигналов
*Начало описания сигналов; отделяется от заголовка пустой строкой
0 0000 ; двоичные коды сигналов
10ns 1100
20ns 0101
30ns 1110
40ns 0111
Заголовок имеет следующий формат:
[TIMESCALE=<значение>]
<имя сигнала 1>...<имя сигнала n>...
OCT(<3-й бит сигнала>...<1-й бит сигнала>)...
HEX(<4-й бит сигнала>...<1-й бит сигнала>)...
Имена сигналов могут разделяться запятыми или пробелами. Они располагаются на одной или нескольких строках, но строки продолжения не имеют в начале знака “+”. Максимальное количество сигналов 255, на одной строке могут размещаться не более 300 символов. Имена сигналов перечисляются в том же порядке, в котором их значения приводятся во временных диаграммах.
Если перед именем сигнала не указывается название системы счисления, он считается двоичным. Имена сигналов, записанных в восьмеричном коде, предваряются кодом OCT и группируются по 3 сигнала (имена групп сигналов заключаются в круглые скобки). Шестнадцатеричные сигналы имеют код HEX и группируются по 4 сигнала.
Приведем еще один пример файла сигналов:
Clock Reset In1 In2
HEX(Addr7 Addr6 Addr5 Addr4) HEX(Addr3 Addr2 Addr1 Addr0)
ReadWrite
0 0000 00 0 ; Для наглядности между группами
10n 1100 4E 0 ; можно включать пробелы
20n 0101 4E 1
30n 1110 4E 1
40n 0111 FF 0
Здесь в начале приведены имена четырех двоичных сигналов, затем две группы сигналов, задаваемых в шестнадцатеричном виде, и затем еще один бинарный сигнал.
В последующем списке значений сигналов даны 7 колонок, соответствующих приведенным в заголовке сигналам.
Список значений имеет формат:
<время> <значение сигнала>*
Список значений отделяется от заголовка пустой строкой. Моменты времени и список значений сигналов должны быть разделены по крайней мере одним пробелом. Для моментов времени изменений сигналов указываются их абсолютные значения (в секундах), например 25ns, 1.2E-9, 5.8, или приращение относительно предыдущего момента времени. Признак приращения – знак “+” перед значением момента времени, например +5ns. Каждое значение сигнала соответствует одиночному бинарному сигналу или группе сигналов, имена которых помещены в группы с указателями системы счисления OCT или HEX. Общее количество значащих цифр в значениях сигналов должно быть равно общему количеству бинарных сигналов и групп сигналов, помеченных символами OCT и HEX. Разряды данных сигнала могут принимать следующие значения:
Двоичные |
Восьмеричные |
Шестнадцатиричные |
|
Логические/цифровые |
0, 1 |
0...7 |
0...F |
Неопределенные |
X |
X |
X |
Высокого импеданса |
Z |
Z |
Z |
Передний фронт |
R |
R |
R |
Задний фронт |
F |
F |
- |
Приведем примеры генераторов цифровых сигналов типа FSTIM.
1. Пусть имеется файл dig1.stm, в котором описана временная диаграмма сигнала IN1. Тогда в задание на моделирование можно включить следующее описание генератора:
U1 FSTIM(1) $G_DPWR $G_DGND
+ IN1 IO_STM FILE=DIG1.STM
2. Пусть имеется файл flipflop.stm следующего содержания:
J K PRESET CLEAR CLOCK
0 0 0 010
10ns 0 0 111
. . . . .
В задание на моделирование включим описание генератора сигнала
U2 FSTIM(4) $G_DPWR $G_DGND
+ CLK PRE J K
+ IO_STM
+ FILE=FLIPFLOP.STM
+ SIGNAMES = CLOCK PRESET
В этом примере первым двум узлам CLK и PRE соответствуют сигналы CLOCK и PRESET из файла сигналов, это соответствие устанавливается с помощью опции SIGNAMES. Последним узлам J и K соответствуют одноименные сигналы из файла сигналов, поэтому их имена нет необходимости включать в опцию SIGNAMES. Сигнал CLEAR в данном примере не используется (но на него можно сослаться в другом генераторе FSTIM).