Как стать автором
Обновить

Qucs-S: руководство по видам моделирования, часть 3

Время на прочтение9 мин
Количество просмотров2.5K

Qucs-S является программой с открытым исходным кодом для моделирования электронных схем. Qucs-S кроссплатформенный (поддерживаются Linux и Windows) и написан на С++ с использованием набора библиотек Qt. О данной программе рассказывают мои предыдущие статьи. Для работы Qucs-S рекомендуется использовать также открытый движок моделирования Ngspice. Актуальным релизом Qucs-S на текущий момент является версия 25.1.0. Статья продолжает подробное рассмотрение видов моделирования в Qucs-S, начатое в первой и второй частях.

Цифровое моделирование в аналоговом режиме

Цифровое моделирование в аналоговом режиме релизовано через специальные XSPICE модели логических элементов и триггеров для которых можно задавать напряжение логических уровней и задержку распространения сигнала. Входные и выходные ёмкости и сопротивления при таком представлении цифровых ИМС не моделируются. Для цифрового моделирования в аналоговом режиме служат четыре библиотеки компонентов.

  • Digital_HC, Digital_CD, Digital_LV – как следует из названия содержат модели ИМС серий 74HC, CD4000 и 74LV. Эти библиотеки содержат ИМС, которые наиболее часто используются в аналоговой схемотехнике. Данные библиотеки сконвертированы из библиотек MicroCAP.

  • Digital_AUX – содержит разные вспомогательные компоненты для цифрового моделирования: тактовые генераторы, мосты, подтягивающие резисторы и т. п.

  • Digital_XSPICE – содержит XSPICE модели логических элементов и триггеров для которых можно задавать параметры произвольным образом.

Две микросхемы (аналоговый ключ CD4066 и инвертер CD4069) имеют особенности. Для них модель составлена из транзисторов, а не из блоков XSPICE. Это даёт лучшую точность моделирования и позволяет представить в модели входную ёмкость и ток.

Использование данных библиотечных компонентов не имеет каких либо особенностей. Модели ИМС из данных библиотек сочетаются с любыми типами моделирования и другими аналоговыми компонентами (резисторами, транзисторами, конденсаторами и другими ИМС). Следует разместить УГО нужной ИМС на схеме, соединить проводами и произвести моделирование. По умолчанию напряжение питания всех цифровых ИМС равно 3.3В. Чтобы задать иное напряжение питание следует установить параметр VCC как показано на скриншоте. В данном примере моделируется делитель частоты на триггере 74HC74, на вход которому поступает сигнал от генератора на элементах И-НЕ 74HC00, включённых инвертером. Установлено напряжение питания VCC равное 5 В (блок .PARAM). Требуется установить режим совместимости с LTSpice в диалоговом окне настроек симулятора:

Установка режима совместимости с LTSpice
Установка режима совместимости с LTSpice
Пример моделирования делителя частоты на ИМС серии 74HC
Пример моделирования делителя частоты на ИМС серии 74HC

Цифровое моделирование при помощи VHDL/Verilog

Кроме цифрового моделирования в аналоговом режиме в программе поддерживается моделирование при помощи GHDL или IcarusVerilog. Оба вышеназванных программных средства должны быть установлены в системе и доступны через $PATH. Для Linux достаточно установить пакеты iverilog и ghdl через системный пакетный менеджер. Например в случае дистрибутивов, основанных Debian:

apt-get install iverilog
apt-get install ghdl

Для Windows оба пакета нужно скачивать с сайта разработчика, устанавливать вручную и добавлять пути в переменную среды $PATH.

Цифровое моделирование VHDL/Verilog поддерживается только для схем состоящих из идеальных цифровых компонентов. Данные компоненты в Qucs-S находятся в группе digital devices. Доступны различные логические элементы, триггеры, дешифраторы, мультиплексоры. Для данных компонентов можно задать задержку. Данный режим моделирования имеет органичения. В частности в Qucs-S не реализованы цифровые шины. Комбинировать аналоговое и цифровое моделирование в одной схеме не допускается.

Чтобы промоделировать схему в цифровой режиме нужно на схеме разместить особый вид моделирования: Digital Simulation. Если генератор нетлиста обнаружит на схеме данный компонент, то моделирование автоматически переключится в цифровой режим, и вместо аналогового нетлиста SPICE будет сгенерирован цифровой нетлист VHDL или Verilog. Соответствующий симулятор также запустится автоматически. В диалоговом окне свойств цифрового моделирования можно задать следующие параметры:

  • Тип моделирования: временная диаграмма (TimeList) или таблица истинности (TruthTable)

  • Длительность моделирования для режима временной диаграммы

  • Симулятор Verilog (используется IcarusVerilog) или VHDL (используется GHDL).

Свойства цифрового моделирования
Свойства цифрового моделирования

Моделирование запускается как обычно (например по горячей клавише F2). После завершения моделирования на схеме можно разместить два типа диаграмм: Timing Diagram или TruthTable. Остальные диаграммы в цифровом режиме не поддерживаются. На скриншоте приведён пример цифрового моделирования в режиме временной диаграммы для схемы с демультиплексором. Ко входам подключены два источника DigitalSource.

Пример моделирования временных диаграмм при помощи IcarusVerilog
Пример моделирования временных диаграмм при помощи IcarusVerilog

Я бы не рекомендовал пользоваться этим видом моделирования, так как он имеет существенные недоработки. Лучше воспользоваться специализированным ПО для цифрового моделирования. К таковым программным средствам относятся SimulIDE (разрабатывается в настоящее время) и TkGate (разработка прекращена, но доступен в репозиториях).

Скриптовое моделирование Nutmeg Script

Qucs-S позволяет задавать нестандартные типы моделирования при помощи скриптов Nutmeg – языка построцессора Ngspice. Синтаксис Nutmeg описан в главе 17 руководства Ngspice. Скриптовое моделирование требуется достаточно редко. В качестве примера на скриншоте показано моделирование вольт-фарадной характеристики (ВФХ) полупроводникового диода (зависимость ёмкости диода от приложенного напряжения). Выполнить данное моделирование при помощи обычного AC analysis и развёртки параметра не получится. Дело в том, что Ngspice поддерживает моделирование по одной точке через костыль. В результате получится набор графиков размерности 1x1. Чтобы этого избежать требуется вручную собирать вектор, что и осуществляется приведённым скриптом.

Моделирование ВФХ диода при помощи скрипта
Моделирование ВФХ диода при помощи скрипта

В диалоге свойств скриптового моделирования можно ввести текст скрипта и задать выходные переменные, которые будут выводиться на графики. Также можно задать выходные файлы наборов данных в формате raw-SPICE.

Диалог свойств скриптового моделирования
Диалог свойств скриптового моделирования

Использование моделей Verilog-A и компилятора OpenVAF совместно с Ngspice

Verilog-A это язык HDL предназначенный для описания моделей аналоговых компонентов. Таким образом можно добавлять новые компоненты в симулятор без перекомпиляции самого симулятора. Данная функция в основном требуется для академических целей при разработке новых моделей полупроводниковых приборов. Достаточно скомпилировать файл Verilog-A в бинарный модуль и указать его в качестве опции командной строки для симулятора. OpenVAF https://github.com/OpenVAF/OpenVAF-Reloaded является открытым компилятором моделей Verilog-A. В результате компиляции получаются бинарные модули OSDI, которые можно подключить к Ngspice. Компилятор OpenVAF следует скачать и установить отдельно. Он не входит в бинарные сборки ни Qucs-S, ни Ngspice, так как требуется достаточно редко и имеет значительный объём превышающий размер пакета Qucs-S.

Старый способ использования Verilog-A моделей с Qucs и компилятором ADMS (в настоящее время разработка остановлена) описан в этой презентации https://mos-ak.org/venice_2014/publications/T_4_Brinson_MOS-AK_Venice_2014.pdf Этот способ будет работать и для Qucs-S с OpenVAF, но не рекомендуется к применению как переусложнённый.

Здесь будет рассмотрен другой способ, который работает только для Qucs-S+Ngspice+OpenVAF. Для примера рассмотрим модель туннельного диода:

`include "disciplines.vams"
`include "constants.vams"
module tunnel(Ka, An);
inout Ka, An;
electrical An, Ka;
parameter real Is=1e-12;
parameter real Ip=1e-5;
parameter real Iv=1e-6;
parameter real Vp=0.1;
parameter real Vv=0.4;
parameter real K1=5;
parameter real C=0.01p;
parameter real Temp0=300;
real VT;
analog begin 
VT=(`P_K*Temp0)/`P_Q;
I(An,Ka) <+ Is*(exp(V(An,Ka)/VT)-1.0);
I(An,Ka) <+ ddt(C*V(An,Ka));
I(An,Ka) <+ Iv*exp(K1*(V(An,Ka)-Vv));
I(An,Ka) <+ Ip*(V(An,Ka)/Vp)*exp((Vp-V(An,Ka))/Vp);
end
endmodule

Данный листинг следует сохранить в файл tunnel.va и откомипилировать при помощи OpenVAF. Для этого в командной строке следует выполнить:

openvaf-r tunnel.va

Если в листинге нет ошибок, то получаем сообщение Finished building и файл tunnel.osdi. Этот OSDI файл нам понадобится в дальнейшем.

Теперь открываем Qucs-S, создаём новую схему и на поле схемы размещаем компонент SPICE generic device. Этот компонент будет у нас представлять модель задаваемую через Verilog-A модуль. В свойствах указываем количество терминалов Npins, букву Letter и имя модели. Количество терминалов должно соответствовать количеству терминалов Verilog-A модели. Буква всегда должна быть установлена N. Эта буква в Ńgspice соответствует компонентам, подгружаемым через OSDI модуль. Имя модели может быть выбрано произвольно.

Свойства компонента SPICE Generic Device
Свойства компонента SPICE Generic Device

Затем кроме компонента SPICE Generic device размещаем два виртуальных компонента: MODEL и SPICEINIT. Оба находятся в группе SPICE Netlist sections. В свойства компонента MODEL вписываем следующую строку:

Свойства компонента .MODEL
Свойства компонента .MODEL

Здесь после директивы .MODEL идёт имя модели tunnel1. Оно должно совпадать с именем модели, которое мы указали в свойствах компонента SPICE generic device. В круглых скобках идут свойства. Они должны соответствовать свойства модели Verilog-A (директивы parameter). Если свойства не указаны, то будет подставлено значение по умолчанию.

В свойства компонента SPICEINIT вписываем команду osdi и через пробел полный путь к OSDI файлу. Данная команда загружает OSDI модуль на старте Ngspice. Виды моделирования и прочие компоненты размещаются как обычно. Пример схемы, показанной на скриншотах можно найти здесь: https://github.com/ra3xdh/qucs_s/issues/411

Пример схемы, использующей Verilog-A модель
Пример схемы, использующей Verilog-A модель

Использование движка моделирования XYCE

XYCE https://xyce.sandia.gov/ – это написанный с нуля SPICE совместимый консольный движок моделирования электронных схем. Собственного графического интерфейса у XYCE нет, но данный движок моделирования можно подключить к Qucs-S, указав путь к исполняемому файлу Xyce в диалоге Simulation→ Simulator settings. XYCE отсутствует в большинстве дистрибутивов Linux. Разработчик предоставляет бинарные пакеты только для RHEL и Windows. Для остальных платформ данный симулятор требуется собирать самостоятельно. Существует опция сборки с поддержкой параллельных вычислений при помощи OpenMPI.

XYCE поддерживает те же виды моделирования, что и Ngspice. XYCE относится к числу рекомендуемых движков моделирования для некоторых открытых PDK для микроэлектроники. Особенностью XYCE является то, что он не имеет построцессора. Поэтому уравнения Nutmeg с ним работать не будут. Поддерживаются только параметрические уравнения, которые вычисляются до моделирования. В отличие от Ngspice, XYCE поддерживает моделирование гармонического баланса.

На скриншоте показан пример моделирования гармонического баланса при помощи XYCE. Переменная V(NODE3) содержит гармонический состав напряжения на аноде диода D1. Подробности можно найти в документации XYCE.

Моделирование гармонического баланса при помощи XYCE
Моделирование гармонического баланса при помощи XYCE

Экспорт данных моделирования

Обмен данными с внешними программными средствами для обработки данных, такими как Octave, Python или электронные таблицы осуществляется через экспорт результатов моделирования в формат CSV. Данный формат можно без проблем импортировать в Python и Octave. Имеются две возможности экспорта данных в CSV:

  • Экспортировать данные в CSV можно через контекстное меню графиков. Для этого следует щёлкнуть правой кнопкой мыши непосредственно по самой кривой, а не по полю диаграммы. Затем выбираем в меню пункт Export to CSV и выбрать в диалоговом окне куда сохранить файл CSV. Потом данный файл можно импортировать в Python, Octave или другое ПО. Экспортируются данные только для одной кривой, а не для всего датасета.

    Контекстное меню с пунктом Export to CSV
    Контекстное меню с пунктом Export to CSV
  • Можно использовать утилиту для командной строки qucsconv_rf, которая идёт в комплекте с программой. Qucs-S предоставляет интерфейс для данной утилиты. Чтобы выполнить конвертацию выполням Tools→ Data files converter. Открывается диалоговое окно. В данном окне выбираем Input Format – Qucs dataset, а Output format – CSV. Если нажать на кнопки Browse, то можно задать имя входного и выходного файлов. Файлы датасетов имеют расширение dat.ngspice для симуляций с использованием Ngspice или .dat для симуляций Qucsator. Из выпадающего списка можно выбрать переменную которую нужно экспортировать в CSV файл. Когда все поля заполнены, то нажимаем кнопку Convert и в нижней части окна получаем сообщения Running commad line, которое говорит о том, что конвертация прошла без ошибок. Данная утилита может не только сконвертировать датасет в CSV, но и выполнить преобразование и других форматов файлов. Например импортировать SPICE библиотеки.

    Диалоговое окно Convert data files
    Диалоговое окно Convert data files

Заключение. Список ресурсов по Qucs-S

Это заключительная из трёх статей про моделирование в Qucs-S. Остальные виды моделирования требуются достаточно редко, и про них можно узнать из документации Ngspice и примеров, поставляемых с программой. В заключении приведён список ресурсов по Qucs-S.

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 15: ↑15 и ↓0+19
Комментарии4

Публикации

Ближайшие события