Этот пример показывает, как использовать функции 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.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 и схемами, которые содержат эти компоненты. Следующие данные показывают модульный переходной процесс samplepassive1 модуля. Фигура была сгенерирована со сторонним инструментом симуляции схемы.
Рисунок 1: модульный переходной процесс.
delete(fullfile(workingdir,'samplepassive1.va'));
rmdir(workingdir)