当前课程知识点:IC设计与方法 > 6、Quartus工具 > c)门级仿真 > 门级仿真
大家好
下面我们开始讲ASIC综合(后的门级仿真)
前面我们已经讲完了综合
我们的设计从RTL代码开始
经过综合工具
把原始的RTL代码转变成了门级网单
转变完了以后的门级网单跟最初的RTL代码的
功能还是不是一致呢
我们就要通过后仿真来验证这两者之间的
一致性
换句话说
就是验证RTL综合以后的门级网单
它的功能是不是还和原始的
电路的功能是一致的
具体综合的过程
具体前仿真和后仿真
或者说功能仿真和门级仿真它们之间的
关系
我们可以用这样一张图来表示
我们最初的设计是一个RTL级设计
可能是verilog文件
或者是VHDL文件
RTL级的设计通过仿真器来验证它的功能
是不是正确的
在验证的时候
我们需要写一个测试平台testbench
把RTL文件和testbench文件同时送到
仿真器里面去
然后由仿真器来进行模拟
我们通过检查仿真器的输出
通过波形
或者是其它的文本的输出
或者别的方式来检查
设计功能是不是和预期的一致
如果通过以后证明
设计初期的功能是对的
然后把RTL级的设计文件送到
综合工具里面去进行综合
综合工具会把RTL级设计转变成具体的门级电路
表现形式有两个方面
一个是电路的连接关系
我们称之为门级网表
门级网表可能是VHDL文件
也可能是verilog形式表示的电路的连接关系
另外
还有一个文件就是时序相关的文件
我们称之为时序反标文件
在这个文件里面
描述了具体的门电路的延时特性
以及里面的互连线相关的延时特性
我们现在需要对门级电路
再去仿真验证一遍
去看看门级电路的功能和我们原始的
RTL级设计的功能是不是一致
这个仿真
我们称之为门级仿真
用的仿真工具还是同一个仿真工具
在对门级网单进行仿真的时候
我们同样要为他施加激励
我们还可以延用过去我们的
testbench测试平台
在门级网单里面
会用到具体的底层的门电路
包括与非门
或非门等等这些和工艺相关的元器件
这些元器件的特性在哪呢
厂家或者第三方的
开发公司会给我们提供一个库文件
比如我们在ASIC综合的时候
用的是UMC18的工艺
所以我们会有一个UMC18的描述底层的
门电路和底层的D触发器等等这些器件特性的
verilog文件
所以我们就要把这四类文件
原始的门级网单
测试平台
以及底层的库单元
还有时序相关信息
把这些文件送给仿真器
仿真器会对门级网表进行精确的仿真
然后再输出一个波形
这样
我们再次去检查这个波形的
功能是不是能满足我们的预期要求
这就是门级仿真所做的第一件事
验证这两者之间的功能是不是一致
另外
由于门级仿真的时候
我们有了时序相关的信息
所以
我们还可以在门级仿真的
波形图里边去检查电路的时序是不是正确
这是门级仿真额外能做的一件事情
具体门级仿真的过程
我们来看一下
门级仿真的过程和功能仿真的过程相类似
不同之处就是我们用到了一个库文件
我们需要对库文件重新编译一遍
编译的过程跟RTL级设计的
编译过程是相类似的
编译的过程是一个自底向上的过程
首先编译底层的库文件
然后编译门级网单文件
再去编译测试平台文件
最后由于工具的需要
如果我们用的是modelsim这样的工具
那么时序反标可以直接内嵌在工具里边
那么如果我们用的是其它工具
比如这页幻灯片和后续幻灯片
我们讲的是用Cadence 的NC这样的工具
那么我们需要单独的去编译时序反标文件
还要编写时序反标相关的命令文件
完了以后
我们再完成一个完整的编译过程
如果是用Cadence的NC工具
我们还要先做一下elaborate
然后再进行仿真
最后是去检查仿真的结果
编译库文件的时候
有一个特别需要注意的地方
由于门级网单里边
我们前面在介绍标准单元库的时候知道
标准单元库里面一共有100多种器件
总共有400多个器件
这些器件如果编译完了以后
混到了我们的RTL级设计的库文件里面
我们在这个库里面会有数百个元器件
很难去定位找到我们自己的RTL级设计
所以通常
我们会把底层的门级电路单独的去建一个库
比如我们建一个UMC18库
等将来换别的工艺的时候
我们还可以去建另一个库
不同工艺的库
但对于我们的RTL级设计都是同一个设计
可能会映射到不同的工艺上去
我们用相关的命令来建立好相关的库文件
然后把和库相关的verilog单独的
编译到物理库里面去
这样就实现了底层单元库和我们的工作库
或者说我们的RTL级设计
能够分开保存
对于底层的单元库
我们需要编译到特殊的库的目录里面去
比如UMC18的库文件
在编译的时候呢
因为我们的设计经常会需要重新编译
当我们修改设计了
或者说发现我们的设计有错误
重新做相关的流程的时候
就需要把这个库重新编译一遍
在编译的时候要及时清理过去的编译的内容
另外由于我们的RTL级的设计
或者说门级网单里边的
timescale所设置的仿真步长
仿真的单位和底层的单元库的仿真步长仿真单位
通常是会不一致的
有的工具有一些特殊的要求
例如以Cadence的NC工具为例
需要设置特殊的选项
要设置好大家统一的timescale
对于底层单元库而言
我们的仿真步长需要设的比较精细
仿真的步长通常要设到皮秒量级
比如1ps
或者10ps量级
对于RTL级平台
通常仿真的步长是在纳秒
或者是10个纳秒这个量级
在做门级仿真的时候
我们需要把综合所输出的
时序反标信息标注到门级网单上去
具体标注的时候
我们用的是verilog的一个系统任务
这个任务是$sdf_annotate
这个系统函数的目的
是告诉仿真工具对应的SDF文件
我们综合的时候
会输出一个SDF文件
里面保存了相关的时序信息
这个SDF文件和测试平台里面的
每一个设计是相关的
因为在测试平台里面
因为这个设计所用到的测试平台比较简单
只例化了一个元器件
对于复杂的设计
有可能会例化多个元器件
所以我们要把这两者能够对应起来
告诉(仿真工具)
SDF文件对应的是哪一个顶层模块
把这两者对应起来
对应完了以后
在verilog里边
我们一般调用系统任务的时候
采用的是initial进程
在initial里边只调用sdf一次
完成这样的映射
以uut这个设计为例
计数器被映射成为了一个名字叫uut这样的设计
所以我们在用SDF标注的时候
是把SDF文件标注到uut上
这样在编译的时候
编译工具就会把SDF里面所对应的延时信息
每个门的延时信息
反标到相应的待测设计上去
然后我们对整个设计重新再做一次仿真
我们来看一下仿真的波形
大家回顾一下原始的仿真波形
当我们只是在做RTL级仿真的时候
计数器在每一个时钟上升沿
计数的值加1
计数器的值从0变到1
0变到1的过程是一个非常快的过程
几乎是在时钟上升沿
经过0延时就翻转了
到了门级电路的时候
由于每一个门都有延时
物理世界上每一个物理器件都有延时
所以我们可以看到在做门级仿真的时候
D触发器
或者是计数器的输出Q是经过了一个纳秒
从500纳秒到501纳秒
经过了一个纳秒
从0翻转到了1
大家回想一下
这个值是不是偏大
我们当时看D触发器
一个标准D触发器的时候
它的门延时应该是零点几纳秒的量级
也就是说这张图的反标的信息可能是不正确的
在UMC18的库里边
当门级仿真的反标没有标注成功的时候
库会用它的默认延时
所有的器件
与非门 或非门
D触发器等等
所有的器件延时都是一个纳秒
所以从这张波形我们就可以看出来
在反标过程中发生了错误
错误有几种可能性
一个是刚才的SDF反标的信息
比如顶层设计的名字
或者SDF的文件等等这些名字写错了
有可能出现反标错误
第二
反标的整个流程做错了
可能会出错
总之在这个过程中出错
反标的结果就会出错
我们通过波形图就能够分析出反标是错的
如果反标是正确的
结果应该是这样的结果
我同时把局部的波形图放大
我们可以看到
对一个四位的触发器的输出
我们可以看到Q3 Q2 Q1 Q0
这些不同的信号线
翻转的时刻是有一个微小的差别的
最快的大概是700.2纳秒左右翻转
最慢的大概是在不到700.3纳秒就翻转完了
换句话说
翻转的延时应该大概是0.1纳秒左右
就从0翻转到了1
我们看到细部的波形
就会发现
由于不同信号线的翻转时刻不同
所以从0变成1
或者从上一个值
从3变到4这样的过程
它并不是直接从3变到4
而是从3先翻转到了1
再翻转到了0
然后才变成了4
如果看波形
相当于这个地方出了一个毛刺
类似这个数值上出现了毛刺
换个角度来说
也就是说
如果我们要把这个计数器的
输出去作为一个电路的输入的时候
那么这个输入波形就有毛刺了
对于我们后续电路取这个Q当作输入信号的时候
就非常重要了
如果只是作为一个状态信号
在稳定的时刻去取值的时候
是没有问题的
否则这个毛刺就可能造成后续电路的异常动作
如果我们这个Q只是作为一个输出指示
比如说是接到发光二级管
或者是类似这样的显示装置上
那么这个毛刺是不会有任何影响的
所以电路的输出结构
或者是输出信号到底用来干什么
我们要仔细的去分析
然后决定我们电路应该采用什么样的结构
类似用锁存结构
还是直接输出结构去处理这个Q信号
门级仿真的过程就是这么简单
用这几页幻灯片大概就可以表示完了
简单来说
就是在原来的RTL级仿真的基础上
增加了底层电路的信息
共用了同一个测试平台
然后对底层的电路去进行更详细的仿真
去验证这两者之间的一致性
另外我们还可以观察到局部细节
观测电路的局部是不是(会产生)毛刺
是不是稳定可靠等等这些信息
通过门级仿真以后
如果这两者波形是一致的
功能是一致的
那么我们就验证了我们的设计
最终实现完的门级电路跟原始的
RTL级电路这两者功能一致的
这就完成了一个设计过程
对于ASIC设计而言
我们就可以把相关的设计继续走下一步的
也就是后端设计过程
这节课就到这儿
-软件下载说明
-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)--作业