当前课程知识点:IC设计与方法 >  6、Quartus工具 >  c)门级仿真 >  门级仿真

返回《IC设计与方法》慕课在线视频课程列表

门级仿真在线视频

门级仿真

下一节:讲课视频

返回《IC设计与方法》慕课在线视频列表

门级仿真课程教案、知识点、字幕

大家好

下面我们开始讲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设计而言

我们就可以把相关的设计继续走下一步的

也就是后端设计过程

这节课就到这儿

IC设计与方法课程列表:

课程准备:Quartus II软件的下载

-软件下载说明

--Quartus II软件下载教程

1、集成电路的发展

-a) 集成电路的应用及市场

--1-1集成电路应用及市场

-a) 集成电路的应用及市场--作业

-b)集成电路的制造过程

--1-2 集成电路的制造过程

-b)集成电路的制造过程--作业

-c)从CPU的发展看IC的进展

--1-3从CPU的发展看IC的进展

-c)从CPU的发展看IC的进展--作业

-d)从行业的发展看IC的进展

--Video

-d)从行业的发展看IC的进展--作业

-e)从ISSCC看IC的发展方向

--讲课视频

-e)从ISSCC看IC的发展方向--作业

2、数字集成电路设计方法

-a)数字系统的实现方法 (ASSP/FPGA/ASIC的对比)

--讲课视频

-a)数字系统的实现方法 (ASSP/FPGA/ASIC的对比)

-b)组合逻辑电路

--Video

-2、数字集成电路设计方法--b)组合逻辑电路

-c)时序逻辑电路(1)

--2-3时序逻辑电路的设计方法 (一)

-d)时序逻辑电路(2)

--2-3时序逻辑电路的设计方法 (二)

-2、数字集成电路设计方法--d)时序逻辑电路(2)

3、Verilog语法

-a)Verilog的历史和学习要点

--讲课视频

-b)端口、信号及数据类型

--讲课视频

-b)端口、信号及数据类型--作业

-c)逻辑电平及数据操作

--讲课视频

-3、Verilog语法--c)逻辑电平及数据操作

-d)Assign 语句

--3-1-4assign语句

-e)Assign 举例

--3-1-5 Assign 举例

-f)Always

--3-1-6 Always

-f)Always--作业

-g)阻塞与非阻塞赋值

--Video

-3、Verilog语法--g)阻塞与非阻塞赋值

-h)D触发器的描述

--Video

-i)时序电路的设计

--Video

-i)时序电路的设计--作业

-j) 面向测试的Verilog语法(1)

--3-3-1面向测试的Verilog语法(1)

-k) 面向测试的Verilog语法(2)

--3-3-2 面向测试的Verilog语法(2)

-k) 面向测试的Verilog语法(2)--作业

4、电路设计实例

-a)电路设计实例1

--Video

-b)电路设计实例2

--讲课视频

-b)电路设计实例2--作业

-c)电路设计实例3

--讲课视频

5、Modelsim仿真工具

-Modelsim仿真

--Modelsim仿真

6、Quartus工具

-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)--作业

门级仿真笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。