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

AXI 总线协议学习笔记(4)



引言

前面两篇博文从简单介绍的角度说明了 AXI协议规范。

AXI 总线协议学习笔记(2)

AXI 总线协议学习笔记(3)

从本篇开始,详细翻译并学习AXI协议的官方发布规范。


文档中的时序图说明:

AXI指:Advanced eXtensible Interface,高级可扩展接口。

Part A ——AMBA AXI 协议规范

A1:介绍

A1.1 关于 AXI 协议

AMBA AXI协议支持管理器和从属器组件之间的高性能,高频率通信。

AXI协议特点:

  1. 适合高带宽低延迟设计。
  2. 不用复杂的桥接就可以支持高频操作。
  3. 该协议满足各种组件的接口要求。
  4. 它适用于具有高初始访问延迟的存储器控制器。
  5. 提供了互连架构实现的灵活性。
  6. 它向后兼容AHB和APB接口。

AXI协议的关键特性是:

  1. 单独的地址/控制和数据阶段。
  2. 支持使用字节选通进行未对齐的数据传输。
  3. 使用仅发出起始地址的基于突发的事务。
  4. 独立的读写数据通道,可以提供低成本的直接内存访问(DMA)。
  5. 支持发出多个未完成的地址。
  6. 支持无序事务完成。
  7. 允许轻松添加寄存器级以提供时序收敛。

A1.2 AXI架构

AXI协议基于突发,定义了五个独立的事务通道:

  1. 读地址通道,该通道的信号名以AR开头;
  2. 读数据通道,该通道的信号名以R开头;
  3. 写地址通道,该通道的信号名以AW开头;
  4. 写数据通道,该通道的信号名以W开头;
  5. 写响应通道,该通道的信号名以B开头;

地址信道携带描述要传输的数据的性质的控制信息。数据通过以下任一方式在管理器和从属器组件之间传输:

  1. 管理者通过写数据通道向从属者传输数据。在一次写事务中,从属者通过写响应通道告知管理者数据传输完成。
  2. 管理者通过读数据通道向从属者拿取数据。

AXI协议:

  1. 允许在实际数据传输之前发布地址信息。
  2. 支持多个未完成事务。
  3. 支持事务无序完成。

下图所示,写通道架构:

读通道架构:

 A1.2.1 通道定义

每个通道都包括一组信息信号,VALIDREADY 信号提供了双向握手机制。

源端利用 VALID 信号表征此通道上地址、数据或控制信息何时有效。目的端利用 READY 信号表征何时准备好接收源端信息。读写数据通道均包含一个 LAST 信号,来表征传输事务中传输的最后一个数据。

读写地址通道

读写事务均包含自己的地址通道。对应的地址通道会传输一次事务中需要的地址和控制信息。

读数据通道

读数据通道同时携带读取的数据和读响应信息,由下属侧传至管理器侧。

包含:

  1. 数据总线信号,位宽可为,8,16,32,64,128,256,512,或1024;
  2. 一个读响应信号,表征读事务完成的状态。

写数据通道

写数据通道用于传输从管理器侧发往从属器侧的写数据。

包括:

  1. 数据总线信号,位宽可为,8,16,32,64,128,256,512,或1024;
  2. 每八个数据位的字节通道选通信号,指示有效数据的字节。

写入数据通道信息始终被视为缓冲,因此管理器可以执行写入事务,而无需从属确认先前的写入事务。

写响应通道

下属使用写响应通道来响应写事务。所有写入事务都需要写响应信道上的完成信令。仅对完整事务发出完成信号,而不是对事务中的每个数据传输发出完成信号。

A1.2.2 接口和互联

一个典型的系统由多个管理器和从属设备组成,这些设备通过某种形式的互连连接在一起,如图所示。

AXI协议为以下接口提供了单一接口定义:

  1. 管理器和互联器
  2. 从属器和互联器
  3. 管理器和从属器

上述的接口定义支持多种不同的互联实现。

设备之间的互连等同于另一个具有对称的管理器和从属端口的设备,真正的管理器设备和从属设备可以连接这些端口。

典型的系统拓扑结构

绝大部分系统使用如下3种的互联拓扑结构:

  1. 共享地址数据总线
  2. 共享地址总线和多条数据总线
  3. 多层,具有多个地址和数据总线

在大多数系统中,地址信道带宽要求明显小于数据信道带宽要求。这样的系统可以通过使用具有多个数据总线的共享地址总线来实现并行数据传输,从而在系统性能和互连复杂性之间实现良好的平衡。

A1.2.3 寄存器切片

每个AXI信道仅在一个方向上传输信息,并且该架构不需要信道之间的任何固定关系。这些特性意味着可以在任何通道的几乎任何点插入寄存器片,而代价是额外的延迟周期。

注意

  1. 延迟周期和最大操作频率之间的权衡。
  2. 处理器和高性能内存之间的直接、快速连接,但使用简单的寄存器片来隔离到性能不太关键的外围设备的较长路径。

A1.3 术语

A1.3.1 AXI组件和拓扑结构

组件:具有至少一个AMBA接口的独特功能单元。组件可用作管理器、从属、外围和互连组件。

管理器组件:启动事务的组件。单个组件可能同时充当管理器组件和从属组件。例如,直接内存访问(DMA)组件在启动事务以移动数据时可以是管理器组件,在被编程时可以是从属组件。

从属器组件:一种接收事务并对其作出响应的组件。单个组件可以同时充当从属组件和管理器组件。例如,直接内存访问(DMA)组件在被编程时可以是从属组件,在启动事务以移动数据时可以是管理器组件。包括:存储器从属器件以及外设从属器件。

存储器从属器件:

内存从属组件或内存从属组件是具有以下属性的从属组件:

  • 从内存从属存储器读取字节将返回写入该字节位置的最后一个值。
  • 对从属存储器中字节位置的写入会将该位置的值更新为通过后续读取获得的新值。
  • 多次读取一个位置对任何其他字节位置都没有副作用。
  • 读取或写入一个字节位置对任何其他字节位置都没有副作用。

外设从属器件:

外围从属组件也称为外围从属组件。本规范建议外围从属设备具有通常在组件数据表中描述的“实施定义”访问方法。任何未定义为允许的访问都可能导致外围从属设备失败,但必须以协议正确的方式完成,以防止系统死锁。该协议不要求外围设备继续正确操作。
在本说明书中的描述上下文中,外围从属设备与外围设备、外围组件、外围设备和设备同义。

互联组件:具有多个AMBA接口的组件,将一个或多个管理器组件连接到一个或更多从属组件

互连组件可用于组合在一起:

  • 一组管理器,使其显示为单个管理器界面。
  • 一组从属项,使其显示为单个从属项界面。

A1.3.2 AXI 事务和存储器类型

当AXI管理器启动AXI操作时,以AXI从属器为通信目标:

  • AXI总线上所需的一整套操作构成AXI事务(事务指:AXI管理器启动AXI事务以与AXI从属服务器通信。通常,交易需要在经理和下属之间通过多个渠道交换信息。所需的一整套信息交换构成AXI事务。)。
  • 任何所需的有效载荷数据都作为AXI突发传输(Burst指:在AXI事务中,有效载荷数据在单个突发中传输,该突发可以包括多个节拍或单个数据传输。)
  • 突发可以包括多个数据传输或AXI Beats(AXI Beats指:AXI突发内的单个数据传输。)

A1.3.3 缓存和缓存操作

本规范没有定义任何缓存参考工作中定义的标准缓存术语。
然而,缓存和缓存行的词汇表条目阐明了这些术语在本文档中的使用方式。

缓存:缓存管理器中的任何缓存、缓冲区或其他存储结构,可以保存特定地址位置。

缓存线:高速缓存中的基本存储单位。它的大小总是2的幂。缓存线必须与缓存线的大小对齐。缓存行的大小相当于一致性颗粒。

A2:信号描述

A2.1 全局信号

AXI3或者AXI4协议中的全局信号

信号名称:ACLK

源:时钟源

说明:全局时钟信号,同步信号在该全局时钟的上升边沿采样。

信号名称:ARESETn

源:复位源

说明:全局复位信号,低电平复位有效。

A2.2 写地址通道信号

除专门说明外,所有信号适用于AXI3和AXI4协议。

信号名称:AWID

源:管理器

说明:写事务的标识标记。

信号名称:AWADDR

源:管理器

说明:写入事务中第一次传输的地址。

信号名称:AWLEN

源:管理器

说明:突发写入长度,写入事务中数据传输的确切数量。该信息确定与地址相关联的数据传输次数。

信号名称:AWSIZE

源:管理器

说明:表示写事务中,所传输的每个数据所占的字节数。

信号名称:AWBURST

源:管理器

说明:突发类型。指定一次传输事务中,每次数据传输的地址变化规律。

信号名称:AWLOCK

源:管理器

说明:提供有关写事务原子特性。此信号在AXI第3、4代之间有变化。

信号名称:AWCACHE

源:管理器

说明:指示写入事务如何在系统中进行。

信号名称:AWPROT

源:管理器

说明:写事务的保护属性,包括 权限、安全级别和访问类型。

信号名称:AWQOS

源:管理器

说明:写事务服务质量标识。AXI3中未实现。

信号名称:AWREGION

源:管理器

说明:写入事务的区域指示符。AXI3中未实现。

信号名称:AWUSER

源:管理器

说明:写入事务的用户自定义扩展。AXI3中未实现。

信号名称:AWVALID

源:管理器

说明:指示写事务通道信号的有效性。

信号名称:AWREADY

源:从属器

说明:指示从属器可以接收写地址通道的传输。

A2.3 写数据通道信号

信号名说明
WID管理器写数据传输的ID标签,仅在AXI3中实现
WDATA管理器写数据
WSTRB管理器写选通,一位负责一个字节
WLAST管理器表明写数据的最后一个数据
WUSER管理器写数据通道的用户自定义信号
WVALID管理器写数据通道有效信号
WREADY从属器写数据通道的可接收状态信号

A2.4 写响应通道信号

信号名说明
BID从属器写响应的ID标签
BRESP从属器写响应,表明写事务完成的状态
BUSER从属器写响应通道的用户自定义信号
BVALID从属器写响应通道有效信号
BREADY管理器写响应通道的可接收状态信号

A2.5 读地址通道信号

除专门说明外,所有信号适用于AXI3和AXI4协议。

信号名称:ARID

源:管理器

说明:读事务的标识标记。

信号名称:ARADDR

源:管理器

说明:读事务中第一次传输的地址。

信号名称:ARLEN

源:管理器

说明:突发写入长度,读事务中数据传输的确切数量。该信息确定与地址相关联的数据传输次数。

信号名称:ARSIZE

源:管理器

说明:表示读事务中,所传输的每个数据所占的字节数。

信号名称:ARBURST

源:管理器

说明:突发类型。指定一次传输事务中,每次数据传输的地址变化规律。

信号名称:ARLOCK

源:管理器

说明:提供有关读事务原子特性。此信号在AXI第3、4代之间有变化。

信号名称:ARCACHE

源:管理器

说明:指示读事务如何在系统中进行。

信号名称:ARPROT

源:管理器

说明:读事务的保护属性,包括 权限、安全级别和访问类型。

信号名称:ARQOS

源:管理器

说明:读事务服务质量标识。AXI3中未实现。

信号名称:ARREGION

源:管理器

说明:读事务的区域指示符。AXI3中未实现。

信号名称:ARUSER

源:管理器

说明:读事务的用户自定义扩展。AXI3中未实现。

信号名称:ARVALID

源:管理器

说明:指示读事务通道信号的有效性。

信号名称:ARREADY

源:从属器

说明:指示从属器可以接收读地址通道的传输。

A2.6 读数据通道信号

信号名说明
RID从属器读数据和读响应的ID标签
RDATA从属器读数据
RRESP从属器读响应,表征读的状态
RLAST从属器表明读数据的最后一个数据
RUSER从属器读数据通道的用户自定义信号
RVALID从属器读数据通道有效信号
RREADY管理器读数据通道的可接收状态信号

A3:信号接口要求

A3.1 时钟和复位

时钟

每个AXI接口都只有一个时钟信号ACLK。所有的输入信号在ACLK的上升沿采样,所有的输出信号的变化发生在ACLK的上升沿之后。

在管理器和从属器接口上,输入和输出信号之间不能有组合路径。

复位

AXI协议使用仅使用一个低电平有效的复位信号,ARESETn。该信号可以异步断言,但是复位撤离时必须与ACLK的上升边沿同步。

复位期间,需满足如下的接口信号要求:

  • 管理器接口必须将 ARVALID, AWVALID,  WVALID 信号拉低。
  • 从属器接口必须将 RVALID , BVALID 信号拉低。
  • 其他信号可以为任意值。

管理器在复位信号撤离后最早可以将 ARVALID, AWVALID, WVALID 信号拉高的时刻是复位信号ARESETn 为高电平后 ACLK 的第一个上升边沿。如下时序图:

A3.2 基本读写事务

握手过程

AXI协议的5个通道全是用 VALID/READY 去完成数据、地址、控制信息传输过程的握手。这种双向流控制机制意味着管理器和从属器都可以控制信息在二者之间移动的速率。源端 产生VALID信号指示地址、数据、控制信息的有效性。目的端 产生READY信号指示其已准备好可以接受来自源端的信息。当且仅当VALID/READY信号均为高电平,成功握手时,才产生一次有效传输。在管理器和从属器接口上,输入和输出信号之间不能有组合路径。(一般都是直线连线)握手时序图,握手在T3时刻完成:

 源端 在目的端接收到有效信息之前,应在总线上一直保持将要传输的有用信息。

源端 在断言VALID信号之前,不允许一直等待 READY信号的断言。

当VALID信号断言时,其应一直保持该信号的有效性直到握手发生,握手时刻发生在READY / VALID信号均断言的第一个时钟上升沿。下图是目的端在源端断言VALID信号之前断言READY的时序图,握手在T3时刻完成:

目的端 在断言对应的READY信号之前,允许一直等待源端VALID信号断言。

如果READY信号断言,那么在VALID信号断言之前可以取消断言READY信号。下图的时序图中,在T2时刻完成握手。

通道信号要求

每个通道都有各自的握手信号:

写地址通道

管理器给出有效的地址和控制信息时就可以将 AWVALID 信号断言,一旦断言 AWVALID 信号必须一直保持有效至 AWREADY 信号断言后的第一个时钟上升沿。

AWREADY 信号默认的状态可以是高电平也可以是低电平。协议规范建议的默认状态是高电平。当AWREADY 信号为高电平时,从属器必须有能力接受发给它的任何有效地址。

——注意——

协议规范之所以不推荐默认状态为低电平的原因在于,如果这样会迫使传输至少消耗2个时钟周期,一个周期断言AWVALID 一个周期断言 AWREADY。

写数据通道

在一次突发写入期间,管理器给出有效的写数据时就可以将 WVALID 信号断言,一旦断言 WVALID 信号必须一直保持有效至 WREADY 信号断言后的第一个时钟上升沿。

WREADY 信号默认的状态可以是高电平,唯有如此,从属器才可以在一个时钟周期接收写数据。

管理器必须在其写突发传输中给出最后一个写数据时断言 WLAST 信号。

协议规范建议将 WDATA 无效的字节通道置零。

写响应通道

从属器当且仅当其发出有效写响应时,断言 BVALID 信号。一旦断言 BVALID 信号必须一直保持有效至 BREADY 信号断言后的第一个时钟上升沿。

BREADY 信号默认的状态可以是高电平,唯有如此,管理器才可以在一个时钟周期接收写响应。

读地址通道

管理器给出有效的地址和控制信息时就可以将 ARVALID 信号断言,一旦断言 ARVALID 信号必须一直保持有效至 ARREADY 信号断言后的第一个时钟上升沿。

ARREADY 信号默认的状态可以是高电平也可以是低电平。协议规范建议的默认状态是高电平。当ARREADY 信号为高电平时,从属器必须有能力接受发给它的任何有效地址。

——注意——

协议规范之所以不推荐默认状态为低电平的原因在于,如果这样会迫使传输至少消耗2个时钟周期,一个周期断言ARVALID 一个周期断言 ARREADY。

读数据通道

从属器当且仅当其发出有效写响应时,断言 RVALID 信号。一旦断言 RVALID 信号必须一直保持有效至 RREADY 信号断言后的第一个时钟上升沿。尽管一个从属器只有一个数据读取的源端,但是同样必须断言 RVALID 信号以回应数据请求。

管理器通过断言 RREADY 信号去指示其可以接收数据。RREADY 信号的默认状态可以是高电平,但前提是管理器在启动读取事务时能够立即接受读取数据。

从属器必须在其读突发传输中给出最后一个写数据时断言 RLAST 信号。

协议规范建议将 RDATA 无效的字节通道置零。

A3.3 通道间的关系

AXI协议有如下的关系需要保持:

  • 写响应必须紧跟在写事务最后一个数据传输之后。
  • 读数据必须紧跟读取数据的地址之后。
  • 信道握手必须符合 信道握手信号之间的依赖关系 中定义的依赖关系。

该协议没有定义任何其他的通道间关系。

通道间的依赖关系缺失意味着,在一个事务中,写数据可以先于写地址出现。如果写地址通道比写数据通道包含更多级的寄存器,这种情况可能发生。类似地,写数据可能和地址在相同的时钟周期出现。

——注意——

当互连需要确定目标地址空间或从属空间时,它必须重新对齐写地址和数据。需要这种重新排列以确保写入数据仅对其目的地的从属方有效。

————————

当管理器发出写请求时,它必须能够提供该事务的所有写数据,而不依赖于该管理器的其他事务。

当管理器发出读取请求时,它必须能够接受该事务的所有读取数据,而不依赖该管理器的其他事务。

请注意,管理器可以依赖使用相同ID的事务按顺序返回的读取数据,因此管理器只需要足够的存储空间来存储来自具有不同ID的事务的读取数据。

通道间握手信号的依赖关系

为了避免死锁状况,必须遵守握手信号之间存在的依赖性规则。

  • 发送信息的AXI接口的 VALID 信号必须不依赖于接收该信息的AXI接口的 READY 信号。
  • 正在接收信息的AXI接口可以等待直到它检测到 VALID 信号,然后才断言其相应的 READY 信号。

—— 注意 ——

在断言 READY 之前等待 VALID 被断言是可以接受的。在检测到相应的 VALID 之前断言READY也是可以接受的。这可以导致更有效的设计。

————————

此外,不同通道上的握手信号之间存在依赖性,AXI4定义了额外的写响应依赖性。以下小节定义了这些依赖关系:

  • 读事务依赖关系
  • AXI3写事务依赖关系
  • AXI4和AXI5写事务依赖关系

在依赖关系的图中:

  • 单箭头指向可以在 箭头开始处的信号 之前或者之后断言的信号
  • 双箭头指向只能在 箭头开始处信号 之后断言的信号

读事务依赖关系

下图所示是读事务握手信号的依赖关系:

  • 管理器在断言 ARVALID 信号之前禁止等待从属器断言 ARREADY 信号。
  • 从属器在断言 ARREADY 信号之前可以等待 ARVALID 信号的断言。
  • 从属器可以在 ARVALID 信号断言之前断言 ARREADY 信号。
  • 从属器必须等待 ARVALID 信号 和 ARREADY 信号均断言,才可以断言 RVALID 信号。
  • 从属器在断言 RVALID 信号之前禁止等待管理器断言 RREADY信号。
  • 管理器在断言 RREADY信号之前可以一直等待 RVALID 信号的断言。
  • 管理器可以在 RVALID 信号断言之前断言 RREADY。

AXI3写事务的依赖关系

下图所示是写事务握手信号的依赖关系:

  • 管理器在断言 AWVALID 信号或 WVALID 信号之前禁止等待从属器断言 AWREADY 信号或 WREADY 信号。
  • 从属器在断言 AWREADY 信号之前可以一直等待 AWVALID 信号 或 WVALID 信号。
  • 从属器可以在 AWVALID 信号或 WVALID 信号断言之前断言 AWREADY信号。
  • 从属器在断言 WREADY 信号之前一直等待 AWVALID 信号或 WVALID 信号。
  • 从属器可以在 AWVALID 信号或 WVALID 信号断言之前断言 WREADY 信号。
  • 从属器在断言 BVALID 信号之前,一定要等待 WVALID 信号和 WREADY 信号断言,完成握手。从属器在断言 BVALID 信号之前也必须等待 WLAST断言完成。这个等待是必须的,因为写响应 BRESP 必须在写事务最后一个数据传输完成后起作用。
  • 从属器在断言 BVALID 信号之前禁止等待管理器断言 BREADY 信号。
  • 管理器可以在断言 BREADY 信号之前一直等待 BVALID 信号的断言。
  • 管理器可以在 BVALID 信号断言之前断言 BREADY 信号。

—— 注意 ——

为避免死锁状况必须遵守上述的依赖规则。例如,管理器在驱动(断言)WVALID 信号之前禁止一直等待 AWREADY 信号的断言。当此时从属器在断言 AWREADY 信号之前一直等待 WVALID 信号,就会出现死锁状况,导致一直无法握手,无法通信。

——————————

参考说明

【1】AMBA® AXI and ACE Protocol Specification.


未完结,持续更~

相关文章:

AXI 总线协议学习笔记(4)

引言 前面两篇博文从简单介绍的角度说明了 AXI协议规范。 AXI 总线协议学习笔记(2) AXI 总线协议学习笔记(3) 从本篇开始,详细翻译并学习AXI协议的官方发布规范。 文档中的时序图说明: AXI指&#xff1…...

C++复习笔记6

1.String类的实现 注意深浅拷贝&#xff0c; C语言字符串拼接函数strcat() #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<vld.h> #include<assert.h> using namespace std;class String {friend ostream& operator<<(ostream &am…...

指针的步长及意义(C语言基础)

指针的步长及意义 文章目录指针的步长及意义指针变量1后偏移的字节数不同指针解引用时取出的字节数不同其他例子不同类型的指针有何不同的意义指针变量1后跳跃字节数量不同解引用的时候&#xff0c;取出字节数量不同 指针变量1后偏移的字节数不同 代码演示&#xff1a;&#…...

SpringMVC:统一异常处理(11)

统一异常处理1. 说明2. 问题描述3. 异常处理器使用3.1 创建异常处理器类3.2 让程序抛出异常3.3 测试4. 项目异常处理方案4.1 异常分类4.2 异常解决方案4.3 异常解决方案的具体实现4.4 测试5. 总结1. 说明 \quad本篇文章是在文章SpringMVC&#xff1a;SSM整合&#xff08;Spring…...

SpringBoot的配置与使用

SpringBoot简介 我们的Spring是包含了众多工具的IoC容器&#xff0c;而SpringBoot则是Spring的加强版&#xff0c;可以更加方便快捷的使用 如果Spring是手动挡的车&#xff0c;那么SpringBoot就是自动挡的车&#xff0c;让我们的驾驶体验变得更好 SpringBoot具有一下几种特征…...

【Python】tkinter messagebox练习笔记

我一好友在朋友圈看到人家用代码花式秀恩爱&#xff0c;让我也做一个&#xff0c;我就用我学习半年python的功力&#xff0c;做了这一个东西。&#x1f64f;窗口主页面&#xff08;图一&#xff09;为了让我这个盆友有颜面&#xff0c;特意做了一个问答问他帅不帅&#xff0c;以…...

2022年12月电子学会Python等级考试试卷(五级)答案解析

青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;五级&#xff09; 分数&#xff1a;100 题数&#xff1a;38 一、单选题(共25题&#xff0c;共50分) 1. 下面哪个语句正确定义了元组类型数据tuple1&#xff1f;&#xff08; &#xff09; A. t…...

计算机网络自定向下 -- 浅谈可靠性之rdt协议

可靠性数据传输原理 可靠指数据在传输过程中不错&#xff0c;不丢&#xff0c;不乱 运输层要为应用层提供一种服务&#xff1a;数据可以通过一条可靠的信道进行传输&#xff0c;在该信道中传输的数据不会受到损坏或者丢失, 实现这种服务的是可靠数据传输协议。 要实现这种服…...

制造业升级转型:制造业上市公司-智能制造词频统计数据集

发展智能制造&#xff0c;关乎中国制造业转型升级的成效。基于中国制造业上市公司年报&#xff0c;通过文本数据挖掘&#xff0c;提取关键词反映企业对智能制造的关切焦点&#xff0c;进而运用词频及共词网络分析&#xff0c;洞察中国智能制造的发展态势。 研究发现&#xff0…...

HTML 开发工具整理

一、千乐微云团队推荐的HTML开发工具Visual Studio Code 简称VS Code &#xff08;第一推荐&#xff09;Visual Studio Code (简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器&#xff0c;支持几乎所有主流的开发语言的语法高亮、智能代码补全、自定义快捷键、括号…...

介绍ACE C++网络通信框架

​ 很久以前笔者也不太熟悉ACE C网络通信框架&#xff0c;偶然的机会逐渐接触后&#xff0c;发现它的优良&#xff01; 总结来看它的有点如下 非常适合后台无界面网络通信的系统编程 适合小型化核心网使用&#xff1b;但值得注意&#xff0c;如果您需要的是web领域技术栈&…...

【Mac OS】JDK 多版本切换配置

前言 由于不同的项目可能需要使用的 JDK 版本不一样&#xff0c;所以在系统中配置多个 JDK 版本&#xff0c;并且能随时切换&#xff0c;是一个必要的配置。 查看已安装的 JDK 版本 /usr/libexec/java_home -V框框1是执行的命令 框框2是当前系统下所有的 JDK 版本 框框3是当…...

RabbitMQ-Exchanges交换机

一、介绍 RabbitMQ消息传递模型的核心思想是&#xff1a;生产者生产的消息从不会直接发送到队列。实际上&#xff0c;通常生产者甚至不知道这些消息传递到了哪些队列中。相反&#xff0c;生产者只能将消息发送到交换机&#xff0c;交换机工作的内容非常简单&#xff0c;一方…...

离散数学 课时二 命题逻辑等值演算

等值式(等值联结词) 1、设A、B是两个命题公式,若A、B构成的等价式 A等价于B 为重言式,那么称A与B是等值的 2、常用等值式&#xff1a; 注意&#xff1a; 1 双否定律 2 幂等律 3 交换律 4 结合律 5 吸收律 6 德摩根律 7 同一律 8 零律 9 矛盾律 10 排中律 11 蕴含表达式 12 …...

Debezium系列之:事件扁平化转换SMT,简化debezium数据格式,为数据添加head,为值添加键值对

Debezium系列之:事件扁平化转换SMT,简化debezium数据格式,为数据添加head,为值添加键值对 一、需求背景二、Debezium数据格式和扁平化数据格式对比三、事件扁平化SMT作用四、事件扁平化转换SMT设置五、事件扁平化参数详解六、完整SMT参数配置一、需求背景 Debezium 数据更改…...

内网渗透(十八)之Windows协议认证和密码抓取-本地认证(NTML哈希和LM哈希)

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…...

Portraiture全新4.0最新版人像磨皮插件更新内容

Portraiture是一款智能磨皮插件&#xff0c;为Photoshop和Lightroom添加一键磨皮美化功能&#xff0c;快速对照片中皮肤、头发、眉毛等部位进行美化&#xff0c;无需手动调整&#xff0c;大大提高P图效率。全新4版本&#xff0c;升级AI算法&#xff0c;并独家支持多人及全身模式…...

前端也能悄悄对视频截图?js实现对视频按帧缓存

前言 虽然最后没有采用这种方案来实现滚动控制视频进度&#xff0c;但是仍然想自己试试这种方案的实现&#xff0c;毕竟应用范围也挺广的。 核心代码并不多&#xff0c;算是一篇小短文&#xff5e;。 掘金好像不允许放站外演示链接&#xff0c;所以这里就用动图大概展示下最终…...

TCP、UDP网络编程面试题

TCP、UDP、Socket、HTTP网络编程面试题 什么是网络编程 网络编程的本质是多台计算机之间的数据交换。数据传递本身没有多大的难度&#xff0c;不就是把一个设备中的数据发送给其他设备&#xff0c;然后接受另外一个设备反馈的数据。现在的网络编程基本上都是基于请求/响应方式…...

用网络调试助手测试PLC-Reocrder收听模式的过程

目录 一、测试环境 二、步骤及要点说明 1、PLC-Recorder的通道配置 2、PLC-Recorder启动采集 3、配置网络调试助手 4、启动调试助手的连接&#xff0c;并点击“启动批量发送” 5、停止发送&#xff0c;查看发送和接收的情况 三、小结 一、测试环境 Windows10操作系统&a…...

牛客小白月赛66

牛客小白月赛66_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)冒着期末挂科的风险打了打&#xff0c;缓解了一下网瘾&#xff0c;感觉还行最近为了期末鸽了很多期的div3&#xff0c;一学期末就手痒想训&#xff0c;感觉再不打人要没了&#xff0c;结果…...

加载sklearn新闻数据集出错 fetch_20newsgroups() HTTPError: HTTP Error 403: Forbidden解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…...

图解LeetCode——剑指 Offer 53 - I. 在排序数组中查找数字 I

一、题目 统计一个数字在排序数组中出现的次数。 二、示例 示例 1 【输入】nums [5,7,7,8,8,10], target 8 【输出】2 示例 2: 【输入】nums [5,7,7,8,8,10], target 6 【输出】0 提示&#xff1a; 0 < nums.length < 10^5-10^9 < nums[i] < 10^9nums 是一…...

python 实现热门音乐分析 附代码+数据 +论文

项目概述: 本选取了抖音当下最热门的 400 首音乐,通过一系列方法提取每首歌的波形特征,再经过降维以及机器学习等手段,进行无监督学习对音乐数据进行聚类的同时训练并使用监督学习分类器进行音乐流派分类,并通过可视化方法呈现分类聚类效果。 关键词:特征提取,PCA 主成分…...

【2335. 装满杯子需要的最短总时长】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 现有一台饮水机&#xff0c;可以制备冷水、温水和热水。每秒钟&#xff0c;可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。 给你一个下标从 0 开始、长度为 3 的整数数组 amount &#xff0c;…...

再不跳槽,就晚了

从时间节点上来看&#xff0c;3月、4月是每年跳槽的黄金季&#xff01; 以 BAT 为代表的互联网大厂&#xff0c;无论是薪资待遇、还是平台和福利&#xff0c;都一直是求职者眼中的香饽饽&#xff0c;“大厂经历” 在国内就业环境中无异于一块金子招牌。在这金三银四的时间里&a…...

Java 内存结构解密

程序计数器 物理上被称为寄存器&#xff0c;存取速度很快。 作用 记住下一条jvm指令的执行地址。 特点 线程私有&#xff0c;和线程一块出生。 不存在内存溢出。 虚拟机栈 每个线程运行时所需要的内存&#xff0c;称为虚拟机栈。 每个栈由多个栈帧组成&#xff0c;…...

ROS小车研究笔记2/11/2023:使用ssh远程登录小车

1 SSH简介&#xff1a; SSH全称Secure Shell&#xff0c;是一种建立在应用层的安全网络协议。其安全性又非对称加密(RSA)实现 对称加密&#xff1a;使用同一密钥对信息进行加密和解密&#xff0c;但是一旦该密钥被窃取就会威胁通信安全 非对称加密&#xff1a;使用公钥和私钥。…...

koa ts kick off 搭建项目的基本架子

koa ts kick off 使用ts开发koa项目的基本架子&#xff0c;便于平时随手调研一些技术 项目结构 ├── src │ ├── controller //controller层 │ ├── service //service层 │ ├── routes.ts //路由 │ └── index.ts //项目入…...

h2database源码解析-查询优化器原理

目录一、成本计算规则二、单表查询三、多表关联查询一、成本计算规则 h2的查询优化器基于成本的&#xff0c;因此在执行查询前&#xff0c;会基于成本计算使用哪个索引&#xff0c;如果涉及多表关联&#xff0c;还会计算不同表关联顺序的成本&#xff0c;最终基于最小成本得出…...

dw做游戏网站代码/怎么去推广自己的平台

String对象是我们日常使用的对象类型&#xff0c;字符串对象或者其等价对象&#xff08;如char数组&#xff09;&#xff0c;在内存中总是占据了最大的空间块&#xff0c;因此如何高效地处理字符串&#xff0c;是提高系统整体性能的关键。 在此之前&#xff0c;String作为一个…...

扁平化网站源码/免费友情链接

问题&#xff1a;如何通过结构中的某个变量获取结构本身的指针&#xff1f;&#xff1f;&#xff1f;关于container_of见kernel.h中:/*** container_of - cast a member of a structure out to the containing structure* ptr: the pointer to the member.* type: the …...

做网站生成二维码/外贸谷歌推广怎么样

假设我们有一个硬币和10个机会。在这里&#xff0c;我们将首先初始化头&#xff0c;尾和机会的值-int heads 0;int tails 0;int chances 10;现在&#xff0c;我们将使用Random对象获得head和tail值-for (int i 1; i< chances; i) {if (t.chanceFunc().equals("tail…...

静态网站怎么更新/百度账号一键登录

随着Python的技术发展&#xff0c;越来越多的人开始学习它&#xff0c;那么零基础入门该怎么学习呢&#xff1f;方法不当&#xff0c;有可能学习效率非常低。1、要养成良好的编码习惯&#xff0c;注重细节&#xff0c;一定要按照Python的规则来写。2、要锻炼独立解决问题的能力…...

设计制作合同交印花税吗/十大seo免费软件

一份重要的word文挡因损坏而无法打开&#xff0c;将导致很严重的后果。遇到这样的情况&#xff0c;可以通过下面的方法来修复word文挡。 方法一&#xff1a;利用word2002/2003的“打开并修复”功能来修复文挡。(1)启动word2002/2003&#xff0c;单击“文件-----打开”&#…...

wordpress分页页面/seo入门版

各种排序算法&#xff08;1&#xff09;冒泡排序 选择排序 快速排序1. 冒泡排序1.1 名字由来&#xff1a;1.2 冒泡思想1.3 原理1.4 时间复杂度&#xff1a;O(n^2)1.5 空间复杂度&#xff1a;11.6 是否稳定&#xff1a;稳定1.7 代码例子2. 选择排序2.1 选择思想2.2 原理2.3 时间…...