LINUX.ORG.RU
ФорумTalks

Существует ли язык описания электронных схем в удобном для написания человеком текстовом формате?

 


2

2

Про Verilog и VHDL я слыхал, но это не совсем то.

Хочется что-то типа как в OpenSCAD описывается 3D-модель, оказалось чудовищно удобно (хотя казалось бы, куда уж мышевозней юзкейс)

Что-то вроде:

connector X1 (pins=2, pin1=signal_in, pin2=GND);
resistor R1 (pin1=signal_in, pin2=led_anode);
led LED1 (anode=led_anode, cathode=GND);

чтоб потом можно было отрисовывать красивую схему (подобно тому как OpenSCAD отрисовывает 3д) и транслировать в нетлисты каких-нибудь кикадов

★★★★★

Ответ на: комментарий от Shulman

блджад, это намек на то, чтоб я сам запилил? или-таки название какой-то трудногуглимой технологии? )

pihter ★★★★★
() автор топика
Ответ на: комментарий от Shulman

ну это немаловероятно, в хобби режиме, но сначала хотелось бы послушать коллективный разум. Ну как все уже давно про такую штуку занют, только мне не рассказывали, а я брошусь велосипедить?

pihter ★★★★★
() автор топика

Нету такого. Эта идея уже очень давно гуляет по форумам, но так никто и не взялся.

Puzan ★★★★★
()
Ответ на: комментарий от Gromozvon

Руками такое не напишешь:

(comp (ref P1)
       (value TO_CNC_CONTROLLER)
       (footprint MSMD:MSMD_6pin_conn)
       (libsource (lib conn) (part CONN_01X06))
       (sheetpath (names /) (tstamps /))
       (tstamp 5B225441))
     (comp (ref U2)
       (value PC817)
       (footprint MSMD:MSMD_dip4)
       (libsource (lib opto) (part PC817))
       (sheetpath (names /) (tstamps /))
       (tstamp 5B2259CC))
     (comp (ref R2)
       (value 150)
       (footprint MSMD:MSMD_10mm_resistor)
       (libsource (lib device) (part R))
       (sheetpath (names /) (tstamps /))
       (tstamp 5B225AFE))

pihter ★★★★★
() автор топика
Ответ на: комментарий от Gromozvon

А вот для сравнения деталька из OpenSCAD:

  1 $fn = 12;
  2 
  3 w = 45;
  4 h = 20;
  5 d = 12;
  6 
  7 profile_width = 25;
  8 profile_height = 12;
  9 
 10 hole_rad = 2;
 11 
 12 // минимальное расстояние между болтами (чтоб шляпка болта помещалась)
 13 min_cl_bt_holes = 5;
 14 
 15 // технологический зазор
 16 tc = 0.1;
 17 
 18 difference() {
 19   cube([w, h, d]);
 20 
 21   // прорезь под удерживаемый профиль
 22   translate([w/2-profile_width/2, 0, profile_height/2]) rotate([-90, 0, 0]) cube([profile_width+tc, profile_height+tc, h]);
 23 
 24   // крепежные отверстия
 25   translate([w/2-profile_width/2-min_cl_bt_holes, h/2-min_cl_bt_holes, 0]) rotate([0, 0, 90]) cylinder(r=hole_rad, h=d);
 26   translate([w/2-profile_width/2-min_cl_bt_holes, h/2+min_cl_bt_holes, 0]) rotate([0, 0, 90]) cylinder(r=hole_rad, h=d);
 27   translate([w/2+profile_width/2+min_cl_bt_holes, h/2-min_cl_bt_holes, 0]) rotate([0, 0, 90]) cylinder(r=hole_rad, h=d);
 28   translate([w/2+profile_width/2+min_cl_bt_holes, h/2+min_cl_bt_holes, 0]) rotate([0, 0, 90]) cylinder(r=hole_rad, h=d);
 29 }

pihter ★★★★★
() автор топика

да, в пикаде под досом - сидишь и пишешь текстом какой пин какого элемента входит в описываемое соединение.

deep-purple ★★★★★
()
connector X1 (pins=2, pin1=signal_in, pin2=GND);
resistor R1 (pin1=signal_in, pin2=led_anode);
led LED1 (anode=led_anode, cathode=GND);

Соединение модулей в VHDL и Verilog примерно так и выглядят.

Ещё есть EDIF, но он выглядит как lisp. Насколько обилие скобок удобно для человека, какждый решает сам.

akk ★★★★★
()

Соединения описать, что ты показал примером, проблем-то нет. Но тебе же надо сложные схемы описывать. чтобы их нарисовать, повороты, диагональные линии. От того, что ты опишешь только соединения диодного моста тебе диодный мост ромбиком из четырех диодов не нарисуется. Чего уж говорить о масштабных схемах.

Я давно об этом думал и даже изыскания начинал проводить. На тот момент из отдаленно (именно отдаленно) похожих был circuit macros - это набор макросов на m4 для TeX [1]. Также в старом добром pic из roff [2] были заложены идеи программного описания диаграмм и т. д. Возможно, еще что-то такое есть, что я не видел.

Но это все равно не то, так как язык должен описывать не только графическое, но и соединения (или хотя бы оно должно из графического него четко извлекаться), язык должен быть такой, чтобы пользователь понимал по тексту, что он нарисовал, а это тоже задачка непростая.

[1] https://web.mit.edu/outland/share/texmf/doc/latex/circuit_macros/CMman.pdf

[2] http://floppsie.comp.glam.ac.uk/Glamorgan/gaius/web/pic.html

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

Соединения описать, что ты показал примером, проблем-то нет. Но тебе же надо сложные схемы описывать. чтобы их нарисовать, повороты, диагональные линии. От того, что ты опишешь только соединения диодного моста тебе диодный мост ромбиком из четырех диодов не нарисуется. Чего уж говорить о масштабных схемах.

думал об этом, решил что надо сначала в драку ввязаться, а там посмотрим. Пока придумалось два возможных решения: сначала пусть визуализатор отрисует как бог положит, а пользователь потом мышкой подправит прямо в GUI, результат сохранить либо в соседнем файле (именно графические правки, в своем формате не касающемся соединений), либо в этом же файле, в конце там или комментариями к соединениям, деталям. Тут надо будет коллективно обмозговать, у меня пока в голове не выстроилось как бы я хотел это видеть.

pihter ★★★★★
() автор топика
Ответ на: комментарий от Zubok

Но это все равно не то, так как язык должен описывать не только графическое, но и соединения (или хотя бы оно должно из графического него четко извлекаться), язык должен быть такой, чтобы пользователь понимал по тексту, что он нарисовал, а это тоже задачка непростая.

ну.. тут можно «подпрограммы», явное разбивание на модули, явное название соединений. Во многом еще выразительнее схемы. Надо перенимать опыт OpenSCAD — не отделять текст-описание от графического предсавления. В OpenSCAD-е тоже ничего не поймешь, если отдельно от модели смотреть на текст, а в обсуждаемом случае бонусом идут уникальные идентификаторы элементов (R22, L11), которые глазом сразу видно и на схеме и на тексте: рядом с текстовым описанием поместил комментарий «резистор подтяжки», потом на схеме мышу навел — он тебе во всплывающем тултипе «резистор подтяжки», кликнул — он тебе курсор на тексте на него перевел — красота

pihter ★★★★★
() автор топика

Я только про симуляторы IC слышал в которых похожим образом можно задавать цепи, типа ngspice.

Aber ★★★★★
()

SPICE netlist попробуй. Достаточно распространённый и старый формат, поддерживается почти всеми.

Stanson ★★★★★
()
Ответ на: комментарий от pihter

а пользователь потом мышкой подправит прямо в GUI, результат сохранить либо в соседнем файл

Вообще, фиксировать на графическое представление (длины линий, например) — это тоже не очень. Совершенно типичная ситуация должна вытолкнуть на то, как должно быть: у тебя есть схема, в центр которой, в какую-то цепь, ты вставляешь в тексте резистор или какой-то новый фрагмент схемы и чтобы не пришлось описание расположений и ориентаций перелопачивать, а чтобы интерпретатор автоматом и раздвинул схему в нужных местах и нарисовал сразу же новый вариант и вариант: ожидаемый, не разрушающий замысел, предсказуемый.

UPD. Просто то, что ты пишешь в посте — уже давно решенная задача, не представляющая трудностей совершенно. Те же netlist в любых EDA.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 2)
Ответ на: комментарий от Zubok

Я немного поразмыслил и тоже пришел к выводу, что должно само рисовать и раздвигать.

В принципе, для несложных схем, я представляю как такое можно сделать. А сложные я и сам толком рисовать не умею: разбиваю на простые, как и все, наверное.

Я работал с большими схемами советскими: расстелишь на полу, ползаешь как дурак, водишь пальцем по линии... ИМХО, гораздо вернее разбивать на логические участки небольшие и за пределы страницы выводить именованные линии (что, кстати, потом позволит отрисовать информативную блок схему структурную)

Просто то, что ты пишешь в посте — уже давно решенная задача, не представляющая трудностей совершенно. Те же netlist в любых EDA.

ну вот их надо посмотреть все, на предмет человекочитаемости. В кикаде вот, де-факто, непригодная к ручному редактированию

pihter ★★★★★
() автор топика

Проблема в том, что электронные схемы существенно двумерные, если рисовать на бумаге. Как минимум.

Это, конечно, не мешает их тем или иным способом описать в текстовом формате, но он никогда не будет столь же наглядным, не считая какие-то простейшие случаи.

praseodim ★★★★★
()
Ответ на: комментарий от praseodim

он никогда не будет столь же наглядным, не считая какие-то простейшие случаи.

ну, OpenSCAD тоже даже близко не такие наглядные (попробуй представить описанную выше деталь?), как 3д модель, однако у них есть свои очень сильные стороны. Настолько сильные — что хочется того же и для электроники. Задача не стоит сделать текстовое описание таким же наглядным(это, имхо, невозможно)

pihter ★★★★★
() автор топика
Ответ на: комментарий от praseodim

Для наглядности есть различные форматы boardview. Вот от них ТС и предлагаю плясать.

K39
()

текстовом формате?

Попробуй текстом описать СВЧ-тракт из микрополосковых линий, желательно в стихах :)

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

а почему нет?

микрополосковая_линия (параметр1=такой-то, параметр2=такой-то, ..)

дальше уже пусть на уровне отрисовки РСВ разбираются :)

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

микрополосковая_линия (параметр1=такой-то, параметр2=такой-то, ..)

Не 1 изолированную линию, а тракт в котором важно окружение и каждая загогулина :)

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

интересно, а как ты ее на графичиской принципиальной схеме описываешь? по-моему, ты уже немного мух с котлетами путаешь

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

как ты ее на графичиской принципиальной схеме описываешь?

2D схема удобнее 1-мерного текста, компактнее и обозримее.

quickquest ★★★★★
()

Приблизительно так в spice описывается. Но не знаю как оно называется. И spice он проприетарный или нет тоже не помню, в институте на нём схемы просчитывал.

turtle_bazon ★★★★★
()

кастани, когда сделаешь

bender ★★★★★
()

Значит че я надумал: Накидал поделочку на Си, которая принимает параметры командной строки, рисует GTK-шное окошко, вызывает Lua-скриптик, которому передает имя файла-схемы. Файл-схема является кодом на Lua, ибо луа отлично под это подходит и приспособлен. Скриптик формирует изображение схемы расставляя по нужным местам детали, генерирует таблицу таблиц с координатами, куда поставить, линиями, надписями, ссылками на файлы изображений. Сишная программа забирает эти данные назад и отрисовывает в ГТК-шном окне.

Уже есть идеи насчет того какой алгоритм применить для расстановки деталей, но об этом позднее. Функция расстановки совершенно обособленная и легко подменяется (алгоритм можно менять хоть из конфига, хоть вообще на лету).

К Си и ГТК ничего не прибито: за вечер меняется на что угодно, умеющее в Lua. (просто для такой небольшой задачки проще всего мне было на С+ГТК)

Библиотека деталек лежит в подкаталоге, представляет из себя набор каталогов в каждом из которых png-шка с изображением детали и lua-шка с описанием (типа координаты выводов и тп), загружается по необходимости основным Lua-скриптом и Си-шным кодом для уже отрисовки.

во-первых: покритикуйте

во-вторых: есть где-нить свободная библиотека изображений радиодеталей, чтоб мне не тырить и не велосипедить?

спасибо

pihter ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.