寄存器与锁存器的区别

寄存器与锁存器的区别

大家好,又见面了,我是全栈君。

首先应该明确锁存器和触发器也是由与非门之类的东西构成。尤其是锁存器,虽说数字电路定义含有锁存器或触发器的电路叫时序电路,但锁存器有很多组合电路的特性。

组合电路就是一个真值表,一个函数,一组输入对应一组输出,当前什么输入就根据函数得到什么输出,实时跟踪变化,这样也就容易有冒险、竞争之类的问题产生毛刺。

锁存器:电平敏感

always @ (enable)

??if (enable) ?q <= d;

 

那就是说,在enable有效的时间内,q完全跟踪d的值,比如在这个时间内d变化了,q跟着变化,当enable失效的时候,q存储d最后的值。

触发器:我们把输出只在时钟某个时刻变化的玩意儿叫触发器。边沿敏感

always @ (posedge enable)

??if (enable) q <= d;

这个便是一个d触发器。只在enable(一般大家都叫它clock)的上升沿q采样d,而且在每个时钟的上升沿都会采样。

在fpga中一般避免用latch,因为在FPGA中触发器资源丰富,不用白不用,latch由于是电平触发的,相对触发器来说容 易产生毛刺,电路不稳定.
latch的优点是完成同一个功能所需要的门较触发器要少,所以在asic中用的较多

?

那最后再说寄存器,寄存器这个玩意儿是一个概念层次的东西,1个寄存器就是能存1bit数据的东西。既可以用触发器实现也可以用锁存器实现。以触发器为例,由于触发器每个时钟上升沿都会采样,所以触发器会有一个反馈逻辑,当load有效的时候才会采样d,否则保持不变。

always @ (posedge clk or negedge rst_n)

if (!rst_n)

q <= 0;

else if (load)

q <= d;

 

这便就是一个寄存器了。

 

 

1. 寄存器

 
  在实际的数字系统中,通常把能够用来存储一组二进制代码的同步时序逻辑电路称为寄存器.由于触发器内有记忆功能,因此利用触发器可以方便地构成寄存器。由于一个触发器能够存储一位二进制码,所以把n个触发器的时钟端口连接起来就能构成一个存储n位二进制码的寄存器。
 
2 .  锁存器
 
       由若干个钟控D触发器构成的一次能存储多位二进制代码的时序逻辑电路。数据有效迟后于时钟信号有效。这意味着时钟信号先到,数据信号后到。在某些运算器电路中有时采用锁存器作为数据暂存器。

 

3. 锁存器与寄存器的区别:
(1)寄存器是同步时钟控制,而锁存器是电位信号控制。锁存器一般由电平信号控制,属于电平敏感型。寄存器一般由时钟信号信号控制,属于边沿敏感型。

(2)寄存器的输出端平时不随输入端的变化而变化,只有在时钟有效时才将输入端的数据送输出端(打入寄存器),而锁存器的输出端平时总随输入端变化而变化,只有当锁存器信号到达时,才将输出端的状态锁存起来,使其不再随输入端的变化而变化

   可见,寄存器和锁存器具有不同的应用场合,取决于控制方式以及控制信号 和数据之间的时间关系:若数据有效一定滞后于控制信号有效,则只能使用锁存器;数据提前于控制信号而到达并且要求同步操作,则可用寄存器来存放数据。

转载于:https://www.cnblogs.com/ly0019/p/8520648.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107676.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java8 stream 之groupingBy() 分组排序

    Java8 stream 之groupingBy() 分组排序ListmatchsList=newArrayList();Map&amp;gt;MatchsListMap=matchsList.stream().collect(Collectors.groupingBy(Matchs::getMatchDate));此时MatchsListMap的排序规则是根据MatchDate降序的(默认),也就是说ma

    2022年8月20日
    48
  • cefsharp教程_flutter grpc

    cefsharp教程_flutter grpc需求注册常规快捷键比如F5刷新F12打开开发者工具; 自定义配置文件; 注册JavaScript交互API通过Winform调取设备或者系统数据; 屏蔽鼠标右键; 自定义文件下载功能; 集成自动更新服务;…

    2022年9月18日
    0
  • Calling Matlab function from python: “initializer must be a rectangular nested sequence”

    Calling Matlab function from python: “initializer must be a rectangular nested sequence”

    2021年11月21日
    45
  • 【STM32】UART和USART的区别[通俗易懂]

    【STM32】UART和USART的区别[通俗易懂]1、UART:universalasynchronousreceiverandtransmitter通用异步收发器;2、USART:universalsynchronousasynchronousreceiverandtransmitter通用同步异步收发器。1、通用异步收发器:通用异步收发器是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传…

    2022年5月19日
    38
  • mysql8修改root的密码(如何查看自家wifi密码)

    部署环境:安装版本redhatCent7.0MYSQL版本8.0.2.0成功部署完毕后出现故障情况:1.正常启动MYSQL服务后,敲Linux中root账户和密码进入不去。2.从/etc/my.cnf配置文件中加入skip-grant-table后正常登陆,但是不能创建用户等多操作总结来说:想进去mysql后不能操作多指令,操作多指令又不能进去mysql,死…

    2022年4月13日
    128
  • Java大数据开发[通俗易懂]

    Java大数据开发[通俗易懂](后记:写这些东西不管出于什么目的,总之自己乐意,有时候回顾一下,别有一番滋味!)博主QQ:1103088881idea从菜鸟到大神css-3d旋转相册时钟罗盘Java学习方法总结Java面向对象程序开发及实战Java高级特性编程及实战MySQL数据库应用技术及实战HTMLCSSJa…

    2022年5月12日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号