
Лекция7
OCEAN
OCEAN- Open Command Environment for Analysis. OCEAN позволяет моделировать схемы, анализировать информацию после моделирования. Скрипты OCEAN можно запускать из терминала UNIX или из окна CIW. OCEAN можно применять с любым пакетом моделирования, интегрированным в Virtuoso ADE(Analog Design Environment) .
Обычно Virtuoso ADE используется при создании схемы и при ее отлаживании. После того, как вы добились полного соответствия характеристик схемы требуемым, вы можете использовать OCEAN для запуска своих скриптов и проверки схемы при различных условиях работы. После внесения изменений в схему (если они требуются) вы прсто еще раз запускаете ваши скрипты. OCEAN позволяет:
-
Создавать скрипты для проверки работоспособности схемы;
-
Осуществлять длительные типы анализов (например, параметрический, анализ работы по “углам”, статистический анализ) более эффективным способом;
-
запускать моделирование схемы прямо из терминала, не используя графический интерфейс.
Типы команд OCEAN
Скрипты OCEAN создаются для усовершенствования процесса контроля работоспособности, который осуществляется с помощью Virtuoso ADE. Скрипты OCEAN могут содержать три типа команд, как показано на этом рисунке.
Вся информация о запуске, создаваемая программой моделирования, доступна пользователю через команды OCEAN доступа к информации. Они также включают в себя все функции калькулятора Virtuoso ADE.
Ocean help
Помощь для команд ocean: ocnHelp(‘commandName).
Шаблон построения скрипта:
1 |
Определение программы моделирования |
simulator |
2 |
Установка переменных среды (env variable) |
design resultDir outfile path option envoption temp |
3 |
Создание netlist |
createNetlist createFinalNetlist |
4 |
Анализ |
analysis ic dc desVar |
5 |
Запуска |
run paramRun |
6 |
Доступ к информации |
openResults selectResults delay average |
simulator(s_simulator )-устанавливает программу для моделирования.
Типы симуляторов:
-spekrtre
-spektreS
-cdsSpice
-spectreVerilog
Пример:
simulator( 'spectre )
design( t_lib t_cell t_view )-указывает имя проекта (схемы), который необходимо моделировать.
Пример:
design( "tests" "simple" "schematic" )
resultsDir( t_dirName )-указывает директорию в которую будут помещены результаты моделирования(psf файлы). Если директория не указана, то psf файлы помещаются в …/psf в директорию netlist.
Пример:
resultsDir("~/simulation/ckt/spectreS/schematic/psf")
path – устанавливает путь к директории с модельными файлами.
Пример:
path(“ ~/models” ) - путь к директории “models” с моделями для симулятора Spice.
option([?categ s_categ] s_option1 g_value1 [s_option2 g_value2] .) - используется для задания значений встроенных параметров симулятора.
s_categ- тип используемого симулятора. Значения analog, digital, mixed. По умолчанию analog.
Пример:
option( ‘abstol (1e-10) ‘reltol (1e-6) )
envOption(s_envOption1 g_value1 ... [ s_envOptionN g_valueN ]) - задает параметры окружения.
Пример:
envOption( 'initFile "./myDotSFiles/init" )
temp( f_tempValue )- устанавливает значение температуры для моделирования.
Пример:
temp( 125 )
createNetlist( [?recreateAll b_recreate] [?display b_display]) – создание входного файла для симулятора. Если схема (проект) определены как lib/cell/view, то эта функция создает netlist и, если требуется то создает и входной файл. Если аргумент b_recreate определен как t, то перед созданием входного файла создание netlist происходит заново. Если проект задан как netlist, то он просто включается во входной файл. Аргумент b_display указывает отображать или нет netlist на экране. Функция используется для spectre.
Пример:
createNetlist( )
createNetlist(?recreateAll)
createFinalNetlist()-создает окончательный netlist. Эта функция используется для specters.
analysis(s_analysisType[?analysisOption1g_analysisOptionValue1].[?analysisOptionN g_analysisOptionValueN])- задает вид анализа для моделирования. Типы анализов: 'tran, 'dc, 'ac, 'noise. Параметры анализа зависят от его вида.
Пример:
analysis( ‘tran ?start 0 ‘stop 1u ?step 10)
После задания анализа задаются переменные, если они существуют.
desVar( t_desVar1 f_value1 ... [t_desVarN f_valueN])– функция задания переменных. Возвращает строку. Для дальнейших действий со значениями необходимо использовать evalstring.
Пример:
desVar(“r0” 1k )
desVar( "r1" "rs" "r2" "rs*2" )
a = evalstring( desVar( "rs")) / 2
save( ‘v “net34” “net45” ) - функция определяет сохраняемые узлы и ветви.
здесь:
‘v - напряжение
‘i - ток
‘all - напряжения всех ветвей и токи всех узлов схемы
‘allv - напряжения всех ветвей схемы
‘alli - токи всех узлов схемы.
ic( t_net value ) - уставливает начальные значения на ветвях электрической цепи. Для tran анализа.
Пример:
ic( “/net1” 5 )
run( [analysisType] ) - функция запуска моделирования.
Пример:
run( )
run('dc)
paramRun( [s_paramAnalysis] ) - запуск параметрического анализа
Пример:
rsAnalysis = paramAnalysis("CAP" ?values '(10 20))
cornerRun - запуск анализа по “углам”
monteRun - запуск статистического анализ по методу Монте-Карло
optimizeRun -запуск оптимизационного анализа
Обработка результатов моделирования
openResults( t_dir ) – открывает результаты моделирования.
Пример:
openResults( "./simulation/opamp/spectre/schematic/psf" )
selectResults( analysisType ) – выбирает результаты заданного типа анализа.
Пример:
selectResults( ‘tran )
outputs( “net13” “net19” ) – выбирает из базы данных ветви с которыми будут работать, которые были сохранены с помощью selectResults.
v( t_net [‘resultsDir] ) – выбор конкретной цепи для работы с ней.
Для удобства работы с результатами можно какой-либо переменной присвоить значения конкретной ветви.
Пример:
a = v(“/net156” )
getData(t_name [?result s_resultName] [?resultsDir t_resultsDir])- возвращает номер или график указанного сигнала в зависимости от того в какой функции используется.
Пример:
getData( "/net6" ) => drwave:25178234
Далее для обработки результатов можно использовать любые функции калькулятора.
Одна из функций калькулятора delay. Она измеряет задержку.
delay( ?wf1 o_wf
?value1 n_value1
?edge1
?nth1
?td1
?wf2 o_wf2
.
.
.
)
=> o/waveform / n_value / nil
Пример:
delay( ?wf1 wf1 ?value1 2.5 ?nth1 2 ?edge1 ‘either
?wf2 wf2 ?value2 2.5 ?nth2 1 ?edge2 ‘falling )
Вычисляет задержку одного сигнала относительно другого в точке 2.5, причем первый сигнал может быть при пересечении и нарастающим, и спадающим, а второй сигнал должен быть спадающим. Причем первый сигнал пересекает ординату 2.5 второй раз, а второй сигнал – первый.
cross( o_waveform n_crossVal x_n s_crossType ) возвращает координату x точки пересечения заданного графика и линии заданной координатой y.
Отображение результатов моделирования:
plot(o_waveform)
=>o_waveform / nil
Выводит результат в заданном окне, если окно не задано, то создается новое.
Пример:
plot(v( "/net56" ) )
awvCreatePlotWindow(
?bBox l_boxSpec
?parentWindow w_windowId
)
-
w_windowId/nil
Создает окно Waveform и возвращает его Id.
l_boxSpec-координаты нижнего левого и верхнего правого углов нового окна, полагая что 0:0 это нижний левый угол экрана.
awvAppendWaveform(
w_windowId
l_waveform
[?expr l_exprList]
[?index l_waveIndexList]
[?color l_colorList]
[?lineType l_styleList]
)
=> t/nil
Добавляет графики из l_waveform листа в уже существующее окно к другим графикам.
l_exprList-выражения, которые будут отображены в названии графика
Пример:
awvAppendWaveform( window( 2 ) list( w3 w4 ) ?color
list( "y2" "y4" )
)
awvPlotWaveform(
w_windowId
l_waveform
[?expr l_exprList]
[?index l_waveIndexList]
[?color l_colorList]
[?lineType l_styleList]
[?datasymbol l_symbolList]
[?subwindow x_subwindow]
[?yNumber l_yNumberList]
[?stripNumber l_stripNumberList]
)
-
t/nil
строит графики в заданном окне (первый раз, затем исп. awvAppendWaveform)
Пример:
awvPlotWaveform( window( 2 ) list( w1 w1 ) ?expr
list( "wave1" "wave2" ) )