Qucs — это симулятор электронных схем с открытым кодом. О нём рассказывают мои предыдущие статьи на хабре.

Сейчас наш проект готовится к следующему релизу 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 представляет собой стройную систему костылей и подпорок набор патчей, который позволяет подключать внешние SPICE-совместимые симуляторы к Qucs. Исходный код находится в главном репозитории Qucs в ветке rebase_spice4qucs: github.com/Qucs/qucs/tree/rebase_spice4qucs Код получился достаточно насыщенный костылями, так как использование нетлиста отличного от SPICE в дефолтном симуляторе Qucs было изначально вредной идеей. Это могло только породить костыли.

Итак, 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)


  1. 3draven
    26.07.2015 19:40
    +1

    Qucs 0.0.15 виснет на модели простейшего усилка на ОУ. Хотел попробовать, пришлось и дальше использовать ltspice.
    Попробуем еще раз с новым моделированием в spice!


    1. 3draven
      26.07.2015 19:55
      -1

      Хотя, прочитав пост полностью, буду и даальше использовать ltspice. Если запилите qucs с полной интеграцией spice, вот тогда буду пользовать ваш продукт. Изначально не понимал зачем городить qucs с самостоятельной системой моделирования, если действительно нужная штука это удобный гуй к spice под линем.

      Кстати, может подскажете, есть ли удобный гуй под линем для spice? Может я просто не знаю.


      1. vv_kuznetsov Автор
        27.07.2015 09:26

        Есть KJwaves, но он на Java. Так что это изделие на любителя. Я его не использовал. Попробуйте его, может быть понравится.

        Ещё gschem умеет экспортировать схему в spice-netlist.


    1. vv_kuznetsov Автор
      27.07.2015 09:34

      Да, теперь ОУ работают вместе с 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.


  1. PapaBubaDiop
    26.07.2015 21:26

    Spice сам по себе существует в исходниках и проверен временем ( 25 лет уже по-моему). Любая контора типа Intel пользуется его оригинальным кодом, добавляя свои уравнения состояния для MOSFET-о-в и прочих элементов. А вот обработки результатов расчетов не хватает. Или Ваше моделирование законов Кирхгофа эффективнее?


    1. 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. В настоящее время разработка возобновлена по-моему первоначальным автором.


    1. zvic
      27.07.2015 21:58

      Любая контора типа Intel пользуется его оригинальным кодом, добавляя свои уравнения состояния для MOSFET-о-в и прочих элементов.
      От оригинального SPICE в подобных разработках мало чего осталось, если вообще осталось.


      1. PapaBubaDiop
        28.07.2015 01:00

        По моим данным — осталось много кода из прошлого века. Я бы сказал, процентов 90.


        1. zvic
          29.07.2015 20:57

          Можно узнать на чем основаны ваши данные?

          Мои основаны на нескольких годах работы в команде разрабатывающей коммерческий SPICE симулятор.


          1. PapaBubaDiop
            03.08.2015 15:59

            сотрудником Интела пару лет работал в этом проекте, добавлял хитрый алгоритм вычисления очень нелинейной функции модели полупроводника


  1. dbanet
    27.07.2015 07:47

    Это шикарно! Удачи вам!