Подписка на новости

Опрос

Нужны ли комментарии к статьям? Комментировали бы вы?

Реклама

 

2001 №3

Знакомство с пакетом DesignLab 8 (PSpice). Урок 2. Внешние воздействия

Шалагинов Александр


Урок 2. Как задавать внешние воздействия

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

Все статьи цикла:

Для цифровых сигналов существуют четыре вида внешних генераторов. Их условные графические изображения показаны на рис. 2.1.Наиболее привлекательно выглядят генераторы DigStim, потому что временные диаграммы для них можно просто и легко нарисовать курсором мыши. С них мы и начнем.

DigStim — источник цифрового сигнала, задаваемый с помощью специального графического редактора стимулов StmEd (от слов Stimulus Editor);
FileStim — источник цифрового сигнала, описание которого помещается в отдельный текстовый файл;
DigClock — источник цифрового периодического сигнала, программируемый непосредственно из графического редактора Schematics;
STIM1, STIM4, STIM8, STIM16 — источники цифрового сигнала, работающие на одно-, четырех-, восьми- или шестнадцатиразрядную шину.

Генераторы цифровых сигналов типа DigStim

Запустим графический редактор Schematics и активизируем команду Draw/Get New Part.... Найдем в библиотеке SOURCSTM.slb генератор DigStim и поместим две его копии на экране монитора. Редактор присвоит им позиционные обозначения DSTM1 и DSTM2. К выходам генераторов подключим небольшие отрезки проводников и назовем их Signal_1 и Clock_1.

Снизу у каждого генератора имеется атрибут STIMULUS=, которому нужно задать какое-нибудь значение. Можно взять за правило называть генератор тем же именем, что и цепь, на которую он работает. Поэтому присвоим атрибуту STIMULUS= значения Signal_1 и Clock_1 соответственно.

Сохраним нарисованную схему в файле Stimulus_1.sch.

Теперь можно приступить к построению временных диаграмм для обоих генераторов. Запустим редактор стимулов StmEd (урок 1) и создадим новый файл, например Stimulus_1.stl. Впрочем, расширение .stl редактор добавит по умолчанию.

Введем команду Stimulus/New.... На экране появится диалоговая панель New Stimulus (рис. 2.2), в верхнем поле которой надо задать имя рисуемого сигнала. Введем с клавиатуры имя Signal_1 и определим тип сигнала — цифровой (Digital), произвольной формы (Signal). В нижнем поле можно задать начальное значение сигнала: 0, 1, X (Unknown) или Z (High Impedance).

Рис. 2.2. Диалоговая панель для создания нового сигнал
Рис. 2.2. Диалоговая панель для создания нового сигнал

Нажав кнопку OK, мы увидим вводимый сигнал, а точнее его «заготовку» — прямую линию, проходящую через весь экран монитора (рис. 2.3).

Рис. 2.3. Рабочее окно редактора стимулов
Рис. 2.3. Рабочее окно редактора стимулов

Введем команду Edit/Add (она дублируется пиктограммой, показанной справа, и горячей клавишей Alt+A). Курсор мыши приобретет форму карандаша, и теперь мы можем задавать точки, в которых происходят переключения (события). Для этого достаточно щелкнуть левой кнопкой мыши в зоне расположения рисуемого сигнала. Текущая координата курсора по оси времени высвечивается в левой части статусной строки, что позволяет контролировать момент переключения сигнала.

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

Для этого достаточно выполнить команду Plot/Axis Settings... и в поле Timing Resolution задать желаемую величину разрешения. Названная команда дублируется также пиктограммой, показанной рядом.

Новое значение сигнала является отрицанием текущего, то есть переключения могут происходить только между двумя уровнями 0 и 1. Рисовать временную диаграмму необходимо слева направо в направлении возрастания времени.

Если на каком-то участке временной диаграммы надо задать иное значение (например, X или Z), то придется прервать команду рисования (клавиша Esc или правая кнопка мыши).

Затем двойным щелчком на редактируемом участке вызвать диалоговую панель Edit Digital State... и в поле Value установить желаемое значение. Одновременно можно изменить длительность редактируемого состояния (поле Duration) и переместить его по оси времени (Start Time).

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

Курсором мыши можно выделить отдельный импульс или целый фрагмент временной диаграммы и удалить его или переместить в другое место.

Если щелкнуть карандашом на уже нарисованной части временной диаграммы, то редактор поставит в указанном месте короткий импульс, длительностью в 1 нс (по умолчанию). Чтобы вставить более широкий импульс, следует нажать левую кнопку мыши, обозначив его начало, и, не отпуская кнопку, передвинуть курсор вправо на нужную величину. Есть и другая возможность: командой Plot/Axis Settings... установить желаемую длительность импульса, а затем щелкнуть в том месте, где он должен стоять.

Второй сигнал, который нам предстоит сформировать, является периодически повторяющимся. Конечно, его можно создать уже описанным способом, но это не лучшее решение. Правильнее поступить так. Активизировав команду Stimulus/New, указать его имя Clock_1 и тип — Clock (а не Signal). Приняв такое решение, мы лишились возможности рисовать мышью, да в этом и нет нужды.

Результат получится быстрее, если указать всего один его параметр: Frequency (частоту). Остальные параметры — Duty cycle (коэффициент заполнения), Initial value (начальное значение) и Time delay (время задержки) имеют значения, задаваемые по умолчанию, и их можно оставить без изменения.

Зададим частоту сигнала 10 MГц и нажмем кнопку Apply (применить). Результат не заставит себя ждать — на экране появится требуемый сигнал. Его можно отредактировать, а затем нажать кнопку OK.

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

Нагрузите их какими-нибудь логическими элементами, и вторая попытка не разочарует вас (рис. 2.4).
(Может быть, вы просто забыли подключить к редактору файл с описанием входных сигналов Signal_1 и Clock_1 или задать временной анализ.)

Рис. 2.4. Результаты моделирования внешних воздействий
Рис. 2.4. Результаты моделирования внешних воздействий

А теперь займемся более серьезной работой — реализуем генератор внешних воздействий для четырехразрядной шины. Разместим в окне графического редактора Schematics еще одну копию генератора стимулов DigStim. Он получит позиционное обозначение DSTM3.

Командой Draw/Bus подключим к его выходному контакту шину и зададим ей имя bus[3....0]. В квадратных скобках указана ширина шины — четыре разряда. Старшим считается разряд, записанный слева, то есть bus3. Атрибуту STIMULUS= зададим значение bus_4. Из шины выведем четыре проводника и назовем их bus3, bus2, bus1, bus0.

Такие имена удобно задавать командой Options/Auto-Naming.... В поле Label Template диалоговой панели Auto Naming следует указать шаблон, а точнее имя первого проводника bus0. Все последующие имена будут автоматически получаться добавлением единицы к текущему имени. Чтобы все работало, не забудьте установить флажок Enable Auto-Increment. После этого выделим подвергаемые данной операции проводники (с помощью клавиши Shift) и выполним команду Edit/ Label. Все произойдет как по мановению волшебной палочки, и отмеченные проводники будут мгновенно наделены именами.Вернемся в редактор входных сигналов и создадим новый стимул bus_4. Укажем его тип — bus (шина), а в поле Width зададим ее ширину (четыре двоичных разряда).

В процессе рисования шинного сигнала можно использовать те же приемы, что и при создании сигнала произвольной формы, имеющего тип Signal. Разница только в том, что при переключении шинного сигнала необходимо указать его новое значение. Оно вводится в поле цифровых значений (Digital value field), которое находится в правом конце панели инструментов. По умолчанию вводимая информация воспринимается в шестнадцатеричном формате.

Введем в это поле значение F, активизируем команду Edit/Add и укажем курсором — карандашом — точку, в которой шинный сигнал должен переключиться с начального значения на новое F (All bits 1). Далее введем значение E и опять щелкнем мышью в зоне рисуемого сигнала.Если последующие значения должны уменьшаться на единицу (Decrement 1), то проще указать в поле Digital value field именно эту операцию. Введем шаг уменьшения «–1», и последующие переключения (transitions) будут выполняться с автоматическим вычислением нового значения шины. В любой момент можно прервать выполняемую операцию Decrement или изменить ее шаг.

Сменим направление автоматического приращения шинного сигнала.

Для этого достаточно заменить знак «–» на «+». Зададим шаг приращения «+3» и введем несколько значений, чтобы убедиться, что операция Increment работает. Хорошо, если Вы проконтролируете еще и переполнение разрядной сетки шины.

Есть еще одна возможность сформировать шинный сигнал. Сначала карандашом расставляются точки переключений, а затем в режиме редактирования временной диаграммы задаются требуемые значения. Для этого надо дважды щелкнуть на редактируемом участке временной диаграммы и, когда появится диалоговая панель Edit Digital State, указать в поле Value нужное значение.

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

STL-файлы являются текстовыми, и их содержимое можно просмотреть любым, подходящим для этих целей редактором. Конечно, лучше всего использовать встроенный в пакет DesignLab 8 редактор Text Edit, который вызывается из менеджера проекта командой Tools/TextEdit или щелчком на пиктограмме, показанной рядом.

Рис. 2.5. Результаты моделирования простых и шинных воздействий
Рис. 2.5. Результаты моделирования простых и шинных воздействий

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

* D:\MSim_8\Projects\Stimulus_1.stl written on Sat Nov 07 13:18:05 1998
;!Stimulus Get
;! Signal_1 Digital Clock_1 Digital bus_4 Digital
;!Xrange 0s 2us ;
;!XminRes 50ns ; Второй вариант описания логического сигнала. Ему
.STIMULUS Signal_1 STIM (1, 1) ; можно задать еще пару значений: R — фронт и F — спад
+ +0s 0 ; 0
+ 60ns 1 ; R
+ 110ns 0 ; 1
+ 180ns 1 ; F
+ 280ns 0 ; 0
+ 500ns X ; X
+ 880ns 0 ; 0
+ 930ns 1 ; 1
+ 1.28us 0 ; 0
+ 1.48us Z ; Z
+ 1.79us 0 ; 0
.STIMULUS Clock_1 STIM (1, 1) ;! CLOCK 10Mhz 0.5 0 0
+ +0s 0
+ +50ns 1
+ Repeat Forever
+ +50ns 0
+ +50ns 1
+ EndRepeat
.STIMULUS bus_4 STIM (4, 1111) ;! Hex ; Второй вариант описания шинного сигнала
+ +0s 0000 ; ZZZZ
+ 200ns 1111 ; XXXX
+ 380ns 1110 ; 1111
+ 500ns DECR BY 0001 ; 0000
+ 600ns DECR BY 0001 ; RRRR
+ 700ns DECR BY 0001 ; 1111
+ 800ns DECR BY 0001 ; FFZX
+ 900ns DECR BY 0001 ; 0001
+ 1us DECR BY 0001 ; RRRF
+ 1.1us DECR BY 0001 ; 1110
+ 1.25us INCR BY 0011 ; 0000
+ 1.4us INCR BY 0011 ; ....далее без изменений
+ 1.55us INCR BY 0011
+ 1.7us INCR BY 0011
+ 1.85us INCR BY 0011

Кроме того, теперь у вас появилась возможность задавать еще два значения сигнала — фронт R (от слова Rise) и спад F (от слова Fall), чего нельзя было сделать из графического редактора стимулов.

Откроем текстовым редактором файл Stimulus_1.stl и внесем изменения во временную диаграмму сигнала Signal_1, дополнив ее значениями R и F, так как это показано на рис 2.6 в разделе комментария. Поэкспериментируем и с шинным сигналом bus_4 (рис. 2.6).

Промоделируем схему еще раз, обратив особое внимание на графическое представление нестандартных значений обоих сигналов (рис. 2.7):

  • значение X рисуется двумя параллельными линиями красного цвета;
  • значение Z рисуется тремя параллельными линиями синего цвета;
  • значения R и F представляются двумя параллельными линиями желтого цвета со скошенными краями, напоминающими нарастание и спад сигнала.
  • Рис. 2.7. Графическое представление различных значений сигналов 0, 1, X, Z, R и F для одиночных узлов и шин
    Рис. 2.7. Графическое представление различных значений сигналов 0, 1, X, Z, R и F для одиночных узлов и шин

    Генераторы цифровых сигналов типа FileStim

    Генераторы названного типа программируются не графическим, а текстовым редактором. Кажется, это не так интересно, однако в некоторых случаях оказывается проще и быстрее.

    Запустим графический редактор Schematics и создадим новый файл Stimulus_2.sch. Разместим на экране две копии генератора FileStim. Его графический образ находится в библиотеке SOURCE.slb. К первому подведем проводник, ко второму — шину. Присвоим им имена wire_file и bus_file[3-0]. Из шины выведем четыре проводника и присвоим им имена по шаблону от bus_file0 до bus_file3.Создадим любым текстовым редактором (например, редактором TextEdit, встроенным в пакет DesignLab 8) файл Stimulus_2.stm (обычно такие файлы имеют расширение.stm, хотя это и не является обязательным условием) и введем в него текст (см. ниже).

    * TIMESCALE = 0.5 ; масштаб по времени
    * Заголовок, в котором перечисляются имена программируемых сигналов
    wire_file ; одиночный сигнал
    HEX(bus_file3, bus_file2, bus_file1, bus_file0) ; шинный сигнал
    * Пустая строка, отделяющая заголовок от описания временных диаграмм!!!
    0ns 0 F
    100ns 1 F
    200ns X E
    300ns 0 D
    500ns 1 C
    600ns 0 B
    800ns Z A
    1000ns 1 9
    1200ns 0 X
    1400ns R Z
    1500ns 1 0
    1700ns F R
    1800ns 0 F

    Структура файла достаточно проста. Он содержит две секции:

  • заголовок, включающий список имен сигналов;
  • очередь событий (transitions — переходы, переключения) на входах схемы, отмечающих моменты изменения сигналов и их новые значения.
  • Если какой-то сигнал в данный момент времени не изменяется, то следует подтвердить его текущее значение. Например, сигнал wire_file на отметке 100 нс переключается из 0 в 1, а шинный сигнал сохраняет текущее значение F. События в очереди упорядочены по времени. Соответствие между именами сигналов и колонками их значений задается позиционированием, то есть первому сигналу в списке соответствует первый столбец значений, второму сигналу — второй столбец и т. д. Секции отделяются друг от друга пустой строкой, а столбцы — хотя бы одним пробелом или запятой.

    Выделим генератор одиночного сигнала DSTM1 и с помощью команды Edit/Attributes... зададим атрибуту FileName значение Stimulus_2.stm, а атрибуту SigName — значение wire_file. Тем самым мы указали, что сигнал для этого генератора находится в файле Stimulus_2.stm и называется wire_file.

    Аналогичным образом сделаем необходимые ссылки для второго генератора DSTM2:

    FileName = Stimulus_2.stm
    SigName = bus_file3, bus_file2, bus_file1, bus_file0.

    Промоделируем «пустую» схему с двумя генераторами и убедимся, что мы правильно описали цифровые сигналы (рис. 2.9).

    Рис. 2.9. Результаты моделирования генераторов входных воздействий типа FileStim
    Рис. 2.9. Результаты моделирования генераторов входных воздействий типа FileStim

    В начале файла описания цифровых сигналов можно поставить необязательный параметр TIMESCALE = <значение>, например TIMESCALE = 0.5, и, таким образом, изменить масштаб по оси времени. Это бывает полезно при поиске предельных режимов работы устройства (рис. 2.10).

    Рис. 2.10. Временная диаграмма «сжата» в два раза относительно предыдущего эксперимента (масштаб по времени TIMESCALE = 0.5)
    Рис. 2.10. Временная диаграмма «сжата» в два раза относительно предыдущего эксперимента (масштаб по времени TIMESCALE = 0.5)

    Генераторы цифровых периодических сигналов типа DigClock

    Генераторы названного типа программируются непосредственно из графического редактора Schematics. Это удобство делает их конкурентоспособными по отношению к ранее рассмотренным типам.

    Запустим графический редактор Schematics и создадим новый файл Stimulus_3.sch. Разместим на экране две копии генератора DigClock. Его графический образ находится в библиотеке SOURCE.slb. Подключим к выходам генераторов небольшие отрезки проводников и назовем их digclock_1 и digclock_2. Нагрузим выходы генераторов какими-нибудь логическими элементами, например инверторами 7404, чтобы не возникали проблемы «плавающего» выхода.

    Дважды щелкнем на символе генератора DSTM1, после чего откроется диалоговая панель со списком его атрибутов (рис. 2.11).

    Рис. 2.11. Диалоговая панель генератора периодического сигнала DigClock
    Рис. 2.11. Диалоговая панель генератора периодического сигнала DigClock

    Зададим им следующие значения:

    DELAY = 50nS ; начальная задержка
    ONTIME = 0.1uS ; длительность импульса
    OFFTIME = 0.2uS ; длительность паузы
    STARTVAL = 1 ; стартовое значение
    OPPVAL = 0 ; противоположное значение

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

    Промоделируем схему, находящуюся в файле Stimulus_3.sch, и посмотрим, что у нас получилось (рис. 2.12). Заметим, что по умолчанию генерируется периодический сигнал с частотой 1 МГц, имеющий одинаковую длительность и паузу (меандр).

    Рис. 2.12. Результаты тестирования генераторов периодических сигналов DigClock
    Рис. 2.12. Результаты тестирования генераторов периодических сигналов DigClock

    А теперь попробуем подобрать значения атрибутов так, чтобы у нас получилась временная диаграмма digclock_3, показанная на том же рисунке.

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

    Выполним команду Analysis/Examine Netlist и посмотрим содержимое файла, в который схемный редактор помещает список цепей моделируемой схемы (он имеет расширение .NET). Вы без труда обнаружите в нем результаты нашего творчества. Кстати, этот файл можно редактировать и запускать схему на моделирование с измененными параметрами. Конечно, это не лучший стиль работы, так как внесенные в NET-файл изменения не коснутся схемного редактора и тех значений атрибутов, которые мы задавали генераторам периодических сигналов.

    Обратите внимание на стандартную конструкцию периодического сигнала:

    U_DSTM1 STIM(1,1) $G_DPWR $G_DGND digclock_1 IO_STM IO_LEVEL=0
    + 0 1 ; Перед началом моделирования
    (tm = 0 нс) на выходе генератора 1
    + +50ns 0 ; Спустя 50 нс (относительное приращение) выход переключается в 0
    +REPEAT FOREVER ; Начало бесконечно повторяющегося цикла
    + +.1uS 1 ; Длительность отрицательного импульса
    + +.2uS 0 ; Длительность паузы
    + ENDREPEAT ; Конец цикла REPEAT

    Может показаться, что «интеллект» программы весьма высок, коль скоро она в состоянии генерировать такие конструкции. На самом деле все сделано довольно примитивно — описанная конструкция просто «зашита» в шаблон TEMPLATE. Это один из атрибутов генератора DigClock.

    Посмотрите содержимое названного атрибута, и вы убедитесь в сказанном:
    TEMPLATE = U^@REFDES STIM(1,1) %PWR %GND %1 @IO_MODEL IO_LEVEL=@IO_LEVEL \n+ 0 @STARTVAL\n+ +?DELAY/@DELAY//@OFFTIME/ @OPPVAL\n+REPEAT FOREVER\n+ +@ONTIME @STARTVAL\n+ +@OFFTIME @OPPVAL\n+ ENDREPEAT.
    Впрочем, в этом атрибуте столько загадок, что до поры до времени не стоит ломать над ними голову.

    Генераторы цифровых сигналов типа STIM1...STIM16

    Генераторы названного типа, так же как и только что рассмотренные, программируются непосредственно из графического редактора Schematics. Однако в отличие от DigClock они позволяют работать с шинными сигналами и описывать не только периодические сигналы, но и сигналы произвольной формы.

    Запустим графический редактор Schematics и создадим новый файл Stimulus_4.sch. Разместим на экране два генератора STIM1 и STIM4. Они находятся в библиотеке SOURCE.slb. Подключим к выходу DSTM1 небольшой отрезок проводника и назовем его wire_stim1. К выходу DSTM2 подключим шину bus_stim[3....0]. Нагрузим выходы генераторов какими-нибудь логическими элементами, например инверторами 7404, чтобы не возникали проблемы «плавающего» выхода.

    Дважды щелкнем на символе генератора DSTM1, после чего откроется диалоговая панель со списком его атрибутов. Зададим им следующие значения:

    COMMAND1 = 0ns 0
    COMMAND2 = 100ns 1
    COMMAND3 = 200ns 0
    COMMAND4 = 300ns r
    COMMAND5 = 400ns 1
    COMMAND6 = 500ns f
    COMMAND7 = 600ns 0
    COMMAND8 = 800ns x
    COMMAND9 = 1uS 0
    COMMAND10 = 1.2us z
    COMMAND11 = 1.4us 0

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

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

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

    TIMESTEP = 200ns
    FORMAT = 4
    COMMAND1 = 0c F
    COMMAND2 = 1c 8
    COMMAND3 = +0.5c 4
    COMMAND4 = 3c 2
    COMMAND5 = 4c 1
    COMMAND6 = 5c 0
    COMMAND7 = 6c F
    COMMAND8 = label = look
    COMMAND9 = 7c decr by 2
    COMMAND10 = 8c goto look -1 times.

    В данном примере временная диаграмма задается не в абсолютных единицах времени, а в терминах «такт» (cycle). Длительность такта определяется атрибутом TIMESTEP и в примере равна 200 нс. События (переключения) шинного сигнала происходят на границах тактов 1c, 2c, 3c,... (буква «c» от слова cycle означает, что время измеряется не в секундах, а в тактах).

    Значения шинного сигнала записаны в шестнадцатеричном формате. Об этом говорит значение атрибута FORMAT = 4. Если вы желаете записать временную диаграмму в двоичной системе счисления, то данному атрибуту надо определить значение FORMAT = 1111. Для восьмеричной системы счисления — FORMAT = 3. Убедитесь, что ширина шины соответствует желаемой, то есть WIDTH = 4.

    Возможно, вы обратили внимание на несколько необычную форму записи третьей команды:
    COMMAND3 = +0.5c 4
    Знак «+», поставленный перед временной отметкой 0.5c, означает, что время в данном случае отсчитывается как приращение относительно предыдущего момента времени. Другими словами, шинный сигнал переключится со значения 8 на значение 4 на отметке 1c + 0.5c = 1.5c (в абсолютном времени это составит 300 нс).

    Кроме стандартной формы описания сигналов:
    <время_переключения> <новое_значение>
    можно использовать более сложные команды. В нашем примере с помощью трех последних команд организован бесконечный циклический процесс уменьшения текущего значения шинного сигнала на две единицы со стороны младших разрядов. Полный перечень команд, используемых для программирования любых сигналов, приведен ниже:

    <время_переключения> <новое_значение>
    label = <имя_метки>
    <время> goto <имя_метки> times
    <время> goto <имя_метки> until GT <значение>
    <время> goto <имя_метки> until GE <значение>
    <время> goto <имя_метки> until LT <значение>
    <время> goto <имя_метки> until LE <значение>
    <время> incr by <значение>
    <время> decr by <значение>
    repeat forever
    repeat times
    endrepeat

    Поясним некоторые элементы данного перечня. Переменная задает число повторяющихся циклов. Значение n = –1 означает бесконечно повторяющийся цикл (реально до конца процесса моделирования). Константа <имя_метки> используется для организации цикла с помощью оператора перехода goto. Этот оператор передает управление на строку, следующую за оператором label = <имя_метки>.

    Конструкция repeat forever означает начало бесконечно повторяющегося цикла. Она эквивалентна записи: repeat -1 times. Команда endrepeat указывает на конец цикла repeat.

    Группа операторов с ключевым словом until указывает на повторение цикла до тех пор, пока не выполнится соответствующее условие: GT — больше, GE — больше или равно, LT — меньше, LE — меньше или равно.Результаты тестирования генераторов цифровых сигналов STIM1 и STIM4 показаны на рис. 2.13.

    Рис. 2.13. Результаты тестирования генераторов цифровых сигналов STIM1 и STIM4
    Рис. 2.13. Результаты тестирования генераторов цифровых сигналов STIM1 и STIM4

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

    Добавим, что нет никаких ограничений для использования рассмотренных генераторов в произвольных комбинациях.

    Скачать статью в формате PDF  Скачать статью Компоненты и технологии PDF

     


    Другие статьи по данной теме:

    Сообщить об ошибке