当前位置:文档之家› 时序的计算与仿真

时序的计算与仿真

时序的计算与仿真
时序的计算与仿真

时序逻辑电路中的几个基本术语:

建立时间(Setup Time):建立时间就是接收器件需要数据提前于时钟沿稳定存在于输入端的时间。

保持时间(Hold Time):为了成功的锁存一个信号到接收端,器件必须要求数据信号在被时钟沿触发后继续保持一段时间,以确保数据被正确的操作。这个最小的时间就是我们说的保持时间。

飞行时间(Flight Time):指信号从驱动端传输到接收端,并达到一定的电平之间的延时,和传输延迟和上升时间有关。

Tco:是指信号在器件内部的所有延迟总和,一般包括逻辑延迟和缓冲延迟。

缓冲延迟(buffer delay):指信号经过缓冲器达到有效的电压输出所需要的时间

时钟抖动(Jitter):时钟误差是指两个时钟周期之间存在的差值,这个误差是在时钟发生器内部产生的,和后期布线没有关系。

时钟偏移(Skew):是指由同样的时钟产生的多个子时钟信号之间的延时差异。

假时钟: 假时钟是指时钟越过阈值(threshold)无意识地改变了状态(有时在VIL 或VIH 之间)。通常由于过分的下冲(undershoot)或串扰(crosstalk)引起。

数据上升沿

对于系统设计工程师来说,时序问题在设计中是至关重要的,尤其是随着时

钟频率的提高,留给数据传输的有效读写窗口越来越小,要想在很短的时间限制里,让数据信号从驱动端完整地传送到接收端,就必须进行精确的时序计算和分析。同时,时序和信号完整性也是密不可分的,良好的信号质量是确保稳定的时序的关键,由于反射,串扰造成的信号质量问题都很可能带来时序的偏移和紊乱。

因此,对于一个信号完整性工程师来说,如果不懂得系统时序的理论,那肯定是不称职的。本章我们就普通时序和源同步系统时序等方面对系统时序的基础知识作一些简单的介绍。

6.1 普通时序系统

所谓普通时序系统就是指驱动端和接收端的同步时钟信号都是由一个系统

时钟发生器提供。下图就是一个典型的普通时钟系统的示意图,表示的是计算机系统的前端总线的时序结构,即处理器(CPU)和芯片组(Chipset)之间的连接。在这个例子中,驱动端(处理器)向接收端(芯片组)传送数据,我们可以

将整

核心处理器提供数据;

2.在第一个系统时钟的上升沿到达时,处理器将数据Dp 锁存至Qp 输出;

3.Qp 沿传输线传送到接收端触发器的Dc,并在第二个时钟上升沿到达时,

将数据传送到芯片组内部。

一般来说,标准普通时钟系统的时钟信号到各个模块是同步的,即图中的

Tflight clka 和Tflight clkb 延时相同。通过分析不难看出,整个数据从发送到接收的过程

需要经历连续的两个时钟沿,也就是说,如果要使系统能正常工作,就必须在一

个时钟周期内让信号从发送端传输到接收端。如果信号的传输延迟大于一个时钟

周期,那么当接收端的第二个时钟沿触发时,就会造成数据的错误读取,因为正

确的数据还在传输的过程中,这就是建立时间不足带来的时序问题。目前普通时

序系统的频率无法得到进一步提升的原因就在于此,频率越高,时钟周期越短,

允许在传输线上的延时也就越小,200-300MHz 已经几乎成为普通时序系统的频

率极限。那么,是不是传输延时保持越小就越好呢?当然也不是的,因为它还必

须要满足一定的保持时间。在接下来几节里,我们就建立和保持时间来分析一下

时序设计需要考虑的一些问题以及正确的系统时序所必须满足的条件。

6.1.1 时序参数的确定

对于时序问题的分析,我们首先要清楚地理解相关的一些时序参数的具体含

义,比如Tco,缓冲延时,传播延迟,最大/小飞行时间,建立时间,保持时间,

建立时间裕量,保持时间裕量,时钟抖动,时钟偏移等等,如果对这些参数的概

念理解不深刻,就很容易造成时序设计上的失误。

首先要阐明的是Tco 和缓冲延时(buffer delay)的区别。从定义上来说,

Tco 是指时钟触发开始到有效数据输出的器件内部所有延时的总和;而缓冲延时

是指信号经过缓冲器达到有效的电压输出所需要的时间。可以看出,Tco 除了包

含缓冲延时,还包括逻辑延时。通常,确定Tco 的方法是在缓冲输出的末端直接

相连一个测量负载,最常见的是50 欧姆的电阻或者30pF 的电容,然后测量负载

上的信号电压达到一定电平的时间,这个电平称为测量电压(Vms),一般是信

号高电平的一半。如Tco 和缓冲延时的确定如下图所示:

信号从缓冲器出来之后,就要经过传输线到接收终端,信号在传输线上的传

输的延时我们称为传播延迟(propagation delay),它只和信号的传播速度和线长有关。然而我们在大多数时序设计里面,最关键的却不是传播延迟这个参数,而

是飞行时间(Flight Time)参数,包括最大飞行时间(Max Flight Time)和最小飞行时间(Min Flight Time)。飞行时间包含了传播延迟和信号上升沿变化这两部分因素,从下图中可以很容易看出两者的区别。

上面只是对信号上升沿的分析,对于下降沿来说,同样存在着最大/最小飞

行时间的参数,如下图。在时序计算时我们实际取的最大飞行时间是在上升沿和

下降沿中取最长的那个飞行时间,而最小飞行时间则是取上升和下降沿中最短的

那个飞行时间。

也也有些时候,人们对信号的最大/最小飞行时间还有其它称谓,比如在

Cadence 软件中,就将最大飞行时间称为最终稳定延时(Final Settle Delay),

而将最小飞行时间称为最早开关延时(First Switch Delay),如下图。

信号经过传输线到达接收端之后,就牵涉到建立时间和保持时间这两个时序

参数,它们是接收器本身的特性,表征了时钟边沿触发时数据需要在锁存器的输

入端持续的时间。通俗地说,时钟信号来的时候,要求数据必须已经存在一段时间,这就是器件需要的建立时间(Setup Time);而时钟边沿触发之后,数据还

必须要继续保持一段时间,以便能稳定的读取,这就是器件需要的保持时间(Hold Time)。如果数据信号在时钟沿触发前后持续的时间均超过建立和保持时间,那

么超过量就分别被称为建立时间裕量和保持时间裕量。见图1-6-6,其中还考虑

系统时序设计中对时钟信号的要求是非常严格的,因为我们所有的时序计算

都是以恒定的时钟信号为基准。但实际中时钟信号往往不可能总是那么完美,会

出现抖动(Jitter)和偏移(Skew)问题。所谓抖动,就是指两个时钟周期之间存

在的差值,这个误差是在时钟发生器内部产生的,和晶振或者PLL 内部电路有关,布线对其没有影响,如图1-6-7。除此之外,还有一种由于周期内信号的占空比

发生变化而引起的抖动,称之为半周期抖动。总的来说,jitter 可以认为在时

钟信号本身在传输过程中的一些偶然和不定的变化之总和。

时钟偏移(skew)是指两个相同的系统时钟之间的偏移。它表现的形式是多种多样的,既包含了时钟驱动器的多个输出之间的偏移,也包含了由于PCB 走线误

差造成的接收端和驱动端时钟信号之间的偏移,比如在图1-6-1 中所示,CLKA

和CLKB 之间的差异,CLKC 和CLKP 之间的差异均为时钟偏移,这些偏移量在时序计算中需要全部考虑。

除了上面提到的这些概念,还有一点要注意的是,时刻不能忽略信号完整性

对时序的影响,比如串扰会影响微带线传播延迟;反射会造成数据信号在逻辑门限附近波动,从而影响最大/最小飞行时间;时钟走线的干扰会造成一定的时钟偏移。有些误差或不确定因素是仿真中无法预见的,设计者只有通过周密的思考和实际经验的积累来逐步提高系统设计的水平。

时序约束条件

下面来具体讨论一下系统时序需要满足的一些基本条件。我们仍然以图

1-6-1 的结构为例,并可以据此画出相应的时序分析示意图(图1-6-8)。

在上面的时序图中,存在两个时序环,我们称实线的环为建立时间环,而虚

线的环我们称之为保持时间环。可以看到,这两个环都不是闭合的,缺口的大小就代表了时序裕量的多少,因此设计者总希望尽可能增大这个缺口。同时还要注

意到,每个环上的箭头方向不是一致的,而是朝着正反两个方向,因为整个系统

时序是以时钟上升沿为基准的,所以我们时序环的起点为系统时钟clk in 的上

升沿,而所有箭头最终指向接收端的控制时钟CLKC 的边沿。

先来分析建立时间环:

缺口的左边的半个时序环代表了从第一个系统时钟上升沿开始,直到数据传

输至接收端的总的延时,我们计为数据延时,以Tdata tot 表示:

Tdata tot =Tco clkb+Tflt clkb +Tco data +Tflt data

上式中:Tco clkb 是系统时钟信号CLKB 在时钟驱动器的内部延迟;Tflt clkb 是CLKB 从时钟驱动器输出后到达发送端(CPU)触发器的飞行时间;Tco data 是数据在发送端的内部延迟;Tflt data 是数据从发送端输出到接收端的飞行时间。

从CLKC 时钟边沿的右边半个时序环代表了系统时钟到达接收端的总的沿时,

我们计为时钟延时,以Tclk tot 表示:

Tclk tot =Tcycle +Tco clka +Tflt clka – Tjitter

其中,Tcycle 是时钟信号周期;Tco clka 是系统时钟信号CLKA(第二个上升沿)

在时钟驱动器的内部延迟;Tflt clka 是时钟信号从时钟驱动器输出到达接收端触发器的飞行时间;Tjitter 是时钟的抖动误差。

因此我们可以根据建立时间裕量的定义,得到:

Tsetup margin = Tclk tot – Tdata tot – Tsetup

将前面的相应等式带入可得:

Tsetup marin = Tcycle + Tco clka + Tflt clka – Tjitter – Tco clkb – Tflt clkb – Tco data – Tflt

data – Tsetup

我们定义时钟驱动器(PLL)的两个时钟输出之间的偏移为Tclock Skew ,两根

CLOCK 走线之间的时钟偏移为TPCB Skew ,即:

Tclock Skew = Tco clkb - Tco clka;TPCB Skew = Tflt clkb - Tflt clka

这样就可以得到建立时间裕量的标准计算公式:

Tsetup marin =Tcycle – TPCB skew –Tclock skew –Tjitter – Tco data – Tflt data-Tsetup (1.6.1)

再来看保持时间环:

对照图1-6-8,我们可以同样的进行分析:

Tdata delay = Tco clkb + Tflt clkb + Tco data + Tflt data

Tclock delay = Tco clka + Tflt clka

于是可以得出保持时间裕量的计算公式:

Thold margin = Tdata delay – Tclock dalay – Thold time

即: Thold margin = Tco data + Tflt data + Tclock skew + Tpcb skew – Thold (1.6.2)可以看到,式1.6.2 中不包含时钟抖动Jitter 的参数。这是因为Jitter 是

指时钟周期间(Cycle to Cycle)的误差,而保持时间的计算和时钟周期无关。

对于任何时钟控制系统,如果要能保证正常工作,就必须使建立时间余量和

保持时间裕量都至少大于零,即Tsetup marin >0;Thold margin >0,将公式1.6.1 和1.6.2

ATP 华腾微电子(上海)高速PCB 基础理论及内存仿真技术 SI 仿真小组

2002-10-252002-10-25 108

分别带入就可以得到普通时钟系统的时序约束条件不等式:

TPCB skew +Tclock skew +Tjitter + Tco data + Tflt data+Tsetup < Tcycle (1.6.3) Tco data + Tflt data + Tclock skew + Tpcb skew > Thold (1.6.4)

需要注意的是:

1.数据在发送端的内部延时Tco data 可以从芯片的datasheet 查到,这个

值是一个范围,在式1.6.3 中取最大值,在式1.6.4 中取最小值。

2.数据在传输线上的飞行时间Tflt data 在实际计算中应该取最大/最小飞

行时间参数,在式1.6.3 中取最大飞行时间,在式1.6.4 中取最小飞

行时间。

3.时钟的偏移TPCB skew 和Tclock skew 也是一个变化的不确定参数,一般为+/-N ps,同样,在建立时间约束条件1.6.3 中取+Nps,而在保持时间约束条件1.6.4 中取-Nps。从上面的分析可以看到,对于PCB 设计工程师来说,保证足够稳定的系统时

序最有效的途径就是尽量减小PCB skew 和信号传输的飞行时间,而其它的参数

都只和芯片本身的性能有关。实际中经常采取的措施就是严格控制时钟和数据的

走线长度,调整合理的拓补结构,并尽可能减少信号完整性带来的影响。然而,

即便我们已经考虑的很周全,普通时钟系统的本身的设计瓶颈始终是无法打破

的,也就是建立时间的约束,我们在尽可能减少由PCB 布线引起的信号延迟之外,

器件本身的特性如Tco、Jitter、TSetup 等等将成为最主要的制约因素,尽管我们

可以通过提高工艺水平和电路设计技术来不断提高数字器件的性能,但得到的效

果也仅仅是在一定范围之内提升了系统的主频,在频率超过300MHz 的情况下,

我们将不得不放弃使用这种普通时钟系统设计。

6.2 源同步时序系统

针对普通时钟系统存在着限制时钟频率的弊端,人们设计了一种新的时序系

统,称之为源同步时序系统。它最大的优点就是大大提升了总线的速度,在理论

上信号的传送可以不受传输延迟的影响。下面我们来看看这种源同步时钟系统的

结构。

6.2.1 源同步系统的基本结构

图1-6-9 是一个基本的源同步时钟系统的结构示意图。可以看到,驱动芯片

在发送数据信号的同时也产生了选通信号(Strobe),而接收端的触发器由该选通信号脉冲控制数据的读取,因此,这个选通信号也可以称为源同步时钟信号。

源同步时钟系统中,数据和源同步时钟信号是同步传输的,我们保证这两个

信号的飞行时间完全一致,这样只要在发送端的时序是正确的,那么在接收端也能得到完全正确的时序。整个系统在时序上的稳定性完全体现在数据和选通信号的匹配程度上,包括传输延迟的匹配,器件性能的匹配等等,只要两者条件完全相同,那么我们就可以保证系统的时序绝对正确,而对系统的最高时钟频率没有任何限制。

当然,对于任何数据接收来说,一定的建立和保持时间都是必须满足的,源

同步时钟系统也同样如此,主要体现在数据信号和选通信号之间的时序要求上。最理想的情况就是选通信号能在数据信号的中央部分读取,如图1-6-10 所示,这样才能保证最充分的建立和保持时间。

为了保证选通信号和数据信号相对保持正确的时序,在源同步时钟系统中是

通过驱动芯片内部的数字延时器件DLL 来实现(见图1-6-9),而不是通过PCB 走线来控制,因为相比较而言,DLL 器件能做到更为精确的延时,同时还可以受芯片电路控制,调节起来更为方便。

6.2.2 源同步时序要求

前面已经提到源同步时钟系统设计中最重要的一点就是保证data 和strobe

信号之间的偏移(Skew)最小,引起这些误差的最主要的因素就是实际系统中各器件的时序参数Tco 的不同,此外还有布线上引起的差异,为了更好地说明这些Skew 对时序的具体影响,下面我们还是通过时序图分析的方法来计算一下源同步时钟系统中信号的建立时间裕量和保持时间裕量。

首先考虑建立时间裕量:

和普通时序分析的方法一下,我们也是从建立时间环的角度考虑,参考1-6-9

的结构图,我们可以作出驱动端和接收端的时序示意图(1-6-11)。

Tdata = Tco data +Tflt data

Tstrobe = Tco strobe + Tflt strobe + Tdelay

其中,Tco 和Tflt 分别代表数据/选通信号在器件的内部延迟和信号传输的

飞行时间,Tdelay 是指数据信号和选通信号之间的延迟,由系统内DLL 延时器件决定,图中假设为一个时钟周期。

将上式带入建立时间裕量的计算公式:Tsetup margin = Tclk – Tdata– Tsetup 可以得到:

Tsetup margin =(Tco strobe + Tflt strobe + Tdelay)- (Tco data + Tflt data) – Tsetup

如果我们将数据和Strobe 信号在器件内的延时差异定义为Tvb;将PCB 走线

引起的延时差异定义为Tpcb skew:

Tvb = Tco data– (Tco strobe + Tdelay)

Tpcb skew = Tflt data – Tflt strobe

这样可以得到一个简单的建立时间裕量方程:

Tsetup margin = - Tvb – Tsetup – Tpcb skew (1.6.5)

注意:公式1.6.5 中Tvb 是一个负值,从公式中可以看出,如果数据和选通

信号的Tco 相同的话,其大小就是- Tdelay ,也就说明数据信号必须提前于选通

信号发送。

再考虑保持时间裕量,如图1-6-12,同样分析可以得到:

Thold margin = (Tco data + Tflt data + Tdelay) – (Tco strobe + Tflt strobe) – Thold

如果定义:Tva = Tco data – Tco strobe + Tdelay,为正值;Tpcb skew 定义不变。则保持

时间裕量的计算公式为:

Thold margin = Tva – Thold – Tpcb skew (1.6.6)

在公式1.6.5 和1.6.6 中,两个重要的参数是Tvb 和Tva,Tvb 表示“Valid before”,即数据在选通脉冲前有效存在的时间;Tva 表示“Valid after”,指选通信号脉冲之后数据仍然有效持续的时间。这两个时序参数一般都可以在器件的datasheet 上会找到。

和普通时钟系统相比,源同步总线在PCB 布线的设计上反而更为方便,设计

者只需要严格保证线长的匹配就行了,而不用太多的考虑信号走线本身的长度。当然,尽管源同步数据传输在理论上突破了频率的限制,但随着频率的提高,在控制Skew 上也变得越来越困难,尤其是一些信号完整性因素带来的影响也越发显得突出,而且目前的高速系统设计中,往往综合应用了普通时钟和源同步时钟技术,比如对于地址/控制信号采用普通时钟总线,而高速的数据传输则是采用源同步总线。这些对于高速PCB 设计分析人员来说是一个非常严峻的挑战。

时序计算和Cadence 仿真结果的运用

时序计算和Cadence仿真结果的运用 中兴通讯康讯研究所EDA设计部余昌盛刘忠亮 摘要:本文通过对源同步时序公式的推导,结合对SPECCTRAQuest时序仿真方法的分析,推导出了使用SPECCTRAQuest进行时序仿真时的计算公式,并对公式的使用进行了说明。 关键词:时序仿真源同步时序电路时序公式 一.前言 通常我们在时序仿真中,首先通过时序计算公式得到数据信号与时钟信号的理论关系,在Cadence仿真中,我们也获得了一系列的仿真结果,怎样把仿真结果正确的运用到公式中,仿真结果的具体含义是什么,是我们正确使用Cadence仿真工具的关键。下面对时序计算公式和仿真结果进行详细分析。 二.时序关系的计算 电路设计中的时序计算,就是根据信号驱动器件的输出信号与时钟的关系(Tco——时钟到数据输出有效时间)和信号与时钟在PCB上的传输时间(Tflytime)同时考虑信号驱动的负载效应、时钟的抖动(Tjitter)、共同时钟的相位偏移(Tskew)等,从而在接收端满足接收器件的建立时间(Tsetup)和保持时间(Thold)要求。通过这些参数,我们可以推导出满足建立时间和保持时间的计算公式。 时序电路根据时钟的同步方式的不同,通常分为源同步时序电路(Source-synchronous timing)和共同时钟同步电路(common-clock timing)。这两者在时序分析方法上是类似的,下面以源同步电路来说明。 源同步时序电路也就是同步时钟由发送数据或接收数据的芯片提供。图1中,时钟信号是由CPU驱动到SDRAM方向的单向时钟,数据线Data是双向的。 图1

图2是信号由CPU 向SDRAM 驱动时的时序图,也就是数据与时钟的传输方向相同时 的情况。 Tsetup ’ Thold ’ CPU CLK OUT SDRAM CLK IN CPU Signals OUT SDRAM Signals IN Tco_min Tco_max T ft_clk T ft_data T cycle SDRAM ’S inputs Setup time SDRAM ’S inputs Hold time 图2 图中参数解释如下: ■ Tft_clk :时钟信号在PCB 板上的传输时间; ■ Tft_data :数据信号在PCB 板上的传输时间; ■ Tcycle :时钟周期 ■ Tsetup’:数据到达接收缓冲器端口时实际的建立时间; ■ Thold’:数据到达接收缓冲器端口时实际的保持时间; ■ Tco_max/Tco_min :时钟到数据的输出有效时间。 由图2的时序图,我们可以推导出,为了满足接收芯片的Tsetup 和Thold 时序要求,即 Tsetup’>Tsetup 和Thold’>Thold ,所以Tft_clk 和Tft_data 应满足如下等式: Tft_data_min > Thold – Tco_min + Tft_clk (公式1) Tft_data_max < Tcycle - Tsetup – Tco_max + Tft_clk (公式2) 当信号与时钟传输方向相反时,也就是图1中数据由SDRAM 向CPU 芯片驱动时,可 以推导出类似的公式: Tft_data_min > Thold – Tco_min - Tft_clk (公式3) Tft_data_max < Tcycle - Tsetup – Tco_max - Tft_clk (公式4) 如果我们把时钟的传输延时Tft_clk 看成是一个带符号的数,当时钟的驱动方向与数据 驱动方向相同时,定义Tft_clk 为正数,当时钟驱动方向与数据驱动方向相反时,定义Tft_clk 为负数,则公式3和公式4可以统一到公式1和公式2中。 三.Cadence 的时序仿真 在上面推导出了时序的计算公式, 在公式中用到了器件手册中的Tco 参数,器件手册中Tco 参数的获得,实际上是在某一种测试条件下的测量值,而在实际使用上,驱动器的实际 负载并不是手册上给出的负载条件,因此,我们有必要使用一种工具仿真在实际负载条件下 的信号延时。Cadence 提供了这种工具,它通过仿真提供了实际负载条件下和测试负载条件 下的延时相对值。 我们先来回顾一下CADENCE 的仿真报告形式。仿真报告中涉及到三个参数:FTSmode 、

Modelsim的功能仿真和时序仿真

FPGA 设计流程包括设计输入,仿真,综合,生成,板级验证等很多阶段。在整个设计流程中,完成设计输入并成功进行编译仅能说明设计符合一定的语法规范,并不能说明设计功能的正确性,这时就需要通过仿真对设计进行验证。在FPGA 设计中,仿真一般分为功能仿真(前仿真)和时序仿真(后仿真)。功能仿真又叫逻辑仿真,是指在不考虑器件延时和布线延时的理想情况下对源代码进行逻辑功能的验证;而时序仿真是在布局布线后进行,它与特定的器件有关,又包含了器件和布线的延时信息,主要验证程序在目标器件中的时序关系。在有些开发环境中,如Xilinx ISE 中,除了上述的两种基本仿真外,还包括综合后仿真,转换(post-translate)仿真,映射后(post-map)仿真等,这样做完每一步都可进行仿真验证,从而保证设计的正确性。 ModelSim 是Mentor Graphics 子公司MentorTechnology 的产品,是当今最通用的FPGA 仿真器之一。ModelSim 功能强大,它支持FPGA 设计的各个阶段的仿真,不仅支持VHDL 仿真,Verilog仿真,而且支持VHDL 和Verilog 混合仿真。它不仅能做仿真,还能够对程序进行调试,测试代码覆盖率,对波形进行比较等。ModelSim 有很多版本,像ModelSim/SE 是首要版本,除此之外还有ModelSim/XE 和ModelSim/AE,分别是为Xilinx 公司和Altera 公司提供的OEM 版,其中已包含各公司的库文件,故用特定公司OEM 版进行仿真时就不需编译该公司的库了。 用ModelSim 进行功能仿真 进行功能仿真首先要检查设计的语法是否正确;其次检查代码是否达到设计的功能要求。下文主要介绍仿真步骤和测试激励的加载。 仿真步骤 (1)建立库并映射库到物理目录 因为用ModelSim 进行仿真是建立在仿真库的基础上的(此处进行的是功能仿真,因而不用编译特定厂商的库),所以首先要建立库并把库映射到实际的物理路径。通常用户编译的文件都放在work库中,所以必须先建立work 库。有两种方法建立并映射库,第一种方法是通过图形界面,在菜单Design→Create a New Library 弹出对话框,如图1 所示。在Library Name 中输入work,如果建立其它库,可以输入其它名字。Library Map to 是映射的物理路径。第二种方法是用命令行的形式,建立库用ModelSim>vlib<库名>,映射库用ModelSim> vmap ,如建立并映射库work,就可以在ModelSim 主窗口命令提示符下输入 vlib work vmap work work (2)编译源代码 该步骤主要检查源文件的语法错误。实现方法有两种,一是通过菜单Design→Compile,出现选择源文件对话框,选择要编译的源文件,编译即可;二是通过命令行方式,这一步对于VHDL 和Verilog 所使用的命令是不一样的,对于VHDL 代码用vcom-work.vhd.vhd ,

时序计算和Cadence仿真结果的运用

字体大小: 小中大作者:余昌盛刘忠亮来源:日期:2007-06-25 点击:558 摘要:本文通过对源同步时序公式的推导,结合对SPECCTRAQuest时序仿真方法的分析,推导出了使用SPECCTRAQuest进行时序仿真时的计算公式,并对公式的使用进行了说明。 一、前言 通常我们在时序仿真中,首先通过时序计算公式得到数据信号与时钟信号的理论关系,在cadence仿真中,我们也获得了一系列的仿真结果,怎样把仿真结果正确的运用到公式中,仿真结果的具体含义是什么,是我们正确使用Cadence仿真工具的关键。下面对时序计算公式和仿真结果进行详细分析。 二.时序关系的计算 电路设计中的时序计算,就是根据信号驱动器件的输出信号与时钟的关系(Tco——时钟到数据输出有效时间)和信号与时钟在PCB上的传输时间(Tflytime)同时考虑信号驱动的负载效应、时钟的抖动(Tiitter)、共同时钟的相位偏移(Tskew)等,从而在接收端满足接收器件的建立时间(Tsetup)和保持时间(Thold)要求。通过这些参数,我们可以推导出满足建立时间和保持时间的计算公式。 时序电路根据时钟的同步方式的不同,通常分为源同步时序电路(Source-synchronous timing)和共同时钟同步电路(common-clock timing)。这两者在时序分析方法上是类似的,下面以源同步电路来说明。 源同步时序电路也就是同步时钟由发送数据或接收数据的芯片提供。图1中,时钟信号是由CPU驱动到SDRAM方向的单向时钟,数据线Data是双向的。 图2是信号由CPU向SDRAM驱动时的时序图,也就是数据与时钟的传输方向相同时的情况。

用ModelSimSE进行功能仿真和时序仿真的方法(ALTERA篇)

用ModelSimSE进行 功能仿真和时序仿真的方法 (ALTERA篇) 黄俊 April 2007

用ModelSim SE进行功能仿真和时序仿真的方法 (ALTERA篇) 软件准备 (1) QuartusII,本文截图是QuartusII 6.1界面的。我个人认为,如果是开发StratixII或CycloneII或MAXII,用QuartusII6.0+SP1+SP2比较稳定。 (2) ModelSim SE. ALTERA仿真库要已经装好,安装仿真库的笔记已记录于《在ModelSimSE中添加ALTERA仿真库的详细步骤》中。我电脑上装的是ModelSim SE 6.1b。 例子程序的制作 先在Quartus II里生成一个例子程序,以方便介绍三种仿真的方法。步骤如下: 1、新建一个工程(Project),工程名取lpm_shift, 器件选CycloneII EP2C5Q208C, 第三方 的工具暂时都不选。 2、菜单栏上Tools?MegaWizard Plug-In Manager, 点Next,在storage中选 LPM_SHIFTREG,输出文件格式根据习惯选一种语言,在这里以Verilog的为例,在右边的output file名字中加上lpm_shift。点Next。

3、这个例子是做一个移位寄存器,调用lpm库,和cycloneII元件库,也正好可以作为对 前面建好的ALTERA库的一个验证。点可以查到该模块的使用说明和详细介绍。移位寄存器比较简单,就不用细看了。如下图设置.点Next.

4、加上一个异步清零端,点Next,再点Next,最后点Finish. Add/Remove Files in Project…,

利用ModelSim进行的功能仿真,综合后仿真,时序仿真

利用ModelSim进行的功能仿真,综合后仿真,时序仿真 功能仿真,就是在理想状态下(不考虑延迟),验证电路的功能是否符合设计的要求。 功能仿真需要: 1.TestBench或者其他形式的输入激励 2.设计代码(HDL源程序) 3.调用器件的模块定义(供应商提供,如FIFO,RAM等等) 值得一提的是,可以在ModelSim直接编写TestBench,使用View->Source->Show language templates. 综合后仿真(门级仿真),实际上就是将对综合后的门级网表进行仿真,只考虑门延迟,而没有加入时延文件。在功能仿真之后检验综合的结果是否满足功能要求。 综合后仿真需要: 1.综合后的门级网表,注意这里变成了*.vo文件,而不是原来功能仿真中所需要的HDL源代码. 2.测试激励 3.元件库Altera的仿真库位置为 *:\altera\quartus\eda\sim_lib 所谓时序仿真,就是在综合后仿真的基础上加上时延文件(sdf文件),综合考虑了路径延迟和门延迟的情况,验证电路是否存在时序违规。 时序仿真需要: 1.综合后的门级网表,注意这里变成了*.vo文件,而不是原来功能仿真中所需要的HDL源代码. 2.测试激励 3.元件库Altera的仿真库位置为 *:\altera\quartus\eda\sim_lib 4.较门级仿真还需要具有包含时延信息的反标记文件*.sdf 可以有两种方法实现门级仿真,或时序仿真。

1.工程编译成功后,自动启用ModelSim来运行门级仿真,前提是要在Quartus II的Options中设置好ModelSim的路径(和有些参考PDF上说的环境变量好像无关,至少我用的Quartus II 9.0 Web Edtion是这样的)具体方法是,进入Quartus9.0->Tools->Options,在Categroy里选中General 下的EDA Tool Options,在ModelSim右边的Location of Executable中双击来改变路径,就并且在工程中设置了自动启动ModelSim,就可以自动启用了。 1.在EDA Tool Settings,首先将仿真工具设置为ModelSim,然后点击让它自动启动。 2.NativeLink settings中选择testbench,完成相关的设置,例如test bench name,top level module in test bench,Design instance name in test bench,仿真时间,然后编译时会自动启动ModelSim然后完成所有操作,大概这就是Altera所指的和很多EDA工具的无缝连接。 另外一种方法,则是现在quartus ii中生成门级网表和延时文件,然后调用ModelSim进行仿真 1.在quartus ii设置仿真工具为ModelSim,这样设置完成后,在当前目录下会生成一个simulation的目录,该目录下有一个simulation文件夹,里面包含了网标文件和时延反标文件,vhdl语言对应的是网表文件为*.vho,时延文件为*.sdo。Verilog则为*.vo,*.sdo。 2.建立库并映射到物理目录,编译TestBench,执行仿真。 对库的理解: 我想所谓库,实际上就是一个代替文件夹的符号,区别就是,库中的文件的表述皆是经过了编译的实体或者module,一切操作都在库中进行。 ModelSim有两种库,一种是资源库,一种是工作库(默认名为work,保存当前工程下已通过编译的所有文件,资源库放置work库已编译文件所要调用的资源)。所以编译前,一定要有work库,而且只能有一个。

modelsim时序仿真

利用ModelSim SE6.0C实现时序仿真 时间:2007-04-05 来源: 作者: 点击:2743 字体大小:【大中小】 1) 打开一个工程文件。 2) 打开Settings设置栏,选择EDA Tools Settings下的Simulation栏。在右边出现的设置栏中将“Tool name”的下拉菜单选择“ModelSim(Verilog)”(如果工程用VHDL语言实现,则可以选择“ModelSim(VHDL)”;如果ModelSim使用的是for Altera的专用版本,则可以选择“ModelSim-Altera(Verilog)”或“ModelSim-Altera(VHDL)”)。 另外在设置栏中还有其他的核选框。 1.如果选中“Maintain hierarchy”,则表示在做时序仿真时就能看到像在功能仿真的工 程文件层次结构,可以找到定义的内部信号。因为在做后仿时,源文件中的信号名 称已经没有了,被映射为软件综合后自己生成的信号名,观察起来很不方便。这个 设置与ISE里综合右键属性的Keep Hierarchy选择YES的功能是一样的。 2.如果选中“Generate netlist for functional simulation only”,则表示只能做功能仿真。 3) 点击“Start Compilation”按钮编译工程,完成之后在当前的工程目录下可以看到一个名为“Simulation”的新文件夹,下面的“ModelSim”文件夹下包括仿真需要的.vo网表文件和包含延迟信息的.sdo文件。 4) 打开ModelSim软件(或者在Quartus下“Settings->EDA Tools Setting->Simulation”出现的设置栏中选中“Run this tool automatically after compilation”,直接从Quartus下调用ModelSim软件),可以在当前工程目录下新建一个Project。在Project标签栏内点击右键,出现在快捷菜单中选择“Add to Project->Existing File…”。加入当前工程目录的 “\Simulation\ModelSim\”路径下的.vo文件、TestBench文件和对应当前工程所选择器件的网表文件。 比如:当前工程选择的器件是Cyclone系列,Quartus安装目录在“C:\altera”路径下。因此需要在“C:\altera\quartus50\eda\sim_lib”路径下找到“cyclone_atom.v”的网表文件导入到ModelSim下的Project。如果是其他器件亦是如此,只要在此目录下找到对应有“_atom”后缀的.v文件。当然整个大前提是ModelSim SE版本已经加入了Alterta的仿真库,不过ModelSim-Altera版本就不会存在这样的问题。

FPGA仿真流程

QuartusII的设计流程 QuartusII软件的使用方法 一、设计输入 1.建立工程 任何一项设计都是一项工程(Project),都必须首先为此工程建立一个放置与此工程相关的所有设计文件的文件夹。此文件夹将被EDA软件默认为工作库(Work Library)。一般,不同的设计项目最好放在不同的文件夹中,而同一工程的所有文件都必须放在同一文件夹中。 首先建立工作库目录,以便存储工程项目设计文件。在D盘下新建文件夹并取名Mydesign。双击QuartusII软件启动图标,即可启动QuartusII软件,启动界面如图1-2所示。 使用New Project Wizard 可以为工程指定工作目录、分配工程名称以及指定最高层设计实体的名称,还可以指定要在工程中使用的设计文件、其他源文件、用户库和EDA 工具,以及目标器件系列和具体器件等。在此要利用“New Preject

Wizard”工具选项创建此设计工程,并设定此工程的一些相关的信息,如工程名、目标器件、综合器、仿真器等。(1)打开建立新工程管理窗。选择菜单File→New Preject Wizard 命令,即弹出“工程设置”对话框(图1-3),以此来建立新的工程。 (2)在单击图1-3后,出现了设置工程的基本信息,如图1-4所示。单击此对话框最上一栏右侧的“… ”按钮,可以选择工程存放在硬盘上的位置,此例中将工程放在D盘Mydesign文件夹下。这三行的第一行的d:\Mydesign表示工程所在的工作库文件夹;第二行的half_add 表示此项工程的工程名,工程名可以取任何其他的名,也可直接用顶层文件的实体名作为工程名,在此就是按这种方式取的名;第三行是当前工程顶层文件的实体名,这里即为half_add。 (2)将设计文件加入工程中。单击图1-4中的Next 按钮,弹出对话框如图1-5所示,在对话框中单击File name 右侧的“… ”按钮,可以将与工程相关的所有VHDL 文件(如果有的话)加入进此工程,此工程文件加入的方法有两种:第1 种方法是单击“Add … ”按钮,从工程目录中选出相关的VHDL 文件;第2 种方法是单击Add All 按钮,将设定

功能仿真与时序仿真

功能仿真和时序仿真 章节:第3 章第2节 功能仿真与时序仿真 概述 仿真过程是正确实现设计的关键环节,用来验证设计者的设计思想是否正确,及在设计实现过程中各种分布参数引入后,其设计的功能是否依然正确无误。仿真主要分为功能仿真和时序仿真。功能仿真是在设计输入后进行;时序仿真是在逻辑综合后或布局布线后进行。 1. 功能仿真 ( 前仿真 ) 功能仿真是指在一个设计中,在设计实现前对所创建的逻辑进行的验证其功能是否正确的过程。布局布线以前的仿真都称作功能仿真,它包括综合前仿真( Pre-Synthesis Simulation )和综合后仿真( Post-Synthesis Simulation )。综合前仿真主要针对基于原理框图的设计 ; 综合后仿真既适合原理图设计 , 也适合基于 HDL 语言的设计。 2. 时序仿真(后仿真) 时序仿真使用布局布线后器件给出的模块和连线的延时信息,在最坏的情况下对电路的行为作出实际地估价。时序仿真使用的仿真器和功能仿真使用的仿真器是相同的,所需的流程和激励也是相同的;惟一的差别是为时序仿真加载到仿真器的设计包括基于实际布局布线设计的最坏情况的布局布线延时,并且在仿真结果波形图中,时序仿真后的信号加载了时延,而功能仿真没有。 仿真工具 1. ModelSim 总体概览 ModelSim 仿真工具是工业上最流行、最通用的仿真器之一,可支持Verilog 、 VHDL 或是 VHDL/ Verilog 混合输入的仿真,它的 OEM 版本允许Verilog 仿真或 VHDL 仿真。Model 技术公司共开发了 ModelSim/VHDL 和ModelSim/Verilog 两种 ModelSim 产品,但它又分为不同的版本: OEM 版本—— ModelSim/LNL 支持 Verilog 或者 VHDL ,但是不同时支持; ModelSim/PLUS 版本支持混合仿真 Verilog 和 VHDL ; ModelSim/SE 版本支持 PLUS 的所有功能连同附加功能。

ModelSim的前后仿真(Quartus)

利用Quartus5.0实现功能仿真 1)打开一个工程文件。 2)打开Settings设置栏,选择Fitting Settings下的Simulator栏。在右边出现的设置栏中将 “Simulation Mode”的下拉菜单选择“Functional”,即可以实现软件下的功能仿真。(下拉菜单中有“Functional”、“Timing”和“Timing using Fast Timing Model”,分别代表可以在Quartus软件下实现功能仿真,时序仿真和快速时序仿真。最后一项一般不选,如果在Settings->Timing Requirement->More Settings下“Report Combined Fast/Slow Timing” 选项设为“On”,就可以选择最后一项。编译的报告里也会分别列出最快和最慢的时序报告。) 3)选择“Processing”菜单下的“Generate Functional Simulation Netlist”命令,否则将无法 启动仿真。 4)新建一个波形仿真文件,文件后缀名为.vwf。选择File菜单下的New->Other Files->Vector Waveform File。如下图所示,左边空白栏处是节点名的列表区,右边空白栏处是仿真波形的显示区。波形编辑窗口默认时间为1us,如果想改变仿真时间,可以选择Edit菜单下End Time,在弹出的对话框中选择需要的时间。将新建的波形仿真文件保存下来。

5)将需要仿真的信号加入波形编辑窗口。在列表区任一位置双击或者点击右键选择“Insert Node or Bus…”,弹出的对话框点击“Node Finder”按钮。在“Node Finder”界面中点击“List”按钮,有关信号的列表会出现在界面的左边,双击需要观察的信号加入至界面右边。如果工程中用到了很多信号,在左边列表中也会显示很多(Named编辑框默认的是*通配符),可以在Named编辑框中添加需要的信号名称实现模糊查找。界面中“Filter”下拉框中默认的是“Pins: all”,也就是说将要列出的信号都是IO管脚。如果需要观察一些内部信号,可以改变下拉框的参数,比如“Registers: Pre-Synthesis”。下图显示了仿真信号加入波形编辑窗口的情况。对于有些总线信号可以改变其显示的进制格式,比如二进制、八进制、十进制和十六进制。在列表中对应信号点击右键选择 “Properties”,弹出的对话框中选择“Radix”下拉框实现进制的转换。

利用ModelSim进行的功能,综合后,时序仿真

利用ModelSim 进行的功能仿真,综合后仿真,时序仿真 功能仿真,就是在理想状态下(不考虑延迟),验证电路的功能是否符合设计的要求。 功能仿真需要: I. TestBe nch或者其他形式的输入激励 2?设计代码(HDL源程序) 3?调用器件的模块定义(供应商提供,如FIFO, RAM等等) 值得一提的是,可以在ModelSim直接编写TestBench,使用 View->Source->Show language templates. 综合后仿真(门级仿真),实际上就是将对综合后的门级网表进行仿真, 只考虑门延迟,而没有加入时延文件。在功能仿真之后检验综合的结果是否满足功能要求。 综合后仿真需要: 1. 综合后的门级网表,注意这里变成了*.vo 文件,而不是原来功能仿真中所需要的HDL源代码. 2. 测试激励 3. 元件库Altera 的仿真库位置为*: \altera\quartus\eda\sim_lib 所谓时序仿真,就是在综合后仿真的基础上加上时延文件(sdf 文件),综合考虑了路径延迟和门延迟的情况,验证电路是否存在时序违规。 时序仿真需要: 1. 综合后的门级网表,注意这里变成了*.vo 文件,而不是原来功能仿真中所需要的HDL源代码. 2. 测试激励

3. 元件库Altera 的仿真库位置为*: \altera\quartus\eda\sim_lib 4 .较门级仿真还需要具有包含时延信息的反标记文件*.sdf 可以有两种方法实现门级仿真,或时序仿真。 1. 工程编译成功后,自动启用ModelSim 来运行门级仿真,前提是要在 Quartus II的Options中设置好ModelSim的路径 (和有些参考PDF上说的环境变量好像无关,至少我用的Quartus II 9.0 Web Edtion 是这样的)具体方法是,进入 Quartus 9.0->Tools->Options,在Categroy里选中General 下的EDA Tool Options 在ModelSim 右边的Location of Executable中双击来改变路径,就并且在工程中设置了自动启动ModelSim,就可以自动启用了。 1. 在EDA Tool Settings首先将仿真工具设置为ModelSim,然后点击让它自动启动。 2. NativeLinksettings中选择testbench,完成相关的设置,例如test bench n ame,top level module in test ben ch,Desig n in sta nee n ame in test bench 仿真时间,然后编译时会自动启动ModelSim 然后完成所有操作,大概这就是Altera 所指的和很多EDA工具的无缝连接。 另外一种方法,则是现在quartus ii 中生成门级网表和延时文件,然后调用ModelSim 进行仿真 1?在quartus ii设置仿真工具为ModelSim,这样设置完成后,在当前目录下会生成一个simulation 的目录,该目录下有 一个simulation 文件夹,里面包含了网标文件和时延反标文件,vhdl 语言对应的是网表文件为*vho,时延文件为

第13章 时序仿真(timing simulation)

第13章 时序仿真(Timing Simulation) 一般的place&route工具在做完FPGA或CPLD的place&route后,都可选择是 否要做timing simulation,在前一章我们曾经介绍过,如何在Foundation中选 择产生timing simulation所要的文件,在产生供timing simulation的VHDL netlist文件时,不同的开发系统产生的文件也有不同的格式,大约可以分成两 大类,有些厂商的place&route工具所产生的VHDL netlist文件已包含了timing delay的数据,比如其component的声明中有generic,在component instantiation时可以用generic map将器件的setup time或delay time等数据传 入器件中,这时只要用simulator将此VHDL netlist文件compile,后面的做法就 与做function simulation没有两样了,只是其结果已反映出了timing delay, 有些厂商的place&route工具所产生的VHDL netlist文件并不包含timing delay 的数据,仅是单纯的netlist数据。在做simulation时除了要compile VHDL netlist数据外,还需配合SDF文件使用,这一部分会在后面再讨论。 IEEE在1995年扩充IEEE-1076,增加了IEEE-1076.4,这一增订主要是在 VITAL(VHDL Initiative Towards ASIC Libraries)上,其在VHDL上对ASIC提供 了高精确度及高效率的仿真模型。此规范定义了三个1evels的模型,分别是VITAL level0、VITAL level1及VITAL level 1Memory,在此并不是要介绍这三个模型 的内容,而是要介绍三个定义的标准packages,分别是VITAL_Timing、 VITAL_Primitives及VITAL_Memory,VITAL_Timing package定义了一些标准的数 据类型、属性、常数及一些基本类型、次要类型、常数及一些用来发展ASIC模型 的子程序,此package是架构在VITAL_Timing package之上的,也就是其使用了 一些VITAL_Timing package所声明的数据类型或常数。至于VITAL_Memory package则定义了一些数据类型及用来支持开发内存模型的子程序,一般在做 timing simulation所需要的是VITAL_Timing package及VITAL_Primitives package,VITAL_Memory package较少使用。 13-1编译VHDL Netlist File VHDL netlist file是由place&route工具经back-annotate所产生的,Foundation所产生的netlist并不包含timing的数据,所以会有一个SDF文件来存 储timing数据,在compile这个VHDL文件之前,我们先来看看它是否要声明一些 特别的1ibrary或是packages。 Foundation产生的VHDL netlist文件,其默认的文件名称是time_sim.vhd。在这个文件的一开始是一些相关的注释内容,之后便是1ibrary声明。我们可以 看到除了Library IEEE的声明外,还有另一个1ibrary SIMPRIM,若是读者前面完 全没有做过timing simulation的话,可以肯定在你的ModelSim系统中一定没有 这个1ibrary的存在,但要是你不能确定的话,可以到ModolSim的目录下,打开modelsim.ini这个文件,看是否有simprim这个1ibrary的存在。 检查完modelsim.ini这个文件后,我们再来看看这个VHDL文件与自己设计 的VHDL文件有什么不同。 Post layout的VHDL netlist文件大多都会有一个厂商制定的library,其 中包含一些VITAL的变量声明、特殊function及procedure的声明、厂商提供的各 种component的声明等。当你看到VHDL netlist文件开始处有声明新的1ibrary,但是你还没有建立该1ibrary时,就要在ModelSim系统中先建立一个新的library 了。 Foundation在做完place & route之后可以产生做timing simulation的文件,若是依照前一章的设定,在做place&route之后会产生的文件是一VHDL的netlist文件time_sim.vhd及一个标明timing delay及timing check的SDF文件

前仿真和后仿真

功能仿真和时序仿真 1 推荐 仿真过程是正确实现设计的关键环节,用来验证设计者的设计思想是否正确,及在设计实现过程中各种分布参数引入后,其设计的功能是否依然正确无误。仿真主要分为功能仿真和时序仿真。功能仿真是在设计输入后进行;时序仿真是在逻辑综合后或布局布线后进行。 1. 功能仿真( 前仿真) 功能仿真是指在一个设计中,在设计实现前对所创建的逻辑进行的验证其功能是否正确的过程。布局布线以前的仿真都称作功能仿真,它包括综合前仿真(Pre-Synthesis Simulation )和综合后仿真(Post-Synthesis Simulation )。综合前仿真主要针对基于原理框图的设计; 综合后仿真既适合原理图设计,也适合基于HDL 语言的设计。 2. 时序仿真(后仿真) 时序仿真使用布局布线后器件给出的模块和连线的延时信息,在最坏的情况下对电路的行为作出实际地估价。时序仿真使用的仿真器和功能仿真使用的仿真器是相同的,所需的流程和激励也是相同的;惟一的差别是为时序仿真加载到仿真器的设计包括基于实际布局布线设计的最坏情况的布局布线延时,并且在仿真结果波形图中,时序仿真后的信号加载了时延,而功能仿真没有。 3.2.2 仿真工具 1. ModelSim 总体概览 ModelSim 仿真工具是工业上最流行、最通用的仿真器之一,可支持Verilog 、VHDL 或是VH DL/ Verilog 混合输入的仿真,它的OEM 版本允许Verilog 仿真或VHDL 仿真。Model 技术公司共开发了ModelSim/VHDL 和ModelSim/Verilog 两种ModelSim 产品,但它又分为不同的版本:OEM 版本——ModelSim/LNL 支持Verilog 或者VHDL ,但是不同时支持;ModelSim/PLUS 版本支持混合仿真Verilog 和VHDL ;ModelSim/SE 版本支持PLUS 的所有功能连同附加功能。 1)ModelSim 的仿真实现方式 (1) 交互式的命令行(Cmd)的方式——惟一的界面是控制台的命令行, 没有用户界面。 (2) 用户界面UI的方式——可以接受菜单输入和命令行输入的仿真方式。 (3) 批处理模式——从DOS 或UNIX 命令行运行批处理文件的仿真方式。 2)ModelSim 基本仿真步骤 (1)建立数据库。 (2)映射数据库到物理层目录。 (3)编译源代码——所有的HDL 代码必须被编译;Verilog 和VHDL 必须有不同的编译器支持。 (4)启动仿真器,执行仿真。也可以从其他软件上直接调用,启动内 嵌的仿真器执行仿真。 3)ModelSim 的用户界面 ModelSim 仿真器有9 个窗口: 窗口(main)、结构窗口(structure)、源窗口(source)、信号窗口(signals)、处理窗口(process)、变量窗口(variables)、数据流窗口(dataflow)、波形窗口(w ave) 和列表窗口(list)。这些窗口可以通过主窗口中的视窗(View)菜单来打开。由于大部分窗口只是对设计仿真起一个辅助的作用,不是经常用到的,因此下面主要介绍的是main 主窗口和wave 波形窗口。ModelSim 的完整用户界面如图3-6 所示。 4)ModelSim 窗口模块介绍

Modelsim功能仿真流程

常高嘉 Version 1A,2010-10-7 ModelsimSE 的功能仿真流程 本文档首先简要介绍了Modelsim 软件,然后对Modelsim 的功能仿真流程做了详细说明。 Abstract 摘要目录 一、Modelsim 软件介绍 (2) 二、Modelsim 的仿真方法 (2) 2.1前端仿真流程 (2) 2.1.1文件准备 (2) 2.1.2新建工程 (2) 2.1.3编译设计文件 (5) 2.1.4启动仿真 (6) 2.1.5查看仿真结果并保存 (8) 三、总结 (9)

一、Modelsim软件介绍 Modelsim是Mentor公司开发的专业仿真软件,支持VHDL、Verilog HDL和混合仿真的全系列流程。作为目前最流行的仿真工具之一,Modelsim提供了图形界面和命令行两种工作模式,既可以方便地使用鼠标和对话框完成大部分的仿真操作,也可以通过编写宏指令执行由文件驱动的工作流程以提高效率。 二、Modelsim的仿真方法 Modelsim的仿真分为前端仿真和后端仿真,下面简单介绍一下两者的区别。 前端仿真:也称为功能仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟,主要是验证电路与理想情况是否一致。 后端仿真:也称为时序仿真或者布局布线后仿真,是指电路已经映射到特定的工艺环境以后,综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想的过程,是否存在时序违规。其输入文件为从布局布线结果中抽象出来的门级网表、Testbench和扩展名为SDO或SDF的标准时延文件。SDO或SDF的标准时延文件不仅包含门延迟,还包括实际布线延迟,能较好地反映芯片的实际工作情况。一般来说后仿真是必做的。 下面对Modelsim的前端仿真(功能仿真)流程做详细的介绍。 2.1前端仿真流程 2.1.1文件准备 1.HDL源文件;可以使VHDL语言或Verilog语言。 2.测试激励文件(testbench):根据设计要求输入/输出的激励程序,由于不需要进行综合,书写具有很大的灵活性。 3.仿真模型/库:根据设计内调用的器件供应商提供的模块而定,如:FIFO(Altera常用的FIFO有:LPM_FIFO/LPM_FIFO_DC等)、DPRAM等。 2.1.2新建工程 ①新建一个文件夹(文件夹的地方可以自己确定)。然后启动Modelsim将当前路径修改到该文件夹下,后面的所有操作在此文件下进行,以防止文件间的误操作。 修改方法:File→Change directory

关于状态机时序与功能仿真中存在的问题

关于状态机时序与功能仿真中存在的问题 下图是一个状态机的状态转移图(黄色圆圈中的数字为该状态下的输出,曲线上方的等式为状态转移条件) 图1 由s0、s1、s2、s3四种状态构成的状态机 下面的代码实现了上图所示的状态机(出自《VHDL经典实例》——黄任), library ieee; use ieee.std_logic_1164.all; entity moore is port ( reset :in std_logic; clock : in std_logic; din : in std_logic; dout : out std_logic_vector(2 downto 0) ); end; architecture mooremachine of moore is type state_type is (s0,s1,s2,s3); signal presentstate:state_type; signal nextstate :state_type; begin state_reg: process(reset,clock) /*综合成时序逻辑,很可能是一个D触发器*/ begin if reset='1' then /*这里的nextstate信号即是该D触发器的输入, presentstate<=s0; presentstate信号即是D触发器的输出*/ elsif rising_edge(clock) then

presentstate<=nextstate; end if; end process; change_state: process(presentstate,din) /*综合成组合逻辑,输出即是nextstate信号, 故存在延时*/ begin case presentstate is when s0=> if din='1' then nextstate<=s1; else nextstate<=s0; end if; dout<="001"; when s1=> if din='1' then nextstate<=s2; else nextstate<=s1; end if; dout<="011"; when s2=> if din='1' then nextstate<=s3; else nextstate<=s2; end if; dout<="101"; when s3=> if din='1' then nextstate<=s0; else nextstate<=s1; end if; dout<="111"; end case; end process; end; 将上面的代码在quartus 6.0中编译后可以得到一些它的功能仿真图。(设定复位后presentstate的初始状态为:s0 ) 首先看如下输入波形时的功能仿真图形,其结果很容易分析,与预期的一致。

相关主题
文本预览
相关文档 最新文档