04 避免 Latch 的产生
Latch 是什么
latch 即锁存器,是一种对电平敏感的存储单元电路,和寄存器一样都是基本存储单元,但是寄存器是边沿触发的存储器,锁存器是电平触发的存储器。
组合逻辑电路和时序逻辑电路
在数字电路中将逻辑电路分成两大类,一类叫组合逻辑电路,另一类叫做时序逻辑电路。
- 组合逻辑电路:组合逻辑电路是一种输出状态只与当前输入直接相关的电路,它的输出仅仅取决于当前的输入状态,而不受到过去的输入状态或时钟信号的影响。
- 时序逻辑电路:时序逻辑电路是一种输出状态不仅与当前输入相关,且还与过去状态相关的电路,它的输出不仅取决于当前的输入状态,还要考虑过去状态。
注意
在FPGA中通常将没有时钟的电路归为组合逻辑电路,有时钟的电路归为时序逻辑电路。
Latch 的危害
Latch具有以下危害:
- Latch是电平触发的,因此有Latch的电路抗干扰能力差
- Latch不能异步复位
- Latch上电后处于不定态,会让静态时序分析变得十分复杂
- 大部分FPGA器件没有 Latch这个东西,需要用使用寄存器来组成锁存器,会占用更多逻辑资源等问题
产生 Latch 的原因
在组合逻辑电路中如果变量的赋值操作没有覆盖到分支语句(如 if else 、case endcase、? : 等)的每一个分支就会产生Latch,常见的有以下情况:
- if 语句没有 else
- case 语句没有 defaul
- 变量自己给自己赋值
注意:
只有在组合逻辑电路中才会产生Latch(这里的组合逻辑是以有无时钟来区分的)
if 语句没有 else
示例代码如下:
module latch_one (input wire in1,input wire in2,output reg[3:0] out
);always @(*) beginif({in1, in2} == 2'd0)out = 4'b0001;else if({in1, in2} == 2'd1)out = 4'b0010;else if({in1, in2} == 2'd2)out = 4'b0100;
// else
// out = 4'b1000;
endendmodule
上面代码中out变量的赋值没有覆盖到if语句的每一个分支(没有else部分),通过vivado进行语法分析后发现其原理图如下,可以看到生成了latch。

case 语句没有 defaul
示例代码如下:
module latch_tow (input wire in1,input wire in2,output reg[3:0] out
);always @(*) begincase({in1, in2})2'd0: out = 4'd0001;2'd1: out = 4'd0010;2'd2: out = 4'd0100;
// default:out = 4'd1000;endcase
endendmodule
上面代码中out变量的赋值没有覆盖到case语句的每一个分支(没有default部分),通过vivado进行语法分析后发现其原理图如下,可以看到生成了latch。

变量自己给自己赋值
示例代码如下:
module latch_three(input in1,input in2,output wire[3:0] out
// output reg[3:0] out
);//在条件运算符中自己对自己赋值
assign out = (in1 != in2) ? in1 : out;在case语句中自己对自己赋值
//always @(*) begin
// case({in1, in2})
// 2'd0: out = 4'd0001;
// 2'd1: out = 4'd0010;
// 2'd2: out = 4'd0100;
default:out = 4'd1000;
default: out = out;
// endcase
//end在if语句中自己对自己赋值
//always @(*) begin
// if({in1, in2} == 2'd0)
// out = 4'b0001;
// else if({in1, in2} == 2'd1)
// out = 4'b0010;
// else if({in1, in2} == 2'd2)
// out = 4'b0100;
// else
// out = 4'b1000;
else
out = out;
//endendmodule
面代码中out变量在条件运算符中存在自己对自己赋值的情况,通过vivado进行语法分析后发现其原理图如下,可以看到生成了latch。

注意:
在if语句中自己对自己赋值和在case语句中自己对自己赋值也会产生Latch
相关文章:
04 避免 Latch 的产生
Latch 是什么 latch 即锁存器,是一种对电平敏感的存储单元电路,和寄存器一样都是基本存储单元,但是寄存器是边沿触发的存储器,锁存器是电平触发的存储器。 组合逻辑电路和时序逻辑电路 在数字电路中将逻辑电路分成两大类&#…...
嵌入式学习第十四天!(结构体、共用体、枚举、位运算)
1. 结构体: 1. 结构体类型定义: 嵌入式学习第十三天!(const指针、函数指针和指针函数、构造数据类型)-CSDN博客 2. 结构体变量的定义: 嵌入式学习第十三天!(const指针、函数指针和…...
Unix/Linux上的五种IO模型
a.阻塞 blocking 调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的去检查这个函数有没有返回,必须等这个函数返回才能进行下一步动作。 注意:阻塞并不是函数的行为,而是跟文件描述符有关。通…...
电脑风扇控制温度软件 Macs Fan Control Pro 中文
Macs Fan Control Pro是一款专为Mac用户设计的风扇控制软件,旨在提供更精细的风扇转速控制和温度监控。这款软件通过实时监测Mac内部硬件的温度,自动或手动调整风扇的转速,以确保系统温度保持在理想范围内。 Macs Fan Control Pro提供了直观…...
初谈C++:引用
文章目录 前言概述引用特性应用场景做参数做返回值 传值、传引用效率比较引用和指针的区别 前言 在学习C语言的时候会遇到指针,会有一级指针、二级指针…很容易让人头昏脑胀。在C里面,引入了引用的概念,会减少对指针的使用。引用相当于给一个…...
C++ 数论相关题目 博弈论:拆分-Nim游戏
给定 n 堆石子,两位玩家轮流操作,每次操作可以取走其中的一堆石子,然后放入两堆规模更小的石子(新堆规模可以为 0 ,且两个新堆的石子总数可以大于取走的那堆石子数),最后无法进行操作的人视为失…...
EDR、SIEM、SOAR 和 XDR 的区别
在一个名为网络安全谷的神秘小镇,居住着四位守护者,他们分别是EDR(艾迪)、SIEM(西姆)、SOAR(索亚)和XDR(艾克斯)。他们各自拥有独特的能力,共同守…...
修复idea,eclipse ,clion控制台中文乱码
控制台乱码问题主要原因并不在编译器IDE身上,还主要是Windows的控制台默认编码问题。。。 Powershell,cmd等默认编码可能不是UTF-8,无需改动IDE的settings或者properties(这治标不治本),直接让Windows系统…...
怎样使用Oxygen XML Editor将MS Word转换成DITA
▲ 搜索“大龙谈智能内容”关注公众号▲ 前阵子分享过一篇文章:《如何将Word/PDF转成高质量XML》。 文章中分享了将Word/PDF转换成高质量XML的思路和大体步骤。有朋友问:有什么工具可以做这个数据转换,具体怎么操作呢? 今天就来…...
【云上建站】快速在云上构建个人网站3——网站选型和搭建
快速在云上构建个人网站3——网站选型和搭建 一、网站选型二、云市场镜像方式一:方式二:1. 进入ECS实例详情页面,点击停止,确保更换操作系统的之前ECS实例处于已停止状态,点击更换操作系统,进行镜像配置。2…...
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数
这个算法的核心思想是通过交换操作,将每个数放到它应该在的位置上。然后再次遍历数组,找到第一个不在正确位置上的数,其索引加一即为缺失的最小正整数。 def first_missing_positive(nums):n len(nums)# 第一次遍历,将数组中的每…...
C#使用RabbitMQ-4_路由模式(直连交换机)
简介 RabbitMQ中的路由模式是一种根据Routing Key有条件地将消息筛选后发送给消费者的模式。在路由模式中,生产者向交换机发送消息时,会指定一个Routing Key。交换机接收生产者的消息后,根据消息的Routing Key将其路由到与Routing Key完全匹…...
PyTorch 之 nn.Parameter
文章目录 使用方法:为什么使用 nn.Parameter:示例使用: 在 PyTorch 中,nn.Parameter 是一个类,用于将张量包装成可学习的参数。它是 torch.Tensor 的子类,但被设计成可以被优化器更新的参数。通过将张量包装…...
KAFKA高可用架构涉及常用功能整理
KAFKA高可用架构涉及常用功能整理 1. kafka的高可用系统架构和相关组件2. kafka的核心参数2.1 常规配置2.2 特殊优化配置 3. kafka常用命令3.1 常用基础命令3.1.1 创建topic3.1.2 获取集群的topic列表3.1.3 获取集群的topic详情3.1.4 删除集群的topic3.1.5 获取集群的消费组列表…...
3d模型上的材质怎么删除---模大狮模型网
在大多数3D软件中,可以通过以下步骤来删除3D模型上的材质: 选择要删除材质的模型:首先,从场景中选择包含目标材质的模型。可以使用选择工具或按名称查找模型。 进入编辑模式:将模型切换到编辑模式。这通常需要选择相应…...
leetcode hot100跳跃游戏Ⅱ
本题和上一题还是有不一样的地方,这个题中,我们需要记录我们跳跃的步数并尽可能的满足最小的跳跃步数到达终点。 那么我们还是采用覆盖范围的概念,但是我们需要两个,一个是在当前位置的覆盖范围,另一个是下一步的覆盖…...
大数据期望最大化(EM)算法:从理论到实战全解析
文章目录 大数据期望最大化(EM)算法:从理论到实战全解析一、引言概率模型与隐变量极大似然估计(MLE)Jensen不等式 二、基础数学原理条件概率与联合概率似然函数Kullback-Leibler散度贝叶斯推断 三、EM算法的核心思想期…...
【鸿蒙】大模型对话应用(二):对话界面设计与实现
Demo介绍 本demo对接阿里云和百度的大模型API,实现一个简单的对话应用。 DecEco Studio版本:DevEco Studio 3.1.1 Release HarmonyOS SDK版本:API9 关键点:ArkTS、ArkUI、UIAbility、网络http请求、列表布局、层叠布局 对话页…...
MySQL 导入数据
我们可以将已有的数据导入到MySQL数据库中,下面是几种方式: 1、mysql 命令导入 使用 mysql 命令导入语法格式为: mysql -u用户名 -p密码 < 要导入的数据库数据(shulanxt.sql) 实例: # mysql -uroot -p123456 < …...
探索数字经济:从基础到前沿的奇妙旅程
新一轮技术革命方兴未艾,特别是以人工智能、大数据、物联网等为代表的数字技术革命,催生了一系列新技术、新产业、新模式,深刻改变着世界经济面貌。数字经济已成为重组全球要素资源、重塑全球经济结构、改变全球竞争格局的关键力量。预估到20…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
