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

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

Экспорт объекта рациональной функции в качестве модуля 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)

Похожие темы