1 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5 <link rel=
"stylesheet" media=
"screen" type=
"text/css" href=
"./style.css" />
6 <link rel=
"stylesheet" media=
"screen" type=
"text/css" href=
"./design.css" />
7 <link rel=
"stylesheet" media=
"print" type=
"text/css" href=
"./print.css" />
9 <meta http-equiv=
"Content-Type" content=
"text/html; charset=utf-8" />
14 <em>Эта страница доступна также на следующих языках:
</em>
15 <a href=
"geda-format_translation.html" class=
"wikilink1" title=
"geda-format_translation.html">English
</a>
18 <h1 id=
"преобразованиеразныхформатовфайловдругвдруга">Преобразование разных форматов файлов друг в друга
</h1>
22 Нам нужна универсальная система преобразования форматов для трансляции
23 изменений между всеми современными и возможно будущими средствами gEDA, а
24 также сторонними программами, которые, вероятно, могут использоваться вместе
30 <h2 id=
"ограничения">Ограничения
</h2>
34 Поддерживать все возможные преобразования, безусловно, смысла нет. Поэтому
35 ограничимся современными и возможно будущими составляющими gEDA и сторонними
36 программами, которые, вероятно, могут использоваться вместе с программами
37 gEDA. Разумеется, для ряда программ преобразование форматов не имеет смысла
38 и поддерживаться не должно.
42 Идея состоит в использовании промежуточного формата. Сначала транслировать в
43 него, затем --- из него. Промежуточный формат должен быть достаточно
44 выразительным, чтобы его можно было без потерь транслировать в формат любой
45 программы gEDA и обратно.
49 «Без потерь» значит, что файл, полученный в результате трансляции должен
50 работать так же, как и исходный. Не обязательно сохранять форматирование и
51 прочие незначительные вещи.
55 Все форматы для трансляции в настоящее время состоят из списков объектов с
56 некоторого рода структурированием. Каждый из объектов имеет подключения и
61 Это наводит на мысль об использовании в качестве промежуточного одного из
62 возможных стандартных форматов списков соединений.
66 Ниже рассматриваются только те форматы, что соответствуют указанной модели.
70 Если возможно, хорошо бы, чтобы выбранный формат уже применялся когда-либо
71 по крайней мере для некоторых из указанных целей, а также имел стороннюю,
72 опубликованную и свободно доступную спецификацию.
76 Должны быть способы включения изменений из любого источника/назначения без
77 смешения различных частей.
82 <h3 id=
"инструментарийтребующийподдержки">Инструментарий, требующий поддержки
</h3>
85 <li class=
"level1"><div class=
"li"> принципиальные схемы
</div>
87 <li class=
"level1"><div class=
"li"> топологические схемы
</div>
89 <li class=
"level1"><div class=
"li"> моделирование
</div>
95 <h3 id=
"программыgeda">Программы gEDA
</h3>
99 Для форматов файлов данных программ нужно преобразование без потерь, поэтому может потребоваться промежуточный формат хранения данных.
102 <li class=
"level1"><div class=
"li"> gschem
</div>
104 <li class=
"level1"><div class=
"li"> pcb
</div>
106 <li class=
"level1"><div class=
"li"> gnucap
</div>
108 <li class=
"level1"><div class=
"li"> Icarus Verilog
</div>
114 <h3 id=
"другиесвободныепрограммыкоторыедолжныполностьюподдерживаться">Другие свободные программы, которые должны полностью поддерживаться
</h3>
118 Эти программы тоже свободные. Нужен стандарт для их поддержки на равных правах с программами gEDA.
121 <li class=
"level1"><div class=
"li"> NGspice
</div>
123 <li class=
"level1"><div class=
"li"> Qucs
</div>
125 <li class=
"level1"><div class=
"li"> Kicad
</div>
127 <li class=
"level1"><div class=
"li"> Magic
</div>
129 <li class=
"level1"><div class=
"li"> Electric
</div>
131 <li class=
"level1"><div class=
"li"> Xcircuit
</div>
133 <li class=
"level1"><div class=
"li"> Fritzing
</div>
139 <h3 id=
"импортиэкспортнесвободныхформатов">Импорт и экспорт несвободных форматов
</h3>
143 Поддержка форматов данных программ позволит программам gEDA наилучшим образом взаимодействовать с коммерческими средствами. Нужна базовая функциональность, но преобразование не обязательно должно быть без потерь. Преобразование без потерь должно быть возможным, но не является главным приоритетом для фактической реализации средств трансляции.
146 <li class=
"level1"><div class=
"li"> Eagle
</div>
148 <li class=
"level1"><div class=
"li"> Orcad
</div>
150 <li class=
"level1"><div class=
"li"> LTspice
</div>
152 <li class=
"level1"><div class=
"li"> Pads
</div>
158 <h3 id=
"отсутствующаяфункциональностьgeda">Отсутствующая функциональность gEDA
</h3>
162 Надеемся, при наличии системы преобразования форматов у нас появится база для решения следующих вопросов:
165 <li class=
"level1"><div class=
"li"> Обратное аннотирование изменений, сделанных в топологических схемах и файлах моделирования, в принципиальные схемы.
</div>
167 <li class=
"level1"><div class=
"li"> Анализ статических временных диаграмм.
</div>
169 <li class=
"level1"><div class=
"li"> Моделирование целостности сигналов после формирования топологии платы.
</div>
171 <li class=
"level1"><div class=
"li"> Сравнение топологической и принципиальной схем.
</div>
173 <li class=
"level1"><div class=
"li"> Использование одной и той же схемы для всего проекта целиком.
</div>
179 <h3 id=
"явнонеподдерживаются">Явно не поддерживаются
</h3>
182 <li class=
"level1"><div class=
"li"> Построение графиков
</div>
184 <li class=
"level1"><div class=
"li"> Команды
</div>
186 <li class=
"level1"><div class=
"li"> Поведенческое моделирование
</div>
192 <h2 id=
"общеепредставление">Общее представление
</h2>
196 Все форматы состоят из списков объектов с подключениями и атрибутами.
200 Традиционно для обмена данными использовались списки соединений, но
201 традиционный подход подразумевает одностороннее преобразование, поскольку
202 при этом теряется информация.
206 Формат должен передавать сущность содержимого не обязательно таким же
207 образом, как родной формат программы или её внутреннее представление.
211 Не обязательно транслировать те части, что обычно уже имеются в библиотеках
212 или специфичны для данной программы, такие как модели, символы или
217 Каждый из претендентов на роль возможного формата должен поддерживать
218 преобразование в любой другой и обратно без потерь.
223 <h3 id=
"возможныеформаты">Возможные форматы
</h3>
228 <h4 id=
"spice">SPICE
</h4>
232 Популярный формат списка соединений. Использовался для обмена данными, но
233 пока не применялся для описания физического расположения. Проблемы:
234 неправильный синтаксис, недостаточно выразителен. Эти проблемы годами не
235 давали покоя разработчикам. Формат нравится почти всем, за исключением тех,
236 кто хорошо его знает.
241 <h4 id=
"verilog">Verilog
</h4>
245 Структурное подмножество представляет собой хороший формат списка
246 соединений. Он правилен, достаточно выразителен и для него опубликован
247 стандарт. Использовался для обмена данными, но пока не применялся для
248 описания физического расположения.
253 <h4 id=
"vhdl">VHDL
</h4>
257 Структурное подмножество представляет собой хороший формат списка
258 соединений. Он правилен, достаточно выразителен и для него опубликован
259 стандарт. Использовался для обмена данными, но пока не применялся для
260 описания физического расположения.
265 <h4 id=
"spectre">Spectre
</h4>
269 Структурное подмножество представляет собой хороший формат списка
270 соединений. Он правилен, достаточно выразителен, но принадлежит одной
271 компании (Cadence), поэтому его исключаем. Использовался только для
277 <h4 id=
"xml">XML
</h4>
281 XML --- это на самом деле не формат, а синтаксис. На основе XML можно
282 сделать хороший формат, но примеров такого в подобном контексте пока не
283 наблюдалось. Синтаксис хорошо документирован, но никакой сторонней
284 документации по его применению для похожих целей нет.
289 <h3 id=
"представлениефизическогорасположения">Представление физического расположения
</h3>
293 Это единственный вид применения, для которого ни Verilog, ни VHDL серьёзно
301 <li class=
"level1"><div class=
"li"> Соединения тоже являются объектами с подключениями и атрибутами. Соединения имеют значение в любом контексте.
</div>
303 <li class=
"level1"><div class=
"li"> Положение в схеме может рассматриваться как объект с подключениями и атрибутами (
<code>place
</code>).
</div>
305 <li class=
"level1"><div class=
"li"> Контактные площадки, соединители, термоплощадки, переходы, ... --- всё это тоже объекты с подключениями и атрибутами.
</div>
307 <li class=
"level1"><div class=
"li"> Чтобы отделить разделы, имеющие значение только в определённом контексте, можно использовать директиву
<code>'define
</code> (для формата Verilog).
</div>
309 <li class=
"level1"><div class=
"li"> Формат должен быть описанием высокого уровня. Такое представление должно быть повсюду. То есть речь не должна идти о линиях, прямоугольниках и окружностях.
</div>
311 <li class=
"level1"><div class=
"li"> Если нужно, линии, прямоугольники и окружности тоже могут быть объектами, но не транслируемыми, так как они не имеют значения в других ситуациях.
</div>
313 <li class=
"level1"><div class=
"li"> Атрибуты, не имеющие значения, молча игнорируются. Имеющие значение в одном контексте, но не имеющие в другом, игнорируются там, где не имеют смысла.
</div>
319 <h2 id=
"приложения">Приложения
</h2>
323 Как один из возможных вариантов рассмотрим формат Verilog.
327 Самостоятельной единицей будет модуль (
<code>module
</code>):
329 <pre class=
"code">module my-module(connections);
334 Каждый объект в списке имеет совместимый синтаксис:
336 <pre class=
"code">type #(attributes) name (connections);
</pre>
341 <pre class=
"code">resistor #(.r(
1k)) r123 (a, b);
342 resistor #(.r(
1k)) r234 (.p(b), .n(c));
</pre>
345 «r» представляет собой имя атрибута. «
1k» --- это значение (строка).
349 В первом примере соединения определяются по порядку. Во втором их
350 соответствие выводам определяется посредством имён. Узел «b» подключен к
351 выводу «p», а узел «c» --- к выводу «n».
355 Соединение («net») тоже является объектом.
359 В вышеприведённом примере оба резистора непосредственно подключены к узлу
360 «b». Подключение в принципиальной схеме непосредственно не задаётся, для
361 этого используется соединение («net»):
363 <pre class=
"code">resistor #(.r(
1k)) r123 (.p(a1), .n(b1));
364 resistor #(.r(
1k)) r125 (.p(b2), .n(c2));
365 net b (
.1(b1),
.2(b2));
</pre>
368 Имя соединения --- «b». Атрибутов соединение не имеет.
372 Теперь для схемы нужно добавить узлы:
374 <pre class=
"code">place #(.x(
1222), .y(
3438)) place11333 (b1);
375 place #(.x(
4334), .y(
8433)) place34894 (b2);
376 place #(.x(
9393), .y(
4232)) place49334 (a1);
377 place #(.x(
2932), .y(
2384)) place34983 (c2);
</pre>
380 Части, применяемые только в определённом контексте, могут включаться
381 селективно посредством
<code>'ifdef
</code>:
383 <pre class=
"code">module my_circuit;
384 'ifdef SCHEMATIC
394 Сложные соединения могут группироваться в самостоятельные элементы:
396 <pre class=
"code">module net23842 (
1,
2,
3);
399 'ifdef SCHEMATIC
405 <pre class=
"code">module net9393 (
1,
2);
406 net #(.color(blue), .thickness(thin)) n38423 (
1,
2);