Моделирование высокоскоростной основной платы (Рациональная функция к модулю Verilog-A)

В этом примере показано, как использовать функции 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'

Экспортируйте объект рациональной функции как модуль Verilog-A

Используйте 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. Эти инструменты симулируют автономные компоненты, заданные модулями Verilog-A и схемами, которые содержат эти компоненты. Следующий рисунок показывает модульный переходной процесс samplepassive1 модуля. Фигура была сгенерирована со сторонним инструментом симуляции схемы.

Рисунок 1: модульный переходной процесс.

delete(fullfile(workingdir,'samplepassive1.va'));
rmdir(workingdir)

Похожие темы