锁存器(Latch)的产生与特点

Latch 是什么

Latch 其实就是锁存器,是一种在异步电路系统中,对输入信号电平敏感的单元,用来存储信息。锁存器在数据未锁存时,输出端的信号随输入信号变化,就像信号通过一个缓冲器,一旦锁存信号有效,则数据被锁存,输入信号不起作用。因此,锁存器也被称为透明锁存器,指的是不锁存时输出对于输入是透明的。

几种产生 Latch 的情况

  1. 组合逻辑中 if 语句没有 else;

  2. 组合逻辑中 case 的条件不能够完全列举时不写 default;

  3. 组合逻辑中输出变量赋值给自己。

    其中包括
    情况一:if-else中出现输出变量赋值给自己;
    情况二:case中出现输出变量赋值给自己;
    情况三:assign中出现输出变量赋值给自己(如下)

module latch
(//=========================< Port Name >==============================//inputinput 	  	wire 					data				,input 	  	wire 					enable				,//output	                                            output		wire						q				
);assign q = (enable == 1'b1)? data:q;endmodule

根据上面 RTL 代码综合出的 RTL 视图,我们可以看到也产生了latch。
在这里插入图片描述
其他情况参考:Verilog中锁存器(Latch)原理、危害及避免(野火《FPGA Verilog开发实战指南——基于Xilinx Artix7》第十三章)

时序逻辑不产生Latch

只有不带时钟的 always 语句 if 或者 case 语句不完整才会产生 latch,带时钟的语句if 或者 case 语句不完整描述也不会产生 latch。

下面为缺少 else 分支的带时钟的 always 语句和不带时钟的 always 语句,通过实际产生的电路图可以看到第二个是有一个 latch 的,第一个仍然是普通的带有时钟的寄存器。

module nolatch
(//=========================< Port Name >==============================//inputinput		wire					clk 				,input 	  	wire 					data				,input 	  	wire 	[1:0]			enable				,//output	                                            output		reg						q				
);always @(posedge clk)	beginif(enable == 2'd0)beginq<=data;endelse if(enable == 2'd1)	beginq<=q;endend	
endmodule

根据上面 RTL 代码综合出的 RTL 视图,我们可以看到即使 if 语句没有 else、输出变量赋值给自己也不产生latch。
在这里插入图片描述

将上面代码中的always @(posedge clk) 换成 always @(*),(块中使用阻塞或非阻塞赋值)此时产生latch。
在这里插入图片描述

Latch的特点及危害

(1)对毛刺敏感
使能信号有效时,输出状态可能随输入多次变化,产生空翻,对下一级电路很危险,不能异步复位,因此在上电后处于不确定的状态。并且其隐蔽性很强,不易查出。因此,在设计中,应尽量避免latch的使用。

(2)不能异步复位
由于其能够储存上次状态的原因,上电后Latch处于不定态。

(3)复杂的静态时序电路分析
首先,锁存器没有时钟信号参与信号传递,无法做STA;其次,综合工具会将 latch 优化掉,造成前后仿真结果不一致。

(4)占用更多资源
注意,“FPGA 中只有LUT和FF的资源,没有现成的Latch,所以如果要用Latch,需要更多的资源来搭出来。”这个观点不完全是正确的。
在Xilinx的FPGA中,6系列之前的器件中都有Latch; 6系列和7系列的FPGA中,一个Slice中有50%的storage element可以被配置为Latch或者Flip-Flop, 另外一半只能被配置为Flip-Flop。比如7系列FPGA中,一个Slice中有8个Flip-Flop,如果被配置成了Latch,则该Slice的另外4个Flip-Flop就不能用了FPGA结构与片上资源 1.4。这样确实造成了资源的浪费。但在在UltraScale的FPGA中,所有的storage element都可以被配置成Flip-Flop 和Latch。

(5)额外的延时
在ASIC设计中,锁存器也会带来额外的延时和DFT,并不利于提高系统的工作频率。

(6)锁存器的优点
如果锁存器和触发器两者都由与非门搭建的话,锁存器耗用的逻辑资源要比D触发器少(D触发器需要12个MOS管,锁存器只需6个MOS管),锁存器的集成度更高,所以在ASIC设计中会用到锁存器,且只有在CPU高速电路或者RAM这种面积很敏感的电路才使用锁存器。

参考:Verilog中锁存器(Latch)原理、危害及避免
综上,在组合逻辑中一定要避免输出信号处于不定的状态,一定要让输出无论在任何条件下都有一个已知的状态,就可以避免 Latch 的产生。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析Java中volatile关键字

前言 我们都听说过volatile关键字&#xff0c;也许大家都知道它在Java多线程编程编程中可以减少很多的线程安全问题&#xff0c;但是会用或者用好volatile关键字的开发者可能少之又少&#xff0c;包括我自己。通常在遇到同步问题时&#xff0c;首先想到的一定是加锁&#xff0…

移动web性能测试工具有哪些呢?

摘要&#xff1a;本文将介绍一系列移动Web性能测试工具&#xff0c;以帮助开发人员评估和优化移动网站和应用程序的性能。我们将从基本概念开始&#xff0c;逐步深入&#xff0c;详细介绍每种工具的特点、用途和使用方法。 1. 概述 1.1 移动Web性能测试的重要性 1.2 测试工具…

微信小程序-wx.showToast超长文字展示不全

wx.showToast超长文字展示不全 问题解决方法1 问题 根据官方文档&#xff0c;iconnone&#xff0c;最多显示两行文字。所以如果提示信息较多&#xff0c;超过两行&#xff0c;就需要用其他方式解决。 解决方法1 使用vant组件里面的tost 根据官方例子使用&#xff1a; 1、在…

【Python报错】已解决ModuleNotFoundError: No module named ‘packaging’

成功解决“ModuleNotFoundError: No module named ‘packaging’”错误的全面指南 在Python编程中&#xff0c;遇到ModuleNotFoundError: No module named packaging这样的错误&#xff0c;通常意味着你的Python环境中缺少名为packaging的模块&#xff0c;或者该模块没有被正确…

YOLOV5 图像分割:利用yolov5进行图像分割

1、介绍 本章将介绍yolov5的分割部分,其他的yolov5分类、检测项目参考之前的博文 分类:YOLOV5 分类:利用yolov5进行图像分类_yolov5 图像分类-CSDN博客 检测:YOLOV5 初体验:简单猫和老鼠数据集模型训练-CSDN博客 yolov5的分割和常规的分割项目有所区别,这里分割的结果…

网络编程(UPD和TCP)

//发送数据 //UDP协议发送数据 package com.example.mysocketnet.a02UDPdemo;import java.io.IOException; import java.net.*;public class SendMessageDemo {public static void main(String[] args) throws IOException {//发送数据//1.创建DatagramSocket对象(快递公司)//…

【Linux】线程安全的艺术:解锁互斥量在并发编程中的应用

文章目录 前言&#xff1a;1. 进程线程间的互斥相关背景概念1.1. 操作共享变量会有问题的售票系统代码&#xff1a; 2. 互斥量的接口2.1. 解决方案2.1.1. 使用全局的锁&#xff1a;2.1.2. 使用局部的锁&#xff1a;2.1.3. 封装为RAII风格的加锁和解锁&#xff1a;2.1.4. C 11 中…

Liunx音频

一. echo -e "\a" echo 通过向控制台喇叭设备发送字符来发声&#xff1a; echo -e "\a"&#xff08;这里的 -e 选项允许解释反斜杠转义的字符&#xff0c;而 \a 是一个响铃(bell)字符&#xff09; 二. beep 下载对应的包 yum -y install beep 发声命令 be…

YashanDB携手宏杉科技助力国产软件生态发展

近日&#xff0c;深圳计算科学研究院崖山数据库系统YashanDB与宏杉科技系列存储、系列服务器与数据库一体机等多款产品顺利完成兼容性互认证。经严格测试&#xff0c;双方产品完全兼容&#xff0c;稳定运行&#xff0c;共同提供高效、稳定、安全的国产软硬件一体化解决方案&…

《精通ChatGPT:从入门到大师的Prompt指南》大纲目录

第一部分&#xff1a;入门指南 第1章&#xff1a;认识ChatGPT 1.1 ChatGPT是什么 1.2 ChatGPT的应用领域 1.3 为什么需要了解Prompt 第2章&#xff1a;Prompt的基本概念 2.1 什么是Prompt 2.2 好Prompt的特征 2.3 常见的Prompt类型 第二部分&#xff1a;Prompt设计技巧 第…

解决 iOS 端小程序「saveVideoToPhotosAlbum:fail invalid video」问题

场景复现&#xff1a; const url https://mobvoi-digitalhuman-video-public.weta365.com/1788148372310446080.mp4uni.downloadFile({url,success: (res) > {uni.saveVideoToPhotosAlbum({filePath: res.tempFilePath,success: (res) > {console.log("res > &…

数学题目系列(一)|丑数|各位和|埃氏筛|欧拉筛

一.丑数 链接&#xff1a;丑数 分析&#xff1a; 丑数只有2&#xff0c;3&#xff0c;5这三个质因数&#xff0c;num 2a 3b 5c也就是一个丑数是由若干个2&#xff0c;3&#xff0c;5组成&#xff0c;那么丑数除以这若干个数字最后一定变为1 代码 class Solution {publi…

NocoDB开源的智能表格详解-腾讯文档本地替代品

文章目录 一、介绍二、docker-compose部署三、登录NocoDB四、NocoDB手册1. 创建项目2. 收集统计表2.1 添加字段2.2 编辑字段2.3 字段类型2.4 发布表格 3.创建表单3.1 创建表单3.2 分享表单3.3 填写检测单 4.创建看板5.创建画廊 一、介绍 可作为腾讯文档的本地电子表格替代品&a…

C# BindingSource 未完

数据绑定导航事件数据验证自定义示例示例总结 在 C#中&#xff0c; BindingSource 是一个非常有用的控件&#xff0c;它提供了数据绑定的基础设施。 BindingSource 允许开发者将数据源&#xff08;如数据库、集合、对象等&#xff09;与用户界面控件&#xff08;如文本框、下…

5G+北斗智能手持终端在哪些行业中发挥作用

在当今科技融合发展的浪潮中&#xff0c;5G北斗智能手持终端正逐步成为驱动各行各业智能化升级的关键力量。这一融合创新技术不仅重塑了传统的通信与定位方式&#xff0c;而且在多个核心领域展现了其变革性的应用价值。 5G北斗智能手持终端因其独特的技术组合&#xff0c;在多个…

File类操作文件方法详解及其简单应用

一、File 类介绍 Java 中的 File 类是 java.io 包的一部分&#xff0c;它提供了操作文件和目录的能力。File 类可以用来表示文件系统中的文件或目录。 二、路径 在讲File用法之前咱们先介绍一下路径是什么&#xff1f; 在计算机中&#xff0c;路径&#xff08;Path&#xff0…

kotlin 调用java的get方法Use of getter method instead of property access syntax

调用警告 Person.class public class Person {private String name;Person(String name) {this.name name.trim();}public String getName() {return name;}public void setName(String name) {this.name name;}public String getFullName() {return name " Wang&quo…

【MySQL】数据库入门基础

文章目录 一、数据库的概念1. 什么是数据库2. 主流数据库3. mysql和mysqld的区别 二、MySQL基本使用1. 安装MySQL服务器在 CentOS 上安装 MySQL 服务器在 Ubuntu 上安装 MySQL 服务器验证安装 2. 服务器管理启动服务器查看服务器连接服务器停止服务器重启服务器 3. 服务器&…

麒麟操作系统rpm ivh安装rpm包卡死问题分析

夜间变更开发反应,rpm -ivh 安装包命令夯死,无执行结果,也无报错 排查 : 1、top 查看无进程占用较高进程存在,整体运行平稳 2、df -h 查看磁盘并未占满 3、其他服务器复现该命令正常执行 4、ps -ef|grep rpm 查看安装命令仍在运行中 5、查看log日志,均正常并无不良日志…

UE Editor API 整理

UE Editor API 整理 过一下 https://github.com/20tab/UnrealEnginePython/blob/master/docs/&#xff0c;熟悉一下编辑器 API&#xff0c;方便后续编辑器脚本开发 后续的目标是所有编辑器操作应该都可以脚本化&#xff08;自动化&#xff09;&#xff0c;这样把 GPT 接进 UE…