В этом примере показано, как использовать функции RF Toolbox™, чтобы сгенерировать модуль Verilog-A, который моделирует высокоуровневое поведение высокоскоростной основной платы. Во-первых, это читает несимметричные S-параметры с 4 портами для дифференциальной высокоскоростной основной платы и преобразует их в дифференциальные S-параметры с 2 портами. Затем это вычисляет передаточную функцию дифференциальной схемы и соответствует рациональной функции к передаточной функции. Затем пример экспортирует модуль Verilog-A, который описывает модель. Наконец, это строит модульный переходной процесс сгенерированного модуля Verilog-A в стороннем инструменте симуляции схемы.
Считайте файл данных Touchstone®, default.s4p
, в sparameters
объект. Параметрами в этом файле данных являются S-параметры на 50 Ом несимметричной пассивной схемы с 4 портами, измеренной на 1 496 частотах в пределах от от 50 МГц до 15 ГГц. Затем извлеките несимметричные S-параметры с 4 портами из данных, хранимых в Parameters
свойство sparameters
объект, используйте s2sdd
функция, чтобы преобразовать их в дифференциальные S-параметры с 2 портами и использовать s2tf
функция, чтобы вычислить передаточную функцию дифференциальной схемы. Затем используйте rationalfit
функция, чтобы сгенерировать rfmodel.rational
объект, который описывает высокоуровневое поведение этой высокоскоростной основной платы. rfmodel.rational
объект является объектом рациональной функции, который описывает передаточную функцию схемы в закрытой форме с помощью полюсов, остатков и других параметров, как описано в rationalfit
страница с описанием.
filename = 'default.s4p';
backplane = sparameters(filename);
data = backplane.Parameters;
freq = backplane.Frequencies;
z0 = backplane.Impedance;
Преобразуйте в дифференциальные S-параметры с 2 портами.
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)