偏差(variation)的分类

本文探讨了集成电路设计中关键的偏差类型,包括工艺偏差(全局与局部)、温度偏差和电压偏差。工艺偏差影响芯片生产过程,温度偏差关注晶体管速度变化,而电压偏差源于电源稳定性。理解这些偏差对于确保电路在各种条件下正常工作至关重要。

开篇。

要了解ocv aocv socv pocv等概念,需要先了解与之相关的variation的概念,其实各种ocv其实就是对variation的数学抽象,区别仅是哪种更为精确。

偏差的分类

如图,偏差可分为工艺偏差,温度偏差,电压偏差。设计中引入各种偏差的目的是使得我们的电路能够在我们设计的PVT的整个范围内,都能够正常工作。

工艺偏差(process variation)

工艺偏差,指的是芯片在生产过程中引入的偏差,可以分为全局工艺偏差,局部工艺偏差。

全局工艺偏差 (global process variation)

全局工艺偏差,包含了相同wafer中die与die之间以及wafer与wafer之间,lot与lot之间的偏差。

单元库需要包括多个不同PVT条件下的时序库。

通过不同PVT下单元库进行电路进行特征化进行的。在芯片进行签收(signoff)时需要在多个不同的PVT下进行,就是为了弥补不同的全局工艺偏差。

由于历史的原因,比较老的工艺下,对单元库进行特征值提取时,也会考虑的局部工艺偏差(从名称上,ssg ffg则是指的global工艺偏差 ,ss ff则表示也包含了local工艺偏差)。而这会引入不必要的悲观,在先进工艺下,已经不再采用这种方式,在后续的章节中我们再进行介绍。

局部工艺偏差 (local process variation)

局部工艺偏差, 则指的是同一个die内部,不同位置的process上的差别。

对于局部工艺偏差,需要包含在我们的OCV设置中,而OCV设置的方法有一下几种:On-chip Variation Advanced OCV(AOCV) POCV (LVF)

温度偏差 (temprature variation)

晶体管的速度会受到温度的影响而变化。对于金属互联线,温度影响较小。

温度偏差包括了环境温度,以及由于芯片运行所导致的温度升高。

环境温度容易测量,但是真正对晶体管的影响表现在结温(junction temprature)。

结温是环境温度以及芯片本身运行所导致的温度升高之和。

真正对晶体管产生影响的实际上是结温。

而且结温通常会远高于环境温度。

例如,对于工业级芯片,环境温度多会处于-40C以及85C之间。但是在进行signoff时,往往需要进行125C的signoff。

对于工艺库中的标称温度,同样也指的是结温。如果想知道结温与环境温度的关系,则需要根据不同的封装的参数进行热仿真来获得。

对于军用级芯片,往往-40C~125C的结温范围仍然不够,这样则需要提供额外PVT条件下的时序库或者增加相应的余量以便能够覆盖超出的温度范围。而这部分的余量,可以增加额外的derating,也可以通过设置更大的uncertainty值来实现。

温度与延迟的关系

备注:通常来说,温度的升高会导致cell的延迟增大,但是由于先进工艺中存在温度反转的现象,仅仅在高温下进行setup的时序检查已然不够。因此,也需要同时检查最高温度以及最低温度下的setup时序。

电压偏差 (voltage variation)

电压偏差的来源有多种,例如电压源精度,电源网络的电压降,环境噪声,mos管活动本身都会导致电源网络的电压的变化。

现实中是不存在一个理想的电压源的。

因此,芯片需要在一个电压范围内都能够正常工作。

我们拿到的时序库,通常会覆盖标称电压(nominal voltage)的±10%的范围,就是这个原因。

延迟随电压的升高而降低

待续

目前相当于素材积累阶段。主要是大纲还没想好。

import numpy as np import pandas as pd from scipy.stats import variation def enhanced_critic_weights(data, target_indicators=None, cost_indicators=None, epsilon=1e-10): """ 增强版CRITIC权重计算,支持多种指标类型: - 靶心型指标 (target_indicators): {列名: 目标值} - 成本型指标 (cost_indicators): 越小越好的指标列表 - 默认处理为效益型指标 (越大越好) 参数: data: 输入数据 (DataFrame或数组) target_indicators: 靶心型指标字典 {列名: 目标值} cost_indicators: 成本型指标列表 [列名1, 列名2, ...] epsilon: 防止除零的小量 返回: weights: 各指标权重 info: 包含中间结果的字典 """ # 转换数据为NumPy数组 if isinstance(data, pd.DataFrame): df = data.copy() X = df.values.astype(np.float64) columns = df.columns.tolist() else: X = np.asarray(data, dtype=np.float64) columns = [f"Var_{i}" for i in range(X.shape[1])] # 转换成本型指标列表为索引 cost_col_indices = [] if cost_indicators: for col in cost_indicators: if col in columns: cost_col_indices.append(columns.index(col)) # 处理靶心型指标 target_col_indices = [] if target_indicators: for col, target_val in target_indicators.items(): if col in columns: col_idx = columns.index(col) # 计算绝对偏差 |x - target| X[:, col_idx] = np.abs(X[:, col_idx] - target_val) # 将靶心型指标视为成本型(偏差越小越好) if col_idx not in cost_col_indices: cost_col_indices.append(col_idx) target_col_indices.append(col_idx) # 处理缺失值和无穷值 X = np.where(np.isnan(X), np.nanmean(X, axis=0), X) X = np.where(np.isinf(X), np.nan, X) X = np.where(np.isnan(X), np.nanmean(X, axis=0), X) # 计算基本统计量 min_vals = np.nanmin(X, axis=0) max_vals = np.nanmax(X, axis=0) ranges = max_vals - min_vals # 避免除零错误 ranges[ranges < epsilon] = epsilon # 标准化处理 - 根据指标类型使用不同方法 Z = np.zeros_like(X) for j in range(X.shape[1]): if j in cost_col_indices: # 成本型指标(包括靶心型) # 越小越好 → 负向标准化 Z[:, j] = (max_vals[j] - X[:, j]) / ranges[j] else: # 效益型指标(越大越好) # 正向标准化 Z[:, j] = (X[:, j] - min_vals[j]) / ranges[j] # 计算每个指标标准化值的和(辅助分析) standardized_sums = np.sum(Z, axis=0) # 计算标准差 std_dev = np.std(Z, axis=0, ddof=1) # 计算相关系数矩阵 corr_matrix = np.corrcoef(Z, rowvar=False) # 计算冲突性(与其他指标的相关性之和) conflict = np.sum(1 - np.abs(corr_matrix), axis=1) # 计算信息量(标准差 × 冲突性) information = std_dev * conflict # 计算权重 weights = information / np.sum(information) # 整理结果信息 info = { "columns": columns, "std_dev": std_dev, "conflict": conflict, "information": information, "target_col_indices": target_col_indices, "cost_col_indices": cost_col_indices, "standardized_sums": standardized_sums, "standardized_data": Z # 新增:保存标准化后的数据 } return weights, info # 示例使用 if __name__ == "__main__": # 读取数据 data = pd.read_csv('yingyong.csv') # 替换为实际文件路径 # 指定指标类型: # 1. 凝结水过冷度是靶心型指标,理想值为2 # 2. 其他成本型指标(越小越好) target_spec = {"凝结水过冷度": 0, "炉膛负压": -100 } cost_indicators = ["低压缸排汽压力", "发电机定子绕组温度", "SO2", "NOx", "烟尘", "供电煤耗率", "厂用电率", "Co2"] # 替换为实际列名 # 计算权重 weights, info = enhanced_critic_weights( data, target_indicators=target_spec, cost_indicators=cost_indicators ) # 打印结果 print("指标权重分配:") for col, weight in zip(info["columns"], weights): print(f"{col}: {weight:.4f}") # 打印标准化和 print("\n每个指标标准化值的和:") for col, sum_val in zip(info["columns"], info["standardized_sums"]): print(f"{col}: {sum_val:.4f}") # 打印指标类型信息 print("\n指标类型分类:") for i, col in enumerate(info["columns"]): if i in info["target_col_indices"]: type_str = "靶心型" elif i in info["cost_col_indices"]: type_str = "成本型" else: type_str = "效益型" print(f"{col}: {type_str}") 解释这个代码的靶心型指标是用什么公式处理的
最新发布
11-19
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值