静态时序分析(static timing analysis,STA)是遍历电路存在的所有时序路径,根据给定工作条件(PVT)下的时序库.lib文件计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足约束要求,根据最大路径延时和最小路径延时找出违背时序约束的错误。
动态时序分析(dynamic timing analysis,DTA)通常是所有的输入信号都会给一个不同时刻的激励,在testbench(.sp或者.v)中设置一段仿真时间,最后对仿真结果进行时序和功能分析。 这里的仿真可以是门级或者晶体管级,包括spice格式和RTL格式的网表。(可以理解为仿真)
如下图所示的spice中给激励的语句和波形:
从上面的分析可以看出,静态时序的主要缺点是烧钱,需要很贵的工具。这一点国内的公司也容易解决,要么融资很多不差钱,要么用盗版。
而动态时序分析有2个致命性的缺点:关键路径无法检查全意味着里面可能有fail的path,芯片流片出来无法工作;仿真特别慢意味着你的schedule可能受到影响,无法按时交货。所以动态时序分析只适用于小规模的电路,通过给激励就能完成时序的检查,同时仿真的时间还能接受。
作者:IC君
链接:https://www.jianshu.com/p/c97a2dae9d97
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
ASIC(Application Specific Integrated Circuit, 专用集成电路)是一种在设计时就考虑了设计用途的IC。
FPGA(Field Programmable Gate Array, 现场可编程门阵列)也是一种IC。顾名思义,只要有合适的工具和适当的专业基础,工程师就可以对FPGA进行重新编程。
FPGA开发是利用HDL和quartus、vivado等EDA工具,重新配置(configure)芯片的功能,而ASIC通常都具有较少的可重配置能力。
ASIC基本都是基于标准单元开始设计的,还需要进行Place&Route(布局&布线)。当芯片存在任何问题时,必须再次重新投片,直到达到你想要的功能和性能。ASIC设计流程非常昂贵,至少需要几个月的时间才能完成。
ASIC在离开生产线后再也无法改变。这就是为什么设计师在大规模量产之前需要完全确保设计正确无误。工程师可以利用FPGA的可重配置这一优势,进行ASIC的原型验证,以便在将设计发送到代工厂之前,可以在实际世界中对其进行全面的测试。
FPGA是一大堆预制的门和触发器,具有可编程互连的特性。可以使用这些基本模块配置成你想要的任何逻辑功能。如果有错误,可以在几秒钟内重新编程,而不需要数月才能知道结果。然而,在FPGA中,有时候需要额外的硬件开销来进行正确的连接。
ASIC在重复成本方面具有很大的优势,因为在设计中浪费的材料非常少。对于FPGA,总是有很多的硬件资源被浪费。这意味着FPGA的重复成本通常高于同类ASIC的重复成本。
尽管ASIC的重复成本非常低,但其非重复成本相对较高且通常达到数百万。由于它是非重复性的,因此每个IC的成本随着量的增加而减少。
所以,在ASIC量产到一定量之后,使用ASIC可以比使用FPGA更便宜。与FPGA相比,ASIC在功耗,性能,尺寸和成本方面具有很大优势。
目前主流的FPGA芯片仍是基于查找表(LUT)。FPGA芯片主要由以下6部分组成:
对于一款芯片,我们肉眼看到的如图所示,看不出它有任何特点。
当我们对其内部放大时,看到如图所示结构,密密麻麻小方格,仍然完全看不出有什么特点:
当我们再对其内部进行放大时,看到如图所示结构,这时可以看到芯片内部的最基本组成单元:可编程逻辑单元、布线资源、可编程IO。
1.可编程输入/输出单元(IOB)
目前大多数FPGA的I/O单元被设计为可编程模式,即通过软件的灵活配置,可适应不同的电器标准与I/O物理特性;可以调整匹配阻抗特性,上下拉电阻;可以调整输出驱动电流的大小等。
ILOGIC/LOGIC资源可支持以下操作(这些资源之间的所有连接均由所编写代码控制):
- 边沿触发D型触发器
- 电平敏感性锁存器
- 异步/组合
- IDDR/ODDR模式
2.基本可编程逻辑单元(CLB)
FPGA的基本可编程逻辑单元是由查找表(LUT)和寄存器(Register)组成的,是实现时序电路和组合电路的主要逻辑资源。
FPGA一般依赖寄存器完成同步时序逻辑设计。一般来说,比较经典的基本可编程单元的配置是一个寄存器加一个查找表,但不同厂商的寄存器和查找表的内部结构有一定的差异,而且寄存器和查找表的组合模式也不同。
学习底层配置单元的LUT和Register比率的一个重要意义在于器件选型和规模估算。由于FPGA内部除了基本可编程逻辑单元外,还有嵌入式的RAM、PLL或者是DLL,专用的Hard IP Core等,这些模块也能等效出一定规模的系统门,所以简单科学的方法是用器件的Register或LUT的数量衡量。
3.时钟资源
全局时钟是一种专用互联网络,是专为覆盖对FPGA中各种资源的所有时钟输入设计的。这些时钟网络的设计旨在降低歪斜、占空比失真和功耗。其设计的目的还在于支持甚高频信号。
全局时钟控制资源和网络通常由以下通路和组件构成:
区域时钟每区域有2个区域时钟缓冲器BUFR和4个区域时钟树。区域时钟网络是一组独立于全局时钟网络的时钟网络。与全局时钟不同,区域时钟信号(BUFR)的跨度限于三个时钟区域,而IO时钟信号只驱动一个区域。
第三种时钟资源是IO时钟,可以达到非常高的速度,可用于局部的IO串行器/解串器。
4.丰富的布线资源
布线资源连通FPGA内部所有单元,连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。布线资源的划分:
1)全局性的专用布线资源:以完成器件内部的全局时钟和全局复位/置位的布线;
2)长线资源:用以完成器件Bank间的一些高速信号和一些第二全局时钟信号的布线(这里不懂什么是“第二全局时钟信号”);
3)短线资源:用来完成基本逻辑单元间的逻辑互连与布线;
4)其他:在逻辑单元内部还有着各种布线资源和专用时钟、复位等控制信号线。
由于在设计过程中,往往由布局布线器自动根据输入的逻辑网表的拓扑结构和约束条件选择可用的布线资源连通所用的底层单元模块,所以常常忽略布线资源。其实布线资源的优化与使用和实现结果有直接关系。
5.嵌入式块RAM
目前大多数FPGA都有内嵌的块RAM。嵌入式块RAM可以配置为单端口RAM、双端口RAM、伪双端口RAM、CAM、FIFO等存储结构。
CAM,即为内容地址存储器。写入CAM的数据会和其内部存储的每一个数据进行比较,并返回与端口数据相同的所有内部数据的地址。简单的说,RAM是一种写地址,读数据的存储单元;CAM与RAM恰恰相反。
除了块RAM,Xilinx和Lattice的FPGA还可以灵活地将LUT配置成RAM、ROM、FIFO等存储结构。
6.底层嵌入功能单元和内嵌专用硬核
底层嵌入功能单元是指通用程度较高的嵌入式功能模块(软核)。如锁相环(Phase Locked Loop,PLL)、DLL(Delay Locked Loop)、DSP(Digital Signal Processing)和CPU等。
与“底层嵌入单元”是有区别的,这里指的硬核主要是那些通用性相对较弱,不是所有FPGA器件都包含硬核。
CYCLONEⅡ系列FPGA器件由美国Altera公司出品,属于中端产品。采用了90nm的工艺,增加了片内逻辑单元数。为了方便说明,在此仅选用EP2C5进行分析讲解。
先了解一下FPGA的命名规则,这样就可以从芯片名字的角度来看这是怎么样性能的一款芯片了。
例如EP2C20F484C6,含义:
EP——工艺,
2C——cyclone2,
20——LE数量约为20K,
F——封装形式,
484——管脚数,
C——温度范围(确定其是工业级,军品级,还是商业级),
6——速度(数字越小速度越快)。
1.逻辑单元与逻辑阵列
逻辑单元(Logic Element,LE)在FPGA器件内部,用于完成用户逻辑的最小单元。一个逻辑阵列包含16个逻辑单元以及一些其他资源, 在一个逻辑阵列内部的16个逻辑单元有更为紧密的联系,可以实现特有的功能。
一个逻辑单元主要由以下部件组成:
查询表: 用于完成用户需要的逻辑功能,CYCLONEⅡ系列的查询表是4输入1输出的,可以完成任意4输入1输出的组合逻辑。
可编程寄存器:可以配置成D触发器,T触发器,JK触发器,SR触发器。每个寄存器包含4个输入信号,数据输入、时钟输入、时钟使能、复位输入。
一个逻辑单元包含3个输出,两个用于驱动行连接、列连接、直接连接,另外一个用于驱动本地互联。 这三个输出是相互独立的。输出信号可以来自于查询表也可以来自于寄存器。
本地互连通路是逻辑阵列的重要组成部分,芯片级设计思路上的考虑与节省我们就不讨论,从实际运用出发,直接看看这个互连通路是干什么用的。本地互连通路提供了一种逻辑阵列内部的连接方式, 逻辑阵列内部还包含一种对外的高速连接通路,称之为直接连接通路。
直接连接通路连接的是相邻的逻辑阵列,或者与逻辑阵列相邻的M4K存储器块、乘法器、锁相环等。
CYCLONEⅡ系列FPGA的逻辑单元有两种工作模式:普通模式和算数模式。
2.内部连接通路
在FPGA内部存在各种连接通路,连接不同的模块,比如逻辑单元之间、逻辑单元与存储器之间。FPGA内部资源是按照行列的形式排列的,所以连接通路也分为行列的。
3.时钟资源
CYCLONEⅡ系列FPGA有关时钟资源部分主要包括全局时钟树和锁相环两部分。
4.内部存储器
CYCLONEⅡ系列FPGA的内部存储器是以M4K存储器块的形式存在的,每一个存储器块的大小为4608bit。M4K块包括输入/输出寄存器,作用相信大家都知道。还拥有本地互联通路,作用前面讲过了哦。
好的。直接来看端口吧,从端口看作用,了解怎样去控制。
clock——输入——时钟信号
clock_en——输入——时钟使能信号
aclr——输入——异步复位信号
renwe——输入——读写使能信号
byteena——输入——字节使能信号
addressstall——输入——地址锁存信号
address——输入——地址
datain——输入——数据输入
dataout——输出——数据输出
看了这些端口以及端口说明,相信作用就不言而喻了吧,换言之,当我们想使用内部存储模块的时候,控制好这些端口的数据流就能够使用好这部分的资源了,当然存储器的使用离不开时序的控制,如果没有得到自己想要的结果,极有可能是时序控制部分出了问题。
CYCLONEⅡ系列FPGA中的M4K存储器可以被配置成以下模式:
单口模式:存储器不能同时进行读写操作。
简单双口模式:支持同时对存储器进行读写操作,读端口和写端口可以位宽不同,如果对同一地址进行读写,则输出端数据为改地址更新前的数据。
完全双口模式:两个端口可以任意组合,同时为写端口,同时为读端口,或者一个为写端口一个为读端口。存储器位宽不能为32或36。潜在威胁,如果两端口同时向一个地址写入数据的时候,会导致该地址中的数据出现不可预知的状况。
移位寄存器模式:节约用逻辑单元中构建寄存器而消耗。利用时钟下降沿写入数据,时钟上升沿读出数据,配置好该模式后是自动完成的哦。
只读存储器模式:存储器的内容通过存储器初始化文件(.mif)指定。
FIFO模式:用于数据的缓冲、多路数据的对齐、变换时钟域等。
5.乘法器
在数字信号处理运算中,主要包括滤波、快速傅里叶变换、离散余弦变换等。在写运算常常会涉及到大量的乘法运算,所以在FPGA中设计了嵌入的乘法器,专门用在这方面的信号处理。如果使用逻辑单元来搭建乘法器,会消耗不少逻辑单元并且会抑制运算速度的提高。
嵌入的乘法器包含有可选的输入/输出寄存器。寄存器的使用会提高电路性能但是会产生延时。乘法模块还包括两个控制信号,signa和signb来控制乘数A和乘数B是否有符号。另外一个乘法器还可以拆开成两个并行的乘法器,例如EP2C5有1个18bit*18bit的乘法器,可以作为两个9bit*9bit的乘法器使用,但是需要注意的是,符号控制信号就一对,所以要求两个乘法器在相同位置的数据输入必须同时为符号数或者无符号数。
6.输入/输出引脚
在输入/输出引脚和FPGA内部逻辑单元之间存在输入/输出单元(IOE),每个输入输出单元包含1个输出缓冲和3个寄存器。3个寄存器分别用于锁存输入数据、输出数据、和输出数据使能信号。
设计输入方式:IP核、原理图、HDL
原理图输入:用基本逻辑门电路或晶体管搭建电路;
HDL输入:采用硬件描述语言描述电路;
IP核:什么是IP核?任何实现一定功能的模块叫做IP(Intellectual Property)。
这里集中探讨原理图和HDL的优缺点。
原理图、HDL、IP核这些都将通过编译后生成门级的网表
我们通过编译得到一张门级网表之后,接下来就得考虑如何与我们选择的硬件平台结合起来,毕竟我们使用的硬件平台是由一个一个的LUT(假设这类FPGA)组成的。那么这个结合的过程就是映射过程。
再强调的是,映射是和器件有关的,即使是同一个系列,不同型号的FPGA内部就够也是有区别的,好比从外观看都是一个单元楼内的单元房,但是每个单元房内装修、家具摆设等都是不一样的。
讲到这一块,正好有这么一个例子来讲解这个概念。近来报道朝鲜希望在俄罗斯远东地区租用数十万公顷的土地用来培育农产品。咱先撇开今后的购买的成功与否,假设成功了,并且有了这个详细的希望培育的农作物的品种及数量,有各式各样的蔬菜、主粮、禽类畜养场、果树等等。我们前面做的那些流程得到的LUT门级网表就好比这样的清单。
得到这样的清单之后,我们再假设在这十万公顷的土地上,阳光、水资源、温差都有一定的分布。大家知道农作物的的成长和高量产或者与阳关有关,或者与水资源有关,或者与温差有关,并且禽类的畜养材料与农作物的副产有关。所以接下来要做的事情就是根据现有的自然条件和农产品的所需环境特点合理布局,哪些地适合做什么。
紧接着我们回到FPGA开发中来,我们通过前面的步骤得到的清单就是LUT门级网表。网表里提供的仅仅是从逻辑关系上一些LUT结构的连接。我们需要将这些LUT结构配置到FPGA具体的哪个位置。需要说明的是,FPGA里任何硬件结构都是按照横纵坐标进行标定的,图中选中的是一个SLICE,SLICE里面存放着表和其他结构,它的位置在X50Y112上。不同的资源的坐标不一样,但是坐标的零点是公用的。
在FPGA里布局需要考虑的问题是,如何将这些已有的逻辑上连接的LUT及其它元素合理的放到现有的FPGA里,达到功能要求的时候保证质量。具体点就比如,乘法器这样的电路适合放在RAM附近,当然,硬件乘法器的硬件布局一般也是在存储器附近,有利于缩短乘法的延时时间,什么样的电路需要配置高速等等。
十万公顷的地布局规划好了,农产品就会有很好的丰收,同样FPGA开发布局布好了,由FPGA搭建起来的电路就会更加稳定和扩展性。
上小节中,我们把十万公顷的地给安排好了,哪些地该种什么。具体实施之前还有一些是必须做的,比如农作物的浇灌,没有一个很好的灌溉系统是一个问题;再比如丰收了得采摘吧,这个时候,能够让大卡车到达每一块农地的公路枢纽也是需要解决的问题。将每一块或者相关的田地连接的灌水系统和公路的建设,就好比我们这个布线的过程。
我们在FPGA内通过布局,知道那些LUT具体分布到哪个SLICE,但是一方面如何让这些SLICE连接起来,二方面如何让输入的信号到达相应的开始处理点和如何让输出到达输出IO上,并且连接的电路整体性能好,这就是布线这个环节需要完成的内容。要达到布线最优话,当然这里面设计到布线算法和很多细节问题,比如涉及到布线资源、PLL资源分布。但是这些对我们理解布线这个概念没有很多益处,暂且不深入,本质上就是一个线路求最优的问题。
约束,在图1上看到,在综合和布局布线这两个流程环节里都出现了,我们暂且规定其为约束一和约束二,或者说综合约束和布局布线约束,布局布线约束又可以分为位置约束、时序约束。
约束,就是对这些环节操作定制规则。一般开发环境会对这些约束有个默认,这些默认的设置对大部分情况下还是适用的,但是通常布局布线约束中的I/O约束是我们每一个工程都必须给定的。同时开发工具开放其他约束接口,允许我们设置这些规则,具体的有哪些约束怎么去做在后面介绍工具使用的时候进行讨论,这里先明白这些约束的基本概念。
综合约束
相信大家已经下意识的将综合约束和综合过程挂在一起了,没错,综合约束确实是在综合过程中做的,用来指导综合过程,包括编译和映射。我们已经知道综合过程是将RTL级电路描述转换到FPGA上的硬件单元(LUT)中,形成以FPGA存在的硬件单元构成的电路。
我们还是拿前面有过的例子来说明,不同的约束将导致生成性能不同的电路。综合这么一个完成式Y=A1*A2+A3*A4的电路,没有加资源共享得到的电路如图8左边所示的电路,而加了资源共享的约束后,得到的电路结构如图8右边的电路。
通过之前的分析,得到左边的电路结构资源消耗多但是速度快,而右边的结构消耗资源少,但是速度慢,乘法器需要分时复用。
当然这只是一个例子,但是足以说明,不同的综合指导原则也就是综合约束,将会产生不同的电路。当得到的电路性能不能满足需求的时候,适当考虑综合约束,来达到一个速度和面积的转换的效果,实现性能的提升。
电路实现的速度和消耗的面积是贯穿在FPGA开发过程中两个 矛盾的问题,综合约束是其中一种小范围内实现速度和面见平衡点移动的方式。
位置约束
没错,你又想对了,位置约束和我们布局有关系,它就是指布局的策略。根据所选择的FPGA平台现有硬件资源分布来决定我们布局。
其中最典型的位置约束就是I/O约束。一个典型的系统是既有输入也有输出的,而不管是输入还是输出,都是从I/O上为端点的。输入从哪个端点进来,输出从哪个端点出去,输入是需要支持什么样的电气特性的端点,输出又是需要支持什么样的电气特定的端点。这些都是I/O约束做的事情。任何一个工程,都必须有这么一个约束。
还有一种典型的位置约束是在增量编译里涉及的物理界定。增量编译的出现就是因为在FPGA开发过程中综合和布局布线的长耗时性而提出的。思想就是把FPGA切成很多个小块的FPGA,然后约定具体哪块小FPGA放置什么模块,实现什么样的功能,从物理上进行界定。当修改工程后,开发平台就会检测哪些小FPGA内没有进行修改,哪些进行了修改,然后将修改过的部分重新进行综合布局布线步骤。这样一来,相比原来修改一点,全工程重新经过那些过程来讲,时间节省下来了。
时序约束
估计没有多少悬念了,时序约束很大程度上和布线有关。为什么要做这个约束?
由于一方面信号在芯片内传递是需要消耗时间的,另一方面大量存在的寄存器有反应时间,而我们开发的最开始的时候这些时间都是理想化的。但是考虑到真实情况下,如果跑的速度比较高,达到了200M这么个速度,当然这个高速和具体的芯片有关,高性能的芯片本身跑的速度可以达到很高,200M相对来说就不是高速,对一些低性能芯片还可能达不到200M。这个时候,这些时间达到了同样一个系统时间数量级的时候,很可能影响电路的性能了。某一刻,该来的信号没有来,默认的话就会采集错误信号了。
为了让这些硬件本身带来的延时时间更理想化,我们就要对这些决定时间延时的因素优化来减少时间延时。对于寄存器本身的反应时间这个因素我们开发者是无能为力的,我们要做的优化就是布线了。是走直线还是走其他,不仅仅决定于自身这条路径,还和整个系统布线有关,好比水桶原理,系统性能决定于最差路径延时。
时序约束做的就是这些事情,但是时序约束并不是指具体去连接每一条线,这个工作就像前面那些流程一样都是由软件去实现的,先用软件自己默认原则布线,然后对其结果分析,不满足时序要求的,我们再对具体的问题路径做一些指导约束。时序约束的添加,主要包括周期约束、输入偏移约束和输出偏移约束。
如果我们把FPGA开发形成电路当作一个产品的生产过程,那么在FPGA开发流程中含有的三种仿真(RTL级仿真、静态仿真和时序仿真)就好比产品线中的三道检测站。如图9,这三道工序任何一道出了问题,修改设计后都得重新走这三道卡,所以尽量在把问题发现在源头。
测试平台
所谓testbench,即测试平台,详细的说就是给待验证的设计添加激励,同时观察输出响应是否符合设计要求。测试平台在做功能仿真、静态仿真和时序仿真的时候都需要用到。刚开始的对于一些初学者,遇到的都是一些简单的东西,测试平台相应的也很简单,用一个文件就可以很清晰的呈现测试结构。对于一些复杂的项目,测试就没有那么简单了,由此还专门产生一个行业——测试行业。这个时候我们要用到一个概念就是结构化测试。
一个完整的测试平台如下图10所示,它是分结构组成的,其中对设计测试结果的判断不仅可以通过观察对比波形得到,而且可以灵活使用脚本命令将有用的输出信息打印到终端或者产生文本进行观察,也可以写一段代码让它们自动比较输出结果。
测试平台的设计是多种多样,可以使用灵活的Verilog的验证脚本,但是它也是基于硬件语言但是又服务于软件测试的语言,有时并行有时顺序,只有掌握这些关键点,才能很好服务测试。需要说明的一点是,不管大家是已经在用Verilog在写测试平台还是刚学习写测试平台,那么建议大家还是能用到System Verilog中相对Verilog新的语法还是尝试的用,System Verilog是一种趋势,它本身就是向下兼容的第三代的Verilog。
RTL级仿真——前仿真for code
这里RTL级仿真属于第一道检测,有些场合称作功能仿真,为了突出和后面的静态仿真的区别,以免在后面介绍静态仿真的时候大家弄的很头大,我们还是这样称呼。它是对工程在寄存器转送级进行的描述时进行测试,查看其在RTL级描述的时候实现的功能的正确性。
关于RTL级仿真,如果设计中涉及到原理图输入的话,在一些仿真工具中是不支持的,比如Modelsim,这个时候要进行功能上的验证,可以将原理图转换成HDL描述,或者直接把整个工程转换成LUT门级网表后进行后面要讲到的静态仿真完成。
所有逻辑功能的验证都希望在RTL级做,尽可能的将问题发现在RTL级仿真过程中,减少后面发现问题带来的反复。
静态仿真——后仿真for netlist
静态仿真,有些地方给的外号叫门级仿真,确切的说应该是综合后的LUT门级网表。是在综合过程后做的仿真。有些开发平台下将静态仿真具体又分为编译仿真和映射仿真,比如ISE就是这样做的,但是个人觉得应该很少场合做这个编译仿真。静态仿真的目的就是验证当工程到了用LUT门级网表描述的时候,从功能上检查验证工程的正确性。
不管是Altera还是Xilinx的开发平台,都直接支持静态仿真,但是由于各自厂家的仿真器专业性不强,我们还是用第三方仿真工具比较多。这时候在第三方工具下的输入必须是经过综合工具综合出来的涵盖工程所有信息的LUT门级网表文件了。一般专业一点的第三方综合工具是不具备综合功能的,至少我们在使用Modelsim的时候,并没有要求我们添加工程用到的具体的哪一款型号FPGA的信息。这也是静态仿真的外号门级仿真指的是LUT门级网表仿真的依据。
时序仿真——后仿真for netlist+时延
时序仿真是在布局布线之后做的,在前面介绍时序约束的时候讲到,布线延时问题影响到了电路的性能的时候可以做时序约束。那么这个延时问题的获得就可以通过时序仿真获得,当然还有一种获得延时出现超载情况,这个属于下面小节介绍的静态时序分析了。
一般情况下,电路进行完布线过程后,会生成一个延时信息文件,我们简称SDF(standrad dealy format)文件,Quartus平台下是以.sdo文件形式存在的。里面含有三种延时信息,分别为最小值、典型值、最大值,存在的形式是最小值:典型值:最大值,一般缩写min:typ:max。这里也体现了,在FPGA里的延时信息是不能够精确获得的,只能是逼近,因为本身同一器件中,不同的区域的逻辑门也很有可能和其他的区域内同种的逻辑门的延时不一样。我们这里举一个例子来说明一下这三种值的含义。
如上图,这是一个描述一段延时线的延时信息,给的延时信息从in端点到out端点,输入发生跳变后,分别以最小值、典型值和最大值将信号跳变传递到out端点。我们这里只是一段延时线,在延时信息文件里还有一类延时信息,就是一些具有逻辑功能的cell延时,这个时候信号跳变又分为由高变低和有低变高,因为这两种跳变在这些器件里的三种延时值是不一样的,得分别探讨,具体分别以某一种情况类推。
在做后仿真的时候,只需要在做完静态仿真后的基础上添加布线的延时信息后,再分析逻辑功能是否满足要求。后方针的平台 使用情况和前面一样,一般采用第三方仿真工具,典型的是Modlesim,具体操作过程见软件相关操作章节。
静态时序分析,简称STA(Static Timing Analysis),这个过程做的话一把是在是做后仿真前做的。在布局布线后,会生成时序分析报告,该报告是分析工具利用从布线的路劲上提取出寄生参数后精确计算出来的。该报告中会提示出一些关键路径,所谓关键路劲就是指延时信息比较突出的信号节点流,通过分析可以得到不满足时序要求的路径,这个过程就是STA过程。
静态时序分析的特点就是不需要输入向量就能穷尽所有的路径,且运行速度很快、占用内存较少,不仅可以对芯片设计进行全面的时序功能检查,而且还可利用时序分析的结果来优化设计。很多设计都可以在功能验证的成功的基础上,加上一个很好的静态时序分析,就可以替代耗时非常长的后仿真了,这是一种很有保障性的化简流程方式。
后仿真相对静态时序分析来说还具有逻辑验证,在加上延时信息的基础上分析逻辑。
在线调试也称作板级调试,它是将工程下载到FPGA芯片上后分析代码运行的情况。有人会以为,我们不是已经做了仿真了,甚至是时序仿真都通过了,还会存在问题么?在实际中,存在这么些情况我们需要用到在线调试:
在线调试的方式主要有两种,一种是利用外部测试设备,把内部信号传送到FPGA针脚上,然后用示波器或者逻辑分析仪观察信号;另一种就是利用嵌入式逻辑分析仪,在设计中插入逻辑分析仪,利用JTAG边缘数据扫描和开发工具完成数据交互。
FPGA配置过程
在FPGA正常工作时,配置数据存储在SRAM中,这个SRAM单元也被称为配置存储器(configure RAM)。由于SRAM是易失性存储器,因此在FPGA上电之后,外部电路需要将配置数据重新载入到芯片内的配置RAM中。在芯片配置完成之后,内部的寄存器以及I/O管脚必须进行初始化(initialization),等到初始化完成以后,芯片才会按照用户设计的功能正常工作,即进入用户模式。
FPGA上电以后首先进入配置模式(configuration),在最后一个配置数据载入到FPGA以后,进入初始化模式(initialization),在初始化完成后进入用户模式(user-mode)。在配置模式和初始化模式下,FPGA的用户I/O处于高阻态(或内部弱上拉状态),当进入用户模式下,用户I/O就按照用户设计的功能工作。
举例——altera FPGA配置全过程
一个器件完整的配置过程将经历复位、配置和初始化等3个过程。
配置模式
在线配置
固化
(1)、主串模式
主串模式是最简单的固化模式,如图14所示,这个模式过程不需要为外部存储器提供一系列地址。它利用简单的脉冲信号来表明数据读取的开始,接着由FPGA提供给存储器时钟,存储器在时钟驱动下,将数据输入到FPGA Cdata_in端口。
(2)主并模式
主并模式其实和主串模式的一样机理,只不过是在主串的基础上,同周期数内传送的数据变成8位,或者更高,如图15。这样一来,主并行相比主串行的数度要优先了。现代有些地方已采用这种方式来配置FPGA的了。
(3)从并模式
从上面看到,主模式下的连接还是很简单的。但是有时候,系统可能用其他微处理器来对FPGA进行配置。这里的微处理器可以指FPGA内嵌的处理器,比如说Nios。微处理器控制着何时配置FPGA,从哪读取配置文件。如图16,这种方式的优点是处理器可以灵活随时变更FPGA配置,同时配置的速度也快。微处理器先从外部存储设备里读取一个字节的数,然后写到FPGA里。
(4)从串模式
理解了从并模式,从串模式就不用很多解释了,它的特点就是节约FPGA管脚I/O。
(5)多片级联
多片模式有两种,一种是采用菊花链的思想,多片FPGA共享一个存储器,另外一个是可以使用其他存储器配置不同的FPGA。如果所示是一个共享型的结构,显示启动了。这里分主FPGA和从FPGA,主FPGA和存储器是使用串行主模式来配置,而后面那个的配置是通过第一配置好的FPGA上微处理器进行协调的。
模式选择
现今FPGA应该可以支持上面五种配置模式,是通过3个模式引脚来实现的,具体的映射如下表,在今后模式还是有可能增加的。
在PS模式下,如果你用电缆线配置板上的FPGA芯片,而这个FPGA芯片已经有配置芯片在板上,那你就必须隔离缆线与配置芯片的信号。一般平时调试时不会把配置芯片焊上的,这时候用缆线下载程序。只有在调试完成以后,才把程序烧在配置芯片中, 然后将芯片焊上.或者配置芯片就是可以方便取下焊上的那种。这样出了问题还可以方便地调试.。
对FPGA芯片的配置中,可以采用AS模式的方法,如果采用EPCS的芯片,通过一条下载线进行烧写的话,那么开始的”nCONFIG,nSTATUS”应该上拉,要是考虑多种配置模式,可以采用跳线设计。让配置方式在跳线中切换,上拉电阻的阻值可以采用10K一般在做FPGA实验板的时候,用AS+JTAG方式,这样可以用JTAG方式调试,而最后程序已经调试无误了后,再用AS模式把程序烧到配置芯片里去。
在围绕图1把FPGA开发流程讲完后,这里对每个环节中设计的相关软件进行总结,如下表所示。毕竟充分利用各种工具的特点,进行多种EDA工具的协同设计,对FPGA的开发是非常重要的。充分利用了这些EDA工具的优点,能够提高开发效率和系统性能。
表中列出的每种EDA工具都有自己的特点。一般由FPGA厂商提供的集成开发环境,如Altera Quartus II和Xilinx ISE,在逻辑综合和设计仿真环节都不是非常优秀,因此一般都会提供第三方EDA工具的接口,让用户更方便地利用其他EDA工具。为了提高设计效率,优化设计结果,很多厂家提供了各种专业软件,用以配合FPGA芯片厂家提供的工具进行更高效的设计。
比较常见的使用方式是:FPGA厂商提供的集成开发环境、专业逻辑仿真软件、专业逻辑综合软件一起使用,进行多种EDA工具的协同设计。比如Quartus II+ModelSim+FPGA Compiler II,ISE+ModelSim+Synplify Pro等等。
建立时间:数据在时钟上升沿到来之前,必须保持稳定的时间
保持时间:数据在时钟上升沿到来之后,必须保持稳定的时间
不满足建立时间和保持时间的电路,触发器在数据变化时无法采到真实的高低电平信号,并会将这种不确定性往下传播。
建立时间约束:Tsetup 保持时间约束:Thold SPI(Serial peripheral interface):串行外设接口 SD(Secure Digital):SD卡/TF卡 USB(Universal Serial Bus):通用串行总线 LVDS(Low - Voltage Differential Signal):低电压差分总线 SerDes(Serializer / Deserializer):串行器/解串器 DDR(Double Data Rate):双倍数据速率 PCIe(Peripheral Component Interconnect Express):高速串行扩展总线 MAC(Media Access Control):以太网数据链路层 SATA(Serial Advanced Technology Attachment):串行ATA接口 模电/数电/单片机/计算机组成原理/电力电子常见笔试/面试题(合集)未完更新ing_Cheeky_man的博客-CSDN博客_电子电路原理 DFT(Design For Test):可测性设计 APR(Auto Place & Route):自动布局布线 CTS(Clock Tree Synthesis):时钟树综合 ECO(Engineering Change Order):工程修改 DRC(Design Rule Check):设计规则检查 LVS(Layout Vs Schematic):版图与网表对比 DFM(Design For Manufacturing):可制造性设计 JDV(Job Deck VIew):在线掩模数数据检视 同步复位:复位与时钟有关,在时钟边沿有效; 异步复位:复位与时钟无关,任意时刻都可复位; 异步复位同步释放:复位信号有效时,输出立即为0,复位信号释放时,这时触发器应该读取数据并输出,但是为复位释放时刻离时钟边沿过近,使触发器的建立时间得不到满足,因为不能马上释放,应该等到触发器的一个clk后再释放,虽然信号延迟了一个clk才读取,但是使读取的信号准确率得到了保证,这是值得的。 数字IC设计知识点及综合题详解(提前批、秋招必刷基础题)——(四)亚稳态、跨时钟域(CDC)处理方法及其编程仿真代码_Cheeky_man的博客-CSDN博客 亚稳态:触发器无法在某个规定时间内达到一个可确认的状态; 原因:触发器的 Tsetup 和 Thold 不满足,使得输出端 Q 在时钟边沿到来后比较长的一段时间内处于不确定的状态,并且Q稳定后的值是随机的,与输入D无关; 解决方法: 虽然自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它在相邻位间转换时,只有一位产生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。由于这种编码相邻的两个码组之间只有一位不同,引起数字量发生变化时,格雷码仅改变一位,这样与其它编码同时改变两位或多位的情况相比更为可靠,即可减少出错的可能性。 格雷码的构造方法为:直接排列以二进制为0值的格雷码为第零项,第一项改变最右边的位元,第二项改变右起第一个为1的位元的左边位元,第三、四项方法同第一、二项,如此反覆,即可排列出n个位元的格雷码。 自然二进制码转换成二进制格雷码:最高位相同,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。 原理: 若二进制码表示为: B[N-1]B[N-2]...B[2]B[1]B[0]; 相应地, 则二进制格雷码表示为: G[N-1]G[N-2]...G[2]G[1]G[0]. 其中最高位保留: G[N-1] = B[N-1]; 其他各位: G[i] = B[i+1] xor B[i]. (i = 0, 1, 2, ..., n-2) 图示如下: 二进制格雷码转换成自然二进制码,其法则是最高位相同,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。 1、时序逻辑:current state → next_state 2、组合逻辑:state的切换 3、时序/组合:对应state的输出 五、名词解释之协议篇:SPI、SD、USB、LVDS、SERDES、DDR、MIPI、PCIe、MAC、SATA
六、名词解释之存储篇:RAM、ROM、SRAM、DRAM、SSRAM、SDRAM、PROM、EPROM、E2PROM、Flash
七、名词解释之设计流程篇:
八、何为同步复位、异步复位?何为异步复位同步释放?
//同步复位
always@(posedge clk) beginif(!rst_n)q <= &#39;b0;elseq <= d;
end//异步复位
always@(posedge clk, negedge rst_n) beginif(!rst_n)q <= &#39;b0;elseq <= d;
endinput clk;//输入时钟
input rst_n;//复位信号
output s_rst;//打拍后的复位信号reg rst_1;
always @(posedge clk, negedge rst_n) beginif(!rst_n) begin //异步复位,只要复位信号有效,就马上复位rst_1 <= 0;s_rst <= 0;endelse begin//打一拍后再释放rst_1 <= &#39;b1;s_rst <= rst_1;end
end九、何为亚稳态?如何消除亚稳态?
十、画出CMOS 非门/与非门/或非门的结构
十一、你所了解的信号跨时钟域传输的方式
十二、列出4bit的格雷码,画出格雷码转二进制码、二进制码转格雷码的电路图
1、二进制码转格雷码
2、格雷码转二进制码
十四、三段式FSM
//1、时序逻辑
always @(posedge clk, negedge rst_n) beginif(!rst_n)current_state <= IDLE;elsecurrent_state <= next_state;
end//2、组合逻辑
always @(posedge clk, negedge rst_n) begincase(current_state)IDLE:next_state = current_state;//阻塞赋值//3、描述输出
always @ (posedge clk or negedge rst_n) begincase(next_state)IDLE:next_state <= current_state;//非阻塞赋值