当前课程知识点:IC设计与方法 >  6、Quartus工具 >  d)Quartus综合及分析(1) >  讲课视频

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

讲课视频在线视频

讲课视频

下一节:讲课视频

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

讲课视频课程教案、知识点、字幕

可编程器件的设计流程基本上都是相类似的

虽然我们学习的是Quartus II的流程

针对Xilinx公司的ISE这样的设计工具

它的设计流程也基本上是相似的

这门课的课件主要是基于Altera公司提供的

培训教程摘取得到的

我们首先来看一下PLD的设计流程

设计的起点是我们的设计规范

设计需求(Design Specification)

或者简称Spec

根据Spec我们设计出

在RTL结构上

完成电路的设计

也就是初始的RTL代码

或者说一段Verilog代码

我们对于这段Verilog代码

进行RTL级的电路仿真

仿真既可以用Altera公司提供的

Quartus II内嵌仿真工具

也可以用我们这门课所建议的

Modelsim仿真工具来进行验证

验证的目的是验证电路的

功能是不是符合我们的设计需求

在验证阶段还没有时序相关的信息

也就是说

没有器件的延时

验证完了以后

前两个小节

我们讲过怎么用ASIC工具

例如Synopsys公司的

Design Complier完成电路的综合

我们讲ASIC综合完了以后

还要去完成ASIC流程的后端的布局布线

在可编程器件的设计流程里面

通常物理实现的

综合及布局布线这两个(步骤)都由Altera公司提供的

Quartus II工具

可以一步完成

在这个工具里面

全部集成在这里面了

但是流程还是分为两个流程

第一个是综合

把我们的RTL电路映射成具体的器件来实现

也就是说用门级网单来完成我们的电路映射

门级网单映射完了以后

是进行布局布线

把这些元器件

综合后的元器件具体的用Altera公司的

器件替换下来

以及在电路内进行布线

完成电路的连接

这就是一个物理实现的过程

布局布线完了以后

我们要进行时序分析

时序分析证明我们的电路性能满足要求以后

然后我们再来做门级仿真

大家注意

我们在PLD的设计流程里面是先做时序分析

再做门级仿真

其实在ASIC的设计流程里边

也是要先做时序分析的

考虑到设计工具的原因

我们跳过了时序分析这个过程

直接进行门级仿真

在PLD的设计流程里面

应该先做时序分析

再做门级仿真

因为工具已经集成了时序分析的功能

所以时序分析是可以很方便进行的

所以我们就一定要先做时序分析

为什么先做时序分析呢

因为在我们的一个设计里面

如果说时序满足不了要求

简单来说

举个简单的例子

我们做的一个计数器

本来希望能跑到100MHz

结果我们现在做的计数器只能跑到10MHz

那说明我们的设计思路有问题

我们的设计方法有问题

我们需要重头去改电路的RTL代码

即使我们电路的门级仿真功能是对的

那也没有任何意义了

所以只要时序满足不了要求

我们就得返工重来

直到时序满足了我们的设计要求以后

我们才有必要再去验证电路的

功能是不是满足我们的要求

所以通过时序分析以后

然后再去做门级仿真

验证经过综合以后的

经过布局布线以后的最终电路

是不是还跟我们初期的

设计需求和供应需求是一致的

当门级仿真也验证完了以后

时序也是正确的

门级仿真的结果也是正确的

证明我们这个电路在这两方面

都达到了我们的需求

然后就把电路

在最终的ASIC和最终的实现上

再往下走一步

也就是把设计所综合出来的数据流文件

下载到可编程的芯片里面去

并且上到实际的PC板上去

在实际的系统里面进行测试

测试的话有相关的编程工具 测试工具

调试工具

我们在后面有机会再给大家介绍

具体到物理实现的综合和布局布线

在工具里边

一般给它起的名字叫Compile(编译)

ASIC器件

或者说可编程器件的编译和软件的编译

是不一样的

软件的编译

C语言的编译是把C代码

转变成在计算机上可以执行的二进制文件

可编程器件的编译是把RTL代码

变成物理器件上可以实现的电路

刚才已经讲了

具体的编译过程分为几个方面

一个是前端的综合

后端的布局布线以及产生相关的输出

相关的输出大致有几类

一类是时序分析相关的输出网单

用于做时序分析

第二个

是用于仿真的网单

也有用于仿真的网单

这是跟ASIC设计稍微有点不同的

第三个

是产生编程用的

对器件编程的配置文件

输出文件

这个文件可以把一个没有任何功能的

可编程器件变成一个能够实现我们功能的

专用器件

具体到编译这个过程

这个工具提供了很多的详细的操作

细节的操作

也就是说

在编译过程里面

它分为很多细的过程

包括我们前面所说的综合、布局布线

时序分析

IO的分析等等

在Quartus II工具里面

提供了一个工具条

在右上角的工具条

既可以傻瓜似的按一下这个按钮

完成整个编译过程

也可以一步一步只完成中间的某一个细节的过程

我们来稍微仔细看一下

这个傻瓜式按钮表示full compilation

完成所有的编译过程

对于初始设计

或者说简单设计

我们就可以一步完成所有过程

对于复杂设计

综合布局布线

时序分析等等这个可能都需要花数个小时

甚至是数天的时间来完成

我们如果每次都是只按这个按钮的话

就会浪费很多时间

所以我们尽可能的一步一步来做

大致有几个

我们稍微看一下

一个是Elaboration

表示只对我们的设计进行初步的

语法检查和可综合性检查

检查一下我们的设计里面有没有语法错误

以及我们的RTL级代码

是不是可以映射出具体的电路

和我们的ASIC的综合相类似

这个过程有点像我们的File Read

就是把设计读进来的过程

在Elaboration过程

回想一下ASIC设计流程

我们其实在读入设计过程

就会去分析设计里面

有哪些电路会被映射成D触发器

这样的话呢

我们就可以去检查

我们是不是有一些原则性的错误

比如由于代码书写风格的问题

把组合逻辑电路变成了时序逻辑电路

在这一步就可以检查出来

再下一步是去进行综合

把RTL级的代码变成了具体的电路

变成了具体的门级网单

综合了以后

就可以初步去估计一下时序的信息了

综合完了以后

再就是Fitter

把具体的RTL级的电路

映射到我们选择的Altera公司的

某一款型号芯片上去

然后就是Assembler

这两个基本上都是后端的布局布线的工作

把它合在一起就可以了

做完以后

到这一步为止

我们说综合、布局布线就已经基本完成了

下面要做

分析工作

一个是时序分析Timing Analysis

分析一下我们电路的

时序性能是不是满足要求

时序分析完了以后

理论上就可以用第三方的工具

Modelsim去做功能分析了

在功能分析之前

通常我们还可以去做一下IO管腿的分析

因为对于一个物理器件

可能会用到几百个

上千个

如果是高端的可编程器件的话

可能会有上千个管腿

我们还可以去分析一下这些管腿的安排

是不是合适

具体要分析哪些问题

我们后面会去讲

完成这些分析以后

设计流程就基本上是做完了

在做的过程中

和我们用专业的ASIC软件综合是相类似的

我们要时刻的关注每一步所给出来的

报告

关注这些信息是否正确

在左边的这个窗口里边

会报告我们的过程是不是百分之百的正确

如果有错误的话

在中间的任何一个过程可能都会停下来

然后我们再去检查相应的

某一步是不是有错误

在下面的窗口里面

会给我们报告每一步里面相关的信息

我们要关注是不是有Error和Warning

对于一个复杂的设计

这个信息可能会翻好几屏

我们把这个窗口放大了

仔细的一屏一屏去翻

确保没有任何一个Warning或者是Error

对于这个集成工具而言

有些Warning或者是Error

可能很难看出它是什么意思

需要及时去查帮助

查找相应的帮助信息

或者从网上搜索相关的资源

确定这个Warning信息是可以忽略的

有一些Warning信息是可以忽略的

但自己一定要能够明确是什么原因

在这个窗口

会给我们报告出设计的相关信息

例如我们用的是什么器件

资源的占用情况等等信息

我们把刚才这个信息窗口适当的放大

我们可以看到

在设计的每一步都可以给出相关的报告

比如综合

例如前面的综合

可以给出综合的相关的详细报告

例如综合的设置

以及综合完了以后相关的结果

都是什么结果

Fitter相关的信息

Assembler相关的信息

以及Timing Analysis 信息

时序分析相关信息

例如我们仔细看一下这个设计

在这个设计里边呢

我们选择的是这款芯片

总的资源占用率的情况

总的设计一共有1万多个LUT

1万多个查找表

我们的资源占用只有92

占了1%

总共芯片有300多个管腿

我们使用了22个

资源的占用率大概是6%

总共芯片里边有400多K的Memory

Memory

我们的设计并没有使用Memory

后面是PLL的占用情况

DLL的占用情况

所以在这个报告里边

可以看出这个设计在可编程器件里面的

占用情况

包括资源的占用情况

时序的分析结果

Pin的输出情况等等这些信息

一般来说

对于一个可编程器件

我们要保证设计对各类资源的

占用情况

尽可能不要超过80%

这样的话

我们还留出了一定的余量

这个余量通常有两大类作用

一个是我们设计时不时会去修改

如果有错误的话

可能就需要去修改

有时候修改会导致设计的规模会

有所增加

这样

我们保证修改以后的

设计还能够在这个芯片里面放下

第二

留了一定余量以后

我们设计在使用过程中

有可能还会增加新的功能

有了这些余量

使我们的设计还具备升级的潜力

而不致于将来就不能增加任何新的功能了

我们来稍微详细的看一下资源的使用情况

资源的使用率

比如说

我们看输入管腿

这里面详细的报告出我们的输入管腿都有哪些

每一个输入管腿的信号

以及它的Pin的名字

在每个器件里面的物理名字

在Pin的某一个IO的Bank等等

还有Pin相关的一些属性

比如这个管腿是不是一些具有特殊功能的管腿

是不是PCI相关的管腿

是不是在上电的时候

需不需要把管腿做特殊的设定

比如说高电平

或者是低电平

等等一些详细的信息

都可以看到

对于有一些特殊功能的管腿

例如clock

我们要指定到芯片的全局时钟端

这样的话能够保证这些clock信号

能够用到芯片的全局时钟网络

使clock信号的延时(最小)

这些都是和可编程器件的特性相关的

在我们这门课里边会详细的介绍

大家在其它课程里面去学习

可编程器件使用的一些特殊要求

在综合的过程里边去看相关的

设置是不是符合器件的要求

首先我们来看一下综合的设置

这有点像ASIC的综合里边的约束

第一部分是关于器件和相关的

语法环境的一些设置

大概包含几方面

一个是顶层设计的名字

通常我们的设计是树状的设计

工具一般来说会帮助我们自动分析

设计的树状结构

作为设计人员

还要去检查一下树状设计的顶层

顶底单元是不是正确

第二个是我们的目标器件

目标器件的类型和种类

目标器件的类型以及具体的

器件的型号是不是选择错误了

第三个是我们的设计文件

我们设计里面都包含哪些设计文件

以及可能用到的一些库文件

例如用到了一些IP库等等

对于我们的RTL代码

不管是VHDL

还是Verilog

因为VHDL和Verilog都有很多语法标准

不同年代的标准

到底你的代码是使用的哪个年代的标准

比如说我们是Verilog的95标准

还是2001的标准等等

这个要设置好

再往下是EDA工具的设计

综合的话

既可以用Quartus II自带的内部综合工具

也可以调用第三方综合工具

仿真的时候也是一样

既可以用Quartus II自带的仿真工具

也可以用第三方的仿真工具

这些都是要设置

再往下就是Timing分析的一些设置

以及综合的设置和仿真工具设置

后面我们会详细的去讲

我们来看一下综合的过程

前面讲过具体在综合的时候

只是一个简单的Compile按钮

在综合的时候

软件会提供很多综合的策略和方法

例如它可以提供智能综合的方式

采用智能综合

它主要是用于增量综合

后面我们会讲增量综合

采用增量这种综合技术

可以节约我们的综合时间

并且能够节省磁盘的空间

通过类似这些手段

可以让我们综合的速度更快

刚才我们已经讲了

传统的设计

或者是稍微复杂一点的设计

可能会花几个小时

甚至是几天的时间来综合一遍

通过这种智能综合的方法

可以给我们节省很多时间

我们来看一下什么是Incremental Synthesis

假设我们的设计

我们一个顶层设计TOP里面包含了两个小的设计

一个设计A

一个设计B

这两个小的设计

设计A和设计B

在我们的顶层设计里面可以例化

是这样的层次结构

对于一个这样的设计

我们不管采用什么手段去进行综合

它花的时间是差不多的

我们来分析一下设计结构

通常我们对于RTL级的设计A

和RTL级的设计B

我们分别综合完了以后

或者说即使是在RTL级

它们在顶层设计的层次

A和B以及顶层之间

通常只存在一些物理的连线

而不存在复杂的逻辑结构

这是我们RTL设计的

设计规范的要求

也就是说

所有的逻辑功能

我们应该在每一个底层设计里面实现

在顶层设计里边只是进行相关的连接

这样

综合或者是说布局及相关的优化工作

其实都是体现在底层的A和底层的B里边的

我们想象一下

假设我们做完了这个设计

通常我们设计不会一次正确

通过在设计流程里边

我们会发现

在A或者说B里边

有一个BUG

有这样一个BUG以后呢

我们就要回过头来去修改我们的B里面的BUG

然后重复这个设计流程

也就是说要对设计重新去做综合

在这次综合的时候呢

A电路其实没有必要再去综合了

因为A并没有做修改

假设对电路综合的时候

如果A综合要5个小时

B综合要5个小时

顶层综合呢

因为只有连线

它几乎不用花时间

所以

在做第二次综合的时候

如果我们不对A去重新综合的话

我们就可以节约出对A综合的5个小时了

所以这就是Incremental增量综合的

概念的由来

如果我们对设计采用增量综合的方式

把A B分开以后

这样在第二遍

也就是修正我们电路BUG的时候

我们综合的时候

只对电路有修改的部分去进行综合

进行重新的布局布线

这样的话就能节约大量的时间

这就是增量综合

我们来看一下怎么进行增量综合

做的过程中

这是我们设计的树状描述

我们需要告诉软件

我们设计的层次划分以及对哪些电路

可能要采用增量综合技术

哪些小电路

可能就不用采用增量综合技术了

所以我们需要把采用增量综合技术去考虑的电路

把它mark出来

把它作为增量综合的单元

这样的话呢

在我们设置成

如果说综合的时候采用增量综合这种技术的话

增量综合这种手段的话

那么将来在综合的过程中

这个单元

设计工具就知道了

碰到这样的单元

我们就只综合它改变的部分

如果是没有发生改变的话

相关的电路就不再进行综合了

具体操作非常简单

我们做好相关的设置以后

所有的操作过程跟普通的操作是相类似的

按照标准的操作流程做就可以了

软件会自动帮我们采用相关的

增量综合的方式来进行综合

在综合的选项设置里边

我们可以让EDA工具去采用适合的

手段去进行约束

进行优化

这个选项有点像我们ASIC过程里面的约束

关于速度和面积方面的约束

在第一部分

可以让软件帮我们去考虑速度优先

还是面积优先

还是在两者之间去做平衡

在具体优化的方法里边

可以选择一些逻辑优化的方式

包括就是说

用这种方式来进行逻辑优化

等效的宏单元来替代我们自己所描述的

逻辑功能

或者逻辑函数

因为在可编程器件里边

厂家已经替我们设计好了一些功能固定的

宏单元

比如说加法器、乘法器

滤波器等等这些电路

这些电路的实现效率

这些宏单元的实现效率

比我们自己用RTL代码实现的效率要高

所以

工具会自动提炼出相关的宏单元

来替代掉我们所设计的代码

对于有限状态机的状态编码

可以采用这三种方式One-Hot

或者是MinimalBit这种方式

以及自动选择方式

来进行状态编码

换句话说

如果我们代码里边的有限状态机采用的

不是明确表示的状态编码方式

而是用枚举类型

或者是抽象类型来表示的话

工具会帮我们自动去选择相关的

状态机编码方式

提高我们的编码的效率

在布局布线的时候

也是类似

那么可以采用几种不同的方式

选择快速的布局布线方式

在初期的设计的时候

比如说我们设计刚刚完成

第一遍去验证我们设计功能是不是正确

这时候呢

我们并不过多的去考虑我们实现的效率

这时可以采用快速的一些方法来完成

用一个小时就可以完成布局的线

当我们设计工作已经调整好了

最终我们希望用紧凑的设计

实现更好的性能的时候

我们就选择标准的布线方式

来使我们的设计达到最好的布局布线的

一个效果

在IO管腿指定方面也有很多需要注意的

一些细节

如何指导IO管腿?

通常我们从板级或者系统级的需求

我们对芯片的每一个信号管腿的

指定会有一些要求

比如说我们可能会把数据总线的八位

或者十六位

通常我们在布局布线的时候希望它们在一起

或者说在同一个方向

或者说在同一个Bank里边

那么这样的话呢

我们在指定管腿位置的时候

我们可以指定

这一系列的管腿全部放在芯片的左边

我们并不给某一个管腿指定具体的名字

比如说必须放在左边的第一个管腿

还是第二个管腿

这样就给布局布线工具

留出了一定的灵活性

只要它固在芯片的左边就可以了

这样它可以采用更灵活的布线方式

使最终布完了的线最短

芯片的性能最好

这是一种方式

第二个

在我们的复杂芯片里面

IO可能会有好多Bank

好多Bank是指什么意思呢

通常每一个Bank的IO里边的

供电电压是相同的

我们的一个芯片可能会接有2.5V的输入输出信号

3.3V的输入输出信号

1.8V的输入输出信号

我们可以把相关的

信号指定在同一个Bank里

这样的话

它们的电压域是一样的

它们的驱动方式都是相同的

这样就为我们灵活的这种布局布线的

这种约束方式

指定完IO管腿以后

通常我们还要做一个IO管腿的指定分析

为什么要这么做

因为可编程器件的很多IO管腿有特殊的功能

比如有时钟专用的管腿

复位信号专用的管腿

PCIE相关的管腿

存储器相关的管腿

串形接口相关的管腿等等

我们要去分析这些特殊功能的管腿

和我们的指定是不是有冲突

这是IO管腿分析的一个结果

我们可以看到

在分析结果里面

可以给出我们详细的IO分配表

这个表可以用于后续的PCB的布线工具去进行分析

相关的分析文件

以及相关的输出管腿的负载等等这些信息

都可以在相关的信息窗口里边

汇总窗口里面都可以给出来

下面我们来总结一下

可编程器件的编译过程包含几个方面

一个是编译

包含了综合和布局布线两个过程

是需要我们去关注的

需要我们去做设置和约束

第二个是编译的结果

包含了详细的信息

包括管腿的信息

包含时序的信息

资源占用率的信息

第三个是我们的设置

各种设置和约束

IO管腿的设置

Timing方面的约束

这个综合策略的约束

这些都可以控制我们

或者说改变我们的综合过程

在某些方面调整

微调综合的结果

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

讲课视频笔记与讨论

也许你还感兴趣的课程:

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