好文档 - 专业文书写作范文服务资料分享网站

FPGA入门教程

天下 分享 时间: 加入收藏 我要投稿 点赞

FPGA入门教程

1.数字电路设计入门 2.FPGA简介 3.FPGA开发流程 4.RTL设计

5.QuartusⅡ设计实例

6. ModelSim和Testbench1.

数字电路设计入门

1.1数字电路设计

数字电路设计的核心是逻辑设计。通常,数字电路的逻辑值只有‘1’和‘0’,表征的是模拟电压或电流的离散值,一般‘1’代表高电平,‘0’代表低电平。

高低电平的含义可以理解为,存在一个判决电平,当信号的电压值高于判决电平时,我们就认为该信号表征高电平,即为‘1’。反之亦然。

当前的数字电路中存在许多种电平标准,比较常见的有TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVDS、HSTL、SSTL等。这些电平的详细指标请见《补充教程1:电平标准》。

数字电路设计大致可分为组合逻辑电路和时序逻辑电路。

一般的数字设计的教材中对组合逻辑电路和时序逻辑电路的定义分别为:组合逻辑电路的输出仅与当前的输入有关,而时序逻辑电路的输出不但与输入有关,还和系统上一个状态有关。

但是在设计中,我们一般以时钟的存在与否来区分该电路的性质。由时钟沿驱动工作的电路为时序逻辑电路。大家注意,这两种电路并不是独立存在的,他们相互交错存在于整个电路系统的设计中。

1.1.1 组合逻辑电路

组合逻辑电路由任意数目的逻辑门电路组成,一般包括与门、或门、非门、异或门、与非门、或非门等。一般的组合逻辑电路如下图:

其中A,B,C,D,E,F为输入,G为输出。

1.1.2 时序逻辑电路

时序逻辑电路由时钟的上升沿或下降沿驱动工作,其实真正被时钟沿驱动的是电路中的触发器(Register),也称为寄存器。触发器的工作原理和参数如下图:

下面是两个简单的时序逻辑电路例子:

(1)、时钟分频电路

该时序电路的功能为实现对时钟’clk’的4分频,其中’clk_2’为2分频时钟,’clk_4’为4分频时

钟,’enable’为该电路的使能信号。其功能仿真波形如下图所示:

(2)、序列检测器

该时序电路实现了一个序列检测器,当输入序列‘datain’中出现‘101’时,标志位F将输出‘1’,其他时刻输出‘0’。电路中‘clk’为时钟信号,‘D1’,‘D2’,‘D3’为移位寄存器的输出,’enable’为该电路的使能信号。其功能仿真波形如下图所示:

可见,时序电路设计的核心是时钟和触发器,这两者也是我们设计电路时需重点关注的。

1.2毛刺的产生与消除

1.2.1竞争与冒险

当一个逻辑门的输入有两个或两个以上的变量发生改变时,由于这些变量是经过不同路径产生的,使得它们状态改变的时刻有先有后,这种时差引起的现象称为竞争(Race)。竞争的结果将很可能导致冒险(Hazard)发生(例如产生毛刺),造成错误的后果,并影响系统的工作。

组合逻辑电路的冒险仅在信号状态改变的时刻出现毛刺,这种冒险是过渡性的,它不会使稳态值偏离正常值,但在时序电路中,冒险是本质的,可导致电路的输出值永远偏离正常值或者发生振荡。

避免冒险的最简单的方法是同一时刻只允许单个输入变量发生变化,或者使用寄存器采样的办法。

1.2.2毛刺的产生与危害

信号在FPGA器件中通过逻辑单元连线时,一定存在延时。延时的大小不仅和连线的长短和逻辑单元的数目有关,而且也和器件的制造工艺、工作环境等有关。因此,信号在器件中传输的时候,所需要的时间是不能精确估计的,当多路信号同时发生跳变的瞬间,就产生了“竞争冒险”。这时,往往会出现一些不正确的尖峰信号,这些尖峰信号就是“毛刺”。 让我们来具体看一下毛刺是如何产生的。下图是一个与门电路,

我们期望的设计是,a和b信号同时变化,这样输出OUT将一直为0,但是实际中OUT产生了毛刺,它的仿真波形如下所示:

可见,即使是在最简单的逻辑运算中,如果出现多路信号同时跳变的情况,在通过内部走线之后,就一定会产生毛刺。而现在数字电路设计中的信号往往是由时钟控制的,如果将带有毛刺的输出信号直接连接到时钟输入端、清零或置位端口的设计,可能会导致严重的后果;此外对于多数据输入的复杂运算系统,每个数据都由相当多的位数组成。这时,每一级的毛刺都会对结果有严重的影响,如果是多级的设计,那么毛刺累加后甚至会影响整个设计的可靠性和精确性。 判断一个逻辑电路在某些输入信号发生变化时是否会产生毛刺,首先要判断信号是否会同时变化,然后判断在信号同时变化的时候,是否会产生毛刺,这可以通过逻辑函数的卡诺图或逻辑函数表达式来进行判断。

1.2.3毛刺的消除

毛刺是数字电路设计中的棘手问题,它的出现会影响电路工作的稳定性、可靠性,严重时会导致整个数字系统的误动作和逻辑紊乱。

可以通过以下几种方法来消除毛刺: 1、输出加D触发器 这是一种比较传统的去除毛刺的方法。原理就是用一个D触发器去读带毛刺的信号,利用D触发器对输入信号的毛刺不敏感的特点,去除信号中的毛刺。在实际中,对于简单的逻辑电路,尤其是对信号中发生在非时钟跳变沿的毛刺信号,去除效果非常的明显。 但是如果毛刺信号发生在时钟信号的跳变沿,D触发器的效果就没有那么明显了(加D触发器以后的输出q,仍含有毛刺)。另外,D触发器的使用还会给系统带来一定的延时,特别是在系统级数较多的情况下,延时也将变大,因此在使用D触发器去除毛刺的时候,一定要视情况而定,并不是所有的毛刺都可以用D触发器来消除。 2、信号同步法 设计数字电路的时候采用同步电路可以大大减少毛刺。由于大多数毛刺都比较短(大概几个纳秒),只要毛刺不出现在时钟跳变沿,毛刺信号就不会对系统造成危害了。因此一般认为,只要在整个系统中使用同一个时钟就可以实现系统同步。但是,时钟信号在FPGA器件中传递时是有延时的,我们无法预知时钟跳变沿的精确位置。也就是说我们无法保证在某个时钟的跳变沿读取的数据是一个稳定的数据,尤其是在多级设计中,这个问题就更加突出。因此,做到真正的\同步\就是去除毛刺信号的关键问题。所以同步的关键就是保证在时钟的跳变沿读取的数据是稳定的数据而不是毛刺数据。以下为两种具体的信号同步方法。 (1)信号延时同步法 信号延时法,它的原理就是在两级信号传递的过程中加一个延时环节,从而保证在下一个模块中读取到的数据是稳定后的数据,即不包含毛刺信号。这里所指的信号延时可以是数据信号的延时,也可以是时钟信号的延时。 (2)状态机控制 使用状态机也可以实现信号的同步和消除毛刺的目的。在数据传递比较复杂的多模块系统中,由状态机在特定的时刻分别发出控制特定模块的时钟信号或者模块使能信号,状态机的循环控制就可以使得整个系统协调运作,同时减少毛刺信号。那么只要我们在状态机的触发时间上加以处理,就可以避免竞争冒险,从而抑制毛刺的产生。

3、格雷码计数器

对于一般的二进制或十进制计数器,在计数时,将有多位信号同时跳变。例如一个3bit二进制计数器,由’111’转换为’000’时,必将产生毛刺。此时,使用格雷码计数器将避免毛

FPGA入门教程

FPGA入门教程1.数字电路设计入门2.FPGA简介3.FPGA开发流程4.RTL设计5.QuartusⅡ设计实例6.ModelSim和Testbench1.数字电路设计入门1.1数字电路设计数字电路设计的核心是逻辑设计。通常,数字电路的逻辑值只有‘1’和
推荐度:
点击下载文档文档为doc格式
6dezm0pqkz5136q5shmk
领取福利

微信扫码领取福利

微信扫码分享