Список соединений

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Выражение список соединений (или список цепей), калька с термина netlist, может использоваться в нескольких разных контекстах, но, вероятно, наиболее популярно оно в области разработки электронных устройств. В этом контексте термин описывает текстовое представление электрических соединений между компонентами в электронном устройстве. В области проектирования интегральных схем речь идёт об описании соединений между содержащимися в ИС модулями, такими как, например, логические элементы или блоки памяти.

В списках соединений обычно приводится информация о внутрисхемных соединениях и, как правило, не содержится ничего другого, кроме экземпляров приборов, соединений и нескольких атрибутов. Если они выражают нечто более сложное, то их обычно называют языками описания аппаратуры, примерами которых являются Verilog, VHDL или любой из нескольких специфических языков, разработанных для ввода в программы моделирования.

Списки соединений могут быть физическими либо логическими, на основе экземпляров приборов (instance-based) либо на основе соединений (net-based) и плоскими (flat) либо иерархическими (hierarchical). Последние могут быть свёрнутыми (folded) либо развёрнутыми (unfolded).

Содержимое и структура списка соединений[править | править вики-текст]

Большинство списков соединений содержат либо описания используемых компонентов или устройств, либо ссылки на них. Всякий раз, когда компонент указывается в списке соединений, он называется «экземпляром». Таким образом, каждый экземпляр имеет «оригинал» или «определение». В этих определениях обычно перечисляются соединения, которые могут быть сделаны для устройств данного вида, и некоторые базовые свойства таких устройств. Эти соединения называются портами («ports») или выводами («pins»).

«Экземпляром» может быть всё что угодно от полевых или биполярных транзисторов, резисторов и конденсаторов до интегральных микросхем.

Экземпляры имеют «порты». Если рассматривать как пример пылесос, то для него данными портами можно назвать три металлических вывода вилки шнура питания. Каждый порт имеет имя, и в продолжение примера с пылесосом, этими именами могут быть «ноль», «фаза» и «земля». Обычно для различения экземпляров каждому из них задаётся уникальное имя, с тем чтобы, например, когда имеется два пылесоса, один назывался бы «vac1», а другой «vac2». В остальном, кроме этих имён, они могут быть идентичными.

Соединения являются представлением «проводников», соединяющих компоненты схемы между собой. В проекте устройства соединениям могут присваиваться, а могут и не присваиваться особые атрибуты. Это зависит от конкретного языка, на котором написан этот список соединений, и его возможностей.

Различают два вида списков соединений: на основе экземпляров и на основе соединений.

В списках соединений на основе экземпляров обычно приводится перечень экземпляров, используемых в проекте устройства. С каждым из экземпляров приводится либо упорядоченный список имён соединений, либо список пар из имени порта экземпляра и имени соединения, подключаемого к этому порту. В такого рода описании список соединений может собираться из получаемых взаимосвязей, и здесь нет возможности назначить конкретные атрибуты самим соединениям. Наиболее знаменитым из списков соединений на основе экземпляров является, возможно, SPICE.

В списках соединений на основе соединений сначала обычно приводится перечень всех экземпляров с их атрибутами, а далее идут описания всех соединений, в которых указывается, к каким портам каких экземпляров они присоединены. Это даёт возможность назначать соединениям атрибуты. Наиболее известным из списков соединений на основе соединений является, возможно, EDIF.

Иерархия[править | править вики-текст]

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

Определение, не включающее в себя никаких других экземпляров, называется «примитивом» (или «листом», или как-то иначе), в то время как определение, включающее в себя экземпляры является «иерархическим».

В «свёрнутой» иерархии одно и то же определение может быть представлено экземплярами несколько раз. В «развёрнутой» иерархии определение в иерархии не позволяется использовать более одного раза.

Свёрнутая иерархия может быть чрезвычайно компактной. Маленький список соединений из небольшого числа экземпляров может описывать устройства с огромным количеством экземпляров. Например, предположим, что определение A является простым примитивом, как ячейка памяти. Затем положим, что определение B содержит 32 экземпляра A, C содержит 32 экземпляра B, D содержит 32 экземпляра C и, наконец, E содержит 32 экземпляра D. Проект теперь содержит 5 определений (от A до E) и 128 экземпляров. Тем не менее, E описывает схему, содержащую более миллиона ячеек памяти.

Развёртывание иерархии[править | править вики-текст]

В «плоском» проекте в качестве экземпляров используются только примитивы. Иерархические проекты могут быть рекурсивно развёрнуты (сделаны плоскими) путём создания для каждого определения каждый раз, когда оно используется в экземпляре, новой копии (с новым именем). При большом количестве или большой глубине вложений в проекте, его развёртывание подобным образом приводит к гораздо большему размеру базы данных списка соединений, но при этом сохраняются иерархические зависимости. В иерархическом списке соединений любой конкретный примитив может определяться уникальным путём к нему сквозь список имён экземпляров от корневого определения до экземпляра этого примитива. Собрав, таким образом, вместе все пути к каждому примитиву, можно получить один большой, но плоский список соединений, который точно эквивалентен компактной иерархической версии.

Обратное аннотирование[править | править вики-текст]

Обратное аннотирование (back annotation) подразумевает добавление новых внешних данных к иерархическому списку соединений. Обычно эти данные хранятся отдельно от списка соединений, ввиду того что несколько таких различных наборов данных могут применяться к одному и тому же списку соединений. Эти данные могут быть определены при исследовании физического устройства и предоставлять дополнительную информацию для более точного моделирования. Обычно такие данные состоят из иерархического пути и дополнительных данных для этого примитива, например, для нахождения значений времён задержек вследствие наличия RC-цепей, обусловленных паразитными емкостями между межсоединениями внутри устройства.

Наследование[править | править вики-текст]

Другой часто используемой концепцией, используемой в списках соединений является наследование. Положим, с определением конденсатора связан атрибут под названием «Ёмкость», соответствующий физическому свойству с таким же названием, значение которого по умолчанию составляет «100 pF» (100 пикофарад). У некоторых экземпляров этого конденсатора может быть такой же атрибут для задания другого значения ёмкости. А для других экземпляров ёмкость может быть вообще не задана. Те экземпляры, что не содержат атрибута с указанием ёмкости, «унаследуют» значение «100 pF» из своего определения. Значение же атрибутов тех экземпляров, для которых оно указано, «переопределит» значение, заданное в определении. Если в конце концов значение этого атрибута для большинства компонентов должно быть таким же, как и для определения, большое количество информации может быть «унаследовано», и можно будет сократить список соединений, удалив лишнюю информацию и снизив, таким образом, требования к дисковому пространству, а также сделав проект легче для чтения как машиной, так и людьми.