Моделирование высокоскоростной основной платы (Рациональная функция к модулю 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.6 and the RF Toolbox 3.6.

// Generated on: 10-Jan-2019 17:07:19

`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)
Для просмотра документации необходимо авторизоваться на сайте