当前课程知识点:IC设计与方法 > 6、Quartus工具 > a)综合及相关基本概念 > Video
前面我们讲了怎么进行仿真
应该说仿真的目的是为了
验证我们代码的功能是不是能够完成
我们预期所要实现的功能
仿真验证完了以后
下一步就是逻辑综合了
简单的说逻辑综合
就是把我们的RTL级代码
变成具体的物理可实现的电路
我们会先简单的介绍一下
逻辑综合的两个基本概念
一个是基于标准单元的概念
第二个是静态时序分析的方法
然后简单介绍一下逻辑综合的基本过程
我们来看一下典型的ASIC综合的这个流程
基于FPGA
或者说基于可编程器件的综合流程
我们后面会单独去讲
因为它跟ASIC流程有比较大的差异
ASIC流程应该说是比较专业的流程
我们来看一下这张图
ASIC流程大致分为两个阶段
这条虚线之前的
我们称之为前端设计阶段
虚线之后的是后端设计
我们的起点是一个设计需求
根据设计需求我们作为设计人员
首先要写的是RTL级代码
设计的RTL级代码给它写出来
写完RTL级代码以后
我们去进行功能仿真
就是前一节课所讲的仿真
去验证我们这个RTL级代码
是不是能够实现我们所要
实现的、预期实现的功能
功能仿真验证完了以后
这个代码我们认为它已经没有错误了
可以实现我们的功能
比如一个计数器
下面就要用逻辑综合的过程
把我们的代码变成具体的电路
电路从术语上来说
我们称之为门级网单
为什么呢
因为最终的电路都是由一系列的逻辑门
一系列的D触发器
等等这样的具体的元器件连接起来的
就好像一个个元器件连成的网络一样
所以我们称之为门级网单
在综合的时候需要一些约束
需要一些器件的库
需要一些模型等等
根据这些约束和RTL级代码
软件会帮我们把具体的电路产生出来
产生出来电路以后
我们还可以去做门级仿真
去验证
这个有很多元器件构成的电路的网单
是不是能够完成我们所预期的功能
换句话说
去验证这个新的电路跟我们原来的电路
这两者之间的功能是不是还一致
如果我们RTL级电路设计的完全符合规范的话
这两者理论上应该是一致的
但实际上由于设计人员的种种的失误
或者各种各样的原因
有可能会造成这两者的不一致
所以我们在门级仿真的时候
发现电路的功能出错了
这时候我们怎么办呢 就得返工
回去重新修改RTL级电路
重新走这个流程
当门级网单也对了以后
我们就要进入到集成电路的后端设计流程了
首先是做布局 布线的规划
我们称之为Floorplanning
布局规划的意思就是
把我们的电路在具体的版图设计的时候去摆放
看看他们怎么摆放
我们要把所用到的一些大的电路的模块
比如说存储器
比如说锁相环
比如说一些IP单元先摆放好
然后把小的与非门与触发器等等
这些门电路再规则的摆放到电路里面去
这就是Floorplanning
摆放完了以后
然后就是布局和布线了
把这些宏单元和大型的电路模块
以及内部的小的D触发器
和门之间的线连起来
这里面还涉及到电源的连线
通常会先连电源线
然后再连信号线
做完连线以后
最终就产生了电路的版图
我们把版图送出去加工制造之前
还需要再进一步验证
因为在这个过程中
通常我们说
只要有人参与的过程就会出错
在这个过程中还可能有错误
那么我们会先把版图提取出寄生参数
做寄生参数提取
为什么提取寄生参数呢
因为在版图里面我们都知道
版图里面我们有好多线
我们连的线
物理的每一根线都是有它的特定的参数的
有寄生电容 寄生电感 寄生电阻
这些寄生参数会造成
我们信号传输的时候会有延时
会有失真 会有干扰
所以我们要提取出物理版图里面的参数
然后根据这些参数
估计出每一根物理连线的延时信息
把这些信息再反标到门级网单上去
再次做一个仿真
这个仿真如果没有问题的话
我们电路就真正的没有问题了
就可以把我们版图送到制造厂家去加工制造了
这就是典型的ASIC设计流程
我们首先来看一下什么是综合
刚才已经说了
综合就是EDA工具把我们的电路
把我们RTL级的设计转变到门级网单这样的
一个过程
转变到逻辑门级这样的一个转换过程
那么具体软件是怎么综合的
软件是怎么综合的
我们说软件综合一个是受约束的
约束驱动了的综合
我们要告诉软件
作为设计人员
我们要告诉软件该怎么去综合
达到我们的预期目标
那么我们预期目标有什么呢
通常有两个
两大类预期目标
一个是希望我们芯片工作的越快越好
第二个
我们是希望我们芯片的面积越小越好
面积越小
代表着我们这个芯片成本越低
将来价格越低
那么速度越快呢
代表着芯片的性能越好
假设设计了一个CPU
那么CPU可以跑到一个GHz 两个GHz 三个GHz
显然速度越快越好
这个称之为约束驱动的
但实际上我们都知道不可能芯片做得又小又快
通常来说
在某一个工艺节点
所谓的工艺节点就是说
我们用一种工艺
比如说
我们用TSMC的0.18微米的工艺来设计芯片
如果已经限制了使用这种工艺的话
如果我们的设计要做得小的话
通常来说它的速度相对来说就比较慢一点
如果我们设计做得比较快的话
工作得比较快的话
它的面积就相对来说比较大一点
所以作为设计人员我们要给它一个约束
然后取个折中
到底是在速度快还是面积小之间去取一个折中
另外
我们除了可以用TSMC的0.18微米之外
我们可能还可以用SMIC的0.18微米
UMC的0.18微米
不同厂家的不同工艺
所实现的这条折中的曲线也是不一样的
这也是我们作为设计人员要去考虑的
要去告诉EDA工具到底使用哪家公司的
哪个工艺去实现什么样指标的产品
这些约束到底怎么才能做出来呢
是要有丰富的经验才能给出软件具体的
详细约束
具体选择某一家工厂的某一个工艺
比如说到底选TSMC UMC还是SMIC
到底是选0.18um 0.35um还是0.25um
通常是用技术人员跟管理人员
共同决策出来的
因为选择不同厂家的不同工艺跟将来的
生产制造成本有很大的关系
而跟技术因素相对来说关系比较小一点
所以要由具体的设计人员跟管理人员
共同决定
一旦决定完了某一个工艺以后
那么设计人员就要去做出详细的约束
去让软件到底在这条曲线上的
哪一个点去做出一个折中点出来
这就是约束驱动的
第二个是路径驱动的
我们前面讲过RTL级设计
RTL级设计它本质上
是从一个寄存器经过一堆组合逻辑
或者说一个云图传递到另一个寄存器
这里面的寄存器是什么呢
寄存器就是我们的数据路径里面的存储单元
就是我们的控制路径
控制器里边的有限状态机里面的状态存储器
状态存储元器件
一般来说我们的有限状态机有几个状态的话
这里面的D触发器的个数就已经定死了
这个是没法做优化的
或者说优化的余地非常的少
软件能做什么呢
软件只能帮我们去优化D触发器之间的
组合逻辑
也就是这里面的云图
也就是状态转移图里边的状态计算逻辑
或者说电路的输出逻辑
只有这些逻辑可以优化
所以软件优化的工作主要集中在这些组合逻辑里边
我们称之为基于路径的优化
基于路径
也就是从一个触发器的
输出到另一个触发器的输入这些逻辑
是可以进行优化的
最终EDA软件会在时序
面积和功耗这三者去做一个平衡
做一个折中
以期达到我们设计人员的要求
具体综合过程是什么样的过程呢
应该说软件在综合之后呢
实际上是分两步来走的
第一步是把我们的HDL的
源代码映射到一个通用的工艺库上
这个工艺库是跟具体的
厂家工艺是没有任何关系的
这个过程是一个翻译的过程
这个翻译过程有点类似于我们讲RTL级电路
它跟具体电路之间是一个什么关系
我们上课详细讲过
用这种关系能够把原始的RTL级电路
映射成一个和工艺无关的符合库上去
我们称之为GTECH库上去
映射完了以后
软件会进行优化
去尝试怎么把这个电路做得更简单一点
就是各种逻辑优化的功能
它都会去尝试
把电路做得更简单
然后会去映射到我们的目标工艺库上去
目标工艺库是什么呢
打个比方说
刚才我们说了
TSMC的0.18微米
或者UMC的0.18微米
不同厂家的0.18微米库提供的元器件是不一样的
以这张图为例
可能TSMC提供了一个四输入的与非门
UMC只提供三输入的与非门
那么这家的实现方式就不太一样
对吧
所以映射的过程就要把
我们刚才的通用电路映射到一个具体电路上去
映射完了以后还要再走优化
因为用不同厂家的工艺
有可能可以优化出具体的不同的结果
在结果上通常来说会有细微的差别
这里面我们提到了
我们的设计基于标准单元来进行的
什么是标准单元呢
标准单元是一些已经预先设计好的
逻辑单元和功能单元
集成电路的设计有点像我们所说的盖楼房一样
早期盖楼房我们都是一砖一瓦盖起来的
后来我们是用预制板盖起来
现在还会用一些已经做好的构件
很快速的把楼房盖起来
那么集成电路的设计也是类似的
我们会用标准单元
也就是已经设计好的与门 非门 与非门 D触发器
以及一些宏单元
例如多路选择器
然后存储器RAM ROM等等
去把我们电路快速的搭建起来
通常标准单元
所谓的标准单元就是指电路的尺寸有一定的标准
在标准单元里面
把不同的电路
比如说基本的门电路
多路选择器和D触发器
不管这个电路只有像非门这样的两个门
还是说像触发器这样的
差不多10到20个门这样的电路
它们的高度
物理版图的高度都做成一样高
这样的话
也就是说它们某一个方向的尺寸是固定的
在将来布版图的时候就会布起来非常规则
或者有一定的方法性可以遵循
这就是标准单元
标准单元里面大致有三类器件
刚才已经简单的提了一下
一类是基本的门电路
基本的与门 或门 非门等等逻辑电路
第二类是稍微复杂一点的多路选择器
这也是我们RTL电路里面用的最多的
第三类是触发器
寄存器
包括D触发器 T触发器 JK触发器等等
这是标准单元
除了标准单元之外
第二类就是宏单元
宏单元是相对于标准单元而言
它的功能相对来说比较复杂
很难在固定的很小的高度内把电路给它放进去
宏单元大致有两大类
一类是存储器
包括RAM ROM FIFO CAM
存储器通常在
集成电路内部可以集成的存储器有几KB 几MB
甚至是十几MB
寄存器也能够实现存储器的功能
通常我们在做设计的时候
如果一块存储器的面积只有
几十个门 几百个门的话
我们就会用D触发器来搭
但是如果存储器达到1K比特以上的时候
我们就会用宏单元来做这个存储器
它们实现的效率会比较高
CAM是一个比较特殊的存储器
它是可以根据内容寻址的
寻址的效率会比较高一点
这是存储器
第二类是一些IP单元
IP单元是能够实现特定的复杂功能的一些电路
包括数值运算的IP单元
例如加法器 乘法器
做DSP运算所需要的乘法累加器
滤波器等等
这是一类
另一类是通信用的
比如说通信的接口
DDR2
以太网接口
PCIE等等这些接口
这些都是宏单元
那么我们设计都是用这些已经有的
这些单元来完成
这样的话设计效率会比较高
我们来看一个实际的标准单元库
举个例子
我们用UMC的0.18工艺来进行生产
UMC的0.18工艺都有什么标准单元库呢
UMC的0.18工艺它的标准单元库是由ARM公司
为UMC的工艺提供了某一种标准单元
所以的话呢
我们在描述这个标准单元的时候
注意
有好多术语
这是ARM公司提供的
针对UMC厂家的
针对逻辑工艺的0.18
或者是180纳米工艺的
GII工艺的0.18
也就是0.18标准工艺的1.8伏的标准单元库
所以大家可以看到
这个标准单元库有很多前缀
换句话说
当具体的工艺
具体的厂家以及IP的这个工艺的提供商
或者说标准单元的供应商也会发生变化
所以
哪怕是针对0.18微米而言
也会有很多种标准单元库
所以我们以后在跟别人讨论你的设计的时候
一定要把产品的每一个细节都要说清楚
因为任何一个细节的变化都会导致
你的产品最终的性能上有所变化
这个标准单元库我们简单的介绍一下
以UMC的0.18的这个标准单元库为例
那么它的物理特征
首先看一下物理特征
为什么叫0.18呢
它的栅长是0.18微米
或者说180纳米这是它的第一个特征
第二个布线的金属的层数
是可以选四层 五层
或者是六层
就像咱们在PCB上布线一样
我们可以是单层的PCB板
也可以是双层的
或者是四层的这样PCB板
那么对于做商业产品而言的话
我们会要求设计工程师尽可能
用比较少的层数来完成
因为你用的层数越少
将来产品制造的周期就会越短
产品的价格也会越低
第三个就是标准单元的高度
刚才我们已经提到了
标准单元的高度是固定的
我们在这里面可以记住这个数
每个标准单元大约5微米这么高
这是物理特征
第二个是它的电气规范
0.18微米的标准单元库
通常它的典型的工作电压是1.8伏
这是内核的工作电压是1.8伏
结温是25度
这是它的典型值
它所允许的
最低工作电压和最高工作电压通常正负10%左右
温度是负40度到125度
这个是工业温度等级
标准单元到底有多少
前面我们说了好多次
非门 与非门 D触发器
看起来好像只有几个
但实际上真正的物理标准单元里面的数量非常多
0.18的这个库里边大约有124种
种类有124种
具体的个数是400多个
将近500多个单元
所以这是一个非常复杂的标准单元库
我们下面来看一下具体的一个标准单元
这是一个反向器
最简单的一个反向器
反向器的图非常简单
输入一个信号A
输出一个信号Y
反向器的端口特性
我们可以用这段Verilog代码给它表示出来
我们来看一下
在反向器描述它的内部特性的时候都有什么
这是一个具体的反向器描述的代码
我们来看一下
首先这是它的名字
第二是反向器的面积
一个反向器的面积大约是10个平方微米左右
刚才我们已经说了
它的高度是5微米左右
你就知道了
这个反向器的版图的宽度大约是2微米左右
对于反向器的输入管腿
我们有这些参数去描述它
输入管腿A的方向是输入
它有一个等效电容
对于任何物理器件而言
非门相当于两个MOS管
一个PMOS管
一个NMOS管
MOS管的栅极会有等效的对地电容
等效的栅电容
所以这个电容是这么多
单位是皮法
我们这里面就可以看出
一个非门输入端的等效电容大约是三个fF这么大
对于输出端
方向是输出
它的功能是对输入求反
然后下面有好多参数
我们就不去一一的细说了
太细了
大致有几类参数
我们看一下
第一个是功耗参数
非门有一个很详细的描述方式
描述这个输出的功耗
非门的功耗跟输入端的这个管腿有什么关系
第二个是timing的参数
用一张表格去描述了
在不同的输入情况下它的延时是多少
也就是说
非门的输出跟输出之间的功耗
或者是非门的功耗跟延时都不是简单的
一个数能够描述出来的
要想准确的描述这个非门的
功耗和时序特性是要用一张复杂的
表才能够表述出来
我们再来看一下触发器的时序模型
这个模型在我们讲RTL级设计的时候已经讲过了
那么这里面我们再更详细的讲一下
我们来看一下
在这个触发器里面
我们的输入的信号是有D信号和clock信号
输出是一个Q信号
在这里面
所有信号都不是一个理想信号了
都换成实际的信号了
所以时钟的上升沿和时钟的下向沿都是一个斜的沿
第二个
对于数据而言
我们说触发器要求输入的
数据在时钟上升沿来到之前
必须是稳定的
在时钟上升沿之后一段时间内也必须是稳定的
这两个时间分别叫做建立时间和保持时间
当时钟上升沿来到以后
输入的数据会被送到输出端去
数据送到输出端的
过程是要花一定的时间的
用的时间是Tc2q
也就是说时钟上升沿之后
经过这个时间数据才能够稳定输出
在这期间数据是不稳定的
在这段时间内数据是不稳定的
那么这个tc2q也不是固定的
它是分两部分
一个是跟电路内部特性相关的
第二个是跟电路的外部特性相关
也就是说电路挂的负载越重
延时就会越大
这是触发器的时序模型
这里面我们看到描述一个触发器
或者说描述一个电路的特性
我们关注的是两方面
一个是延时
一个是功耗
我们来看一下电路的延时都是怎么计算的
对于延时的话呢
我们大致可以用这两个公式
来表述一个电路单元的延时
那么首先来看一下典型延时
那么典型延时是什么呢
它等于内部延时加上跟负载相关的延时
负载相关的延时呢
一个是负载的系数有关系
负载系数是跟电路内部特性相关的
第二个是跟负载的电容大小有关系
也就是说
我们当一个负载
一个物理器件
它所驱动的负载越重的话
这个电路的延时就越大
我们也就知道了
当我们的一个D触发器后面
挂了好多扇出系数特别大
挂了好多门的时候
这个触发器的延时也会增大
所以要解决这个问题怎么办呢
就是要把原来的比较大的扇出
要用一种树状结构去改善它的输出负载
这是典型延时
然后总的延时是什么呢
又可以用这么一个复杂的公式来表示
总的延时跟工艺参数
跟电源电压 以及跟温度都有关系
它是在典型延时的基础上去乘以这些系数
我们可以看到当工艺变化的时候
总的延时会有所变化
当电源电压变化的时候
总的延时会有所变化
当温度变化的时候
总的延时也会有所变化
我们再来看电路的功耗
电路的功耗跟三部分相关
一部分是跟电路的输入管腿相关的功耗
第二个是跟电路的输出管腿相关的功耗
第三个是跟电路的负载相关的这个功耗
我们看一下输入管腿是跟每部分的
功耗都有关系
是按照每个管腿来计算的
输出的话也是相类似的
那么跟负载相关的功耗呢是CV2f
我们大致是跟C、V的平方、f成正比
这是我们电路里面所说功耗计算的公式
所以我们知道
如果要降低电路的功耗
我们需要降低电路的负载电容
也需要去降低电路的电源电压
第三个是要去降低每一个管腿的翻转次数
从这三个角度我们可以降低整个电路的功耗
下面我们来具体看一个D触发器这样的标准单元
我们所有电路设计都是以D触发器为基础的
这个例子是一个带有低电平异步复位端的
上升沿触发的D触发器
说得比较长
也是一个标准的D触发器
我们来看一下它的特性
右边是D触发器的工作的功能图
我们就不管了
我们看它的物理参数
我们看符号上虽然只有一个D触发器
但实际上这个D触发器有具体四种元器件
对应的名字是DFFRX
最后一个字母可能是L 1 2 4
表示我们这个电路的驱动能力有四种情况
一种是低功耗版本
第二个是标准的
x1表示是标准的驱动能力
x2 x4
表示驱动能力比较大
那么不同的驱动能力最终做出来的
D触发器它的物理的尺寸也会稍微有一点点不同
我们可以看到
最大的D触发器大概100个平方微米左右
最小的D触发器大概70个平方微米左右
那么对于最大的D触发器
我们知道大概是10个非门这么大
那么D触发器的输入管腿D CK和复位端
每一个输入管腿都有输入的等效电容
我们前面讲了
我们一般都是以标准驱动能力的D触发器为例
那么它的输入等效电容大家可以看到
大概在两个fF这个量级
所以我们大致脑子里面可以有一个印象
输入等效电容应该在fF这个量级
然后我们再看一下时序和功耗方面的参数
对于输入的这些管腿
输入和输出这些管腿我们看一下
功耗的参数是每个MHZ多少个uW
我们可以看到大概在1% uW
功耗会比1% uW略大一点
这是每个管腿的等效功耗
我们再看一下延时特性
输入的D端相对于CK的
建立时间和保持时间大概在多少呢
大概在0.1ns这个量级
是0.1ns这个量级
内部的延时
c2q的延时
大概在0.3 0.4ns这个量级
负载特性
就先不看了
从这里面我们可以知道D触发器
0.18微米的D触发器,它的几个基本的物理参数
大概在什么量级上
然后我们来看一下时序逻辑电路工作的
基本的原理
或者说EDA工具在优化时序逻辑电路的
时候它用的是一个什么样的模型
我们画出了RTL级电路它在实现的
时候的电路图以及它跟时钟之间的
相对关系
我们看到所有的触发器 首先我们电路里面的
所有的D触发器
用的都是同一个时钟
我们称之为全同步电路
这是第一个
第二个
我们在上一级D触发器
在时钟的有效沿
D触发器可能是有一堆
并不是一定是一个
在时钟的有效沿到来的时候
这里面用的是时钟的下降沿
在有效沿到来以后
它们把数据送到输出端
输出端的数据经过云图
也就是一大堆组合逻辑电路
计算产生出输出信号
输出信号被传递到下一级D触发器的
输入端
下一级的D触发器会在
或者说第二级D触发器会在它的时钟的
有效沿把数据给它锁存下来
那么从前面一个时钟到后面一个时钟
正好是一个时钟周期
也就是说要求数据从低一级的D触发器的输出
经过组合逻辑电路的计算传到第二级D触发器的输入
这个时间不能超过一个时钟周期
这样的话呢
我们的时序逻辑电路才能够稳定的工作
我们把云图里面的所有的路径全部计算一遍
这就是静态时序分析方法的基础
把从每一个输入端
云图的每一个输入端传递到每一个输出端的
所有的路径
全部计算一遍
把其中的最长路径找出来
最长的一条关键路径找出来
最长的一条路径我们称之为关键路径
那么这条路径的延时决定了我们电路工作的
最高工作频率
或者决定了时钟周期
最短不能短于多少时间
我们把这些参数列出来
这个时间是多少呢
从时钟的有效沿到来
D触发器的输出数据
需要一个Clock-to-Q的时间
然后穿过组合逻辑电路
穿过这些门电路到这儿有一个
我们称之为穿越组合逻辑电路的最大延时
然后后一级触发器要求数据
在时钟有效沿到来之前一段时间
也就是建立时间必须是稳定的
所以的话呢
这三个数据加起来
Clock-to-Q加上穿越组合逻辑电路的最大延时
加上建立时间
加起来必须小于时钟周期
这就是静态时序分析的一个准则
-软件下载说明
-a) 集成电路的应用及市场
-a) 集成电路的应用及市场--作业
-b)集成电路的制造过程
-b)集成电路的制造过程--作业
-c)从CPU的发展看IC的进展
-c)从CPU的发展看IC的进展--作业
-d)从行业的发展看IC的进展
--Video
-d)从行业的发展看IC的进展--作业
-e)从ISSCC看IC的发展方向
--讲课视频
-e)从ISSCC看IC的发展方向--作业
-a)数字系统的实现方法 (ASSP/FPGA/ASIC的对比)
--讲课视频
-a)数字系统的实现方法 (ASSP/FPGA/ASIC的对比)
-b)组合逻辑电路
--Video
-2、数字集成电路设计方法--b)组合逻辑电路
-c)时序逻辑电路(1)
-d)时序逻辑电路(2)
-2、数字集成电路设计方法--d)时序逻辑电路(2)
-a)Verilog的历史和学习要点
--讲课视频
-b)端口、信号及数据类型
--讲课视频
-b)端口、信号及数据类型--作业
-c)逻辑电平及数据操作
--讲课视频
-3、Verilog语法--c)逻辑电平及数据操作
-d)Assign 语句
-e)Assign 举例
-f)Always
-f)Always--作业
-g)阻塞与非阻塞赋值
--Video
-3、Verilog语法--g)阻塞与非阻塞赋值
-h)D触发器的描述
--Video
-i)时序电路的设计
--Video
-i)时序电路的设计--作业
-j) 面向测试的Verilog语法(1)
-k) 面向测试的Verilog语法(2)
-k) 面向测试的Verilog语法(2)--作业
-a)电路设计实例1
--Video
-b)电路设计实例2
--讲课视频
-b)电路设计实例2--作业
-c)电路设计实例3
--讲课视频
-Modelsim仿真
-a)综合及相关基本概念
--Video
-a)综合及相关基本概念--作业
-b)综合及优化
--Video
-c)门级仿真
--门级仿真
-d)Quartus综合及分析(1)
--讲课视频
-e)Quartus综合及分析(2)
--讲课视频
-e)Quartus综合及分析(2)--作业
-f)Quartus综合及分析(3)
--Video
-g)Quartus综合及分析(4)
--Video
-g)Quartus综合及分析(4)--作业