锁存器(Latch)产生的原因:

  1. 目录

    1.if结构不完整

    2.case结构不完整

    3.敏感信号列表不完整


Latch的危害:

  1. 输入状态可能多次变化,容易在输入信号产生毛刺,会增加电路的不稳定性;
  2. 使得静态时序变得更难分析。

1.if结构不完整

例如:
module module_Latch1 (input in,en,output reg q );always @(*) beginif (en) q=in;end
endmodule

由于if语句中缺少else,系统会默认else分支下的输出q会保持不变,即具有寄存器的功能,所以寄存器q会被综合成Latch。

避免方法:

补全if-case结构

module module_Latch1 (input in,en,output reg q );always @(*) beginif (en) q=in;elseq=1'b0;end
endmodule

赋初值

module tmodule_Latch1 (input in,en,output reg q );always @(*) beginq=1'b0;  //给q赋初值0if (en) q=in;end
endmodule

如果en为真,in赋值给q,否则q会保持为0。

2.case结构不完整

case语句产生Latch的原理和if语句几乎一致。当case列表不完整且没有在末尾加default,或者有多个赋值语句不完整时会产生Latch。

例子:

module module_Latch (input a,b,input [1:0],output reg y);always @(*) begincase(sel)2'b00:y=a;2'b01:y=b;endcaseendendmodule

避免方法也是两种:

补全case列表

module module_Latch (input a,b,input [1:0],output reg y);always @(*) begincase(sel)2'b00:y=a;2'b01:y=b;2'b10,2'b11:y=1'b0;endcaseendendmodule

或者在末尾加default

module module_Latch (input a,b,input [1:0],output reg y);always @(*) begincase(sel)2'b00:y=a;2'b01:y=b;default:y=1'b0;endcaseendendmodule

建议就算列出所有的case列表,也在末尾加上default关键词,这样不仅可以在写Verilog的时候避免Latch的出现,在修改的时候也可以避免每次都要验证是否列出了所有case列表。

3.敏感信号列表不完整

如果组合逻辑内的always@()括号内的敏感列表没有列全,该触发的时候会触发不了,那么相关的寄存器还是会保存之前的结果,因而会产生Latch。

解决方法也很简单,就是直接用always @(*)。

Verilog如何避免Latch相关推荐

  1. 【FPGA】Verilog:锁存器 Latch | RS Flip-Flop 与 D Flip-Flop 的实现

  2. verilog赋多位值_verilog中的default应该赋什么样的值

    Q:在状态机的case语句中,最后要加上默认项default,可是我看到有的书上写的是一个确定的状态,有的则是不定态xxx,到底应该写那个啊?求助! A1:取决于case条件是否完备啦 如果你的cas ...

  3. LInux命令行参数

    原创: Linux 微知识 在大学里面,老师一般会这样教,定义main 函数应该是这样的: 甚至是这样的: 但是其实在 Linux 下,一个正确的main 函数应该被定义为如下: 大家可以看到,mai ...

  4. Verilog十大基本功8 (flipflop和latch以及register的区别)

    Verilog十大基本功8 (flipflop和latch以及register的区别) 来自1:https://www.cnblogs.com/LNAmp/p/3295441.html 第一次接触La ...

  5. 11.Verilog中如何避免Latch

    FPGA教程目录 MATLAB教程目录 -------------------------------------------------------------------------------- ...

  6. 【Verilog基础】锁存器(Latch)知识点总结

    文章目录 一.Latch 是什么 二.Latch 的危害 三.几种产生 Latch 的情况 情况一: 组合逻辑中 if 语句没有 else 情况二: 组合逻辑中 case 的条件不能够完全列举且不写 ...

  7. HDLBits 系列(14) Latch and Dff and Edge detect

    目录 D Latch DFF + GATE Mux + DFF MUX2 + DFF FSM JK 触发器 Edgedetect(边沿检测) 双边沿检测 D Latch Implement the f ...

  8. 【Verilog HDL 训练】第 05 天(序列检测)

    1. dff和latch有什么区别. 锁存器是一种对脉冲电平(也就是0或者1)敏感的存储单元电路,而触发器是一种对脉冲边沿(即上升沿或者下降沿)敏感的存储电路. "触发器" 泛指一 ...

  9. Verilog 流水线加法器

    <数字系统设计与Verilog HDL>上面有这么一段代码,用于实现8位4级流水线加法器. module adder8pip(cout,sum,cin,ina,inb,clk );inpu ...

最新文章

  1. 常用神经网络模型及其应用评述
  2. [创业基础笔记] 第1讲-认识创业与创业者
  3. [转]spring入门(六)【springMVC中各数据源配置】
  4. ES面试基础知识要点
  5. YOLO算法的ZYNQ移植尝试(SDx方法、ARM部分)
  6. python学习中包的生成和调用(idle和pycharm)
  7. 【c++ | 谭浩翔】第三章练习
  8. linux添加ctrl c,Linux ctrl-c explained(ctrl-c 详解)
  9. ThinkPHP5旅游管理系统
  10. Excel如何简单快速的建立二级下拉菜单?
  11. 互联网金融-资金账户系统设计
  12. 春夏秋冬又一春之Redis持久化
  13. Vue【有与无】【F3】【问题】vue 2.x 动态路由刷新后空白
  14. 推荐算法之贝叶斯个性化排序 BPR
  15. com.netflix.hystrix.exception.HystrixRuntimeException short-circuited and no fallback available
  16. Tomcat 2022-7-27
  17. 郑莉老师c++第五版 复习笔记
  18. Python实现逻辑回归
  19. 第三方相关 — Android微信登录
  20. 基于ssm框架的毕业设计管理系统毕业设计源码211633

热门文章

  1. 认仕医生接入云信,医友交流随时随地
  2. hyperledge环境安装
  3. 目前最全的存储形式总结
  4. eclipse The current branch is not configured for pull No value for key remote.origin
  5. MBaen+Timer=减少数据库调用
  6. jquery之ajax请求工具类
  7. 沫沫金:联想E431 1K6安装Windows系统100%成功技巧
  8. php比较函数,判断安全函数
  9. MySQL key/value存储方案(转)
  10. 【单机实现系列】SCDPM2012实现数据保护