当前位置: 首页 > news >正文

FPGA Verilog/VHDl 中的锁存latch

目录

  • 一、前言
  • 二、锁存器定义
  • 三、verilog中锁存的产生
  • 四、verilog中锁存的影响和消除
  • 五、FPGA中的锁存器资源

一、前言

     在做FPGA设计时,我们要求在组合逻辑设计时,case或者if-else条件要完整,否则会产生锁存。本文主要介绍锁存产生的原因和影响,以及如何规避锁存的产生。

二、锁存器定义

我们回顾一下最基础的数字电路,什么是锁存器:

锁存器(Latch)是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态。锁存,就是把信号暂存以维持某种电平状态。锁存器是利用电平控制数据的输入,它包括不带使能控制的锁存器和带使能控制的锁存器。

注:很多书本或者介绍中将触发器和锁存器混淆,其实笔者觉得即可以叫锁存器也可以叫寄存器,但由于有了时钟延触发寄存器的产生,我们一般称时钟边沿触发的为触发器,电平触发的为锁存器。

常见的锁存器有多种:
(1)基本的RS锁存器

  基本RS锁存器可由与非门实现或者用或非门实现,下图为采用或非门实现原理图,其中”S“是置位输入端,”R“是复位输入端,”Q“为状态输出端,”Q’“为反相状态输出端。
在这里插入图片描述
(2)门控RS锁存器

  在基本RS锁存器加一级门控,CP=0时一级控制门被封锁,基本锁存器保持原来的状态不变,只有当CP=1时控制门被打开后,输入信号才会被接收,此时其工作情况与基本RS锁存器没什么区别。
在这里插入图片描述
在这里插入图片描述
(3)D锁存器

  将门控SR锁存器进行优化改动,就得到D锁存器。当E=0时锁存数据,E=1时输出跟随输入D变化
在这里插入图片描述

  将两个D锁存器级联,即可产生时钟边沿触发的D触发器,也就是时序电路设计中常用的DFF。

在这里插入图片描述
  从以上描述可知道,D触发器有锁存器演进进化而来,不管是锁存器和触发器,其主要是个存储模块,为了锁存数据,只是锁存数据的方式有些不同,所以很多书上将锁存器称为触发器也没问题。

三、verilog中锁存的产生

在verilog中编辑以下代码,else或case条件赋值不完全:

always @(*) beginif(asel) o_a  = in_a;
end
always @(*) begincase(bsel)2'd0:o_b = 2'd3;2'd1:o_b = 2'd2;2'd2:o_b = 2'd1;endcase
end

或者以下代码,为了完整的if-else,组合逻辑采用信号自己等于自己如 o_a = o_a ;

always @(*) beginif(asel) o_a  = in_a;else o_a  = o_a  ;
end
always @(*) begincase(bsel)2'd0:o_b = 2'd3;2'd1:o_b = 2'd2;2'd2:o_b = 2'd1;default:o_b = o_b;endcase
end

以上两种写法综合后如下图所示,从图中可知o_b 和o_a 均产生了latch LDCE。
对于if else模块,latch的锁存信号为asel,当asel为0时o_a保持不变(锁存),当asel为1时,o_a跟随 in_a变化。case模块同理。
在这里插入图片描述
从以上分析可以得出结论:
当if-else或者case中,各条件未完全正常赋值可导致latch产生
通过修改代码如下:

always @(*) beginif(asel) o_a  = in_a;else o_a  = 1'b0;
end
always @(*) begincase(bsel)2'd0:o_b = 2'd3;2'd1:o_b = 2'd2;2'd2:o_b = 2'd1;2'd3:o_b = 2'd0;endcase
end

以上写法综合后如下图所示,从图中可知if-else产生了正常的选择器。case模块逻辑也正常,因case的写法等同为取反逻辑,所以软件直接优化为LUT取反了,没有产生LDCE。
在这里插入图片描述

四、verilog中锁存的影响和消除

上面描述了锁存的产生,那么锁存一定是错误的吗?也不一定,只是FPGA一般是时序逻辑电路,受时钟驱动,一般存储采用同步的DFF实现。但锁存也是一种有效逻辑,如在时延要求很高时序逻辑无法实现的情况下,锁存也是一种正常的电路逻辑,如第三章中的if-else中,如果确实需要再in_a为0时o_a保持,那么第三章中的if-else逻辑均为正确的逻辑,其实现的就是一个门控锁存器功能(第二章中有描述)。但在FPGA中采用锁存有一些问题:
(1)产生竞争冒险,不利于后续电路,使电路稳定性降低;
(2)给时序分析带来一定挑战,不利于时序分析


至于如何消除latch,前面已经从latch的产生中说明:
有完整的if-else赋值、有完整的case条件赋值,并且不能出现输出信号自己等于自己。

五、FPGA中的锁存器资源

在Xilinx V7芯片对以上代码进行布局布线,发现Latch使用的是存储单元(storage elements)资源,说明FPGA中FF可以被配置为锁存器,这在数据手册中可以看到。同时对照第二章,我们知道锁存器和触发的电路相似,所示Xilinx在做设计时兼容了这两种设计。
在这里插入图片描述
如下图所示,Xilinx每个SILCE有8个存储单元。其中:

  • 有四个存储单元既可以配置为边沿触发的D触发器或者电平敏感的锁存器,D输入可以直接由LUT输出通过AFFMUX、BFFMUX、CFFMUX或DFFMUX驱动,也可以由旁路片输入通过AX、BX、CX或DX输入绕过函数生成器驱动;
  • 另外四个存储单元只能配置为边沿触发的D触发器,D输入可以由LUT的O5输出或通过AX、BX、CX或DX输入的BYPASS切片输入驱动。另外,当上述的4个存储单元被配置为锁存器时,这四个存储单元不能够被使用;

在这里插入图片描述

参考资料:

1、7 Series FPGAs Configurable Logic BlockUser Guide
2、数字电路基础

相关文章:

FPGA Verilog/VHDl 中的锁存latch

目录 一、前言二、锁存器定义三、verilog中锁存的产生四、verilog中锁存的影响和消除五、FPGA中的锁存器资源 一、前言 在做FPGA设计时,我们要求在组合逻辑设计时,case或者if-else条件要完整,否则会产生锁存。本文主要介绍锁存产生的原因和影…...

Ubuntu24.04 配置远程桌面服务

一:安装 sudo apt update sudo apt install vino 二:设置 gsettings set org.gnome.Vino require-encryption false # 关闭加密(某些 VNC 客户端不支持加密) gsettings set org.gnome.Vino prompt-enabled false # 关闭连接…...

【二刷代码随想录】螺旋矩阵求解方法、推荐习题

一、求解方法 (1)按点模拟路径 在原有坐标的基准上,叠加 横纵坐标 的变化值,求出下一位置,并按题完成要求。但需注意转角的时机判断,特别是最后即将返回上一出发点的位置。 (2)按层…...

Python基础教程:从格式化到项目管理

一、Typora代码块支持格式 在Typora中编写代码时,支持多种语言的语法高亮显示: 二、代码格式化 1. %格式化(传统方式) 第一种方式:正规方式 示例代码: name "张三" age 10 print("我的…...

Python爬虫:开启数据抓取的奇幻之旅(一)

目录 一、爬虫初印象:揭开神秘面纱​ 二、工欲善其事:前期准备​ (一)Python 环境搭建​ 1.下载 Python 安装包:​ 2.运行安装程序:​ 3.配置环境变量(若自动添加失败)&#x…...

分布式ID服务实现全面解析

分布式ID生成器是分布式系统中的关键基础设施,用于在分布式环境下生成全局唯一的标识符。以下是各种实现方案的深度解析和最佳实践。 一、核心需求与设计考量 1. 核心需求矩阵 需求 重要性 实现难点 全局唯一 必须保证 时钟回拨/节点冲突 高性能 高并发场景…...

浏览器与网络模块实践

浏览器渲染步骤 浏览器渲染大致分为以下四个步骤: 1. 构建 DOM 树 • 过程:当浏览器接收到 HTML 文档后,会从上到下依次解析 HTML 代码。每遇到一个开始标签,就会创建一个对应的 DOM 节点,并根据标签的嵌套关系将这些…...

谈谈Minor GC、Major GC和Full GC

目录 一、背景 二、三者之间的区分 1、Minor GC 2、Major GC (1)老年代空间不足: (2)晋升(Promotion)失败: (3)空间分配担保失败: &#x…...

基于SpringBoot实现的高校实验室管理平台功能四

一、前言介绍: 1.1 项目摘要 随着信息技术的飞速发展,高校实验室的管理逐渐趋向于信息化、智能化。传统的实验室管理方式存在效率低下、资源浪费等问题,因此,利用现代技术手段对实验室进行高效管理显得尤为重要。 高校实验室作为…...

梯度裁剪(Gradient Clipping)

梯度裁剪(Gradient Clipping)是一种用于防止梯度爆炸(Gradient Explosion)的技术,具体来说: 1. 梯度裁剪的作用 问题背景:在训练深度神经网络(尤其是RNN/LSTM)时&#x…...

联合办公空间WeWork的创新模式与私域流量时代的品牌温度——兼论开源AI大模型AI智能名片S2B2C商城小程序源码的潜在价值

摘要:本文聚焦于联合办公空间WeWork的成功模式,深入剖析其如何让创业用户摆脱传统租赁的束缚,打破空间与社交限制,为创业带来新的可能性与趣味性,并有效降低创业成本与风险。同时探讨了WeWork在私域流量时代所建立的平…...

Git配置

为什么要用:下载zip只是当前分支,不能进行仓库push、pull、checkout 1. 下载Git 先判断是否已经下过Git: git --version若没有版本号出来,就去下载:https://git-scm.com/downloads (Windows、linux、mac…...

Protobuf 的快速使用(二)

这个部分会对通讯录进⾏多次升级,使⽤ 2.x 表⽰升级的版本,最终将会升级如下内容: 不再打印联系⼈的序列化结果,⽽是将通讯录序列化后并写⼊⽂件中。 从⽂件中将通讯录解析出来,并进⾏打印。 新增联系⼈属性&#xff…...

网页设计思路

CSS实现思路: 用一个div直接父级继承 在这里插入图片描述 一LOGO结构 h1>a>搜索关键字 二导航栏结构 结构:ul>li>a 三搜索框结构 div>input/a 四用户头像结构 div>a>imgspan 处理行内块和行内垂直对齐方向使用 vertical-align...

Vue3 配合 fullPage.js 打造高效全屏滚动网页

引言 在现代网页设计中,整屏滚动(Full-page Scrolling)已成为展示内容的一种流行方式。通过将内容分成若干个全屏页面,并配合流畅的过渡动画,可以为用户带来身临其境的浏览体验。本文将介绍如何使用 fullPage.js 插件来…...

全排列 II:去重的技巧与实现

全排列 II:去重的技巧与实现 1. 引言:排列问题的坑 你有没有遇到过这样的问题? 当我们在做全排列(Permutation)的时候,如果输入的数组中包含重复元素,生成的排列中就会出现大量重复项。这样不…...

微型导轨和普通导轨有哪些区别?

微型导轨和普通导轨都是常用的工业机械传动装置,目前,市场上有各种各样的导轨产品。那么微型导轨和普通导轨有哪些区别呢? 1、尺寸:微型导轨尺寸较小,滑座宽度最小可达 8MM,长度最小可达 11MM 左右&#xf…...

Java 输入流到输出流

Java 输入流到输出流的复制方法主要有以下六种实现方式,根据性能、适用场景和实现原理可分为不同类别: 一、基础字节流方式 实现原理:通过 FileInputStream 和 FileOutputStream 逐字节或块读取数据并写入。 代码示例: try (In…...

Anaconda安装-Ubuntu-Linux

1、进入Anaconda官网,以下载最新版本,根据自己的操作系统选择适配的版本。 2、跳过注册: 3、选择适配的版本: 4、cd ~/anaconda_download 5、bash Anaconda3-2024.10-1-Linux-x86_64.sh 6、按Enter或PgDn键滚动查看协议&…...

每日一题之既约分数

题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。 例如 3/4,1/8,7/1​, 都是既约分数。 请问,有多少个既约分…...

诠视科技MR眼镜如何使用VLC 进行RTSP投屏到电脑

文章目录 一、应用开发部分(1)基础场景构建(2)添加XvCameraManager(3)添加XvMRVideoCaptureManager(4)添加XvRTSPStreamerManager(5)打包测试 二、VLC media …...

“头”里有什么——HTML 元信息

2025/3/28 向全栈工程师迈进&#xff01; 一、看基本HTML <!doctype html> <html lang"zh-CN"><head><meta charset"utf-8" /><title>我的测试页面</title></head><body><p>这是我的页面</p&g…...

【Kafka】从理论到实践的深度解析

在当今数字化转型的时代&#xff0c;企业面临着数据量呈指数级增长、业务系统愈发复杂的挑战。在这样的背景下&#xff0c;高效的数据传输与处理技术成为了关键。Kafka&#xff0c;作为一款分布式消息队列系统&#xff0c;凭借其卓越的性能和丰富的特性&#xff0c;在众多企业的…...

Debezium系列之:使用Debezium和Apache Iceberg构建数据湖

Debezium系列之:使用Debezium和Apache Iceberg构建数据湖 Debezium Server Iceberg“Debezium Server Iceberg” 消费者设置数据复制Upsert 模式保留已删除的记录使用Upsert模式追加模式优化批处理大小在数据分析的世界中,数据湖是存储和管理大量数据以满足数据分析、报告或机…...

resnet网络迁移到昇腾执行(OM上篇)

目录 总体介绍 pytorch迁移OM模型 原始代码详细介绍 模型加载和初始化 初始化统计变量 数据推理及归一化 统计每个样本的结果 基本概念 Softmax&#xff08;归一化指数函数&#xff09; 作用 代码示例 应用场景 argmax取最大值索引 作用 代码示例 两者配合使用…...

RHCA核心课程技术解析5:红帽高可用性集群架构与深度实践

一、红帽高可用集群架构全景 1.1 核心组件交互逻辑 graph TD A[节点1] -->|Corosync 心跳| B[节点2] A -->|Pacemaker 资源管理| C[共享存储] B --> C D[Fencing设备] -->|STONITH| A D -->|STONITH| B C -->|GFS2锁管理| A C -->|GFS2锁管理| B 1.2 集…...

Display Serializer、Camera Deserializer(Camera Des)和SerDes‌ 加解串应用

‌1. 概述&#xff1a;三者的核心定位‌ ‌(1) SerDes&#xff08;Serializer/Deserializer&#xff09;‌ ‌定义‌&#xff1a;通用高速数据传输技术&#xff0c;实现‌并行↔串行‌双向转换。‌角色‌&#xff1a;数据链路的“翻译官”&#xff0c;解决并行传输的带宽与距…...

vue3+bpmn.js基本使用

一、案例使用依赖 // 必填"bpmn-js": "^7.3.1", "bpmn-js-properties-panel": "^0.37.2","bpmn-moddle":"^7.1.3","camunda-bpmn-moddle": "^7.0.1",// 可选"element-plus/icons-vue&qu…...

《数据结构:单链表》

“希望就像星星&#xff0c;或许光芒微弱&#xff0c;但永不熄灭。” 博主的个人gitee&#xff1a;https://gitee.com/friend-a188881041351 一.概念与结构 链表是一种物理存储上非连续、非顺序的存储结构&#xff0c;数据元素的顺序逻辑是通过链表中的指针链接次序实现的。 单…...

RedHatLinux(2025.3.22)

1、创建/www目录&#xff0c;在/www目录下新建name和https目录&#xff0c;在name和https目录下分别创建一个index.htm1文件&#xff0c;name下面的index.html 文件中包含当前主机的主机名&#xff0c;https目录下的index.htm1文件中包含当前主机的ip地址。 &#xff08;1&…...

C++异常处理完全指南:从原理到实战

文章目录 异常的基本概念基本异常抛出与捕获多类型异常捕获异常重新抛出异常安全异常规范&#xff08;noexcept&#xff09;栈展开与析构标准库异常总结 异常的基本概念 异常是程序运行时发生的非预期事件&#xff08;如除零、内存不足&#xff09;。C通过try、catch和throw提…...

Oracle 19C 备份

在 Oracle 19c 中&#xff0c;备份数据库通常使用 RMAN&#xff08;Recovery Manager&#xff09; 工具&#xff0c;它是 Oracle 提供的官方备份和恢复工具。以下是通过 RMAN 备份 Oracle 19c 数据库的详细步骤和命令。 一、RMAN 基本概念 RMAN 是 Oracle 的备份和恢复工具&am…...

深入理解MySQL聚集索引与非聚集索引

在数据库管理系统中&#xff0c;索引是提升查询性能的关键。MySQL支持多种类型的索引&#xff0c;其中最基础也是最重要的两种是聚集索引和非聚集索引。本文将深入探讨这两种索引的区别&#xff0c;并通过实例、UML图以及Java代码示例来帮助您更好地理解和应用它们。 一、概念…...

用Python打造智能宠物:强化学习的奇妙之旅

友友们好! 我是Echo_Wish,我的的新专栏《Python进阶》以及《Python!实战!》正式启动啦!这是专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会…...

OGG故障指南:OGG-01163 Bad column length (xxx) specified for column

报错 OGG-01163 Bad column length (xxx) specified for column AAA in table OWNER.TABLE, maximum allowable length is yyy原因 源端修改了字段长度。 虽然源端和目标端的长度已经通过DDL语句修改到一致&#xff0c;在extract进程未重启的情况下&#xff0c;生成的trail文…...

XML标签格式转换为YOLO TXT格式

针对的是多边形&#xff08;<polygon>&#xff09;来描述对象的边界&#xff0c;而不是传统的矩形框&#xff08;<bndbox>&#xff09; import xml.etree.ElementTree as ET import os from pathlib import Path# 解析VOC格式的XML文件&#xff0c;提取目标框的标…...

Java的string默认值

在Java中&#xff0c;String类型的默认值取决于其定义和实例化的方式。 以下是关于String默认值的详细说明 未实例化的String变量‌ 如果定义一个String变量但未对其进行实例化&#xff08;即未使用new关键字或直接赋值&#xff09;&#xff0c;其默认值为:ml-search[null]。这…...

侯捷 C++ 课程学习笔记:C++ 中引用与指针的深度剖析

目录 一、引言 二、引用与指针的基本概念 &#xff08;一&#xff09;引用 &#xff08;二&#xff09;指针 三、引用与指针的区别 &#xff08;一&#xff09;定义与初始化 &#xff08;二&#xff09;内存空间与 NULL 值 &#xff08;三&#xff09;自增操作 …...

llamafactory微调效果与vllm部署效果不一致如何解决

在llamafactory框架训练好模型之后&#xff0c;自测chat时模型效果不错&#xff0c;但是部署到vllm模型上效果却很差 这实际上是因为llamafactory微调时与vllm部署时的对话模板不一致导致的。 对应的llamafactory的代码为 而vllm启动时会采用大模型自己本身设置的对话模板信息…...

欢乐力扣:合并两个有序链表

文章目录 1、题目描述2、思路 1、题目描述 合并两个有序链表。  将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 在这里插入图片描述 2、思路 参考官方题解&#xff0c;简单来说就是不断调整链表指针的指向&#xff0c;让…...

访问者模式_行为型_GOF23

访问者模式 访问者模式&#xff08;Visitor Pattern&#xff09;是一种行为型设计模式&#xff0c;核心思想是将算法与对象结构分离&#xff0c;使得在不修改现有对象结构的前提下&#xff0c;可以动态添加新的操作。这类似于“医生查房”——医生&#xff08;访问者&#xff…...

排序算法2-选择排序

目录 1.常见排序算法 2.排序算法的预定函数 2.1交换函数 2.2测试算法运行时间的函数 2.3已经实现过的排序算法 3.选择排序算法的实现 3.1直接选择排序 3.2堆排序 4.下讲预告 1.常见排序算法 前面一讲已经讲解了插入排序&#xff0c;这一讲我将讲解选择排序&#xff0c;…...

openwrt24.10.0版本上安装istoreOS的屏幕监控插件

lcdsimple 插件支持在软路由下面显示统计信息到 HDMI 或者 VGA 上。 手动安装方法&#xff1a; 保证 quickstart 版本大于 0.9.7 安装 lcdsimple 具体方法&#xff1a; opkg update is-opkg install quickstart opkg install lcdsimple 手动下载 QUICKSTART 跟 LCD SIMPL…...

内网服务器无法通过公网地址访问映射到公网的内网服务

内网服务器无法通过公网地址访问映射到公网的内网服务 问题现象问题原因解决方法总结 前几天遇到一个网络问题&#xff0c;在这里做下记录&#xff0c;希望能帮助到有相同问题的朋友。 问题现象 网络拓扑如上所示&#xff0c;服务器1和服务器2在同一内网&#xff0c;网段均为1…...

基于Web的交互式智能成绩管理系统设计

目录 摘要 绪论 一、应用背景 二、行业发展现状 三、程序开发的重要意义 四、结语 1 代码 2 数据初始化模块 3 界面布局模块 4 核心功能模块 5 可视化子系统 6 扩展功能模块 7 架构设计亮点 功能总结 一、核心数据管理 二、智能分析体系 三、可视化系统 四、扩…...

从虚拟现实到可持续设计:唐婉歆的多维创新之旅

随着线上线下融合逐渐成为全球家居与建材行业的发展趋势,全球市场对高品质、个性化家居和建材产品的需求稳步攀升,也对设计师提出更高的要求。在这一背景下,设计师唐婉歆将以产品设计师的身份,正式加入跨国企业AmCan 美加集团,投身于备受行业瞩目的系列设计项目。她将负责Showr…...

PHP MySQL 预处理语句

PHP MySQL 预处理语句 引言 在PHP中与MySQL数据库进行交互时,预处理语句是一种非常安全和高效的方法。预处理语句不仅可以防止SQL注入攻击,还可以提高数据库查询的效率。本文将详细介绍PHP中预处理语句的用法,包括其基本概念、语法、优势以及在实际开发中的应用。 预处理…...

基于飞腾/龙芯+盛科CTC7132全国产交换机解决方案

产品介绍 盛科CTC7132,内置ARM-Cortex A53 主频1.2GHz&#xff1b;支持24个千兆电口&#xff0c;24个万兆光口&#xff08;850nm多模&#xff09;&#xff0c;1个千兆管理网口&#xff0c;1个管理串口&#xff1b;支持1个百兆健康管理网口&#xff1a;用于设备端口状态、电压、…...

Vue动态添加或删除DOM元素:购物车实例

Vue 指令系列文章: 《Vue插值:双大括号标签、v-text、v-html、v-bind 指令》 《Vue指令:v-cloak、v-once、v-pre 指令》 《Vue条件判断:v-if、v-else、v-else-if、v-show 指令》 《Vue循环遍历:v-for 指令》 《Vue事件处理:v-on 指令》 《Vue表单元素绑定:v-model 指令》…...

深入理解Agentic Workflows

本文来源&#xff1a;https://weaviate.io/blog/what-are-agentic-workflows 这篇文章将带你深入理解AI Agent、Agentic AI、Agentic Workflows、Agentic Architectures等概念&#xff0c;非常值得推荐。 一、什么是 AI Agents&#xff1f; AI Agents 是结合了大模型进行推理和…...