Code covered by the BSD License  

Highlights from
INTERFACE BETWEEN MATLAB AND CADENCE FOR MACRO-MODEL EXTRACTION

image thumbnail
from INTERFACE BETWEEN MATLAB AND CADENCE FOR MACRO-MODEL EXTRACTION by Philippe BENABES
launch cadence analog simulations from Matlab and extract a macromodel of linear analog functions

[]=create_analog_model(subcell,sub_string,sc_idx,model_in_out)
%---------------------------------------------------
% Ce programme est la propriete exclusive de SUPELEC
% Tout  usage  non  authorise  ou reproduction de ce
% programme est strictement defendu.
% Copyright  (c) 2010  SUPELEC  Departement SSE
% Tous droits reserves
%---------------------------------------------------
%
% fichier : create_analog_model.m
% auteur  : P.BENABES & C.TUGUI
% Copyright (c) 2010 SUPELEC
% Revision: 2.0  Date: 29/10/2010
%
%---------------------------------------------------
%
% DESCRIPTION DU MODULE :
%
%
% MODULES UTILISES :
%
%---------------------------------------------------

function []=create_analog_model(subcell,sub_string,sc_idx,model_in_out)
%Create Simulink model starting from extracted characteristics

%Init parameters for diff in/out

%Verify model integrity
corrupt_par=0;


p = get_param([subcell sub_string subcell num2str(sc_idx)], 'DialogParameters');

if isfield(p,'Num_TF_dir1')
    set_param([subcell sub_string subcell num2str(sc_idx)],'Num_TF_dir1',['[' num2str(model_in_out.Num_TF_dir1) ']']);
else
    corrupt_par=1;
end

if isfield(p,'Den_TF_dir1')
    set_param([subcell sub_string subcell num2str(sc_idx)],'Den_TF_dir1',['[' num2str(model_in_out.Den_TF_dir1) ']']);
else
    corrupt_par=1;
end

if isfield(p,'Num_TF_inv1') && isfield(model_in_out,'Num_TF_inv1')
    set_param([subcell sub_string subcell num2str(sc_idx)],'Num_TF_inv1',['[' num2str(model_in_out.Num_TF_inv1) ']']);
else
    corrupt_par=1;
end

if isfield(p,'Den_TF_inv1') && isfield(model_in_out,'Den_TF_inv1')
    set_param([subcell sub_string subcell num2str(sc_idx)],'Den_TF_inv1',['[' num2str(model_in_out.Den_TF_inv1) ']']);
else
    corrupt_par=1;
end        %TFD1

if isfield(p,'Num_Zin1')
    set_param([subcell sub_string subcell num2str(sc_idx)],'Num_Zin1',['[' num2str(model_in_out.Num_Zin1) ']']);
else
    corrupt_par=1;
end

if isfield(p,'Den_Zin1')
    set_param([subcell sub_string subcell num2str(sc_idx)],'Den_Zin1',['[' num2str(model_in_out.Den_Zin1) ']']);
else
    corrupt_par=1;
end

if isfield(p,'Num_Zout1')
    set_param([subcell sub_string subcell num2str(sc_idx)],'Num_Zout1',['[' num2str(model_in_out.Num_Zout1) ']']);
else
    corrupt_par=1;
end

if isfield(p,'Den_Zout1')
    set_param([subcell sub_string subcell num2str(sc_idx)],'Den_Zout1',['[' num2str(model_in_out.Den_Zout1) ']']);
else
    corrupt_par=1;
end

if isfield(p,'OffIn11')
    set_param([subcell sub_string subcell num2str(sc_idx)],'OffIn11',num2str(model_in_out.OffIn11));
else
    corrupt_par=1;
end

if isfield(p,'OffIn12')
    set_param([subcell sub_string subcell num2str(sc_idx)],'OffIn12',num2str(model_in_out.OffIn12));
else
    corrupt_par=1;
end

if isfield(p,'OffOut11')
    set_param([subcell sub_string subcell num2str(sc_idx)],'OffOut11',num2str(model_in_out.OffOut11));
else
    corrupt_par=1;
end

if isfield(p,'OffOut12')
    set_param([subcell sub_string subcell num2str(sc_idx)],'OffOut12',num2str(model_in_out.OffOut12));
else
    corrupt_par=1;
end

if model_in_out.mode_diff_enabled
    %TFD3
    if isfield(p,'Num_TF_dir3')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Num_TF_dir3',['[' num2str(model_in_out.Num_TF_dir3) ']']);
    else
        corrupt_par=1;
    end
    
    if isfield(p,'Den_TF_dir3')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Den_TF_dir3',['[' num2str(model_in_out.Den_TF_dir3) ']']);
    else
        corrupt_par=1;
    end
    
    %TFR3
    if isfield(p,'Num_TF_inv3') && isfield(model_in_out,'Num_TF_inv3')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Num_TF_inv3',['[' num2str(model_in_out.Num_TF_inv3) ']']);
    else
        corrupt_par=1;
    end
    
    if isfield(p,'Den_TF_inv3') && isfield(model_in_out,'Den_TF_inv3')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Den_TF_inv3',['[' num2str(model_in_out.Den_TF_inv3) ']']);
    else
        corrupt_par=1;
    end
    
    %Zin2/Yin2
    if isfield(p,'Num_Zin2')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Num_Zin2',['[' num2str(model_in_out.Num_Zin2) ']']);
    else
        corrupt_par=1;
    end
    
    if isfield(p,'Den_Zin2')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Den_Zin2',['[' num2str(model_in_out.Den_Zin2) ']']);
    else
        corrupt_par=1;
    end
    
    %Zin_diff1/Yin_diff1
    if isfield(p,'Num_Zin_diff1')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Num_Zin_diff1',['[' num2str(model_in_out.Num_Zin_diff1) ']']);
    else
        corrupt_par=1;
    end
    
    if isfield(p,'Den_Zin_diff1')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Den_Zin_diff1',['[' num2str(model_in_out.Den_Zin_diff1) ']']);
    else
        corrupt_par=1;
    end
    
    %Zin_diff2/Yin_diff2
    if isfield(p,'Num_Zin_diff2')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Num_Zin_diff2',['[' num2str(model_in_out.Num_Zin_diff2) ']']);
    else
        corrupt_par=1;
    end
    
    if isfield(p,'Den_Zin_diff2')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Den_Zin_diff2',['[' num2str(model_in_out.Den_Zin_diff2) ']']);
    else
        corrupt_par=1;
    end
    
    if isfield(p,'OffIn21')
        set_param([subcell sub_string subcell num2str(sc_idx)],'OffIn21',num2str(model_in_out.OffIn21));
    else
        corrupt_par=1;
    end
    
    if isfield(p,'OffIn22')
        set_param([subcell sub_string subcell num2str(sc_idx)],'OffIn22',num2str(model_in_out.OffIn22));
    else
        corrupt_par=1;
    end
    
end

if model_in_out.mode_diff_enabled_out
    
    %TFD2
    if isfield(p,'Num_TF_dir2')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Num_TF_dir2',['[' num2str(model_in_out.Num_TF_dir2) ']']);
    else
        corrupt_par=1;
    end
    
    if isfield(p,'Den_TF_dir2')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Den_TF_dir2',['[' num2str(model_in_out.Den_TF_dir2) ']']);
    else
        corrupt_par=1;
    end
    
    %TFR2
    if isfield(p,'Num_TF_inv2') && isfield(model_in_out,'Num_TF_inv2')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Num_TF_inv2',['[' num2str(model_in_out.Num_TF_inv2) ']']);
    else
        corrupt_par=1;
    end
    
    if isfield(p,'Den_TF_inv2') && isfield(model_in_out,'Den_TF_inv2')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Den_TF_inv2',['[' num2str(model_in_out.Den_TF_inv2) ']']);
    else
        corrupt_par=1;
    end
    
    %Zout2/Yout2
    if isfield(p,'Num_Zout2')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Num_Zout2',['[' num2str(model_in_out.Num_Zout2) ']']);
    else
        corrupt_par=1;
    end
    
    if isfield(p,'Den_Zout2')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Den_Zout2',['[' num2str(model_in_out.Den_Zout2) ']']);
    else
        corrupt_par=1;
    end
    
    %Zout_diff1/Yout_diff1
    if isfield(p,'Num_Zout_diff1')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Num_Zout_diff1',['[' num2str(model_in_out.Num_Zout_diff1) ']']);
    else
        corrupt_par=1;
    end
    
    if isfield(p,'Den_Zout_diff1')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Den_Zout_diff1',['[' num2str(model_in_out.Den_Zout_diff1) ']']);
    else
        corrupt_par=1;
    end
    
    %Zout_diff2/Yout_diff2
    if isfield(p,'Num_Zout_diff2')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Num_Zout_diff2',['[' num2str(model_in_out.Num_Zout_diff2) ']']);
    else
        corrupt_par=1;
    end
    
    if isfield(p,'Den_Zout_diff2')
        set_param([subcell sub_string subcell num2str(sc_idx)],'Den_Zout_diff2',['[' num2str(model_in_out.Den_Zout_diff2) ']']);
    else
        corrupt_par=1;
    end
    
    if isfield(p,'OffOut21')
        set_param([subcell sub_string subcell num2str(sc_idx)],'OffOut21',num2str(model_in_out.OffOut21));
    else
        corrupt_par=1;
    end
    
    if isfield(p,'OffOut22')
        set_param([subcell sub_string subcell num2str(sc_idx)],'OffOut22',num2str(model_in_out.OffOut22));
    else
        corrupt_par=1;
    end
    
    if model_in_out.mode_diff_enabled
        %TFD4
        if isfield(p,'Num_TF_dir4')
            set_param([subcell sub_string subcell num2str(sc_idx)],'Num_TF_dir4',['[' num2str(model_in_out.Num_TF_dir4) ']']);
        else
            corrupt_par=1;
        end
        
        if isfield(p,'Den_TF_dir4')
            set_param([subcell sub_string subcell num2str(sc_idx)],'Den_TF_dir4',['[' num2str(model_in_out.Den_TF_dir4) ']']);
        else
            corrupt_par=1;
        end
        
        %TFR4
        if isfield(p,'Num_TF_inv4') && isfield(model_in_out,'Num_TF_inv4')
            set_param([subcell sub_string subcell num2str(sc_idx)],'Num_TF_inv4',['[' num2str(model_in_out.Num_TF_inv4) ']']);
        else
            corrupt_par=1;
        end
        
        if isfield(p,'Den_TF_inv4') && isfield(model_in_out,'Den_TF_inv4')
            set_param([subcell sub_string subcell num2str(sc_idx)],'Den_TF_inv4',['[' num2str(model_in_out.Den_TF_inv4) ']']);
        else
            corrupt_par=1;
        end
    end
    
end


%If corrupted parameters
if corrupt_par
    errordlg('Not all parameters for Simulink Model defined! The model was extracted partially...','Warning');
end

Contact us at files@mathworks.com