
Данные пользователя
Вы можете добавить собственные внутренние функции к базе данных скопировав ваши данные в директорию с данными Cadence. Имя вашей поддиректории будет доступно для выбора в полеSearchingокнаFinderс пробелами вместо подчеркиваний, использованных в названии. После имени поддиректории появится словоOnly.
Например, если вы добавили ваши функции по следующему пути:
your_install_dir/local/finder/SKILL/Your_APIs/your.fnd
в поле SearchingокнаFinderпоявится следующая строка:
YourAPIsOnly
Переменная окружения для установления дополнительных директорий с данными в Finder
Для добавления новых директорий с данными в Finderвы можете использовать переменную окруженияCDS_FINDER_PATH. После того, как Finder подгружает информацию из
your_install_dir/doc/finder/language/functionArea/*.fnd
он подгружает данные из списка, разделенного двоеточиями (:), который вы можете задать через терминал с помощью этой переменной:
setenv CDS_FINDER_PATH /home/myFinder/db:/home/myProud/myHoneyFunctions
Работа с документами Cadence по языку SKILL.
Название секций и их назначение
Каждая функция языка SKILLможет иметь до семи секций. Каждая секция необязательно является необходимой для описания конкретной функции.
Syntax
Синтаксис описываемой функции.
Prerequisites
Действия, которые необходимо предпринять перед вызовом описываемой функции.
Description
Краткое описание назначения описываемой функции. Текстовое описание действия, выполняемого функцией.
Arguments
Описание входных аргументов функции.
Valuereturned
Описание возвращаемого функцией значения.
Example
Пример кода SKILL, использующего данную функцию.
References
Перечисление и описание функций, как-либо связанных с описываемой. Эти функции могут быть схожими по действию, частично выполнять одни и те же операции с описываемой функцией или вызываться описываемой функцией.
Синтаксис документации CadenceпоSKILL.
literal(LITERAL)
Слова, написанные обычным прямым шрифтом или в верхнем регистре – это ключевые слова, непосредственно используемые в коде. Как правило, ключевые слова представляют собой команды или названия опций.
argument (z_argument)
Слова, написанные курсивом, представляют собой определяемые пользователем аргументы, которые должны быть заменены именами или значениями. (Символы перед знаком подчеркивания (_) в слове обозначают типы данных, воспринимаемых данным аргументом. Имена зависят от конкретных условий. Нельзя использовать знак подчеркивания (_) перед своими аргументами.)
| Вертикальные скобки разделяют набор возможных для выбора элементов для одного аргумента; они имеют преимущество перед любым другим символом.
[ ] Квадратные скобки содержат необязательные аргументы; могут использоваться с вертикальными скобками – в этом случае они заключают в себе список возможных для выбора необязательных элементов. Вы можете выбрать один элемент из списка.
{ } Фигурные скобки также могут содержать вертикальные и заключают в себе список элементов, обязательных для выбора.
... Многоточие означает, что вы можете повторить предыдущий аргумент. Если аргумент указан в квадратных скобках, значит возможно использование неограниченного числа аргументов.
argument... ;можно использовать только один аргумент,
[argument]... ;можно использовать неограниченное число
;аргументов
,... Запятая и многоточие означают, что вы можете применить более одного аргумента, но аргументы должны быть разделены запятыми.
=> Правая стрелка указывает на возвращаемые функцией значения. Список возвращаемых значений показан прямым шрифтом. Буквенные возвращаемые значения (например, tиnil) показаны тонким прямым шрифтом. Правая стрелка также используется в примерах кодаSKILL.
/ Косая черта разделяет возможные значения, возвращаемые SKILLфункцией.
Типы данных SKILL
Префикс Внутреннее название Тип
a array матрица
b ddUserType булев
C opfcontext OPF context
d dbobject Объект базы данных Cadence
(CDBA)
e envobjокружения
f flonumчисло с плавающей точкой
F opffile OPF file ID
g general любой тип
G gdmSpecIlUserType gdm spec
h hdbobject объект конфигурации
иерархической базы данных
l listсвязный список
m nmpIlUserType nmpIl user type
M cdsEvalObject —
n numberцелое число или число с
плавающей точкой
o userTypeтип, определяемый
пользователем
p portI/Oпорт
q gdmspecListIlUserType gdm spec list
r defstruct defstruct
R rodObj объект ROD
s symbol символ
S stringSymbolсимвол или строка
символов
t stringстрока символов (текст)
u functionобъект функции, в т. ч.
имя функции (символ)
U funobjобъект функции
v hdbpath —
w wtype тип окна
x integerцелое число
y binaryдвоичная функция
& pointerтип указателя
Примеры синтаксиса SKILL в документации
Следующие примеры показывают применяемый в документации синтаксис для описания SKILLкода.
Пример 1
list( g_arg1 [ g_arg2 ] ...) l_result
Этот пример иллюстрирует применение следующего синтаксиса:
listПростым прямым шрифтом написаны ключевые слова, непосредственно используемые в коде.
g_arg1 Курсивом написаны аргументы, вместо которых вводятся имена или значения.
( ) Круглые скобки отделяют имена функций от их аргументов.
_ Подчеркивание отделяет тип аргумента (слева) от имени аргумента (справа).
[ ] Квадратные скобки содержат элементы, необязательные для применения.
... Многоточие говорит, что предыдущий аргумент может быть использован в функции многократно.
=> Правая стрелка указывает на описание возвращаемого функцией значения.
l_result Все функцииSKILLвозвращают некоторое информационное значение.
Пример 2
needNCells( s_cellType | st_userType x_cellCount ) t / nil
В этом примере также используются два других синтаксических символа:
| Вертикальные скобки разделяют список элементов, один из которых должен быть обязательно выбран.
/ Косая черта разделяет возможные возвращаемые функцией значения.
Работа с SKILL list
SKILLlist– это упорядоченный набор объектов данныхSKILL. Структура данныхlistявляется основной вSKILLи может быть использована в самых различных ситуациях.
Элементы, входящие в list, могут быть любого типа данных, а также могут быть переменными или другими листами.Listможет включать в себя набор элементов или быть пустым. Пустойlistобозначается пустыми скобками “( )” или специальным словомnil. В любом случаеlistдолжен быть заключен в скобки.Listможет содержать несколько элементов типаlistдля формирования структур данных любой сложности. Приведем несколько примеров:
_____________________________________________________________________
List Explanation
_____________________________________________________________________
(1 2 3) Лист включает в себя целые числа 1, 2 и 3
(1) Listвключает в себя единственный элемент - 1
( ) Пустой list(также может обозначаться словомnil)
(1 (2 3) 4) Вторым элементом listявляется другойlist
_____________________________________________________________________
SKILLвыводитlistна экран в виде набора элементовlist, окруженного круглыми скобками. В следующем примереlistхранится переменной shapeTypeList, затем показано возвращаемое значение переменной.
shapeTypeList = '( "rect" "polygon" "rect" "line" )
shapeTypeList => ( "rect" "polygon" "rect" "line" )
SKILLобладает широким набором функций для создания и управленияlist. Многие функцииSKILLв качестве возвращаемого значения имеютlist.SKILLможет использовать несколько строк терминала для выводаlist. глобальная переменнаяSKILL_itemsperline хранит соответствующее целое значение.
Составление списков (list)
Существует несколько основных способов составления списков:
Задание элементов списка поименно с помощью оператора (').
Задание элементов списка указанием количества аргументов функции list.
Добавление элемента в существующий список с помощью функции cons.
Слияние двух списков с помощью функции append.
Функции consиappendсоздают новый список и возвращают его. Возвращаемый результат должен быть сохранен в переменной, иначе с ним нельзя будет работать. Следующие функции позволяют составлять списки и работать с ними различными способами.
Составление списка из заданных элементов
Список создается с помощью оператора (') путем перечисления элементов списка. Значения переменных aиbне важны. Функцияlistберет текущие значения переменных для включения в список.
'( 1 2 3 ) => ( 1 2 3 )
a= 1 => 1
b= 2 => 2
list(ab3 ) => ( 1 2 3 )
Добавление элемента в начало списка (cons)
Результат применения функции cons следует сохранять в переменную, иначе дальнейшая работа со списком будет невозможна. Обычно результат передается в переменную, до этого хранившую исходный список.
result = '( 2 3 ) => ( 2 3 )
result = cons( 1 result ) => ( 1 2 3 )
Слияние двух списков (append)
Результат применения функции cons следует сохранять в переменную, иначе дальнейшая работа со списком будет невозможна.
oneList = '( 4 5 6 ) => ( 4 5 6 )
aList = '( 1 2 3 ) => ( 1 2 3 )
bList = append( oneList aList) => ( 4 5 6 1 2 3 )
Доступ к спискам
Извлечение первого элемента списка (car)
Функция carвозвращает первый элемент списка.
numbers= '( 1 2 3 ) => ( 1 2 3 )
car(numbers) => 1
Извлечение остатка списка (cdr)
Функция cdrвозвращает список без первого элемента.
numbers= '( 1 2 3 ) => ( 1 2 3 )
cdr(numbers) => ( 2 3 )
Извлечение n-го элемента списка
Функция nthвозвращаетn– ый элемент списка. Приn= 0 функция как иcarвозвращает первый элемент.
numbers= '( 1 2 3 ) => ( 1 2 3 )
nth( 1numbers) => 2
Определение, является ли объект данных элементом списка (member)
Функция memberне способна проверить все уровни иерархического списка, она работает только с верхним уровнем элементов. Функция возвращает список элементов начиная с искомого или пустой список, если заданного элемента нет.
numbers = '( 1 2 3 ) => ( 1 2 3 )
member( 4 numbers ) => nil
member( 2 numbers ) => ( 2 3 )
Определение количества элементов в списке (length)
Функция lengthопределяет количество элементов в списке, матрице, ассоциированной таблице.
numbers= '( 1 2 3 ) => ( 1 2 3 )
length(numbers) => 3
Преобразование списков
Следующие функции работают с переменными, не меняя их значений и не создавая новые переменные.
Координаты
Координаты xyобозначаются списком из двух элементов. Оператор двоеточие (:) отделяет значениеx(первое) отy(второе).
xValue = 300
yValue = 400
aCoordinate = xValue:yValue => ( 300 400 )
Функции xCoordиyCoordобеспечивают доступ к координатеxи координатеyсоответственно.
xCoord( aCoordinate ) => 300
yCoord( aCoordinate ) => 400
Можно использовать оператор (‘) или функцию list для создания списка координат.
Можно использовать функцию carдля доступа к координатеxи функциюcar(cdr( … ) ) для доступа к координатеy.
Прямоугольная рабочая область (bounding box)
Прямоугольная рабочая область представляет собой список, включающий левую нижнюю и правую верхнюю координаты. Используйте функцию listдля создания прямоугольной рабочей области, состоящей из:
Координат, определяемых оператором двоеточие (:).
bBox=list( 300:400 500:450 )
Координат, заданных переменными.
lowerLeft = 300:400
upperRight = 500:450
bBox = list( lowerLeft upperRight )
Если координаты задаются листом значений, то для создания прямоугольной рабочей области можно использовать оператор (').
bBox= '(( 300 400 ) ( 500 450 ))
Прямоугольная рабочая область может послужить хорошим примером работы с функциями carиcdr. Для удобства работы используйте произвольные комбинации с четырьмяa (количествоaсоответствует количеству запусков функцииcar) илиd(количествоdсоответствует количеству запусков функцииcdr).
Использование функций car и cdr при работе с прямоугольной рабочей областью
______________________________________________________________________
Функции Значение Пример Выражение
______________________________________________________________________
carcar( ... ) левый нижний уголll=car(bBox)
cadrcar(cdr( ... ) ) правый верхний уголur=cadr(bBox)
caarcar(car( ... ) )x-координата левого
нижнего угла llx=caar(bBox)
cadar car( cdr( car( ... ) ) ) y-координата левого
нижнего угла lly = cadar( bBox)
caadr car( car( cdr( ... ) ) ) x-координата верхнего
правого угла urx = caadr( bBox)
cadadr car( cdr( car( cdr( ...] y-координата верхнего
правого угла ury=cadadr(bBox)
______________________________________________________________________