User Tools

Site Tools


geda:format_translation.ru

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Last revision Both sides next revision
geda:format_translation.ru [2011/10/10 08:24]
vzh Fixed terms
geda:format_translation.ru [2012/02/20 15:14]
127.0.0.1 external edit
Line 1: Line 1:
 +====== Преобразование разных форматов файлов друг в друга ======
 +
 +
 +Нам нужна универсальная система преобразования форматов для трансляции
 +изменений между всеми современными и возможно будущими средствами gEDA, а
 +также сторонними программами,​ которые,​ вероятно,​ могут использоваться вместе с
 +программами gEDA.
 +
 +
 +===== Ограничения =====
 +Поддерживать все возможные преобразования,​ безусловно,​ смысла нет.
 +Поэтому ограничимся современными и возможно будущими составляющими
 +gEDA и сторонними программами,​ которые,​ вероятно,​ могут использоваться
 +вместе с программами gEDA. Разумеется,​ для ряда программ преобразование
 +форматов не имеет смысла и поддерживаться не должно.
 +
 +Идея состоит в использовании промежуточного формата. Сначала транслировать
 +в него, затем --- из него. Промежуточный формат должен быть достаточно
 +выразительным,​ чтобы его можно было без потерь транслировать в формат любой
 +программы gEDA и обратно.
 +
 +"​Без потерь"​ значит,​ что файл, полученный в результате трансляции должен
 +работать так же, как и исходный. Не обязательно сохранять форматирование и
 +прочие незначительные вещи.
 +
 +Все форматы для трансляции в настоящее время состоят из списков объектов с
 +некоторого рода структурированием. Каждый из объектов имеет подключения и
 +атрибуты.
 +
 +Это наводит на мысль об использовании в качестве промежуточного одного из
 +возможных стандартных форматов списков соединений.
 +
 +Ниже рассматриваются только те форматы,​ что соответствуют указанной модели.
 +
 +Если возможно,​ хорошо бы, чтобы выбранный формат уже применялся когда-либо по
 +крайней мере для некоторых из указанных целей, а также имел стороннюю,​
 +опубликованную и свободно доступную спецификацию.
 +
 +Должны быть способы включения изменений из любого источника/​назначения без
 +смешения различных частей.
 +
 +
 +==== Инструментарий,​ требующий поддержки ====
 +  * принципиальные схемы
 +  * топологические схемы
 +  * моделирование
 +
 +
 +==== Программы gEDA ====
 +Для форматов файлов данных программ нужно преобразование без потерь,​ поэтому
 +может потребоваться промежуточный формат хранения данных.
 +  * gschem
 +  * pcb
 +  * gnucap
 +  * Icarus Verilog
 +
 +
 +==== Другие свободные программы,​ которые должны полностью поддерживаться ====
 +Эти программы тоже свободные. Нужен стандарт для их поддержки на равных правах
 +с программами gEDA.
 +  * NGspice
 +  * Qucs
 +  * Kicad
 +  * Magic
 +  * Electric
 +  * Xcircuit
 +  * Fritzing
 +
 +
 +==== Импорт и экспорт несвободных форматов ====
 +Поддержка форматов данных программ позволит программам gEDA наилучшим образом
 +взаимодействовать с коммерческими средствами. Нужна базовая функциональность,​
 +но преобразование не обязательно должно быть без потерь. Преобразование без
 +потерь должно быть возможным,​ но не является главным приоритетом для
 +фактической реализации средств трансляции.
 +  * Eagle
 +  * Orcad
 +  * LTspice
 +  * Pads
 +
 +
 +==== Отсутствующая функциональность gEDA ====
 +Надеемся,​ при наличии системы преобразования форматов у нас появится база для
 +решения следующих вопросов:​
 +  * Обратная трансляция изменений топологических схем и файлов моделирования в принципиальные схемы.
 +  * Анализ статических временных диаграмм.
 +  * Моделирование целостности сигналов после формирования топологии платы.
 +  * Сравнение топологической и принципиальной схем.
 +  * Использование одной и той же схемы для всего проекта целиком.
 +
 +
 +==== Явно не поддерживаются ====
 +  * Построение графиков
 +  * Команды
 +  * Поведенческое моделирование
 +
 +
 +===== Общее представление =====
 +Все форматы состоят из списков объектов с подключениями и атрибутами.
 +
 +Традиционно для обмена данными использовались списки соединений,​ но
 +традиционный подход подразумевает одностороннее преобразование,​ поскольку при
 +этом теряется информация.
 +
 +Формат должен передавать сущность содержимого не обязательно таким же образом,​
 +как родной формат программы или её внутреннее представление.
 +
 +Не обязательно транслировать те части, что обычно уже имеются в библиотеках
 +или специфичны для данной программы,​ такие как модели,​ символы или посадочные
 +места.
 +
 +Каждый из претендентов на роль возможного формата должен поддерживать
 +преобразование в любой другой и обратно без потерь.
 +
 +
 +==== Возможные форматы ====
 +=== SPICE ===
 +Популярный формат списка соединений. Использовался для обмена данными,​ но пока
 +не применялся для описания физического расположения. Проблемы:​ неправильный
 +синтаксис,​ недостаточно выразителен. Эти проблемы годами не давали покоя
 +разработчикам. Формат нравится почти всем, за исключением тех, кто хорошо его
 +знает.
 +
 +
 +=== Verilog ===
 +Структурное подмножество представляет собой хороший формат списка соединений.
 +Он правилен,​ достаточно выразителен и для него опубликован стандарт.
 +Использовался для обмена данными,​ но пока не применялся для описания
 +физического расположения.
 +
 +
 +=== VHDL ===
 +Структурное подмножество представляет собой хороший формат списка соединений.
 +Он правилен,​ достаточно выразителен и для него опубликован стандарт.
 +Использовался для обмена данными,​ но пока не применялся для описания
 +физического расположения.
 +
 +
 +=== Spectre ===
 +Структурное подмножество представляет собой хороший формат списка соединений.
 +Он правилен,​ достаточно выразителен,​ но принадлежит одной компании (Cadence),
 +поэтому его исключаем. Использовался только для моделирования.
 +
 +
 +=== XML ===
 +XML --- это на самом деле не формат,​ а синтаксис. На основе XML можно сделать
 +хороший формат,​ но примеров такого в подобном контексте пока не наблюдалось.
 +Синтаксис хорошо документирован,​ но никакой сторонней документации по
 +его применению для похожих целей нет.
 +
 +
 +==== Представление физического расположения ====
 +Это единственный вид применения,​ для которого ни Verilog, ни VHDL серьёзно не
 +использовались.
 +
 +Идеи:
 +
 +  * Соединения тоже являются объектами с подключениями и атрибутами. Соединения имеют значение в любом контексте.
 +  * Положение в схеме может рассматриваться как объект с подключениями и атрибутами (''​place''​).
 +  * Контактные площадки,​ соединители,​ термоплощадки,​ переходы,​ ... --- всё это тоже объекты с подключениями и атрибутами.
 +  * Чтобы отделить разделы,​ имеющие значение только в определённом контексте,​ можно использовать директиву ''​%%'​define%%''​ (для формата Verilog)
 +  * Формат должен быть описанием высокого уровня. Такое представление должно быть повсюду. То есть речь не должна идти о линиях,​ прямоугольниках и окружностях.
 +  * Если нужно, линии, прямоугольники и окружности тоже могут быть объектами,​ но не транслируемыми,​ так как они не имеют значения в других ситуациях.
 +  * Атрибуты,​ не имеющие значения,​ молча игнорируются. Имеющие значение в одном контексте,​ но не имеющие в другом,​ игнорируются там, где не имеют смысла.
 +
 +
 +===== Приложения =====
 +Как один из возможных вариантов рассмотрим формат Verilog.
 +
 +Самостоятельной единицей будет модуль (''​module''​):​
 +
 +  module my-module(connections);​
 +  // contents
 +  endmodule
 +
 +Каждый объект в списке имеет совместимый синтаксис:​
 +
 +  type #​(attributes) name (connections);​
 +
 +Пример:​
 +
 +  resistor #(.r(1k)) r123 (a, b);
 +  resistor #(.r(1k)) r234 (.p(b), .n(c));
 +
 +"​r"​ представляет собой имя атрибута. "​1k"​ --- это значение (строка).
 +
 +В первом примере соединения определяются по порядку. Во втором их соответствие
 +выводам определяется посредством имён. Узел "​b"​ подключен к выводу "​p",​ а
 +узел "​c"​ --- к выводу "​n"​.
 +
 +Соединение ("​net"​) тоже является объектом.
 +
 +В вышеприведённом примере оба резистора непосредственно подключены к узлу
 +"​b"​. Подключение в принципиальной схеме непосредственно не задаётся,​
 +для этого используется соединение ("​net"​):​
 +
 +  resistor #(.r(1k)) r123 (.p(a1), .n(b1));
 +  resistor #(.r(1k)) r125 (.p(b2), .n(c2));
 +  net b (.1(b1), .2(b2));
 +
 +Имя соединения --- "​b"​. Атрибутов соединение не имеет.
 +
 +Теперь для схемы нужно добавить узлы:
 +
 +  place #(.x(1222), .y(3438)) place11333 (b1);
 +  place #(.x(4334), .y(8433)) place34894 (b2);
 +  place #(.x(9393), .y(4232)) place49334 (a1);
 +  place #(.x(2932), .y(2384)) place34983 (c2);
 +
 +Части, применяемые только в определённом контексте,​ могут включаться
 +селективно посредством ''​%%'​ifdef%%'':​
 +
 +  module my_circuit;
 +    'ifdef SCHEMATIC
 +      place ...
 +      place ...
 +    'endif
 +     res ...
 +     res ...
 +     net ...
 +  endmodule
 +
 +Сложные соединения могут группироваться в самостоятельные элементы:​
 +
 +  module net23842 (1,2,3);
 +    net n23482 (1,2);
 +    net n84333 (2,3);
 +    'ifdef SCHEMATIC
 +      place ...
 +      place ...
 +      place ...
 +    'endif
 +  endmodule
 +
 +  module net9393 (1,2);
 +    net #​(.color(blue),​ .thickness(thin)) n38423 (1,2);
 +  endmodule
  
geda/format_translation.ru.txt · Last modified: 2014/04/25 06:12 by vzh