再谈锁存器在Verilog中的故事

再谈锁存器在Verilog中的故事

锁存器

锁存器(Latch)是一种对脉冲电平敏感的存储单元电路。它们可以在特定输入脉冲电平作用下改变状态。锁存就是把信号暂存以维持某种电平状态

锁存器出现的危害:

输出信号被锁死,输入信号的变化不起作用;同时使静态时域分析非常复杂。
我们在数字集成电路的设计中要尽可能地避免出现锁存器。

出现锁存器的情况:

1、敏感列表不完整

对于组合电路,在@引导的敏感列表必须包含完整的敏感列表。对于时序电路,@的敏感事件如果不全会变成异步电路,不过异步电路的设计很多综合器不支持(在公司,设计人员就是无用功)。
如果敏感列表不完整,会造成逻辑错误。甚至有可能出现锁存器。比如:

always @ (a)	//敏感列表没有b
c=a~^b;

b的变化不会促使always结构变化,这样就是一个带控制的锁存器。
修改代码如下:

always @ (a or b)
c=a~^b;

2、if和else不成对出现

例如:

if (a<b)
  out=a;
else if (a>b)
  out=b;

这就是一个简单的比较功能。不过if和else没有成对出现,这样如果a=b时,输出会保持不变。但是组合电路中没有存储元件,所有会生成设计之外的锁存器。
修改代码如下:

if (a<b)
  out=a;
else if (a>b)
  out=b;
else
  out=a||b;

3、case语句中没有default

如果需要锁存器,设计代码如下:

module latch (clk,d,q);
input	clk;
input	d;
output	q;

assign	q=clk?d:q;

endmodule

原因与i“if和else不成对出现”一样。不再赘述。

总结:

再次对锁存器做一个回顾。

感想:

念念不忘,必有回响!!!

猜你喜欢

转载自blog.csdn.net/yixiaoyaobd/article/details/108089754
今日推荐