[转载]Cell延时从哪里来?非线性延时模型(NLDM)把一切都告诉你

https://zhuanlan.zhihu.com/p/95597400

我们都知道在数字IC设计流程中cell(std,IO,IP)的时序(timing)、面积(area)、功能(functionality)和功耗(power)信息都包含在lib库里面,其中时序信息最为关键。

在这里插入图片描述
以最简单的反相器为例,所谓cell的时序信息,即图中的传播延时Tr和Tf。

• Tr : Output rise delay
• Tf : Output fall delay

反相器cell的延时取决于两个因素:

输出负载(output load),即输出引脚的电容负载

输入信号的过渡时间(input transition time)

延迟值与负载电容直接相关。负载电容越大,延迟越大。

在大多数情况下,延迟随着输入transition time的增加而增加,但是延迟和输入transitiontime并不总是单调关系,尤其是在输出负载较小的情况下。

输出的transition time主要取决于输出电容,随输出负载而增加。因此,较大的输入transition time可以根据cell的类型及其输出负载不同得到改善。

在这里插入图片描述
早期的延时建模采用简单的线性延迟模型(linear delay model),其中延迟是input transition time和output load capacitance两者的线性函数,其一般形式如下所示:

D = D0 +D1 * S + D2 * C

其中D0,D1,D2是常数,S是inputtransition time,C是output load capacitance。

线性延迟模型在亚微米工艺下不太准确,因此目前大多数lib库使用更复杂的模型,例如非线性延迟模型(non-lineardelay model)。

Non-LinearDelay Model

大多数lib库都包括查找表模型(table models),例如NLDM(非线性延迟模型),为cell的各种时序弧(timing arcs)指定延迟,output transition和其他时序检查等信息。

• Risedelay
• Fall delay
• Rise transition
• Fall transition

NLDM根据input transition time和output capacitance获得cell的不同timing arcs的延迟。也就是说,NLDM模型是一个二维的查找表,其中两个输入变量是inputtransition time和output capacitance,表中的内容是该timing arcs的延迟。
在这里插入图片描述

lu_table_template(delay_template_3x3) {
variable_1 : input_net_transition;
variable_2 :total_output_net_capacitance;
index_1 ("1000, 1001,1002");
index_2 ("1000, 1001,1002");
}/* The input transition and the output capacitance can be
in either order, that is, variable_1 can be the output
capacitance. However, these designations are usually
consistent across all templates in a library. */

上面的查找表模板指定表中的第一个行索引变量是input transition time,第二个列索引变量是output capacitance。索引值(1000, 1001, 1002)只是模板,会被实际索引值覆盖。

下面是实际的NLDM

pin(OUT) {
max_transition : 1.0;
timing() {
related_pin : "INP1";
timing_sense : negative_unate;
cell_rise(delay_template_3x3) {
index_1 ("0.1, 0.3, 0.7");/* Input transition */
index_2 ("0.16, 0.35,1.43"); /* Output capacitance */
values ( /* 0.16 0.35 1.43 */ \
/* 0.1 */ "0.0513, 0.1537, 0.5280", \
/* 0.3 */ "0.1018, 0.2327, 0.6476", \
/* 0.7 */ "0.1334, 0.2973, 0.7252");
}
cell_fall(delay_template_3x3) {
index_1 ("0.1, 0.3, 0.7");/* Input transition */
index_2 ("0.16, 0.35,1.43"); /* Output capacitance */
values ( /* 0.16 0.35 1.43 */ \
/* 0.1 */ "0.0617, 0.1537, 0.5280", \
/* 0.3 */ "0.0918, 0.2027, 0.5676", \
/* 0.7 */ "0.1034, 0.2273, 0.6452");
}

在上面的例子中,描述了输出引脚OUT分别在上升(cell_rise)和下降(cell_fall)的从引脚INP1到引脚OUT的延迟。还指定了输出引脚OUT的max_transition。查找表模板已经在delay_template_3x3中描述。

表中的timing_sense : negative_unate表示输入的翻转和输出翻转是相反的关系,即

input rise -> output fall
input fall -> output rise

根据延迟表,对于反相器的cell_rise延迟,input transition(fall) time为0.3ns,output load为0.16pf 时,对应延迟为0.1018ns。
在这里插入图片描述
NLDM模型不仅用于延迟,而且还用于指定output transition time,该值也是以input transition time和output load为索引变量的查找表。

pin(OUT) {
max_transition : 1.0;
timing() {
related_pin : "INP";
timing_sense : negative_unate;
rise_transition(delay_template_3x3) {
index_1 ("0.1, 0.3, 0.7");/* Input transition */
index_2 ("0.16, 0.35,1.43"); /* Output capacitance */
values ( /* 0.16 0.35 1.43 */ \
/* 0.1 */ "0.0417, 0.1337, 0.4680", \
/* 0.3 */ "0.0718, 0.1827, 0.5676", \
/* 0.7 */ "0.1034, 0.2173, 0.6452");
}
fall_transition(delay_template_3x3) {
index_1 ("0.1, 0.3, 0.7");/* Input transition */
index_2 ("0.16, 0.35,1.43"); /* Output capacitance */
values ( /* 0.16 0.35 1.43 */ \
/* 0.1 */ "0.0817, 0.1937, 0.7280", \
/* 0.3 */ "0.1018, 0.2327, 0.7676", \
/* 0.7 */ "0.1334, 0.2973, 0.8452");
}. . .
}
. . .
}
### 数字电路基础知识概述 数字电路是现代电子技术的核心领域之一,其基本原理涉及逻辑运算、信号传输以及延迟特性等内容。以下是关于数字电路的一些核心概念: #### 路径延时分析 路径延时是由门单元延时线延时共同决定的[^1]。 - **门单元延时**:通过非线性延时模型(Non-Linear Delay Model, NLDL)来计算。该模型基于半导体厂商提供的工艺库中的二维表格数据,这些表格记录了不同输出负载输入转换时间条件下的门单元延时及其对应的输出转换时间。 - **线延时**:通常利用线负载模型(Wire Load Model, WLM)进行估算。 为了更精确地评估整个系统的性能,在设计环境中还需要考虑特定约束条件: - 对于输入路径,需指定输入转换时间;这可以通过`set_driving_cell`命令实现,表明某个输入端口被一个实际存在的外部单元所驱动。 - 输出路径则关注输出负载情况。 #### 基础组件介绍 数字电路主要由组合逻辑电路与时序逻辑电路构成: - 组合逻辑电路不依赖历史状态完成当前时刻的数据处理工作; - 时序逻辑电路引入存储元件如触发器等,则能够保存过去的信息并据此影响未来操作行为。 #### 学习资源推荐 针对初学者而言,《Digital Design》一书提供了详尽而易懂的内容讲解,并配有大量实例帮助理解抽象理论知识点。另外还有许多在线平台提供免费课程视频资料供自学使用。 ```python def calculate_delay(input_transition_time, output_load): """ 计算给定条件下门单元的延时 参数: input_transition_time (float): 输入转换时间 output_load (float): 输出负载 返回值: float: 总延时 """ # 使用NLDM查找表获取具体数值(假设已知函数get_nldm_value) gate_delay = get_nldm_value(input_transition_time=input_transition_time, output_load=output_load)[0] wire_delay = estimate_wire_delay(output_load) # 线路延时估计方法待定义 total_delay = gate_delay + wire_delay return total_delay # 示例调用 example_input_transition_time = 0.5e-9 # 单位秒 example_output_load = 20e-12 # 单位法拉第 calculated_total_delay = calculate_delay(example_input_transition_time, example_output_load) print(f"Total delay is {calculated_total_delay:.2f} seconds.") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值