逻辑综合——施加约束

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颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻…

链接中获取文件名

算得上是-test.pdf 获取文件名 var str http://aaa.com/s/ddd/算得上是-test.pdf; console.log(str.match(/([^/*.])\.\w$/)) console.log(str.match(/([^/*.])\.\w$/)[0]) // 转载于:https://www.cnblogs.com/cssfirefly/p/6163370.html

逻辑综合——优化电路

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

DOM包裹wrap()方法

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

usleep函数

usleep功能把进程挂起一段时间, 单位是微秒(百万分之一秒); 头文件: unistd.h 语法: void usleep(int micro_seconds); 返回值: 无 内容说明:本函数可暂时使程序停止执行。参数 micro_seconds 为要暂停的微…

限制Xamarin获取图片的大小

限制Xamarin获取图片的大小在App开发中,经常会使用网络图片。因为这样不仅可以减少App的大小,还可以动态更新图片。但是手机使用网络环境千差万别。当网络环境不是理想的情况下,加载网络图片就是一个棘手的问题了。为了避免长时间加载图片影响…

Linux应用开发自学之路

前言 在 「关于我 」那篇博文里,朋友们应该知道了我不是科班出身,是由机械强行转行到Linux应用开发方向。下面我就详细向大家介绍自己这一路上的转行历程,希望对大家有所启发。 我是学机械专业的,对于机械专业我还是很感兴趣&…

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进行通信&…

internet网络 checksum校验和计算方法

http://hi.baidu.com/%CE%C4%B3%AD%B9%AB/blog/item/7d9a4e08f82d72b32eddd4cb.html

最有效的创建大数据模型的6个技巧

数据建模是一门复杂的科学,涉及组织企业的数据以适应业务流程的需求。它需要设计逻辑关系,以便数据可以相互关联,并支持业务。然后将逻辑设计转换成物理模型,该物理模型由存储数据的存储设备、数据库和文件组成。 历史上&#xff…

【转】Castle Windsor之组件注册

【转】Castle Windsor之组件注册 注册方式较多&#xff0c;大体有这么几种&#xff0c;学习得比较粗浅&#xff0c;先记录&#xff1a;1、逐个注册组件即对每个接口通过代码指定其实现类&#xff0c;代码&#xff1a;container.Register(Component.For<IMyService>() //接…

Verilog 补码加法溢出判断及处理

补码加法运算溢出判断三种方法&#xff1a; 一、符号位判断 Xf、Yf分别两个数的符号位,Zf为运算结果符号位。 当Xf Yf 0&#xff08;两数同为正&#xff09;,而Zf1(结果为负)时,负溢出&#xff1b;当出现Xf Yf 1&#xff08;两数同为负&#xff09;,而Zf0&#xff08;结果为…

Android绘制(三):Path结合属性动画, 让图标动起来!

Android绘制(一):来用shape绘出想要的图形吧! Android绘制(二):来用Path绘出想要的图形吧! 目录 效果图前言绘制属性动画最后效果图 不废话, 直接上效果图, 感兴趣再看下去. 其实不单单是效果图演示的, 运用熟练的话各种图标之间都是可以切换的. 前言 之前的文章也说了, path还…

{{view 视图层}}微信小程序

微信小程序 view 视图层//自学 1.数据绑定 数据绑定WXML中的动态数据均来自对应Page的data。 简单绑定数据绑定使用"Mustache"语法&#xff08;双大括号&#xff09;将变量包起来&#xff0c;可以作用于&#xff1a; 内容<view> {{ message }} </view>Pa…

CMOS图像传感器——概述

一、概述 图像传感器是把光学图像信息转换成电信号的器件。图像传感器是随着电视技术在20世纪30年代发展起来的,早期图像传感器技术的最重要贡献在于建立了扫描(Scan)的概念,用扫描的方法把二维空间平面上的光电信息离散成行(Line)和帧(Frame),然后按空间顺序读出形成…

nand flash坏块管理OOB,BBT,ECC

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

小白学git2

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