Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

skill / Лбы skill / лекция5_м

.doc
Скачиваний:
53
Добавлен:
05.06.2015
Размер:
93.18 Кб
Скачать

Базы данных

Все средства Cadence используют унифицированную базу данных DFII, это двоичная база данных, которая хранит данные, как объекты. Существует большое количество типов объектов, например:

  • rectangle;

  • terminal;

  • instance;

  • cellview и др.

База данных DFII хранит как физическую, так и логическую информацию о проекте. Физическая информация, хранящаяся в объектах, - геометрические формы и IC топология. Логическая информация – цепи и схемы, которые могут существовать без соответствующей физической реализации.

Для доступа к объекту необходимо использовать метку – идентификатор объекта, его ID. Каждый ID однозначно определяет объект базы данных и представлен специальным типом dbObject. Только внутренние программы базы данных могут создавать ID, и пользователь не может изменять их напрямую. Когда вы используете функцию, которая работает с объектами баз данных, необходимо указывать ID в качестве аргумента.

Различные типы и классы объектов формируют иерархию классов. Когда количество отдельных типов объектов, использующих общие атрибуты, превышает некоторое число, создается класс объектов. Например, геометрические фигуры имеют атрибуты layer, purpose, bounding box.

Атрибуты объектов

Каждый тип объектов имеет набор атрибутов, которые можно узнать, используя специальные для данного типа функции доступа. Существует три типа атрибутов:

  • обязательные – должны быть заданы во время создания объекта. Большинство атрибутов относится к этому типу.

  • необязательные – не являются обязательными для объекта. Данные атрибуты не нужно задавать во время создания объекта. Они могут быть добавлены в любое время.

  • вторичные – получаются из других атрибутов объекта. Вторичные атрибуты доступны пользователю только для чтения. Эти атрибуты играют большую роль в ускорении процесса расчетов.

Свойства объектов

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

Различия между атрибутами и свойствами.

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

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

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

Функции работы с библиотечными элементами.

dbOpenCellViewByType

Эта функция открывает Cellview для чтения, записи, дозаписи. Если Cellview открывается для чтения, то она должна существовать. Для всех остальных режимов, если Cellview не существует, то она создается автоматически.

dbOpenCellViewByType(

(gt_lib | ni)l ; определяет ddId библиотеки, имя библиотеки t_lib или nil.

t_cellName ; определяет имя cellview.

lt_viewName ; определяет имена view.

[t_viewTypeName [t_mode [d_contextCellView]] ; определяется тип view, t_mode определяет доступ к cellview и может принимать следующие значения:

  • r Открывает cellview только для чтения. Cellview должна существовать.

  • а Открывает cellview в режиме дозаписи.

  • w Режим записи.

  • s Открытие во временном режиме. Cellview нельзя сохранить на диск.

; и др.

)

=>d_cellView / nil

Пример:

Открыть ячейку “cellAviewlayout” в режиме для чтения, если она существует в библиотеке “test”.

cellview = dbOpenCellViewByType( “test” “cellA” “layout” )

Открыть ее в режиме дозаписи. Создать, если такой не существует:

cellview = dbOpenCellViewByType(“test” “cellA” “layout” “maskLayout” “a” )

Открыть ее в режиме дозаписи только в случае, если она существует:

cellview = dbOpenCellViewByType(“test” “cellA” “layout” “ ” “a” )

dbFindOpendCellView

Эта функция находит открытую cellview.

dbFindOpenCellView(

g_libId ; определяет ddId библиотеки.

t_cellName ; определяет имя cellview.

t_viewName ; определяет имена view.

t_version ; аргумент введен для совместимости различных версий, если задан, должен быть nil.

)

=>d_cellViewId / nil

Пример:

сv = dbFindOpenedCellView( lib “abc” “schematic” )

Находит view “schematic” ячейки “abc” библиотеки “lib”.

dbFindAnyInstByName(

d_cellView

t_name

)

=> d_inst / nil

Находит instance или группу instance (mosaic) с одним именем. Использование этой функции более эффективно, чем поиск в списке из всех instance.

Пример:

dbFindAnyInstByName(inCellView "inst1")

dbFindAnyInstByName(inCellView "myInv<0:1>")

dbFindProp(

d_object

t_name

)

  • d_propId / nil

dbGetPropByName(

d_object

t_name

)

=> d_propId / nil

Эти две функции выполняют одно и тоже. Находят свойство по заданному имени и возвращают его Id.

Пример:

propId = dbFindProp(instId "myProp")

propId = dbGetPropByName(instId "myProp")

Оператор ~>? возвращает список всех доступных атрибутов для dbObject.

d_object~>? => l_attributeNames

<1> cv = dbOpenCellViewByType(nil "inv" "symbol")

; open a cellview

db:2066752

<2> prop = car(cv~>prop) ; ; get the first property

db:2068776

<3> prop~>? ;; fetch the attribute names

(cellview objType prop enum name object range value valueType)

Оператор ~>?? возвращает список всех доступных атрибутов и их значений как property list для dbObject.

d_object~>?? => l_attributeValuePairs

<4> prop~>??

(db:2068776 cellview db:2066752 objType "prop"

prop nil enum nil name "lastSchematicExtraction"

object db:2066788 range nil

value "May 20 19:41:08 1991" valueType "time")

Доступ к значению свойства: prop_name->value

dbGetq( d_object St_AttrOrPropName )

=> g_value

dbGet( d_object St_AttrOrPropName )

  • g_value

возвращает значение атрибута или свойства, связанного с объектом базы данных.

Пример:

dbGetq(c shapes) ; Does not evaluate second argument

c~>shapes ; Exactly equivalent to above

c~>"shapes" ; Exactly equivalent to above

dbGet(c 'shapes) ; Evaluates both its arguments

str = 'shapes ; Assigns attribute name

dbGet(c str) ; "str" is evaluated to shapes

dbSetq( d_object g_value St_AttrOrPropName )

=> g_value / nil

dbSet( d_object g_value St_AttrOrPropName )

  • g_value / nil

изменяет величину атрибута или свойства объекта базы данных.

Пример:

dbSetq(p 2 width) ; ; Does not evaluate third argument

p~>width = 2 ; ; Exactly equivalent to above

p~>"width" = 2 ; ; Exactly equivalent to above

dbSet(p 2 'width) ; ; Evaluates 1st & 3rd arguments

w = 'width ; ; Assigns attribute name

dbSet(p 2 w) ; ; "w" is evaluated to width

; Attach figure f to net n:

dbSetq(f n net) ; ; Does not evaluate third argument

f~>net = n ; ; Exactly equivalent to above

; Detach figure f from its net:

dbSet(f nil 'net) ; ; Evaluates 1st & 3rd argument

f~>net = nil ; ; Exactly equivalent to above

dbSave

Эта функция используется для сохранения измененной cellview.

dbSave(

d_cellView

d_destCellView

)

=> t / nil

dbSave(

d_cellView

t_libName

t_cellName

t_viewName

)

=> t / nil

d_cellView Cellview, которая должна быть сохранена.

d_destCellView Определяет cellview, в которую сохранить информацию.

t_cellName Определяет имя ячейки.

lt_viewName Оределяет имена view.

t_version аргумент введен для совместимости различных версий, если задан, должен быть nil.

Пример:

Сохранить поверх существующей:

dbSave( cellview )

Сохранить в указанную библиотеку:

destCV = dbOpenCellViewByType( libcellName” “schematic” “schematic” “w” )

dbSave( cellview destCV )

Сохранить в cellview другой библиотеки:

dbSave( cellView “libName” “cellName” “viewName” )

dbClose

Эта функция используется для закрытия cellview:

dbClose(

d_cellView ; определяет cellview, которую следует закрыть.

)

=> t / nil

Пример:

Сохранить изменения и закрыть cellview:

dbSave( cellview )

dbClose( cellview )

Логические функции.

leLayerAnd(

d_cellViewId

g_lpp1

g_lpp2

g_lpp3

)

  • l_shapes | nil

Создает фигуру в d_cellViewId из пересечения исходных фигур слоев g_lpp1 и g_lpp2. Пара layer-purpose это лист, содержащий имя слоя(layer name) и «предназначение» слоя(layer purpose)

Возвращает Id новой фигуры, если она создалась или nil.

Пример:

leLayerAnd( cell1 list("poly1" "drawing") list("pdiff" "drawing") list("activegate" "drawing") )

leLayerAndNot(

d_cellViewId

g_lpp1

g_lpp2

g_lpp3

)

  • l_shapes | nil

Создает фигуру в слое g_lpp3, которая содержит фигуры слоя g_lpp1 за исключением пересечений со слоем g_lpp2.

Пример:

leLayerAndNot( cell3 list("via" "drawing") list("metal2" "drawing") list("opencontacts" "drawing") )

leLayerOr(

d_cellViewId

g_lpp1

g_lpp2

g_lpp3

)

=> l_shapes | nil

Создает фигуру в слое g_lpp3, которая содержит фигуры слоев g_lpp1 и g_lpp2.

Пример:

leLayerOr( (cell3 list("metal1" "drawing") list("metal2" "drawing") list("allmetal" "drawing") )

leLayerSize(

d_cellViewId

g_lpp1

n_sizeAmount

g_lpp2

)

=> l_shapes | nil

Создает фигуру в слое g_lpp2 , которая увеличивает (или уменьшает) фигуру в слое g_lpp1 на n_sizeAmount . Данный коэффициент может быть как отрицательным, так и положительным.

Пример:

leLayerSize( cell2 list("gate" "drawing") 1.5 list("implant" "drawing") )

leLayerXor(

d_cellViewId

g_lpp1

g_lpp2

g_lpp3

)

=> l_shapes | nil

Создает фигуру в слое g_lpp3, которая содержит фигуры слоев g_lpp1 и g_lpp2 за исключением их пересечений.

Пример:

leLayerXor( cell2 list("pdiff" "drawing") list("nwell" "drawing") list("missingwell" "drawing") )

leMakeCell(

l_figs

t_libName

t_cellName

t_viewName

g_replace

)

=> d_cellViewId | nil

Создает ячейку, определенную как _libName, t_cellName, и t_viewName, которая содержит фигуры определенные в листе l_figs. Если ячейка уже существует, то старая заменяется на новую.

Пример:

leMakeCell( list(fig1 fig2) "mylib" "mycell" "layout" nil )

leFlattenInst(

d_instId

x_levels

[ g_flattenPCells ]

[ g_preservePins ]

[ g_preserveRODobjs ]

)

=> t | nil

Раскрывает указанное количество уровней иерархии ячейки.

[ g_flattenPCells ] параметр, отвечающий за раскрытие иерархии PCells. Принимает значения t или nil. По умолчанию nil.

Пример:

leFlattenInst( instance1 2 nil )

Flattens the instance instance1 through two levels of the hierarchy and does not flatten any pcells contained in the instance.

cellview = dbOpenCellViewByType("skill_tr" "inv" "layout" "" "a")

n = leLayerAnd(cellview list("Nimp" "drawing") list("Poly" "drawing")

list("Via1" "drawing"))

p = leLayerAnd(cellview list("Pimp" "drawing") list("Poly" "drawing")

list("Via1" "drawing"))

;printf( "shapes: '%L'\n" cellview->shapes~>?? )

shapesToCopy = `()

foreach( shape cellview->shapes

if( shape->layerName == "Metal1" || shape->layerName == "prBoundary" then

shapesToCopy = append1( shapesToCopy shape )

)

)

printf( "shapesToCopy: '%L'\n" shapesToCopy )

leMakeCell( shapesToCopy "skill_tr" "inv" "abstract" nil )

dbSave(cellview)

dbClose(cellview)

9

Соседние файлы в папке Лбы skill