彻底了解时序电路、组合电路、触发器、锁存器的区别

 

不好意思,之前写的博客有些误人子弟了,最近对锁存器又琢磨了一番,对原文做些修改,为了让大家更清楚之前的错误之处,我把原文标记成红色字体吧。新的注解是黑色字体。

不好意思,之前写的博客有些误人子弟了,最近对锁存器又琢磨了一番,对原文做些修改,为了让大家更清楚之前的错误之处,我把原文标记成红色字体吧。新的注解是黑色字体。

不好意思,之前写的博客有些误人子弟了,最近对锁存器又琢磨了一番,对原文做些修改,为了让大家更清楚之前的错误之处,我把原文标记成红色字体吧。新的注解是黑色字体。

 

最近,辅助师兄们做一些数字IC岗位的笔试,发现一些基础的问题,还是有必要好好整理一下的。

先给出一个结论,触发器和锁存器都属于时序逻辑电路。(这个很关键,带有记忆或存储功能的电路都是时序电路,强调一下,时序电路也是可以没有时钟的,后面会列举)

 

时序电路:带有存储记忆功能的电路(输出不仅和当前的输入有关,还跟上一个状态有关)

组合电路:不带记忆功能的电路,即输出随着输入变化而变化,没有保持和记忆的功能。

 

肯定有人问:

1、触发器的输出不是只跟当前的输入有关吗,因为输出的值就是你当前采样的值啊?

:这个“当前”值得考虑,这个“当前”一般指的是时钟的上升沿,也就是说,在时钟上升沿那一刻,把采样到的输入数据给到输出端口,即在其他时刻,任由你输入端口怎么变,输出是不变,所以它是有记忆功能的,而且是保持的上一时刻的输入嘛。

 

2、那锁存器呢,它不是电平触发么,而且输入随着输出变化而变化,好多地方都说是组合电路,怎么解释它是时序电路?

答:其实这里单从字面理解,锁存器,既然都能存了,它肯定是有记忆功能的哈,肯定属于时序电路的。锁存器是这样的,当EN拉高使能时,打开通路,这是输入随着输出变化而变化;当EN拉低时,通路关闭,这时输出一直保持上一个状态不变,即锁住信号。

 

扩展一下关于锁存器的问题:

在写verilog时,很多人都说要避免锁存器的产生,把if、case补充完整就可以避免了吗?

切记,产生不产生锁存器是根据你的需求功能来决定的。

看下面两个句代码:

1、

always@(posedge clk)
if(en)
    dout <= din;

2、

always@(posedge clk)
if(en)
    dout <= din;
else
    dout <= dout;

  第2句,你是把else补上了,但依然会产生锁存器,因为你这样写,就是要实现的就是一个锁存器的功能。(即使从你的功能上看,永远不会进else,即en一直是高电平)(做出声明:这里并不是锁存器,这里就是一个触发器,之前理解不到位)

如果从功能上看,永远不进else,应该这样写:

always@(posedge clk)
if(en)
    dout <= din;
else
    dout <= 0;

case语句是一样的道理,如果你这样写: default:dout <= dout;    就依然会生成锁存器,若想避免生成锁存器,且没有列出所有的case分支,那就加上 default:dout <= 0; (即使从你的功能实现来看,你的状态永远不会跳到default)

(同样的,这里依旧是一个触发器,并不是锁存器)

 

 

以上纯属个人分析,有不对请指正。

 

ok,那么什么才是锁存器硬件描述行为呢?如下:

always@(*)
if(en)    
    out = in;

或者: 

always@(*)
if(en)    
    out = in;
else
    out = out;

 

以上这两种描述都会产生锁存器,没错,以上的电路确实是时序电路

所以,时序电路与否跟时钟并没有直接联系哈,关键看电路是否有存储记忆功能

希望大家看完这篇,可以彻底区分锁存器、时序电路与逻辑电路了。。。

 

 

 

  • 10
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值