下图是DC的工作流程示意图:

  • Translate

当DC把我们的rtl代码读入后,会自动地将代码TranslateGTECH的网表,GTECH是synopsys自家开发的一种通用的,独立于工艺的标准库,里面有与门、非门、寄存器等各种基本单元。下图即为代码读入后由DC产生的GTECH网表,此时GTECH网表仍然保持和rtl代码的相同的层次结构。

查看单个逻辑单元的属性,可以看到确实使用的是GTECH的库。

  • Link

第一张图中省略了link的步骤,link是介于Translate和Compile之间的一个小的步骤,主要目的在于解决设计中所有的reference。换句话说,你设计中的所有instances必须要找到它们自己的定义。这些instances可以分为三类:已经Translate的GTECH网表stdcellmacros(RAM、ROM、IP、etc)。

  • 已经Translate的GTECH网表可以从内存中获取。
  • 如果在你的rtl代码中手动例化了foundary厂家提供的stdcell,当然GTECH网表中就会存在这个讨人厌的stdcell。
  • 对于macros,一般也是以.db的库提供的。

所以我们的link_library设置如下:

set_app_var link_library [list * ${target_library} macro_library1 macro_library2]

*表示从内存中获取,对应Translate的GTECH网表;${target_library}对应stdcell;macro_library1、macro_library2对应macros

  • Compile(=Optimize+Map)

DC的Compile步骤会将逻辑单元映射到foundary厂家提供的库单元上去。这里的库由target_library来指定。具体来说,DC在mapping的时候,会从target_library中挑选出功能一致的stdcell来替换当前网表中的逻辑单元。

set_app_var target_library [list smic13_ss.db]

可以看到,compile之后我们的逻辑单元都被替换成了target_library中的stdcell了。

  • Other

为了加深对link_library和target_library的理解,我们不妨再聊一聊。

Q1.如果我给DC的就是干净的rtl代码,没有stdcell和macro的例化,是不是link_library只设置为*就可以了?

A1.可以,甚至于你不设置link_library也只会出现warning而已,因为DC还是会忍不住去内存中瞅瞅看。

Q2.为啥经常看到别人的link_library中包含了target_library?

A2.其实上面已经解释过了,我们难免会去手动例化一些target_library中stdcell,此时我们不希望DC不认识我们例化的东西。另外一种说法是我们DC综合出来的网表,还可以继续让DC吃进去,如果link_library中不包含target_library,link时就找不到对应的stdcell定义了。

理解DC中的link_library与target_library相关推荐

  1. 怎样理解Verilog中的assign?

    assign相当于一条连线,将表达式右边的电路直接通过wire(线)连接到左边,左边信号必须是wire型.当右边变化了左边立马变化,方便用来描述简单的组合逻辑.示例: wire a, b, y; as ...

  2. 如何理解FFT中的频谱泄露效应?

    快速傅里叶变换(FFT)实现了时域到频域的转换,是信号分析中最常用的基本功能之一.FFT变换时,总是从离散数据中选取一部分处理,将其称为一帧数据.而且FFT是在一定假设下完成的,即认为被处理的信号是周 ...

  3. 彻底理解js中this

    相关博文:http://blog.csdn.net/libin_1/article/details/49996815 彻底理解js中this的指向,不必硬背. 首先必须要说的是,this的指向在函数定 ...

  4. 理解oracle中连接和会话

    理解oracle中连接和会话 1.  概念不同:概念不同: 连接是指物理的网络连接. 在已建立的连接上,建立客户端与oracle的会话,以后客户端与oracle的交互都在一个会话环境中进行. 2.   ...

  5. 深入理解C++中public、protected及private用法

    深入理解C++中public.protected及private用法 这篇文章主要介绍了C++中public.protected及private用法,对于C++面向对象程序设计来说是非常重要的概念,需 ...

  6. python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递

    python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...

  7. python中元组_理解python中的元组

    理解 python 中的元组 引言 在 Python 中元组是这样的: 元组是是这样一种数据结构:不变的或者不可改变的(简单来说不能重新赋值) .元素的有序序列.因为元组是 不变的,所以他的数值是不能 ...

  8. 深入理解Java中的内存泄漏

    理解Java中的内存泄漏,我们首先要清楚Java中的内存区域分配问题和内存回收的问题本文将分为三大部分介绍这些内容. Java中的内存分配 Java中的内存区域主要分为线程共享的和线程私有的两大区域: ...

  9. [转]深入理解CSS中的层叠上下文和层叠顺序

    http://www.zhangxinxu.com/wordpress/2016/01/understand-css-stacking-context-order-z-index/ 零.世间的道理都是 ...

最新文章

  1. 【error】error: field * has incomplete type
  2. Vue 增加动态路由功能 【在原有系统上增加】
  3. android rom 评测,腾讯定制Android 4.0 ROM评测 附tati刷机教程
  4. 全面讲述linux集群负载均衡
  5. 思维训练素材整理【初级中阶高阶辅导】
  6. pythonstdin_如何写入Python子进程'stdin?
  7. mysql sumif条件求和_sumif与sumifs条件求和函数详解,小白到大神的必经之路
  8. MongoDB 教程 | 菜鸟教程
  9. 一次SocketException:Connection reset 异常排查
  10. 使用cxf框架搭建webservice
  11. 《近匠》专访机智云 CTO 刘琰——从 0 到 1 开启智能化硬件开发
  12. 京东数科“机房巡检机器人”高价值专利荣获专利大奖
  13. 720度全景合成详细教程
  14. 计算机硬件有问题,计算机硬件有哪些
  15. 知乎APP使用 产品体验报告
  16. 神经网络---预训练
  17. 《Python数据抓取与实战》读书笔记:第2章
  18. VMware认证专家(VCP)详细介绍
  19. 搭建PHP环境需要安装Apache服务器,遇到的一系列的问题(切记需要用管理权限进入CMD)
  20. android - 【记录】三星手机(N9002)刷机、官方系统、TWRP

热门文章

  1. MySql的flush用法
  2. Java程序员 面试如何介绍项目经验? Java程序员应该如何介绍自己的项目经验和自我介绍?面试如何突出自己
  3. Latex中调整多行公式行距(间距)的方法
  4. [XSY 3147]子集计数
  5. 孙源面试题试解(更新完毕)
  6. Linux的.a、.so和.o文件以及与windows下的对应关系
  7. WeChat苹果多开系统官网下载页源码
  8. Android 横竖屏切换
  9. sourcetree的日常使用
  10. RuntimeWarning: Mean of empty slice