FPGA结构:LATCH(锁存器)和 FF(触发器)介绍

这篇具有很好参考价值的文章主要介绍了FPGA结构:LATCH(锁存器)和 FF(触发器)介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

FPGA 系列文章

  • 如果你想学习有关FPGA的专业术语,可以参考这一篇:FPGA专业术语介绍


一、LATCH(锁存器)是什么

一句话概括,能够存储一个状态的数字电路叫做锁存器。

以下是最为基本的一个RS锁存器的具体结构:

fpga ff是什么资源,fpga开发

以下是它的真值表,其中X表示不确定/无效:

R {R} R(清零) S {S} S(置位) Q ( t ) {Q(t)} Q(t) (上一时刻的输出 ) Q ( t + 1 ) {Q(t+1)} Q(t+1) (这一时刻的输出A) Q ‾ \overline{Q} Q(这一时刻的输出B)
0 0 Q Q !Q
1 0 Q 0 1
0 1 Q 1 0
1 1 X X X

这张真值表的前三行如下图所示,能够使得输出的结果和定义一致。
第一种情况,电路能够维持输出为Q:
fpga ff是什么资源,fpga开发
第二种情况,上面的NOR门输出一定为0,进而使得整个电路达到稳态:

fpga ff是什么资源,fpga开发
第三种情况,下面的NOR门输出一定为0,进而使得整个电路达到稳态:
fpga ff是什么资源,fpga开发
唯独这张真值表的第四行输出结果和定义不一致:
fpga ff是什么资源,fpga开发
看起来这张电路图是一个稳定的状态,但当我们把这个状态切换到S=R=0的状态时,就会产生两种可能的稳态:

1.上面R对应的或非门电路延迟较低,这时候Q先被置为1:

fpga ff是什么资源,fpga开发

2.下面S对应的或非门电路延迟较低,这时候!Q先被置为1:

fpga ff是什么资源,fpga开发

在这种情况下,输出结果完全随机(与电路延迟相关),由于这种现象很玄学。因此我们在使用RS锁存器时,一般不会将R和S同时置1。

为了解决RS锁存器带来的问题(RS不能同时为1),我们需要在它的输入之前添加一些逻辑电路,进化版本的RS锁存器被叫做D锁存器。

D锁存器的具体结构如下:

fpga ff是什么资源,fpga开发

D锁存器在RS锁存器的输入之前添加了一个非门,排除了RS同时为1的情况。同时,上图中的D锁存器将使能输入(E)设置为clock,使得该电路只有在时钟信号为1的时候才能够工作(设置为时钟信号为0时工作也很简单)

D锁存器的真值表如下:

D {D} D(置位) E {E} E(使能) Q ( t ) {Q(t)} Q(t) (上一时刻的输出 ) Q ( t + 1 ) {Q(t+1)} Q(t+1) (这一时刻的输出A) Q ‾ ( t + 1 ) \overline{Q}(t+1) Q(t+1)(这一时刻的输出B)
0 0 Q Q !Q
1 0 Q Q !Q
0 1 Q 1 0
1 1 Q 0 1

D锁存器足够完美了吗?

当然不,D锁存器同样存在问题,那就是无法去除输入的毛刺/抖动。当E为1的时候,D 和 !Q 的值永远是相等的 (哪怕输入存在毛刺/抖动)。为了进一步的改进,人们在D锁存器的基础上提出了触发器的概念。触发器的具体结构会在第二章进行介绍。

二、FF(触发器)是什么

一句话概括:触发器是能在指定的事件发生时存储状态的数字电路。

触发器是时序逻辑电路的基本单元,用来存储1位2进制信息,具有记忆和存储功能。常见的触发器包括D触发器,J-K触发器等。

D触发器

D触发器可以由两个D锁存器级联构成,它的具体结构如下,其中FF1和FF2都代表上文提到的D锁存器:
fpga ff是什么资源,fpga开发
以下是两个D锁存器级联构成的D触发器的真值表:

D {D} D C L K {CLK} CLK Q ( t ) {Q(t)} Q(t) (上一时刻的输出 ) Q ( t + 1 ) {Q(t+1)} Q(t+1) (这一时刻的输出A) Q ‾ ( t + 1 ) \overline{Q}(t+1) Q(t+1)(这一时刻的输出B)
0 0 Q Q !Q
1 0 Q Q !Q
0 0->1 Q 0 1
1 0->1 Q 1 0
0 1 Q Q !Q
1 1 Q Q !Q
0 1->0 Q Q !Q
1 1->0 Q Q !Q

从真值表中可以看出,输出的改变只可能发生在时钟信号的上升沿。接下来让我们按CLK依次分析这四种情况:

  • 第一种情况,CLK为0,这时候FF2的CLK输入为0,因此电路的输出保持不变。

  • 第二种情况,CLK处于上升沿(0->1)到达的瞬间,由于电路内部的延迟,这时候FF1会先取上升沿到达之前瞬间D的状态,之后将该状态保存。

  • 第三种情况,CLK为1,这时候FF1的CLK输入为0,因此Q1的输出保持不变,进而使整个电路的输出保持不变。

  • 第四种情况,CLK处于下降沿(1->0)到达的瞬间,由于电路内部的延迟,这时候FF2会先取下降沿到达之前瞬间Q1的状态,之后将该状态保存。

JK触发器

JK触发器弥补了RS锁存器的缺陷,能够在输入为1时将状态翻转。JK触发器的具体结构如下图:

fpga ff是什么资源,fpga开发

蓝框中的电路结构将或非门换为了与非门,同样也是RS锁存器的一种表现方式。感兴趣的同学可以自己推导一下真值表。

这里先直接给出与非门实现RS锁存器的真值表:

S {S} S(置位) R {R} R(清零) Q ( t ) {Q(t)} Q(t) (上一时刻的输出 ) Q ( t + 1 ) {Q(t+1)} Q(t+1) (这一时刻的输出A) Q ‾ \overline{Q} Q(这一时刻的输出B)
0 0 X X X
0 1 Q 1 0
1 0 Q 0 1
1 1 Q Q !Q

JK触发器通过红框实现上升沿读取数据。当CLK处于上升沿(0->1)时,由于非门的延迟,会有一瞬间出现CLK变为1的情况,这时候读取数据,剩下的时候CLK均为0。

在时钟上升沿信号未到来时,与非门G3和G4将J与K端的输入信号屏蔽,触发器状态不受输入信号的影响,维持不变。在时钟上升沿信号到来时,触发器的状态将会随着J与K的输入产生相应的变化。

  • 时钟上升沿信号到来时,J=0,K=0,触发器状态维持不变。

  • 时钟上升沿信号到来时,J=1,K=0,这时候S和R的值分别为Q和1,JK触发器会将这一时刻的输出A置为1。(无论Q为0或1,根据上面的真值表,这一时刻的输出A都一定为1)

  • 时钟上升沿信号到来时,J=0,K=1,这时候S和R的值分别为1和!Q,JK触发器会将这一时刻的输出A置为0。(无论Q为0或1,根据上面的真值表,这一时刻的输出A都一定为0)

  • 时钟上升沿信号到来时,J=K=1,这时候S和R的值分别为Q和!Q,根据上面的真值表,这一时刻的输出A与这一时刻的输出B一定为!Q和Q,实现翻转。

JK触发器的真值表如下图:

J {J} J K {K} K C L K {CLK} CLK Q ( t ) {Q(t)} Q(t) (上一时刻的输出 ) Q ( t + 1 ) {Q(t+1)} Q(t+1) (这一时刻的输出1) Q ‾ ( t + 1 ) \overline{Q}(t+1) Q(t+1)(这一时刻的输出2)
0 0 0 Q Q !Q
0 1 0 Q Q !Q
1 0 0 Q Q !Q
1 1 0 Q Q !Q
0 0 0->1 Q Q !Q
0 1 0->1 Q 0 1
1 0 0->1 Q 1 0
1 1 0->1 Q !Q Q
0 0 1 Q Q !Q
0 1 1 Q Q !Q
1 0 1 Q Q !Q
1 1 1 Q Q !Q
0 0 1->0 Q Q !Q
0 1 1->0 Q Q !Q
1 0 1->0 Q Q !Q
1 1 1->0 Q Q !Q

将J和K合并成一个信号,它就有了一个新名称:T触发器。

三、牛刀小试:避免使用Verilog综合出LATCH

因为LATCH的种种缺点,它是我们在写Verilog代码的时候唯恐避之不及的。然而,我们常常会遇到由于逻辑定义不完整综合出LATCH的情况。在代码包含always@(*)时,一般情况下会综合出LUT,但假如没有将if/else中所有case的赋值情况写完整,编译器就会综合出LATCH,以下是一段综合出LATCH的Verilog代码:

module top_module (
    input [15:0] scancode,
    output reg left,
    output reg down,
    output reg right,
    output reg up  ); 
    always @(*) begin 
       case(scancode)
           16'he06b:
                left=1;
           16'he072:
                down=1;
           16'he074:
                right=1;
           16'he075:
                up=1;
       endcase
    end
endmodule

这段代码与人物上下左右移动有关。例如16’he06b这个case,如果我们在其中没有指定down,right和up的值,那么它就会自动保存原来的值(信号接收之前的值),综合出锁存器。

如何让上面的电路不综合出LATCH呢?

非常简单,只要在每一次 always @(*) begin 的最开始指定left,down,right和up的值就可以了,更改后的代码如下所示:

module top_module (
    input [15:0] scancode,
    output reg left,
    output reg down,
    output reg right,
    output reg up  ); 
    always @(*) begin 
    left=0;down=0;right=0;up=0;// 给up,down,left,right赋初始值
       case(scancode)
           16'he06b:
                left=1;
           16'he072:
                down=1;
           16'he074:
                right=1;
           16'he075:
                up=1;
       endcase
    end
endmodule

需要注意的是,对于always@(posedge clk),即使case不完整,也不会综合出LATCH,综合器会将这些不执行的情况视为不需要进行任何操作。

参考文档

FPGA中LUT、LATCH、FF的概念

RS锁存器,D锁存器、D触发器简介

数字电路学习笔记(九):初识锁存器

D触发器 (D-FF)详解

数字电路中的锁存器(latch)和各种触发器(flip-flop)

从CMOS到触发器(二)文章来源地址https://www.toymoban.com/news/detail-823748.html

到了这里,关于FPGA结构:LATCH(锁存器)和 FF(触发器)介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 锁存器、D触发器、寄存器理解

    1、锁存器        锁存器对脉冲的电平敏感,也就是电平触发,在有效的电平下,锁存器处于使能状态,输出随着输入发生变化,此时它不锁存信号,就像一个缓冲器一样;在锁存器没有使能时,则数据被锁住,输入信号不起作用,此时输出一直为锁存的状态信息(锁存最后

    2024年02月09日
    浏览(30)
  • FPGA之锁存器(Latch)

    latch 是指锁存器,是一种对脉冲 电平 敏感的存储单元电路。锁存器和寄存器都是基本存储单元,锁存器是电平触发的存储器,寄存器是边沿触发的存储器。两者的基本功能是一样的,都可以存储数据。锁存器是组合逻辑产生的,而寄存器是在时序电路中使用,由时钟触发产

    2024年02月11日
    浏览(26)
  • verilog学习笔记6——锁存器和触发器

    2023.8.15 信号高电平有效 R :复位端 S :置位端 表达式: Q = S + R\\\' Qn 约束条件:SR=0,也就是SR不能同时为1 信号低电平有效 R :复位端 S :置位端 表达式: Q = S\\\' + R Qn 约束条件:S+R=1,也就是SR不能同时为0 E = 0 :锁存器保持不变,锁住 E = 1 :相当于正常得SR锁存器 把S取反接到

    2024年02月12日
    浏览(36)
  • 数字电子技术之锁存器和触发器

    一、组合电路设计的一般步骤:         逻辑抽象=列出真值表=逻辑表达式=逻辑电路图 Notes:         a、可以先对逻辑表达式进行化简得到最简与或式、最简或与式、与非、或非,再对电路进行建模,从而提高电路的运行效率和可读性;         b、最基本的逻辑化简

    2024年02月06日
    浏览(39)
  • 【IC设计】时序逻辑的基础—锁存器、触发器

    波形图中,表达时序逻辑时如果时钟和数据是对齐的,则默认当前时钟沿采集到的数据位在该时钟上升沿前一时刻的值。表达组合逻辑时如果时钟和数据是对齐的,则默认当前时钟沿采集到的数据为该始终上升沿同一时刻的值。 组合逻辑和时序逻辑的区别 : 主要是看 数据工

    2024年02月03日
    浏览(29)
  • educoder数字逻辑实训:锁存器和触发器设计(Logisim)

    第1关:基本SR锁存器的设计 任务描述 本关任务:在Logisim中,构建由两个或非门构成的基本SR锁存器。 第2关:门控SR锁存器的设计  任务描述 本关任务:在Logisim中,在基本锁存器的基础上构建门控SR锁存器。 第3关:与非门构成的门控SR锁存器的设计  任务描述 本关任务:在

    2024年02月04日
    浏览(28)
  • 传输门、D 锁存器、D触发器、建立时间与保持时间

    在了解setup time和hold time之前,我们应该了解D锁存器 D latch 和 D触发器 DFF 。D锁存器和DFF是由传输门 transmission gate 和反相器 inverters 组成。 The transmission gate is consists of a parallel connection of PMOS NMOS. Two gate voltage of PMOS and NMOS are the complement of each other. The effective resistance of the trans

    2023年04月16日
    浏览(30)
  • 二、8【FPGA】Verilog中锁存器(Latch)原理、危害及避免

    学习说明此文档为本人的学习笔记,对一下资料进行总结,并添加了自己的理解。         如果拿到了数字电路技术基础的书,翻开书本的目录你会发现,关于锁存器的章节与内容非常少,也就是在触发器前面有一小节进行了简单说明。但是真的就这么简单么? 答案是否

    2024年01月16日
    浏览(36)
  • 什么是好的FPGA编码风格?(3)--尽量不要使用锁存器Latch

    在FPGA设计中,几乎没人会主动使用 锁存器Latch ,但有时候不知不觉中你的设计莫名其妙地就生成了一堆Latch,而这些Latch可能会给你带来巨大的麻烦。 Latch,锁存器,一种可以存储电路状态信息的组合逻辑元件,和同样可以保存电路状态的时序逻辑元件–触发器(Flip-Flop,

    2024年02月05日
    浏览(28)
  • 数字世界的积木-从MOS管搭反相器,与非门,锁存器,触发器

    NMOS管的结构示意图和表示符号如图所示,在P型衬底上制作两个掺杂N型区,形成MOS管的源极S 和漏极D ,中间电极称为栅极G,栅极和衬底之间通过SiO2 绝缘层隔开。 下图为NMOS输出特性曲线,采用共源极接法,漏极特性曲线可分为三个工作区,截止区,可变电阻区,饱和区 当

    2024年02月01日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包