This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
geda:format_translation.ru [2011/10/10 08:24] vzh Fixed terms |
geda:format_translation.ru [2014/04/25 06:12] vzh Updated using po4a |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | //Эта страница доступна также на следующих языках:// | ||
+ | [[format_translation|English]] | ||
+ | |||
+ | ====== Преобразование разных форматов файлов друг в друга ====== | ||
+ | |||
+ | Нам нужна универсальная система преобразования форматов для трансляции | ||
+ | изменений между всеми современными и возможно будущими средствами 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 | ||