offset voltage of Comparator

静态失调电压(static offset voltage)

主要影响因素:μCox(载流子传输速率和栅氧层电容的的乘积)、阈值电压。

静态失配方差与器件尺寸成反比,可以增大关键对mos管的尺寸

动态失调电压(dynamic offset voltage)

主要影响因素:寄生电容。

主要由于寄生电容的相对失配(▲C/C)而不是绝对失配(▲C),所以可以考虑增大C降低失调电压,故而可以增大输出节点的电容。

仿真获取Voffset的方式

  • 开环用monte carlo仿真获得

Eg:固定同相端INP电压值,改变反向端INN的输入电压,选择比较器为失配的器件,每个INN的电压值进行100次MC仿真,统计输出电压超过\frac{VDD}{2}的数量,画出scurve,sigma即为Voffset。

  • 闭环利用单位增益缓冲器获得:V_{os} = V_{INN} - V_{out}

参考:

差分运放输入失调分析 - Analog/RF IC 设计讨论 - EETOP 创芯网论坛 (原名:电子顶级开发网) -

Analyses of Static and Dynamic Random Offset Voltages in Dynamic Comparators

Analyze the code of Scurve

% 定义文件名
filename = 'E:......';

% 读取数据,添加错误处理
try
    % 将第一行数据作为变量名
    dataTable = readtable(filename, 'VariableNamesLine', 1);
catch ME
    fprintf('读取文件时出错: %s\n', ME.message);
    return;
end

% 获取除第一列外所有列的变量名作为曲线名称
curve_names = dataTable.Properties.VariableNames(2:4);

% 调试信息:打印 curve_names 的内容
disp('曲线名称内容:');
disp(curve_names);

% 去除第一行(如果第一行是变量名,这里不需要去除)
% dataTable = dataTable(2:end, :);

% 打印数据表格内容
disp('数据表格内容:');
disp(dataTable);

% 获取阈值电压(第一列)
threshold_voltage = dataTable{:, 1}; 

% 初始化sigma和mu的数组
num_cols = size(dataTable, 2);
sigma_values = zeros(1, num_cols - 1);
mu_values = zeros(1, num_cols - 1);

% 检查 curve_names 的长度是否和要处理的列数匹配
if length(curve_names) ~= num_cols - 1
    error('曲线名称数量与要处理的列数不匹配,请检查数据。');
end

% 创建图形对象
figure;
hold on;

% 定义S曲线拟合目标函数
s_curve = @(p, x) 0.5 * (1 + erf((x - p(1)) / (p(2) * sqrt(2))));

% 创建一个拟合类型对象
ft = fittype('0.5 * (1 + erf((x - b) / (a * sqrt(2))))', 'independent', 'x', 'dependent', 'y');

% 遍历每一列数据进行拟合
for i = 2:num_cols
    % 获取当前列的计数数据并转化为概率
    counts = dataTable{:, i};
    
    % 检查数据是否有NaN或Inf值
    valid_idx = ~isnan(threshold_voltage) & ~isnan(counts) & ~isinf(threshold_voltage) & ~isinf(counts);
    threshold_voltage_valid = threshold_voltage(valid_idx);
    counts_valid = counts(valid_idx);
    
    % 确保数据行数相同
    if length(threshold_voltage_valid) ~= length(counts_valid)
        error('第 %d 列数据处理后行数不一致,请检查数据。', i);
    end

    % 初始化参数:a为标准差的初始猜测值,b为均值的初始猜测值
    initial_mu = mean(threshold_voltage_valid); % 使用有效数据的平均值作为初始均值
    initial_sigma = std(threshold_voltage_valid) / 2; % 使用有效数据标准差除以2作为初始标准差
    opts = fitoptions(ft);
    opts.StartPoint = [initial_sigma, initial_mu]; % 设置初始猜测值

    % 拟合数据
    [fitted_curve, gof] = fit(threshold_voltage_valid, counts_valid, ft, opts);

    % 检查拟合结果是否合理
    if ~isempty(fitted_curve) && ~isnan(fitted_curve.a) && ~isnan(fitted_curve.b)
        % 获取拟合参数
        sigma_ke = round(fitted_curve.a, 4); % sigma的值,单位为keV,保留四位小数
        mu_ke = round(fitted_curve.b, 4); % mu的值,单位为keV,保留四位小数
    else
        fprintf('第 %d 列拟合失败,使用初始参数代替。\n', i);
        sigma_ke = initial_sigma;
        mu_ke = initial_mu;
    end

    % 存储拟合参数
    sigma_values(i - 1) = sigma_ke;
    mu_values(i - 1) = mu_ke;

    % 计算拟合曲线值
    f_values = s_curve([mu_ke, sigma_ke], threshold_voltage_valid);

    % 绘制原始散点图,圆圈变小
    %scatter(threshold_voltage_valid, counts_valid, 10, 'o', 'LineWidth', 1.5, 'DisplayName', [curve_names{i-1}, ' - Data']);

    % 绘制拟合曲线
    plot(threshold_voltage_valid, f_values, 'LineWidth', 2, 'DisplayName', [curve_names{i-1}, ' - Fit']);
end

% 设置坐标轴标签和标题
xlabel('Threshold Voltage (mV)', 'FontSize', 16);
ylabel('Probability', 'FontSize', 16);
title('S-Curve Fitting for All mos', 'FontSize', 20);

% 显示图例
legend('FontSize', 12, 'Location', 'best');
grid on;
hold off;

% 设置字体大小
ax = gca;
ax.FontSize = 16;

% 设定合适的尺寸和分辨率
set(gcf, 'PaperUnits', 'inches');
set(gcf, 'PaperPosition', [0 0 8 6]); % 宽度设置为8英寸,高度为6英寸
set(gcf, 'PaperSize', [8 6]); % 限制导出的PDF或EPS的页面大小

% 导出为PDF
print(gcf, 'E:.......', '-dpdf');

% 创建一个新的图形对象,用于绘制sigma和mu值
figure;
subplot(2, 1, 1);
plot(2:num_cols, sigma_values, 'o-', 'LineWidth', 1.5);
xlabel('Data pix Index', 'FontSize', 16);
ylabel('Sigma (mV)', 'FontSize', 16);
title('Sigma Values for Each mos', 'FontSize', 20);
grid on;
ax = gca;
ax.FontSize = 16;

subplot(2, 1, 2);
plot(2:num_cols, mu_values, 'o-', 'LineWidth', 1.5);
xlabel('Data pix Index', 'FontSize', 16);
ylabel('Mu (mV)', 'FontSize', 16);
title('Mu Values for Each mos', 'FontSize', 20);
grid on;
ax = gca;
ax.FontSize = 16;

% 设定合适的尺寸和分辨率
set(gcf, 'PaperUnits', 'inches');
set(gcf, 'PaperPosition', [0 0 8 12]); % 宽度设置为8英寸,高度为12英寸
set(gcf, 'PaperSize', [8 12]); % 限制导出的PDF或EPS的页面大小

% 导出为PDF
print(gcf, 'E:\PLAC_chip\CEE\CEE_v4\sigma_mu_values_nmos_all', '-dpdf');
print(sigma)

% 保存拟合参数到文件
T = table(sigma_values', mu_values', 'VariableNames', {'Sigma', 'Mu'});
writetable(T, 'E:.....');
    

不足之处恳请各位大佬指正,欢迎交流探讨,感谢指导!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值