This shows you the differences between two versions of the page.
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 | ||