关于锁存器问题的讨论
很多同学提问到锁存器的相关问题,说明大家对这方面知识还不是很了解,今天我们就来探讨一下。 上图是两个没有else的代码,其等效于下图的代码。 也就是说,当if条件里面没有写else时,默认是表示“保持不变”的意思。 接下来,我们来讨论一下,硬件中是如何实现“保持不变”的。 左边是时序时序逻辑的代码,右边是该代码所对应的硬件电路。特别注意图中红色的那个线,那个就是保持不变的“反馈”。由图中可以看出,当时钟上升沿的时候,当选择器的结果赋值给信号b;非上升沿的时候,b一直保持不变,因此红色线在此期间也是保持不变的。当a为0的时候,选择器选择当前b的结果,然后在下一个时钟上升沿赋给信号b。 由引可见,实现“保持不变”的关键在于D寄存器。 众所周知,组合逻辑代码是没有D寄存器的,那么它又是如何实现保持不变呢?这个就会用到锁存器了。 上图是组合逻辑代码,及其对应电路。为了让信号b保持不变,就要用到一个叫“锁存器”的器件。当a为1时,b就会等于1;当a为0时,b会保持不变。 关于锁存器的危害,可以参考MDY的“大串讲”视频,总之我们知道锁存器是不好东西的,尽量不要有锁存器,也就是说组合逻辑里,要让“if else”条件补全。 常见问题 问1:是不是所有的代码,if else都需要补全呢? 答:如前面所讨论的,对于时序逻辑可以由D寄存器实现“保持不变”,所以时序逻辑是不需要补全的