当前位置:   article > 正文

用大白话从底层理解FPGA——触发器、锁存器_fdpe直接置位

fdpe直接置位

FPGA中最重要两种结构,LUT和FF(触发器),前面我们讲LUT,现在我们从底层讲触发器。

废话不多说,先列出看完这篇文章,能收获什么?

1. 理解触发器是什么?锁存器是什么?寄存器是什么?

2. 理解触发器和锁存器根本区别?

3. FPGA中有哪几种触发器?

4. 设计中避免锁存器的原因和方法 

首先讲触发器和锁存器的基本概念,简单来说:

触发器:触发器是FPGA内部边沿敏感存储单元,数据存储由时钟上升或下降沿进行同步。

D触发器(D为数据输入,Q为数据输出)

尽管输入带毛刺,由于D触发器上升沿起作用,具有过滤毛刺作用

寄存器:一个触发器可以组成1bit寄存器,多个触发器级联可以组成一个多位寄存器,其作用就是一个小型存储器,用来暂存参与运算的数据和运算结构,一般有8bit寄存器,16bit寄存器,32bit寄存器。

锁存器:锁存器是FPGA内部电平触发存储单元,注意它没有时钟信号,数据存储取决于使能信号,当锁存器EN有效时,输出才会随着数据输入发生变化,也就是锁存的过程。

在Verilog代码中,我们经常会定义一个reg类型信号,然后写一些if else代码,例如:

定义一个reg类型信号

该信号映射到FPGA上的FF

可以看出,该信号被综合成一个触发器。同时在FPGA内部,根据复位方式(同步复位or异步复位)、复位电平(0 or 1),将触发器分为以下4种类型。举例如下:

  • 异步复位(FDCE)
  • 异步置位(FDPE)
  • 同步复位(FDRE)
  • 同步置位(FDSE)

FPGA中4类触发器

出现2个同步触发器和2个异步触发器

在FPGA设计中我们基本多使用触发器,因为触发器只有在时钟边沿才起作用,尽管输入信号中带有毛刺,也能过滤掉。然而锁存器因为它没有时钟信号,不容易进行静态时序分析,对信号传输中很容易产生毛刺,因此在设计FPGA时,尽量不用锁存器。

什么样代码会产生锁存器?条件描述不全就会容易产生Latch:

1.if语句中缺少了else语句。

2.case语句中没有给出全部的情况。

代码缺少完整条件的描述,编译工具认为在此情况下该值保持不变,就推断出了锁存器。所以,为了防止锁存器的产生,在组合逻辑一定要将 if-else语句、case 语句描述完整。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/915791
推荐阅读
相关标签
  

闽ICP备14008679号