logo资料库

Verilog中latch锁存器的产生.docx

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
在很多地方都能看到,verilog 中 if 与 case 语句必须完整,即 if 要加上 else,case 后要加上 default 语句,以防止锁存器的发生,接下来就来说说其中原因。 一,什么是锁存器?锁存器与触发器的区别。 锁存器与触发器最大的区别在于,锁存器是电平触发,而触发器是边沿触发。 锁存器在不锁存数据时,输出随输入变化;但一旦数据锁存时,输入对输出不产 生任何影响。 二,为什么语句的不完整会导致锁存器的产生? 语句不完整即有某些情况的输入对输出无任何影响,根据锁存器的特征,反映 到硬件电路即会产生锁存器。 举例说明:
图 一 图二 这是一段简单的组合逻辑代码。图一是缺少 default 的 case 语句,图二是完 整的 case 语句。 图一综合后的的 RTL 级电路为 即产生了锁存器,而且 ISE 也会给出警告: 而图二完整的 case 语句综合后的 RTL 级电路为: 产生的是普通的门电路,且警告消失。 三,为什么要避免产生锁存器?
关于这个问题,我在网上看到很多资料说是因为锁存器对毛刺敏感。但其实不是 这个原因,因为在组合电路中,即便语句完整了,也会对毛刺敏感。而如果你加 一个时钟变为时序电路的话,即便你的语句不完整,产生了锁存器(其实在时序 电路中,即便语句不完整,也不会产生锁存器),那么也不会对毛刺敏感。 真正的原因在于 FPGA 中根本没有锁存器这种东西,也就是说,如果你产生了锁 存器的话,将耗费更多的资源来构成它。
分享到:
收藏