НПО Системы Безопасности
(499)340-94-73 График работы:
ПН-ПТ: 10:00-19:00
СБ-ВС: выходной

Главная » Периодика » Безопасность

0 ... 118119120121122123124 ... 233


Шаг 3. Если <count>=<n2> STOP.

Иначе <count> увеличивается на 1 (если <п1> меньше <п2>) или уменьшается на 1 (если <п1> больше <п2>), затем повторяются шаги 2 и 3.

Оператор WHILE Синтаксис

SWHILE <condition> : <Ыоск> $ENDW;

<condition> = то же, что и в операторе IF. <Ырск> = любая последовательность операторов.

Действие

Шаг 1. Вычисление условия <condltlon>, если ЛОЖЬ, то STOP. Шаг 2. Выполнение <Ыоск>. Шаг 3. Продолжить с шага 1.

Оператор DO.. UNTIL

Синтаксис

<Ыоск>

$UNTIL <condition> ;

<condition> = то же, что и в операторе IF. <block> = любая последовательность операторов.

Действие

Шаг 1. Выполнение <Ыоск>.

Шаг 2. Вычисление условия <condltion>, если ИСТИНА, то STOP, иначе продолжить с шага 1.

♦ Условный оператор IF и операторы цикла могут быть вложенными, однако мак-симальное количество вложений равно 10.

Операторы MACRO и CALL

Определение макроса Синтаксис

$MACRO naine(<arg list>) ; <macro body> $MEND;

name = имя макроса.

<arg list> = symbolic names, separated by commas

<macro body> = любая последовательность операторов, за исключение вызова макроса MACRO.

Имена параметров могут находиться в любом месте тела макроса, где разрешены имена переменных или константы. Они не могут заменять операторы, специальные символы или зарезервированные слова.



Вызов макроса Синтаксис

$CALL name(<act arg list>) ;

name = имя ранее определенного макроса. <act arg list> = список фактических параметров.

Фактическими параметрами могут являться имена переменных, константы или даже параметры макроса, если оператор CALL расположен в теле другого макроса.

Дейстаие

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

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

Пример

$MACRO ml(a,b,c); $set shift = a; $set shift = b; $set output = c; $MEND;

$CALL ml(•0,80

/* Macro definition */

/* Macro call */

Будут выполнены следующие операторы:

$set shift = $set shift = $set output =

0 ; 80

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

Эти два SI файла произведут следующий результат.

\. Старый способ:

Name

Partno

Date

Revision

Designer

Company

Assembly

Location

Device

ORDER:

VECTORS:

Barrel22; CA0006; 05/11/89; 02; Kahl;

Protel International;

None;

None;

g20v8a;

CLOCK, %3, 0E, %3, shift, %1, input, %2, output;

0 С С С С С С

О Х О О

хххххххх 10000000 10000000 10000000 10000000 10000000 10000000

нннннннн

HLLLLLLL LHLLLLLL LLHLLLLL LLLHLLLL LLLLHLLL LLLLLHLL

power-on reset state */

shift 0

shift 1

shift 2

shift 3

shift 4

shift 5



6

10000000

LLLLLLHL

Shift

, 7 ,

10000000

LLLLLLLH

shift

0

01111111

LHHHHHHH

shift

01111111

HLHHHHHH

shift

2

01111111

HHLHHHHH

shift

01111111

HHHLHHHH

shift

♦/

4

01111111

HHHHLHHH

shift

01111111

HHHHHLHH

shift

6

01111111

HHHHHHLH

shift

т

01111111

HHHHHHHL

shift

2. Новый способ:

ORDER: CLOCK, %3, 0E, %3, shift, %1, input, %2, output; VECTORS:

0 0 X XXXXXXXX LLLLLLLL /* power-on reset state */

$set CLOCK = C;

$set shift = 0;

$set input = 80;

$set output = "80";

$for i = 1..16 :

$out;

$if shift = 7: $set shift = 0; $set input = 7f; $set output = "7f"; $else:

$comp shift = shift + 1;

$comp output = output / 2;

$if input = 7f:

$comp output = output # 128;

$endif;

$endif;

$endf;

ИЛИ с использованием макроса:

ORDER: CLOCK, %3, 0E, %3, shift, %1, input, %2, output; VECTORS:

$macro ml(x,y,z); $set shift = x; $set input = y; $set output = z; $mend;

$macro m2(a,b,c,d); $call ml(a,b,c); $for i = 1..8 :

$out; $comp shift = shift + 1; $comp output = output / 2 + d; $endf; $mend;

0 0 X XXXXXXXX LLLLLLLL /* power-on reset state */

$set CLOCK = C;

$call m2(0,80,"80", 0);

$cal] m2C0, 7f , "7f", 128);



0 ... 118119120121122123124 ... 233