逻辑综合——施加约束

Design Compiler时一个约束驱动(constraint-driven)的综合工具,它的结果与设计者施加的约束条件密切相关。

一、面积约束

  进行面积的约束,也就是告诉DC综合的电路面积要在多少以内。在介绍约束命令之前,先了解一下面积的单位。面积的单位可以是:

  • 2输入与非门(2-input-NAND-gate)
  • 晶体管数目(Transistors)
  • 平方微米(Square microns)

  此外,我们往往看到一个芯片是多少多少门,这多少门的数字就是拿芯片的总面积,除以2输入与非门的面积得到的数值。用report_lib命令不可显示面积的单位,我们要询问半导体厂商面积的单位是什么。或者用以下方法得到:

  如果不设置面积的约束,Design Compiler将做最小限度的面积优化。设置了面积的约束后,DC将在达到面积约束目标时退出的面积优化。如果设置面积的约束为“0" , DC将为面积做优化直到再继续优化也不能有大的效果。这时,DC将中止优化。注意,对于很大(如百万门电路)的设计,如将面积的约束设置为“0" , DC可能要花很长的时间为设计做面积优化。综合时,运行的时间很长。

  在超深亚微米(deep sub-micro)工艺中,一般说来,面积并不是设计的主要目标,对设计的成本影响不大。因此,我们在初次优化时,可以不设置面积的约束。优化后,检查得到的设计面积,然后将其乘上一个百分数(例如8500),将其结果作为设计的面积约束。再为设计做增量编辑,运行“compile -inc”命令,为面积做较快的优化。这样做,既可以优化面积,又可以缩短运行时间。

最后我们用set_max_area命令为设计作面积的约束。例如:

set_max_area  10000

当设计不是很大的时候,根据上面的描述,我们就可以使用下面的命令进行面积约束:

set_max_area  0

让DC做最大的面积优化约束。

二、时序约束

关于时序约束,我们要做的是约束电路中的所有时序路径。这些时序路径可以分为四类(具体可见静态时序分析系列):输入到寄存器的路径、寄存器到寄存器之间的路径、寄存器到输出的路径、输入直接到输出的路径。

我们以常见的同步电路为例:

在电路综合过程中,所有时序电路以及组合电路的优化都是以时钟为基准来计算路径延迟的,因此,要在综合时候指定时钟,作为估计路径延迟的基准。

1、定义时钟

  • 用户必须定义的值:colck source(pin or port)
  • 用户可能需要定义的值:duty cycle、offset/skew、clock name

create_clock -period 10 [get_ports Clk]

set_dont_touch_network [get_clocks Clk]

对所有定义的时钟网络设置为dont_touch,即综合时候不对Clk信号进行优化。这是为什么呢?

实际的电路设计中,时钟树的综合(CTS)有自己的方法,它需要考虑到实际布线后的物理信息,所以DC不需要在这里对时钟树进行处理

我们使用create_clock后,情况如下:

这里我们需要定义IO相对于时钟的一些时序。

2、定义输入延迟

我们要定义的输入延迟是指被综合模块外的寄存器触发的信号在到达被综合模块之前的延时。即下图中的Tclk-q和M电路的延时之和。

当Tclk-q和TM(Path M的延时)确定之后,由于时钟也是确定的,则TN(Path N的延时)也将会确定。

我们用set_input_delay命令定义输入延迟。

set_input_delay -max 4 -clock Clk [get_ports A]

由于输入延迟是相对于时钟的,所以需要注明时钟域。

3、定义输出延迟

信号在被综合模块的触发器里被触发,被外围的一个触发器接收,对外围电路而言,它有一个T电路延时和外围触发器的建立时间要求。

由于时钟是确定的,当T电路延时和外围触发器的建立时间要求确定之后,被综合模块内部的输出路径延时范围也确定了下来。

我们用set_output_delay命令定义输出延迟。

set_output_delay -max 4 -clock Clk [get_ports B]

三、DRC约束

常见的DRC约束有三种

  • set_max_transition 约束设计中的信号、端口、net的transition time。net的transition time取决于net的负载(fan-out),负载越大,transition time越大。
  • set_max_fanout 对design、net、output port进行操作,设定的不是具体的电容值。扇出负载值用来表示与单元输入引脚相对的负载的数目,并不表示真正的电容负载,而是个无量纲的数字。
  • set_max_capacitance 基于工艺库的信息设定

四、环境约束

之前的约束对待综合电路进行了许多条件限制,但还有许多方面未提及,如环境温度、供电电压、外围负载等,我们在这一节进行说明。

1、设置负载

为了更加准确地估计模块输出的时序,除了知道输出延时外,还需要知道输出负载情况,负载越大,output port的transition time越大,影响时序。

由于DC默认输出负载为0,即相当于不接负载,则这样综合的电路时序过于乐观,不能反映真实工作情况。

常用指令如下

set_load 5 [get_ports OUT]  //直接设置

set_load [load_of my_lib/and2a0/A] [get_ports OUT] //使用工艺库中现有的单元的load值来进行代替

set_load expr[[load_of my_lib/and2a0/A*3]] [get_ports OUT]

2、设置驱动

除了知道输出延时、输出负载情况外,DC还需要知道input port 的transition time。同样地,默认情况下,DC默认外部信号transition time为0。

set_driving_cell允许用户自行定义一个实际的外部驱动cell,同样地,可以用工艺库现有的单元的值来代替。

set_driving_cell -lib_cell and2a0 \[get_ports IN]

set_driving_cell  -lib_cell  FD1  -pin  Q  [get_potrs  IN]

set_drive以电阻值为计量,0表示最大驱动强度,通常为时钟端口.

3、设置工作条件

Foundry提供的工艺库里,各个单元的延时实在一个标准的条件下得到的。在考虑延时时,还需要考虑工艺制程、电压、温度(PVT)的影响。

上图可以看到PVT对延时的影响。因此,工艺库中提供了几种工作条件的模型(operating condition model)供设计者选择,我们可以用:report_lib  libname命令把厂商提供的所有工作条件列出来。一般综合只考虑最好和最差两种情况:最差情况用于建立时间的时序分析,最好情况用于保持时间的时序分析。

set_operating_conditions  -max $OPERA_CONDITION  -max_library  $LIB_NAME

4、设置连线延时

在计算时序路径延迟时,除了需要知道门单元延迟外,还需要知道连线的延迟。

连线的延迟目前一般用(连)线负载模型( Wire  Load  Model,简称WLM)估算。WLM是厂商根据多种已经生产出来芯片的统计结果,在同样的工艺下,计算出在某个设计规模范围内(例如门数为0~43478.00、门数为43478.00~86956.00,等等)负载扇出为1连线的平均长度,负载扇出为2的连线的平均长度,负载扇出为3的连线的平均长度等等。

WLM是根据连线的扇出进行估算连线的RC寄生参数,一般情况下,由半导体厂商建立。厂商根据已生产出来的其他设计统计出该工艺的连线寄生参数。半导体厂商提供的工艺库中包括了线负载模型。通常在一个综合库里面有多种线负载模型,不同的模型模拟不同规模的的模块内的线上负载情况。用户也可以自己创建自己的线负载模型去更精确地模拟设计内的线上负载。

连线延时模型如下图:

如果要查看工艺库中的WLM,可以使用命令:report_lib  $lib_name,进行综合时,综合工具会默认根据设计面积和节点处的负载自动选择合适的连线负载模型,如果要关掉自动选择WLM,那么可以使用命令:

set  auto_wire_load_selection  false

然后手动选择线负载模型的命令是:

set_wire_load_model  -name  $WIRE_LOAD_MODEL  -library  $LIB_NAME

 如果连线穿越层次边界,连接两个不同的模块,那么有三种方式对这种跨模块线连接的类型进行建模,set_wire_load_mode命令用于设置连线负载模型的模式。有三种模式供选择:top、segmented和enclosed。

  • enclosed:连接B1和B2的连线负载模型用围绕它们的模块的负载模型代替,即用SUB的负载模型代替。
  • top:连接B1和B2的连线负载模型用顶层模块的负载模型代替,即用TOP的负载模型代替。
  • segmented:分别用穿过的三段的模型相加得到。

set_wire_load_mode top

5、检查

在设置完环境约束之后,可以用以下指令来检查约束是否添加成功。

  • check_timing:检查设计是否有路径未加入约束
  • check_design:检查设计中是否有悬空管脚或者输出短接的情况
  • write_script:将施加的约束和属性写到一个文件中,检查该文件看看是否正确。

五、实例

下面是一个实际的tcl脚本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Codevs] 1004 四子连棋

1004 四子连棋 时间限制: 1 s空间限制: 128000 KB题目等级 : 黄金 Gold题目描述 Description在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻…

逻辑综合——优化电路

对进行时序路径、工作环境、设计规则等进行约束完成之后,DC就可以进行综合、优化时序了,DC在优化过程中主要的策略将在下面进行说明。然而,当普通模式下不能进行优化的,就需要我们进行编写脚本来改进DC的优化来达到时序要求。 DC…

DOM包裹wrap()方法

DOM包裹wrap()方法 如果要将元素用其他元素包裹起来,也就是给它增加一个父元素,针对这样的处理,JQuery提供了一个wrap方法 .wrap( wrappingElement ):在集合中匹配的每个元素周围包裹一个HTML结构 简单的看一段代码: &…

Verdi 基础教程

一、Verdi 功能 查看设计debugVerdi不能自己产生波形 二、Verdi使用流程 1、Verdi环境配置 .bashrc中配置 export Verdi_HOME$Synopsys_Dir/Verdi2015 #export NOVAS_HOME$Synopsys_Dir/Verdi2015 export PATH$Verdi_HOME/bin:$PATH export LD_LIBRARY_PATH"/opt/Syno…

ida和idr机制分析(盘符分配机制)

内核ida和idr机制分析(盘符分配机制) ida和idr的机制在我个人看来,是内核管理整数资源的一种方法。在内核中,许多地方都用到了该结构(例如class的id,disk的id),更直观的说&#xff0…

MIPI CSI-2学习

CSI(Camera Serial Interface)定义了摄像头外设与主机控制器之间的接口,旨在确定摄像头与主机控制器在移动应用中的标准。 关键词描述 缩写解释CCICamera Control Interface(物理层组件,通常使用I2C或I3C进行通信&…

nand flash坏块管理OOB,BBT,ECC

0.NAND的操作管理方式 NAND FLASH的管理方式:以三星FLASH为例,一片Nand flash为一个设备(device),1 (Device) xxxx (Blocks),1 (Block) xxxx (Pages),1(Page) 528 (Bytes) 数据块大小(512Bytes) OOB 块大小(16Byte…

小白学git2

你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得。 首先,登陆G…

CMOS图像传感器——工作原理

一、像素阵列结构 一般像素阵列是由水平方向的行( Row ) 和垂直方向的列(Column)正交排列构成的。像素排列的最基本设计原则是:摄像器件像素排列的坐标,必须在显示的时候能够准确地还原在图像原来的相对位置上。在大多数情况下,每个像素中心线在行的方向和列的方向,即…

追寻终极数据库 - 事务/分析混合处理系统的交付挑战 (3)

挑战:支持多个存储引擎 以下内容并不是新发现:行优化存储适用于OLTP和运营工作负载,而列存储适用于BI和分析工作负载。频繁写入的工作负载适用于行式存储。对Hadoop而言,Hbase适合低延迟工作负载,列式ORC文件或Parquet…

异步FIFO设计(Verilog)

FIFO(First In First Out)是异步数据传输时经常使用的存储器。该存储器的特点是数据先进先出(后进后出)。其实,多位宽数据的异步传输问题,无论是从快时钟到慢时钟域,还是从慢时钟到快时钟域&…

python中RabbitMQ的使用(路由键模糊匹配)

路由键模糊匹配 使用正则表达式进行匹配。其中“#”表示所有、全部的意思;“*”只匹配到一个词。 匹配规则: 路由键:routings [ happy.work, happy.life , happy.work.teacher, sad.work, sad.life, sad.work.teacher ] "#"&am…

时钟切换处理(Verilog)

随着各种应用场景的限制,芯片在运行时往往需要在不同的应用下切换不同的时钟源,例如低功耗和高性能模式就分别需要低频率和高频率的时钟。两个时钟源有可能是同源且同步的,也有可能是不相关的。直接使用选择逻辑进行时钟切换大概率会导致分频…

Angular Elements 组件在非angular 页面中使用的DEMO

2019独角兽企业重金招聘Python工程师标准>>> 一、Angular Elements 介绍 Angular Elements 是伴随Angular6.0一起推出的新技术。它借助Chrome浏览器的ShadowDom API,实现一种自定义组件。 这种组件可以用Angular普通组件的开发技术进行编写,…

卢卡斯定理

卢卡斯定理:解决一类组合数取模问题 A、B是非负整数,p是质数。AB写成p进制:Aa[n]a[n-1]...a[0],Bb[n]b[n-1]...b[0]。 则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0]) modp同余 即:Lucas(n,m,p)c(n%p,m%p)*Luc…

loadrunner中对https证书的配置

1、准备好网站的证书,一般证书是cer格式; 2、因为loadrunner只支持pem格式的证书,所以要将证书转换格式,利用openssl工具;(或者直接让开发提供pem格式的证书)3、得到pem格式的证书之后&#xff…

Datapath综合代码规范(Verilog)

一、一般准则 1、有符号数运算 利用类型“signed”完成有符号数运算,而不是用无符号数模拟有符号数运算。这样可以得到更好的QoR。在资源报告中检查操作数的类型和大小。 2、符号/零扩展 尽量不要手动扩展。verilog利用signed/unsigned会自动完成扩展。这样代码可…

CMOS 图像传感器——Skipping 和 Binning 模式

在通常的CMOS读取方式中,由于像素读取规模的差异,不同的分辨率对应不同的帧率。在通道带宽固定的前提下,想要提高帧率就要考虑是否需要缩小视野(外圈裁切)。若不希望视野缩小,需要减少采样的分辨率。 常用的…

APB协议学习

APB(Advanced Peripheral Bus) 1、APB的概述与特点 APB主要用于低带宽的周边外设之间的连接,例如UART、1284等,它的总线架构不像AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。其特性包括:两个时钟周期传输;无…