В этом примере показано, как использовать функции RF Toolbox™ для генерации модуля Verilog-A, который моделирует поведение высокоуровневой объединительной платы. Во-первых, он считывает однокомпонентные 4-портовые S-параметры для дифференциальной высокоскоростной объединительной платы и преобразует их в 2-портовые дифференциальные S-параметры. Затем он вычисляет передаточную функцию дифференциальной схемы и подбирает рациональную функцию передаточной функции. Далее в примере экспортируется модуль Verilog-A, который описывает модель. Наконец, он строит график модульной переходной характеристики сгенерированного модуля Verilog-A в стороннем инструменте симуляции схем.
Чтение файла данных Touchstone ®, default.s4p
, в sparameters
объект. Параметрами в этом файле данных являются S-параметры 50 Ом пассивной схемы с одним концом 4 порта, измеренные на 1496 частотах в диапазоне от 50 МГц до 15 ГГц. Затем извлеките однокомпонентные 4-портовые S-параметры из данных, сохраненных в Parameters
свойство sparameters
объект, используйте s2sdd
функция для преобразования их в дифференциальные 2-портовые S-параметры и использования s2tf
функция для вычисления передаточной функции дифференциальной схемы. Затем используйте rationalfit
функция для генерации rfmodel.rational
объект, который описывает высокоуровневое поведение этой высокоскоростной объединительной платы. The rfmodel.rational
объект является рациональным объектом функции, который выражает передаточную функцию схемы в закрытой форме с помощью полюсов, остатков и других параметров, как описано в rationalfit
страница с описанием.
filename = 'default.s4p';
backplane = sparameters(filename);
data = backplane.Parameters;
freq = backplane.Frequencies;
z0 = backplane.Impedance;
Преобразуйте в 2-портовые дифференциальные S-параметры.
diffdata = s2sdd(data); diffz0 = 2*z0; difftf = s2tf(diffdata,diffz0,diffz0,diffz0);
Аппроксимируйте дифференциальную передаточную функцию в рациональную функцию.
fittol = -30; % Rational fitting tolerance in dB delayfactor = 0.9; % Delay factor rationalfunc = rationalfit(freq,difftf,fittol,'DelayFactor',delayfactor)
rationalfunc = rfmodel.rational with properties: A: [20x1 double] C: [20x1 double] D: 0 Delay: 6.0172e-09 Name: 'Rational Function'
Используйте writeva
метод rfmodel.rational
объект для экспорта объекта рациональной функции в виде модуля Verilog-A, называемый samplepassive1
, что описывает рациональную модель. Входная и выходная сети samplepassive1
вызываются line_in
и line_out
. Предопределенная дисциплина Verilog-A, electrical
, описывает атрибуты этих сетей. Формат числовых значений, таких как числитель преобразования Лапласа и коэффициенты знаменателя %12.10e
. Электрическая дисциплина определена в файле disciplines.vams
, который входит в начало samplepassive1.va
файл.
workingdir = tempname; mkdir(workingdir) writeva(rationalfunc, fullfile(workingdir,'samplepassive1'), ... 'line_in', 'line_out', 'electrical', '%12.10e', 'disciplines.vams');
type(fullfile(workingdir,'samplepassive1.va'));
// Module: samplepassive1 // Generated by MATLAB(R) 9.10 and the RF Toolbox 4.1. // Generated on: 22-Apr-2021 20:41:30 `include "disciplines.vams" module samplepassive1(line_in, line_out); electrical line_in, line_out; electrical node1; real nn1[0:1], nn2[0:1], nn3[0:1], nn4[0:1], nn5[0:1], nn6[0:1], nn7[0:1], nn8[0:1], nn9[0:1], nn10[0:0], nn11[0:0]; real dd1[0:2], dd2[0:2], dd3[0:2], dd4[0:2], dd5[0:2], dd6[0:2], dd7[0:2], dd8[0:2], dd9[0:2], dd10[0:1], dd11[0:1]; analog begin @(initial_step) begin nn1[0] = -3.8392614832e+18; nn1[1] = 5.2046393014e+07; dd1[0] = 2.8312609831e+21; dd1[1] = 3.5124823781e+09; dd1[2] = 1.0000000000e+00; nn2[0] = -2.0838483814e+19; nn2[1] = 5.3487174017e+08; dd2[0] = 1.8020362314e+21; dd2[1] = 7.8266367089e+09; dd2[2] = 1.0000000000e+00; nn3[0] = 1.7726270794e+19; nn3[1] = 2.5185716022e+09; dd3[0] = 1.2157471895e+21; dd3[1] = 8.1132784895e+09; dd3[2] = 1.0000000000e+00; nn4[0] = 2.3112282793e+20; nn4[1] = 9.2690544437e+08; dd4[0] = 7.9582429152e+20; dd4[1] = 1.1379108659e+10; dd4[2] = 1.0000000000e+00; nn5[0] = 8.9321469721e+19; nn5[1] = -1.4945928109e+10; dd5[0] = 4.1473706594e+20; dd5[1] = 1.1346735824e+10; dd5[2] = 1.0000000000e+00; nn6[0] = -3.5180951909e+20; nn6[1] = -1.9895507212e+10; dd6[0] = 1.9080843811e+20; dd6[1] = 1.0434555792e+10; dd6[2] = 1.0000000000e+00; nn7[0] = -1.0593240107e+20; nn7[1] = 1.9248932577e+10; dd7[0] = 6.1152960549e+19; dd7[1] = 1.0001203231e+10; dd7[2] = 1.0000000000e+00; nn8[0] = 5.4441539403e+16; nn8[1] = -9.7818749687e+06; dd8[0] = 4.3821946493e+19; dd8[1] = 6.6700188623e+08; dd8[2] = 1.0000000000e+00; nn9[0] = 2.2556903052e+16; nn9[1] = 7.9711163023e+06; dd9[0] = 2.1228807651e+19; dd9[1] = 4.9531801417e+08; dd9[2] = 1.0000000000e+00; nn10[0] = 1.1592988960e+10; dd10[0] = 3.0829914556e+09; dd10[1] = 1.0000000000e+00; nn11[0] = 1.2852839051e+08; dd11[0] = 5.9779845807e+08; dd11[1] = 1.0000000000e+00; end V(node1) <+ laplace_nd(V(line_in), nn1, dd1); V(node1) <+ laplace_nd(V(line_in), nn2, dd2); V(node1) <+ laplace_nd(V(line_in), nn3, dd3); V(node1) <+ laplace_nd(V(line_in), nn4, dd4); V(node1) <+ laplace_nd(V(line_in), nn5, dd5); V(node1) <+ laplace_nd(V(line_in), nn6, dd6); V(node1) <+ laplace_nd(V(line_in), nn7, dd7); V(node1) <+ laplace_nd(V(line_in), nn8, dd8); V(node1) <+ laplace_nd(V(line_in), nn9, dd9); V(node1) <+ laplace_nd(V(line_in), nn10, dd10); V(node1) <+ laplace_nd(V(line_in), nn11, dd11); V(line_out) <+ absdelay(V(node1), 6.0171901584e-09); end endmodule
Многие сторонние инструменты симуляции схем поддерживают стандарт Verilog-A. Эти инструменты моделируют автономные компоненты, заданные модулями Verilog-A и схемами, которые содержат эти компоненты. Следующий рисунок показывает переходную характеристику модуля samplepassive1. Рисунок был сгенерирован сторонним инструментом симуляции схем.
Фигура 1: Единичная переходная характеристика.
delete(fullfile(workingdir,'samplepassive1.va'));
rmdir(workingdir)