首页 > 技术 > 内容

FPGA设计中为何应慎用锁存器

时间:2025-12-15  作者:Diven  阅读:0

前言

FPGA的设计中,避免使用锁存器是几乎所有FPGA工程师的共识,Xilinx和Altera也在手册中提示大家要慎用锁存器,除非你明确知道你确实需要一个latch来解决问题。而且目前网上大多数文章都对锁存器有个误解,我们后面会详细说明。

这篇文章,我们包含如下内容:

  1. 锁存器、触发器寄存器的原理和区别,为什么锁存器不好?

  2. 什么样的代码会产生锁存器?

  3. 为什么锁存器依然存在于FPGA中?

锁存器、触发器寄存器的原理和区别,为什么锁存器不好?

锁存器、触发器和寄存器英文分别为:Latch、Flip-Flop、Register。我们对这三个单词的翻译真的是非常直观,从名字就能大概猜出含义。

锁存器

  1. 什么是锁存器?

  锁存器就是用来存储状态信息,就是将这个状态一直保持。锁存器对脉冲的电平敏感,也就是电平触发,在有效的电平下,锁存器处于使能状态,输出随着输入发生变化,此时不锁存信号,就像一个缓冲器一样;在锁存器没有使能时,则数据被锁住,输入信号不起作用,此时输出一直为锁存的状态信息。我们常见的锁存器有SR锁存器、D锁存器、JK锁存器等。

  1. 锁存器的工作过程

  我们以最简单的D锁存器为例来说明锁存器的工作过程,D锁存器有3个接口,也可以认为是4个,因为输出的两个Qoverline{Q}Q只是单纯的反向关系。

 

image

 

  其中D为输入信号,当E为高时,输出Q即为输入的D;当E为低时,Q保持E为高时的最后一次状态,也就是锁存过程。

image

 

  1. 为什么锁存器不好?

  从上面的图中可以看出,锁存器对毛刺不敏感,很容易在信号上产生毛刺;而且也没有时钟信号,不容易进行静态时序分析。正是因为这两个原因,我们在FPGA设计时,尽量不用锁存器。

当然,目前网上还有说法是FPGA中只有LUT和FF的资源,没有现成的Latch,所以如果要用Latch,需要更多的资源来搭出来。但这一观点,是错误的,我们后面会有专门的讲解。

触发器

  1. 什么是触发器

  触发器(Flip-Flop,简写为 FF),也叫双稳态门,又称双稳态触发器。在中国台湾及中国香港译作“正反器”,是具有两种稳态的用于储存的组件,可记录二进制数字信号“1”和“0”。

FPGA工程师,对触发器再熟悉不过了,D触发器应该是我们平时写程序中用到最多的element。除了D触发器,常见的触发器还有T触发器、SR触发器、JK触发器等。触发器对脉冲边沿敏感,其状态只在时钟脉冲的上升沿或下降沿的瞬间改变。

  1. 触发器的工作过程

  我们以D触发器为例来说明触发器的工作过程,D触发器接口如下:

image

 

触发器只在时钟边沿时起作用,所以哪怕输入的信号中有毛刺,输出还是比较干净的。

 

image

 

还有一点需要了解的是,FPGA中最小的单元是门电路,门电路又组成了锁存器,锁存器组成了寄存器。

寄存器

用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果,被的用于各类数字系统和计算机中。其实寄存器就是常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。工程中的寄存器一般按计算机中字节的位数设计,所以一般有8位寄存器、16位寄存器等。

什么样的代码会产生锁存器?

在组合逻辑中,如果条件描述不全就会容易产生Latch:

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

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

也就是下面的情况:

always @ *begin    if(en==1)        q <= d;end
input [1:0]d;always @ (d)begin    case(d)    0:       q0 <= 1'b1;    1:       q2 <= 1'b1;    2:       q2 <= 1'b1;    3:       q3 <= 1'b1;    default: q4 <= 1'b1;end

这个前提是组合电路中,在时序电路的if语句中,及时没有else,也不会综合出Latch的。

上面这两种写法容易出现在什么地方呢?最常见的就是状态机,我见过不少的FPGA工程师在写状态机时,case语句中没有给出变量的全部情况。

为什么锁存器依然存在于FPGA中?

我们在前面说过网上有说法是:FPGA中只有LUT和FF的资源,没有现成的Latch,所以如果要用Latch,需要更多的资源来搭出来。这种说法是错误的,因为在Xilinx的FPGA中,6 系列之前的器件中都有Latch;6系列和7系列的FPGA中,一个SlICe中有50%的storage element可以被配置为Latch或者Flip-Flop,另外一半只能被配置为Flip-Flop。比如7系列FPGA中,一个SlICe中有8个Flip-Flop,如果被配置成了Latch,该Slice的另外4个Flip-Flop就不能用了。这样确实造成了资源的浪费。

 

image

 

在UltraScale的FPGA中,所有的storage element都可以被配置成Flip-Flop和Latch。

 

image

 

我们以下面的代码来说明Flip-Flop和Latch在Ultrascale的FPGA中Implementation后的结果。

Flip-Flop代码:

Module FF_top( input              clk, input [3:0]        data_i, input              data_ie,  //enable output reg [3:0]   o_latch    );always @ ( posedge clk )begin    if(data_ie)        o_latch <= data_i;end  endModule

Latch代码:

module latch_top( input [7:0]        data_i, input              data_ie,  //enable output reg [7:0]   o_latch    );always @ * begin    if(data_ie)        o_latch[3:0] <= data_i[3:0];end  endmodule

Flip-Flop实现后的Schematic和Device如下:

 

image

 

 

Latch实现后的Schematic和Device如下:

 

image

 

 

可以看出,在使用Flip-Flop时,storage element被综合成了FDRE,也就是触发器;当使用Latch电路时,storage element被综合成了LDCE。

所以,FPGA中没有Latch的说法在Xilinx的FPGA中是不对的。

最后一个问题,既然Latch有这么多的问题,那为什么FPGA中还要保留?

  1. 首先就是因为FPGA电路的灵活性,保留Latch并不影响FPGA的资源,因为storage element可以直接被配置为Flip-Flop。

  2. 其次就是有些功能是必须要使用Latch的,比如很多处理器的接口就需要一个Latch来缓存数据或地址。

  最后要说明的一点是:锁存器虽然在FPGA中不怎么被使用,但在CPU中却很常见,因为锁存器比Flip-Flop快很多。

 

 

陪你度过深夜的2048小游戏,我们用FPGA实现

 

基于FPGA的数字识别-实时视频处理的定点卷积神经网络实现

 

I3C的视频介绍

 

以太网的发展历史、演化过程以及工作基理

           

 

 

猜您喜欢


二极管是重要的半导体元件,应用于各种电子电路中。基本功能是允许电流在一个方向上流动,而在相反方向上阻止电流。尽管二极管的工作原理相对简单,但在实际应用中,反接现...
2025-04-07 01:00:03
贴片电阻,作为电子电路中不可或缺的基础元件,其品质直接影响着整个电路的性能和稳定性。选择合适的贴片电阻供应商至关重要。本文将为您简要介绍全球十大贴片电阻生产厂商...
2024-11-26 11:29:49
数字比较器是重要的电子元件,应用于各种电子设备中。主要作用是比较两个数字信号的大小,并输出相应的比较结果。这一功能在数字电路设计中尤为关键,尤其是在数据处理和控...
2014-04-29 00:00:00
PTC热敏电阻作为重要的电子元器件,应用于过流保护、温度检测及自恢复保险丝等领域。TA-I(大毅)作为国内知名的PTC热敏电阻品牌,优异的性能和多样的规格赢得了...
2016-07-06 03:55:28
贴片电阻上的标识通常采用3位或4位数字编码来表示阻值。理解这些编码,可以快速计算出电阻的实际阻值。三位数字编码: 前两位数字表示有效数字,第三位数字表示10的幂...
2025-04-14 15:02:19
现代电力系统中,高压电阻器是非常重要的配件。不仅用于电力设备的保护,还在电力电子设备中发挥着重要作用。科技的不断进步和电力需求的增加,市场对高压电阻的需求也日益...
2025-04-14 01:01:43
采样袋和采样棒是实验室和工业检测中常用的工具,根据不同的用途和材料可以分为多种类型。采样袋主要分为塑料采样袋和铝箔采样袋。塑料采样袋通常用于采集水样、土壤样本等...
2010-11-06 00:00:00
可生物降解的光波导是生物医学和环境应用中光传输和光传感的突破性技术。琼脂作为一种可食用、柔软、低成本、可再生的传统生物聚合物的替代品,具有显著的光学和机械特性。...
2023-08-29 09:07:00
现代电子产品设计中,表面贴装技术(SMD)越来越受到青睐。尤其是SMD_P=2mm这一标准间距,因其在小型化和高密度布局方面的优势,成为了许多电子产品设计师的首...
2025-04-20 02:31:11
热式气体流量传感器简介热式气体流量传感器是基于流体传热学原理的一类传感器,利用 MEMS 热式原理对管路气体介质进行流量监测。流量芯片由两个热偶堆和一个加...
2023-12-28 16:26:00