# Мини-HOWTO по атрибуту net=

Автор: Ales Hvezda

Данный документ выпущен под лицензией GFDL

2 октября 2003 г.

Перевод: Владимир Жбанов, 2010 г.

Информация в данном документе актуальна по состоянию на 11.10.1999 г.

## Зачем нужен атрибут net=?

Атрибут `net=` используется в системе gEDA для описания соединений питания и специальных соединений.
Он используется вместо иных способов определения выводов питания (таких как наличие выводов питания на символах компонентов или блоков питания). В некоторых устройствах выводов питания очень много, и их вычерчивание увеличило бы размер символа и сделало бы его трудно поддающимся обработке. Атрибут `net=` выбран в системе gEDA для определения соединений питания из-за своей простоты и универсальности. После всего вышесказанного добавим, что выводы питания можно изображать и на символе, но gnetlist, скорее всего, не сможет понять, что соединения, подключенные к этим выводам, это особая группа питающих соединений. Имейте это в виду, когда чертите символы.

## Каков формат атрибута net=?

Атрибуты в gEDA — это простые текстовые элементы вида `имя_атрибута=значение`. Каждый атрибут должен иметь такую форму. Для имён атрибутов всегда используется нижний регистр. gnetlist сотоварищи — регистрозависимы. Для имён соединений/сигналов обычно используется верхний регистр.
Атрибут может быть прикреплён к объекту или, в некоторых случаях (как в случае атрибута `net=`), может быть свободным (не прикреплённым к чему-либо). Свободные атрибуты также называются атрибутами верхнего уровня.
Атрибут `net=` — это текстовый элемент следующего вида:

    net=signalname:pinname,pinname,pinname,...

где:

`net=` | имя данного атрибута (неизменяемое, в нижнем регистре)
`signalname` | имя сигнала или соединения, устанавливаемое в нём (например, +5V, GND, и т. д.)
`pinname` | название (или номер) вывода, установленное для этого сигнала/соединения (или несколько названий/номеров выводов)

`signalname` не должно содержать символа «`:`» (поскольку он является разделителем). pinname — это название вывода (A1, P2, D1, и т. д.) или его номер (1, 2, 5, 13, и т. д.). pinname не должно содержать символа «`,`» (так как это тоже разделитель). Названия выводов обычно представлены номерами/названиями в том же роде, что и для атрибута `pin#=#` (если вам известен этот атрибут).
В одном атрибуте `net=` может быть указано только ОДНО имя сигнала `signalname`, но названий/номеров выводов может быть сколько угодно.

## Как на самом деле используется атрибут net=?

Атрибут `net=` может располагаться в разных местах. Вот варианты:

- Внутри символа как прикреплённый атрибут или как неприкреплённый атрибут (атрибут верхнего уровня). Вот примеры создания соединений питания: `net=GND:7` или `net=+5V:14`
- Вне символа (экземпляр которого имеется в схеме) атрибут может прикрепляться для переопределения существующего соединения/сигнала, созданного с помощью `net=`. Предположим, что внутри символа уже есть `net=GND:7`; прикрепление к символу атрибута `net=AGND:7` переопределит соединение GND (на выводе 7), назвав его AGND, и соединит/ассоциирует его с выводом 7.
- Вне или внутри символа для автоматического подключения соединения к видимому выводу. Это пока ещё не проверено и может иметь какие-нибудь нежелательные (отрицательные) побочные эффекты. Используйте с осторожностью.
- Если прикрепить атрибут к одному из специальных символов питания/земли (как, например, vcc/gnd/vdd), то можно изменить назначение символа. Можно изменить символ заземления для создания соединения с названием DIGITAL GND, не редактируя данный символ (просто прикрепить `net=DIGITAL_GND:1`).
  В текущей библиотеке (19991011) имеются символы с названиями `vdd-1.sym`, `vcc-1.sym`, `vee-1.sym` и прочие, в которых нет внутри атрибута `net=`, так что вам придётся добавлять его самостоятельно (в схеме).
  Также там есть символы с названиями `5V-minus-1.sym`, `12V-plus-1.sym`, `9V-plus-1.sym`, и т. д., уже содержащие соответствующий атрибут `net=` (хотя его можно переопределить). Можете использовать эти символы как примеры применения атрибута `net=`.

Атрибутов `net=` может быть сколько угодно. Просто запомните, что атрибуты `net=`, прикреплённые вне символа замещают любые эквивалентные внутренние атрибуты `net=` (внутри этого же символа). Если вы наткнётесь на случай, когда это не работает, пожалуйста, сообщите об ошибке.

## Предостережения / Ошибки

Атрибут/механизм `net=` безусловно нов, поэтому непременно должны быть ошибки (много ошибок). Здесь приводятся некоторые из найденных проблем:

- На 11.10.1999 г. почти все символы стандартной библиотеки не имеют ни атрибута `net=`, ни любого другого признака питания. Надеюсь, когда-нибудь это будет исправлено (есть добровольцы?).
- Прикрепление специального питающего символа (vcc/gnd) к соединению, уже имеющему имя, задаст для него псевдоним с именем сигнала, указанным в атрибуте `net=` (который находится внутри этого символа vcc/gnd или прикреплён к нему), то есть фактически переименует это соединение. Такое поведение можно изменить (так что станет верным обратное), если поиграться с “net-naming-priority”. Будьте осторожны с этим. Могут быть и другие, пока ещё не обнаруженные, проблемы именования.
- Создание атрибута `net=`, связывающего имя сигнала с уже видимым на символе выводом, — это, скорее всего, плохая идея. Работать это будет, но все возможные последствия ещё не исследованы.
- Плохой идеей будет, вероятно, и прикрепление одного и того же атрибута `net=` несколько раз. Ales не формализовал, что должно происходить в таком случае. Просто запомните, что атрибут `net=` вне символа замещает внутренний.

## Пример

Здесь приводится схема, использующая стандартные символы (примечание: символ для 7400 всё ещё не содержит атрибута `net=` внутри). Данная схема содержит компонент 7400 с прикреплёнными атрибутами `net=` для выводов питания. Один из входных выводов подключен к общему проводу с помощью символа GND, а другой установлен в логическую единицу с помощью символа Vcc (с прикреплённым атрибутом `net=`). Одно из входных соединений имеет имя, но, как вы увидите, имя соединения замещается именем сигнала, указанным в `net=` символа питания (см. выше подробную информацию по этому поводу). Выход подключен к подтягивающему резистору, питание которого задаётся с помощью символа +5V.

    v 19991011
    C 38700 58100 1 0 0 7400-1.sym
    {
    T 39000 59000 5 10 1 1 0
    uref=U100
    T 38900 59500 5 10 1 1 0
    net=GND:7
    T 38900 59300 5 10 1 1 0
    net=+5V:14
    }
    N 38700 58800 37400 58800 4
    {
    T 37600 58900 5 10 1 1 0
    netname=NETLABEL
    }
    N 37400 58800 37400 59200 4
    N 38700 58400 37400 58400 4
    N 37400 58000 37400 58400 4
    C 37300 57700 1 0 0 gnd-1.sym
    C 37200 59200 1 0 0 vcc-1.sym
    {
    T 36800 59200 5 10 1 1 0
    net=+5V:1
    }
    N 40000 58600 41600 58600 4
    {
    T 41200 58700 5 10 1 1 0
    netname=OUTPUT
    }
    C 40700 58800 1 90 0 resistor-1.sym
    {
    T 40800 59200 5 10 1 1 0
    uref=R1
    }
    N 40600 58800 40600 58600 4
    N 40600 59900 40600 59700 4
    C 40400 59900 1 0 0 5V-plus-1.sym

Запуск gnetlist для данного примера (в котором в качестве формата списка соединений задаётся `geda`) выдаст следующее:

    START header

    gEDA's netlist format
    Created specifically for testing of gnetlist

    END header

    START components

    R1 device=RESISTOR
    U100 device=7400

    END components

    START renamed-nets

    NETLABEL -> +5V

    END renamed-nets

    START nets

    +5V : R1 2, U100 14, U100 1
    GND : U100 7, U100 2
    OUTPUT : R1 1, U100 3

    END nets

Заметьте, как переименовано соединение `NETLABEL` (получило псевдоним +5V).

## Заключение

Если вы нашли какую-либо ошибку, дайте нам знать.