
- •Исследование, разработка и применение параметризованных аналоговых элементов в составе библиотеки аналоговых базовых и сложно-функциональных блоков.
- •210100 «Электроника и наноэлектроника»
- •Глава 1. Литературный обзор. 7
- •Глава 2. Исследование и разработка оптимальных параметризованных элементов второго уровня под выбранный класс задач. 30
- •Глава 3. Применение спроектированных параметризованных аналоговых ячеек второго уровня в составе базовых блоков. 81
- •Введение.
- •Положения, выносимые на защиту.
- •Основная часть. Глава 1. Литературный обзор.
- •Автоматизация проектирования аналоговых микросхем. Обзор существующих решений.
- •Pcell – определение, способы реализации и применение.
- •Аналоговые ячейки второго уровня. Их применение.
- •Специфика физического проектирования.
- •Причины рассогласования элементов и способы их устранения.
- •Построение согласованных элементов.
- •Размещение согласуемых элементов с общим центром.
- •Уменьшение технологического влияния соседних структур для лучшего согласования элементов.
- •Рекомендации по согласованию моп-транзисторов.
- •Рекомендации по согласованию конденсаторов.
- •Методы защиты от включения тиристорной защелки.
- •Язык skill. Краткие сведения.
- •Выводы.
- •Глава 2. Исследование и разработка оптимальных параметризованных элементов второго уровня под выбранный класс задач.
- •Введение.
- •Построение элементарных параметризованных ячеек.
- •Определение изменяемых параметров.
- •Создание топологических эскизов.
- •Построение ячейки транзистора на языке skill.
- •Оптимизация программного кода.
- •Построение параметризованных аналоговых ячеек второго уровня.
- •Способы применения элементарных ячеек в составе проектируемых аналоговых ячеек второго уровня.
- •Согласование элементов на примере построения матрицы согласованных конденсаторов с соотношением элементов 1:1.
- •Построение разводки.
- •Использование элементов защиты.
- •Способы задания изменяемых параметров и их ограничений.
- •Оптимизация ячеек.
- •Методика проектирования высокоточных параметризованных аналоговых ячеек второго уровня на языке skill.
- •Глава 3. Применение спроектированных параметризованных аналоговых ячеек второго уровня в составе базовых блоков.
- •Компаратор.
- •Операционный усилитель.
- •Устройство выборки и хранения (увх).
- •Преимущества и недостатки использования спроектированных параметризованных аналоговых ячеек второго уровня.
- •Заключение.
- •Список литературы.
- •Приложение.
Оптимизация программного кода.
При построении можно придумать сотни алгоритмов создания ячейки и множество вариантов их реализации. Нужно стремиться к нахождению оптимального, минимального по количествам условий, алгоритма.
После создания первой версии ячейки нами была проведена оптимизация кода. Были сделаны следующие изменения:
использованы зависимые слои;
улучшен способ создания контактов;
применен подход для быстрого перехода на новую технологию.
Применение зависимых слоев и использование «распределенных контактов».
В первоначальном варианте все слои прорисовывались отдельно, как простые прямоугольники. Использовалась функция rodCreateRect(). Высчитывались координаты каждого прямоугольника, их ширина и длина. Но мы столкнулись со следующими проблемами:
Загромождение кода – много внутренних параметров.
Все ячейки состоят из нескольких слоев. Если все слои создавать отдельно это сильно увеличивает код, так как для каждого слоя приходится высчитывать все параметры. Слишком большой код требует много времени на компиляцию ячейки, что замедляет процесс создания. Поэтому при разработке необходимо стремиться минимизировать код.
Не распределенные контакты в области стока/истока, что плохо, так как подаваемое в эти области напряжение распределяется неравномерно.
При увеличении ширины транзистора количество контактов к стоковой/истоковой области должно увеличиваться, чтобы обеспечить надежность работы транзистора. Так как есть зависимость от ширины, можно простым перебором условий задавать количество контактов, найдя формулу, по которой вычисляются граничные условия. Тогда каждому набору задаваемых параметров будет соответствовать определенное количество контактов (Рис.2.12). Но этот способ не универсален, так как невозможно задать бесконечное количество вариантов.
Рисунок 2.12. Пример создания контактов путем простого перебора условий.
Для минимизации кода было предложено создавать зависимые слои. За основу берется один слой, а все остальные строятся относительно него. Для этого была использована функция rodAlign(), которая позволяет выравнивать объекты относительно друг друга. Это сократило код, так как не нужно было высчитывать координаты каждого слоя, но не решила проблему расположения контактов. Их можно было уже расположить либо с определенного края, либо по центру. Но расстояние между ними было так же фиксировано (Рис.2.13, 2.14).
Рисунок 2.13. Примеры создания контактов с помощью функция rodAlign() выравнивание по нижнему краю.
Рисунок 2.14. Примеры создания контактов с помощью функция rodAlign() выравнивание по центру.
В качестве решения обоих проблем мы использовали функции rodCreateRect() и rodCreatePath(), с дополнительными свойствами:
?encSubPath – позволяет создавать один слой перекрывающий другой
?offsetSubPath – позволяет создавать слои, ориентированные относительно главного слоя
?subRect или ?subRectArray – позволяют создавать слои или массивы слоев. Это свойство можно использовать для создания «распределенных контактов»:
?subRectArray
list( list(
?layer list("contact" "drawing") - описание слоя
?width drmContWidth - описание ширины
?length drmContWidth - описание длины
?gap "distribute"
?spaceY drmContSpace -расстояние между контактами
?lowerLeftOffsetX drmMetal1EncCont - описание выступа нижней левой точки слоя относительно главного слоя (по оси Х)
?lowerLeftOffsetY drmMetal1EncCont - описание выступа нижней левой точки слоя относительно главного слоя (по оси Y)
?upperRightOffsetX -drmMetal1EncCont - описание выступа верхней правой точки слоя относительно главного слоя (по оси Х)
?upperRightOffsetY -drmMetal1EncCont - описание выступа верхней правой точки слоя относительно главного слоя (по оси Y)
))
Указываются смещения нижней и верхней точки относительно главного слоя, минимальное расстояние между контактами и их размеры (Рис.2.15). По всей длине создаются контакты. Их количество зависит от заданной длины.
Рисунок 2.15. Распределенный контакт.
Это значительно сократило код и решило проблемы с контактами.
Переход на новую версию технологии.
В настоящее время технологические нормы проектирования постоянно меняются. Поэтому необходимо создавать универсальный код, который будет быстро осуществлять переход на новую версию.
В первоначальном варианте ячейки мы брали технологические нормы из документа с правилами проектирования, созданными фабрикой для данной технологии. Номера правил, указанные в скобках, соответствуют номерам в документе, например.
drmPolyExtActive = 0.20 ; определяет минимальное расстояние, на которое слой «Poly» должен выступать за слой «Active» (Правило 13-3).
drmMetal1MinWidth = 0.32 ; определяет минимально-допустимую ширину слоя «Metal1» (Правило 23-1).
drmPplusSpace = 0.48 ; определяет минимально-допустимое расстояние между одинаковыми слоями «Pplus» (Правило 17-2).
drmMetal1EncCont = 0.04 ; определяет минимальное расстояние, на которое слой «Metal1» должен перекрывать слой «Cont» (Правило23-3).
Но этот способ не универсален, так как при переходе на новую версию технологии нужно будет вручную переписывать все значения для каждой ячейки. Это займет много времени.
Для решения данной проблемы мы использовали функцию techGetTechFile(), которая подгружает технологический файл и позволяет взять оттуда значения технологических норм проектирования. В качестве ее аргумента указывается библиотека, в которой будет создана ячейка.
tfId = techGetTechFile (ddGetObj ("Lib2013") )
Затем идет список параметров и их значений, которые компилятор берет из подгруженного технологического файла с помощью соответствующих функций. В качестве аргументов функций указываются подгруженный технологический файл, искомый параметр и слои, для которых требуется найти значение этого параметра.
pplusActiveEnclose = techGetOrderedSpacingRule (tfId "minEnclosure" "pplus" "active") – определяет минимальное расстояние, на которое слой «pplus» должен перекрывать слой «active»
polyWidth = techGetSpacingRule (tfId "minWidth" "poly") – определяет минимально допустимую ширину слоя «poly»
nwellActiveSep = techGetSpacingRule (tfId "minSpacing" "nwell" "active") – определяет минимальное расстояние между слоями «nwell» «active»
Значение шага сетки, указанное в технологическом файле:
grid = techGetMfgGridResolution (tfId)
Данное решение позволяет существенно сократить время при переходе на новую версию технологии.