DC设计中的约束(Assignments或Constraints)

设计中常用的约束

时序约束:主要用于规范设计的时序行为,表达设计者期望满足的时序条件,指导综合和布局布线阶段的优化算法

区域与位置约束:主要用于指定芯片I/O引脚位置以及指导实现工具在芯片特定的物理区域进行布局布线

其他约束:泛指目标芯片型号、接口位置,电气特性等约束属性。

时序约束的主要作用
  • 提高设计的工作频率
    通过附加时序约束可以控制逻辑的综合、映射、布局和布线,以**减少逻辑和布线延时,从而提高工作频率**。
  • 获得正确的时序分析报告
静态时序分析和动态时序分析
  • 静态时序分析则是通过分析每个时序路径的延时,计算出设计的各项时序性能指标,如最高时钟频率、建立保持时间等,发现时序违规。它仅仅聚焦于时序性能的分析,并不涉及设计的逻辑功能,逻辑功能验证仍需通过仿真或其他手段(如形式验证等)进行。静态时序分析是最常用的分析、调试时序性能的方法和工具。

  • 动态时序仿真是针对给定的仿真输入信号波形,模拟设计在器件实际工作时的功能和延时情况,给出相应的仿真输出信号波形。它主要用于验证设计在器件实际延时情况下的逻辑功能。由动态时序仿真报告无法得到设计的各项时序性能指标,如最高时钟频率等。

dc中对于建立时间的分析是基于路径的最大延时
dc中对于保持时间的分析是基于路径的最小延时

静态时序分析实例

在这里插入图片描述
path1: input port to data pin of sequential cell
path2: input port to output port
path3: clock pin to data pin of next sequential cell
path4:clock pin to output port

时序分析案例
  • 给定setup time 和hold time ,要求算出最小时钟周期
    在这里插入图片描述
    假设时钟周期是20,每个触发器的cell 延迟是1, 触发器的建立时间是1, 保持时间是0.5, 分析图中的建立时间和保持时间的slack。

1、首先分析路径找出最长和最短路径。
在这里插入图片描述
如图所示为两个寄存器之间,四条路径实例
在这里插入图片描述
2、有了最长和最短路径后,就可以分析建立时间与保持时间
在这里插入图片描述

set_input_delay

input_delay是设置外部信号到达输入端口的时间,DC会用它来计算留给内部逻辑的空余时间是多少。

在这里插入图片描述
之所以上ClkA和Clk的时钟周期不一致,主要是用来说明上图中黄色部分。黄色部分的确认是很重要的。这是DC用来确定时间余量(slack)的关键。

如上图所示,黄色部分已经是最小相位差。那么根据input_delay时间以及库中触发器的setup建立时间,可以知道留给内部逻辑的延迟时间为红色部分
Tlogic_delay = Tmin - Tinput_delay - Tsetup

在综合过程中。DC会优化Logic2的时序,以使他达到时序要求。

set_output_delay

set_output_delay是设置输出端口导数据采集处的延迟。DC会根据它来计算留给内部逻辑的时间。
在这里插入图片描述

Drive与Load

DC综合是基于路径的,每个路径上都有Cell和net,所以基于路径的总和就是计算路径上的delayrc(DC是使用互连线模型进行估算)。

在了解delay和rc的计算时,我们要先了解一下一个cell对于drive(前级)和driven(后级)所用到的模型是什么
在这里插入图片描述
如图,一个buffer,从前级看过来是一个load(capacitance,想获得这个load,可以通过load_of buffer/a获得),从后级看来是一个drive(resistance)。

电路的的驱动能力是上一级的1/R,即电阻的倒数,驱动能力大,说明看过去的电阻小,也说明这个器件比较大(大器件有较大的驱动能力)。

电路的负载能力是下一级的load(即电容)总和,负载能力大,说明能驱动下级的器件就很多。

大器件是大电容,小电阻,而小器件是小电容,大电阻。理解这些,对于dc综合以及后端APR版图都有很好的操作。

延时计算

对于cell的延迟,dc是根据input_transition和out_load对应的查找表来计算的。

对于net的延迟,dc是根据wire_load_model中的fanout_length和resistance,capacitance,area的查找表计算的。

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: pgsqlmultipleassignmentstosamecolumn指的是在同一个SQL语句,将多个值分配给同一个列。在PostgreSQL,这种操作是允许的,但可能会导致数据的不一致性和错误。因此,建议在编写SQL语句时避免使用这种操作,以保证数据的完整性和正确性。 ### 回答2: 在pgSQL,"multiple assignments to same column"是一种错误,表示在同一个语句多次给同一列赋值。通常情况下,每个列在一条语句只能有一个赋值。 这个错误通常出现在UPDATE语句。例如,如下的语句就会导致这个错误: ```sql UPDATE table_name SET column_name = value1, column_name = value2 WHERE condition; ``` 在这个语句,尝试给同一个列column_name赋予两个不同的值value1和value2。这违反了语法规则,因为每个列只能有一个赋值。 为了解决这个错误,需要根据具体的需求和逻辑来修改语句。如果要对同一个列进行多次赋值,可以考虑使用子查询或者多个单独的UPDATE语句来实现。 例如,使用子查询可以通过将多次赋值的值作为一个列表进行更新,如下所示: ```sql UPDATE table_name SET column_name = (SELECT array_agg(value) FROM (VALUES (value1), (value2), ...) AS t(value)) WHERE condition; ``` 这样就可以将多个值以列表的形式更新到同一个列。 总之,在pgSQL,无法在同一条语句多次给同一个列赋值。需要根据具体的情况来修改语句,使其符合语法规则,并实现预期的逻辑操作。 ### 回答3: 在pgsql,"multiple assignments to same column" 是指在一次查询对同一列进行多次赋值操作。 这种情况可能发生在UPDATE语句,当我们想要同时更新一列的多个值时。举个例子,假设我们有一个名为"students"的表,其包含了学生的姓名(name)和年龄(age)两列。现在我们希望将名为"John"的学生的年龄同时更新为20和21。我们可能会写出类似于下面的UPDATE语句: UPDATE students SET age = 20, age = 21 WHERE name = 'John'; 然而,这样的语句会导致"multiple assignments to same column"的错误。这是因为在一次UPDATE语句,对同一列进行多次赋值是不被允许的。 为了解决这个问题,我们可以使用逗号分隔的形式来分开不同的赋值操作,每个赋值操作只赋给一个值。例如: UPDATE students SET age = 20 WHERE name = 'John'; UPDATE students SET age = 21 WHERE name = 'John'; 这样做就能够分别将学生"John"的年龄更新为20和21,避免了"multiple assignments to same column"的错误。 总结起来,在pgsql,如果出现了"multiple assignments to same column"的错误提示,我们应当检查语句是否对同一列进行了多次赋值操作,并将其拆分为多个独立的赋值语句来执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值