Сейчас наш проект готовится к следующему релизу 0.0.19, который выйдет в ближайшие недели. Данная заметка содержит обзор наиболее ожидаемого за все последние годы нововведения: поддержки моделирования схем Qucs в SPICE-совместимых симуляторов.
Qucs использует ядро моделирования Qucsator, разработанное с нуля. Это ядро имеет много преимуществ (моделирование S-параметров, расширенный постпроцесоор), но также имеет многочисленные баги, связанные с моделированием во временной области (Transient analysis). Эти баги в частности не позволяют моделировать в Qucs силовую электронику. Теперь в Qucs можно смоделировать, например такую схему:
Скачать пакеты для Linux и Windows с поддержкой Ngspice можно здесь:
github.com/ra3xdh/qucs/releases/tag/0.0.19S-rc1
Буква «S» в номере релиза означает SPICE. По-видимому вместе с релизом 0.0.19 выйдет два набора пакетов: с индексом «S» и с обычной нумерацией, так как дальнейшая судьба spice4qucs неясна.
Документация для spice4qucs находится здесь: qucs-help.readthedocs.org/en/spice4qucs
Под катом будет кратко рассмотрено использование spice4qucs.
Предыстория
В течение примерно 10 месяцев я и Mike Brinson (London Metropolitan University) занимались разработкой подсистемы spice4qucs, которая позволяет моделировать схемы Qucs с использованием внешних консольных симуляторов Ngspice qucs-help.readthedocs.org/en/spice4qucs и Xyce xyce.sandia.gov. Наибольший интерес представляет Ngspice, который является лучшим open-source симулятором схем, но не имеет графического интерфейса. С нашим набором патчей Qucs может служить интерфейсом для Ngspice.
Ход разработки можно отследить здесь:
github.com/Qucs/qucs/issues/226
github.com/Qucs/qucs/issues/77
github.com/Qucs/qucs/issues/181
Назначение spice4qucs
Spice4qucs представляет собой
Итак, spice4qucs выполняет следующие функции:
- Преобразует схему Qucs в SPICE-netlist
- Запускает сторонний симулятор
- Преобразует вывод от симулятора в XML-формат данных Qucs
Примеры схем, которые могут быть смоделированы в SPICE находятся в каталоге $QUCSDIR/share/qucs/doc/examples/ngspice Где $QUCSDIR — это корень установки Qucs, например /usr или C:/Program Files/Qucs.
Установка
В дистрибутивы Linux данный пакет пока не входит, поэтому нужно всё откомпилировать вручную:
tar xvfz qucs-0.0.19-S1.tar.gz
cd qucs-0.0.19-S1
./configure --prefix=/path_to_install/
make -jчисло_процессоров
make install
Должен быть установлен Qt4 для разработчиков и GCC.
Рекомендуется использовать configure c ключом --prefix, чтобы не повредить системную установку Qucs, а поставить его куда-либо в отдельный каталог, напрмер в /opt. Вместо make install лучше использовать checkinstall, который соберёт пакет под ваш дистрибутив.
Установка для Windows проста. Нужно запустить инсталлятор, выбрать путь для установки и нажать Next->Next->Finish.
Также нужно установить Ngspice. В сборки он не входит и его нужно ставить отдельно. В Linux такой пакет уже есть и его можно установить при помощи пакетного менеджера, например:
apt-get install ngspice
Использование
Рассмотрим использование. Предполагается, что читатель уже раньше работал с Qucs и знает как моделировать в нём схемы. Наибольший интерес для практики представляет Ngspice. По использованию Xyce — читайте нашу документацию (ссылка до ката).
В качестве примера смоделируем колебательный контур. Посмотрим АЧХ в диапазоне частот от 1 до 10 Мгц (AC analysis) и отклик колебательного контура на синусоидальное воздействие частотой 7,5 МГц и амплитудой 0,6 В. (Transient analysis).
Сначала собираем следующую схему. Сохраняем схему как RCL.sch Эту схему можно промоделировать в Qucs, нажав Simulation->Simulate (F2) и убедиться, что всё работает.
Теперь смоделируем схему в Ngspice. Нажимаем Simulation->Simulate with Spice. Открывается диалоговое окно.
В раскрывающемся списке (1) можно выбрать симулятор. Выбираем Ngspice. Если симулятор установлен в нестандартном месте, то нужно задать путь к исполняемому файлу симулятора. Для этого следует нажать Settings и перейти в следующее диалоговое окно:
Этот шаг обязателен для Windows. Нужно указать в верхнем поле (Ngspice executable location) путь к файлу ngspice.exe. Для Linux как правило подходит путь по умолчанию. Теперь возвращаемся в предыдущий диалог и нажимаем Simulate. В диалоговом окне видим, что моделирование прошло успешно:
Также можно экспортировать схему в Spice-netlist, нажав копку Save Netlist. Вот так выглядит нетлист для нашей схемы:
* Qucs 0.0.19 /home/vvk/qucs/examples/ngspice/RCL.sch
V1 _net0 0 DC 0 SIN(0 0.6 7.5MEG 0 0) AC 0.6
VPr1 _net0 vIn DC 0 AC 0
L1 vIn _net1 10U
R1 0 vR 30
C1 _net1 vR 40P
.control
set filetype=ascii
AC LIN 1000 1MEG 10MEG
write RCL_ac.txt VPr1#branch v(vIn) v(vR)
destroy all
TRAN 4.97512e-09 1e-06 0
write RCL_tran.txt VPr1#branch v(vIn) v(vR)
destroy all
exit
.endc
.END
Нажимаем Exit, переходим на страницу просмотра и строим диаграмму. Размещаем декартовскую диаграмму. Открывается диалог свойств диаграммы.
В выпадающем списке (1) выбираем RCL, в выпадающем списке (2) выбираем Ngspice. Потом выбираем переменные, графики которых нужно построить (двойным щелчком мыши). Они переходят в список в правой части окна (показано стрелкой). Всё, моделирование завершено, получаем АЧХ (ток виртуального датчика тока — ac.i(pr1)) и осциллограммы напряжения (tran.v(vIn), tran.v(vR) ). Их нужно построить на разных графиках.
Обратите внимание, что имена узлов схемы имеют форму записи, принятую в SPICE. Префикс указывает тип моделирование (tran. или ac.) и симулятор (ngspice/).
Возможности
- Большинство комопонентов Qucs совместимо со SPICE. Поддерживаются подсхемы, библиотечные компоненты. О несовместимых компонентах во время моделирования выдаётся сообщение об ошибке: These components are SPICE-incompatible… Система уравнений (Equations) Qucs частично совместима со SPICE. Об ограничениях читать документацию.
- Добавлены виды моделирования совместимые со SPICE: .FOURIER, .NOISE и .DISTORTION Моделирование S-параметров не работает со spice4qucs.
- Spice4qucs позволяет моделировать схемы, недоступные дефолтному симулятору
Qucsator. Прежде всего это силовая электроника, ключевые схемы, схемы на полупроводниковых приборах, работающих с заходом в режим отсечки, и схемы с большим количеством компонентов. Например вот так можно смоделировать высококачественный усилитель звука на транзисторах:
- Добавлено множество SPICE-совместимых компонентов и видов моделирования. Они расположены в группах: Spice components, Spice sections, и Spice simulations. Подробнее о них написано в документации. Все эти компоненты не будут работать с дефолтным симулятором Qucsator. Они реализуют задание параметров, начальных условий и команды построцессора в стиле Ngspice. Также добавлены модели полупроводниковых компонентов с полным описанием модели в формате SPICE. Это позволяет просто копировать модель из существующих библиотек, минуя конвертеры. Вот пример схемы с такой моделью:
- В библиотеки теперь разрешено включение SPICE-нетлиста. Он напрямую передаётся SPICE-совместимому симулятору, минуя конвертации. Пример такой библиотеки здесь: github.com/ra3xdh/qucs-rus-complib/blob/master/Opamp.lib
Дальнейшие перспективы
Дальнейшая судьба проекта spice4qucs неясна. Вместе с релизом 0.0.19 выйдет два комплекта пакетов — с поддержкой spice4qucs и без неё. Вопрос о включении данного набора патчей в upstream остаётся открытым.
В дальнейшем будут добавляться новые компоненты и виды моделирования, в частности цифроаналоговые модели. Можно будет назначать каждой схеме дефолтный симулятор: Ngpsice, Qucsator или Xyce и выполнять моделирование, используя системный диалог (F2).
Возможно осенью я начну параллельно разработку собственного открытого проекта, базирующегося на исходных кодах Qucs и spice4qucs и нацеленного на глубокую интеграцию со SPICE и моделирование аналоговой электроники. Дефолтный симулятор Qucsator будет выпилен и заменён на Ngspice и будет обеспечена совместимость с библиотекам SPICE, реализованы компоненты полностью совместимые со SPICE и т.п.
Мои предыдущие публикации по Qucs:
- Qucs — open-source САПР для моделирования электронных схем habrahabr.ru/post/248005
- Новости проекта Qucs: подготовка к релизу 0.0.19 habrahabr.ru/post/259193
- Мои методички по Qucs: github.com/ra3xdh/RTUiS-labs (Начиная с л.р. №4 PDF+LaTeX, распространение запрещено! )
Комментарии (11)
PapaBubaDiop
26.07.2015 21:26Spice сам по себе существует в исходниках и проверен временем ( 25 лет уже по-моему). Любая контора типа Intel пользуется его оригинальным кодом, добавляя свои уравнения состояния для MOSFET-о-в и прочих элементов. А вот обработки результатов расчетов не хватает. Или Ваше моделирование законов Кирхгофа эффективнее?
vv_kuznetsov Автор
27.07.2015 09:47+1Совершенное верно, SPICE существует ещё с 80-х годов.
Если интересна мотивация авторов симулятора Qucsator, то можете поискать их статьи по имени авторов (Michael Mrgraf и Stefan Jahn). Они публиковались в International Journal of Numeric Modelling. Если вкратце, то авторы хотели создать симулятор, который содержал встроенные модели длинных линий, моделирование S-параметров и т.п. Их ещё не устраивала методика расчёта шумов в SPICE. Авторы работали в области СВЧ-электроники, и должное внимание моделированию во временной области не уделили (там остались баги). Около 2009 года они прекратили разработку GUI Qucs и симулятора Qucsator, и перестали отвечать на все вопросы, связанные с симулятором. Казалось, что симулятор умер. Но примерно с 2011-2012 года за симулятор и GUI взялась новая команданекромантовразработчиков.
Ngspice наоборот базируется на коде оригинального SPICE3f5 и его разрабатывает всё время одна команда.
Лично я считаю, что разработка своего симулятора с нуля было очень вредной идеей. Я тоже не вполне понимаю, что мешало доработать тот же Ngspice, который уже существовал на данный момент. В будущем это могло только породить костыли. Поэтому я придерживаюсь мнения, что наш симулятор должен следовать SPICE. Но есть люди, которые думают иначе.
Если кому-то интересна тема симуляторов, не основанных на SPICE, то ещё есть такой полуживой консольный симулятор Gnucap. В настоящее время разработка возобновлена по-моему первоначальным автором.
zvic
27.07.2015 21:58Любая контора типа Intel пользуется его оригинальным кодом, добавляя свои уравнения состояния для MOSFET-о-в и прочих элементов.
От оригинального SPICE в подобных разработках мало чего осталось, если вообще осталось.PapaBubaDiop
28.07.2015 01:00По моим данным — осталось много кода из прошлого века. Я бы сказал, процентов 90.
zvic
29.07.2015 20:57Можно узнать на чем основаны ваши данные?
Мои основаны на нескольких годах работы в команде разрабатывающей коммерческий SPICE симулятор.PapaBubaDiop
03.08.2015 15:59сотрудником Интела пару лет работал в этом проекте, добавлял хитрый алгоритм вычисления очень нелинейной функции модели полупроводника
3draven
Qucs 0.0.15 виснет на модели простейшего усилка на ОУ. Хотел попробовать, пришлось и дальше использовать ltspice.
Попробуем еще раз с новым моделированием в spice!
3draven
Хотя, прочитав пост полностью, буду и даальше использовать ltspice. Если запилите qucs с полной интеграцией spice, вот тогда буду пользовать ваш продукт. Изначально не понимал зачем городить qucs с самостоятельной системой моделирования, если действительно нужная штука это удобный гуй к spice под линем.
Кстати, может подскажете, есть ли удобный гуй под линем для spice? Может я просто не знаю.
vv_kuznetsov Автор
Есть KJwaves, но он на Java. Так что это изделие на любителя. Я его не использовал. Попробуйте его, может быть понравится.
Ещё gschem умеет экспортировать схему в spice-netlist.
vv_kuznetsov Автор
Да, теперь ОУ работают вместе с Qucs. Нужно использовать не ОУ из стандартной библиотеки (т.к. они прошли двойную конвертацию Spice->Qucs->Spice), а применять специальный компонент «Схема SPICE» (находится в группе «Файловые компоненты»). Ему нужно указать на файл со SPICE-моделью ОУ. В этом случает SPICE-модель напрямую передаётся SPICE-симулятору. Подробнее этот процесс описан здесь: qucs-help.readthedocs.org/en/spice4qucs/SubLib.html#using-manufacturers-component-data-libraries
В следующих версия ожидаются библиотеки, которые будут включать в себя неконвертированные SPICE-модели. Если выбран дефолтный симулятор, то будет подгружаться Qucs-netlist, а если выбран SPICE-симулятор, то SPICE-netlist.