AXI总线学习(AXI34)
AXI总线学习
- AXI协议的主要特征
- 主要结构
- 通道定义
- 读写地址通道
- 读数据通道
- 写数据通道
- 写操作回应信号
- 接口和互联
- 寄存器片
- 基本传输
- Read burst
- Overlapping read burst
- Write burst
- 传输顺序
- 信号描述
- 全局信号
- 读/写地址通道信号
- 写数据通道信号
- 写响应通道信号
- 读数据通道信号
- 低功耗接口信号
- 通道握手
- 握手流程
- 通道之间的关系
- 各个通道握手信号之间的依赖关系
- 额外的控制信息
- Cache的支持
- 原子访问
- 独占访问
- 锁定访问
- 写选通
- 窄传输
- 字节不变
- 非对齐传输
- Quality of service signaling
- 时钟和复位
- 时钟
- 复位
AXI是基于burst传输的高性能总线协议
AXI协议的主要特征
- 独立的地址/控制和数据通道
- 借助字节选通支持非对齐传输
- 仅发出起始地址的基于突发的事务
- 独立的读取和写入数据通道,以实现低成本的直接内存访问 (DMA)
- 有处理多个outstanding事务的能力
- 支持乱序返回
- 容易通过添加寄存器级的方式以提供时序收敛
主要结构
通道定义
读写地址通道
读和写地址通道是独立的,地址通道用于传输地址和控制信号,AXI协议支持以下机制
- 支持不同长度的burst,每个burst支持1-16个tranfer
- burst中每个transfer支持的的大小为8-1024个bits
- 支持WRAP burst,INCR burst,和FIXED burst
- 支持原子操作,例如独占访问和锁定访问
- 系统级的cache和buffer控制
- 安全和优先级访问
读数据通道
读数据通道传输读来的数据以及来自从机的回应信号
- 读数据通道支持8.16…1024bits的数据宽度
- 读响应信号表明读操作的完成状态
写数据通道
写通道数据只是传输写入到从机的信号
- 写数据通道支持8.16…1024bits的数据宽度
- 每8个bit有一个字节选通信号控制,表明此字节的数据是否有效
写操作回应信号
写操作回应信号产生在每个burst完成之后,其中一个数据传输完成之后并不会产生此信号。
每个通道,包括地址和控制通道,数据通道,以及写操作反馈通道,均会有VALID,READY信号进行握手,确保传输准确!!!
接口和互联
AXI协议为接口提供单独的接口定义,分别是主机和互联线之间,从机和互连线之间,主从机之间。大多数的系统使用以下三种之一的互连线方式,
- 共同的地址和数据总线
- 共同的地址总线和多个数据总线
- 多个地址总线以及多个数据总线
多数情况下,会使用共同的地址总线和多个数据总线,因为一般地址宽度都会比较小(相比于数据通道)
寄存器片
每个AXI通道只在一个方向传输信息,各个通道之间不需要固定的关系。 这很重要,因为它可以在任何通道中插入寄存器片,但代价是额外的延迟周期。 这使得在延迟周期和最大操作频率之间进行权衡成为可能。
还可以在给定互连内的几乎任何点使用寄存器片。 在处理器和高性能存储器之间使用直接、快速的连接可能是有利的,但使用简单的寄存器片将更长的路径隔离到对性能不太重要的外围设备。
关于寄存器片的内容可参考:Register Slices.
基本传输
本部分介绍了按照基本AXI协议传输的例子,显示了VALID和READY信号的握手过程。传输发生在VALID和READY信号均为高电平的时候,主要有以下三个例子,分别是Read burst, Overlapping read burst, Write burst。
Read burst
整个过程主要包含以下几个步骤
- 主机发送地址和控制信号到地址总线,此信号中包含了读取的起始地址信号以及其他信号地址的计算方法,也就是控制信号
- 主机的发送地址VALID信号拉高表示地址和控制信号已经发送到地址总线上
- 从机发送地址READY信号表示可以接收到地址和控制信号
- 从机的数据准备好并将从机的数据VALID信号拉高表示数据已发送到数据总线(从机的数据VALID信号只有在从机的数据准备好后才会拉高)
- 此时的主机READY信号早就拉高,所以能在一个周期内完成第一个transfer的传输。
- 进行接下来的几个transfer的传输(多个数据。数据地址的计算方法已经随着主机发送的地址和控制信号发送到从机上了)
- 读burst传输到最后一个transfer时,从机会发送RLAST信号,表示此次burst传输完成
Overlapping read burst
所谓的Overlapping read burst也就是两个或者多个read burst连在一起进行传输
整个过程主要包含以下几个步骤
- 主机发送地址和控制信号到地址总线,此信号中包含了读取的起始地址信号以及其他信号地址的计算方法,也就是控制信号,此处的地址和控制信号为两个burst的
- 主机的发送地址VALID信号拉高表示地址和控制信号已经发送到地址总线上,两个VALID信号
- 从机发送地址READY信号表示可以接收地址和控制信号,两个READY信号
- 在第一个burst的地址和控制信号已经被从机接收后,从机就可以将数据准备好并将从机的数据VALID信号拉高表示数据已发送到数据总线(从机的数据VALID信号只有在从机的数据准备好后才会拉高)
- 此时的主机READY信号早就拉高,所以能在一个周期内完成第一个transfer的传输。
- 进行接下来的几个transfer的传输(多个数据。数据地址的计算方法已经随着主机发送的地址和控制信号发送到从机上了)
- 在第一个读burst传输到最后一个transfer时,从机会发送RLAST信号,表示第一个burst传输完成
- 第二个读burst的数据接着进行传输,并在第二个读burst传输到最后一个transfer时,从机会发送RLAST信号,表示第二个burst传输完成
Write burst
此过程主要包含以下几个步骤
- 主机发送地址和控制信号到地址总线,此信号中包含了写数据的起始地址信号以及其他信号地址的计算方法,也就是控制信号
- 主机的发送地址VALID信号拉高表示地址和控制信号已经发送到地址总线上
- 从机将写READY信号拉高,表示可以接收主机的地址和控制信号
- 主机开始发送数据,此时只有在主机的写VALID信号拉高时才会将数据发送
- 从机将READY信号拉高表示可以写入,此处的READY信号早已拉高,所以可以在一个时钟周期内写入。
- 在写操作结束时主机会在发送最后一个data时发送写LAST信号,表示此次burst传输完成
- 当从机接收到所有的数据后,从机会将VALID信号拉高表示已发送响应信号,此处为OKAY,从机将会发送OKAY信号,表示接收完成并正确,主机将会一直将READY信号拉高表示一直可以接收反馈信号。
传输顺序
AXI支持乱序操作,有助于提高效率
对于主机要求按顺序返回的,即按顺序返回,对于主机没有要求按顺序返回的,可以乱序返回
如果是一个多主机,多从机的系统,可以在ID Tag后加入特殊的信息以区分来自不同的主机。同时一个主机的可以通过扩展主机编号的方式得到多个虚拟主机
信号描述
全局信号
ACLK 来自时钟源,全局时钟信号,所有信号进行时钟的上升沿采样
ARESETn 来自复位源,全局复位信号,低电平有效,也就是低电平复位
读/写地址通道信号
以下Ax表示AW或者AR
AxID[3:0] 来自主机,写地址的ID
AxADDR[31:0] 来自主机,表示写操作的起始地址,剩余额控制信号决定其他数据的地址
AxLEN[3:0] 来自主机,表示burst的数据数量1-16,和地址相关,对于wrapping bursts来说,此数量必须是偶数,也就是2,4,6。。。16.在burst传输过程,不会被任何部分所打断,即使在写burst中,主机可以通过取消置位所有写选通的方法禁止进一步写入,但是也得将burst的剩余部分传输完成,同样,对于读burst,主机可以不要接下来读过来的数据,但是也得将读burst结束。
(注:此处的transfer类似于AHB中定义的beat。burst大小不能超过4K的地址边界,因为最小的外部设备内存定义为4K。上面的burst长度为AXI3中定义,AXI4中增加了burst的长度,最大可达256个transfer,但是大于16个transfer的burst只支持INCR burst type)
AWSIZE[3:0] 来自主机,表示burst中最大位数的那个transfer的大小,范围是1-128,因为是按照字节大小来的,所以对应于8,16,24…1024 bits
(注:此处的大小和总线宽度有关,需要保证transfer size<=data width)
AWBURST[1:0] 来自主机,表示burst传输的类型,分别是Fixed burst, Incrementing burst, Wrapping burst.结合AWSIZE信号,可以计算出写的每个数据的地址
(注:其中Fixed burst表示每次都是从固定地址读取或者写入,例如外围FIFO
Incrementing burst表示在burst中的每一拍地址都是增加的,增加的地址大小取决于size的大小,比如一个burst中size为4,那么每次地址都是增加4
Wrapping burst类似于Incrementing burst,每次传输的地址都是前一个传输地址的增量。 然而,在Wrapping burst中,当到达Wrapping边界时,地址会Wrapping到较低地址。
Wrapping burst的边界是猝发传输中每个传输的大小乘以猝发传输中的传输总数。
Wrapping burst有两个限制条件
• 起始地址必须与传输的大小对齐
• 突发的长度必须是 2、4、8 或 16。)
AWLOCK[1:0] 来自主机,表示操作中的访问类型,分为Normal access, Exclusive access, Locked access。
(注:以上为AXI3定义, AXI4中因为去掉了Locked access,所以 AWLOCK[1:0] 信号改成了AWLOCK,从2bit变成了1bit,也就是access分成了Normal access和Exclusive access两种)
AxPROT[2:0] 来自主机,保护类型,此信号为防止非法访问提供三个等级的保护
- 第一个等级是区分普通访问还是优先级访问,看的是[0]位,如果此位为0,则是普通访问,如果此位是1,则是优先访问
- 第二个等级是区分安全访问还是非安全访问,看的是[1]位,如果此位为0,则是安全访问,如果此位是1,则是非安全访问。
- 第三个等级是区分指令还是数据,看的是[2]位,如果此位为0.则是数据访问,如果此位为1,则是指令访问
AxCACHE[3:0] cache的类型
AxVALID 主机发出的,表示地址和控制信息是否可获取,并且会在AWREADY信号拉高之前一直保持稳定,1表示可获取,0表示不可获取
AxREADY 从机发出的,表示写操作的地址准备好接收到,也就是表示从机已经准备好接收来自主机的地址和控制信号了,1表示准备好了,0表示还没准备好
写数据通道信号
WID[3:0] 主机发出的,写操作的ID标签,在写操作的时候,WID必须和AWID的值相匹配
(注:此信号为AXI3中定义,AXI4中已将此信号去掉,意味着AXI不支持写out-of-order以及interleaving)
WDATA[31:0] 主机发出的,需要写入到从机的数据,可以是8,16…1024位宽
WSTRB[3:0] 主机发出的,写选通信号,此信号表明选通哪个字节通道
WLAST 主机发出的,写数据最后一个beat的标志位
WVALID 主机发出的,写操作的有效位,表示要写入的数据已经准备好了,1表示数据和选通都好了,0表示数据和选通没有准备好
WREADY 从机发出的,写操作中从机的READY信号,表示准备好接收数据了。1表示从机准备好了,0表示没准备好
写响应通道信号
BID[3:0] 从机发出的,表示返回到主机的ID标签,此标签必须和主机地址通道发出的AWID信号相匹配
BRESP[1:0] 从机发出的表示写操作的反馈,分别有OKAY,EXOKAY,SLVERR,DECERR.
BVALID 从机发出的,表示写操作反馈此时是否可获得,1表示可获得,0表示没有不可获得
BREADY 主机发出的,表示此时是否准备好接收来自从机的反馈信号,1表示准备好了,0表示还没准备好。
读数据通道信号
RID[3:0] 从机发出的,表示读取的地址ID,此ID要和主机发出的ID想匹配
RDATA[31:0] 从机发出的,表示此时读取的数据
RRESP[1:0] 从机发出的,表示对读取操作的反馈,分别由OKAY,EXOKAY,SLVERR,DECERR四种反馈信号
RLAST 从机发出的,标识读取burst中数据的最后一个Transfer
RVALID 从机发出的,表示此时主机要读取的数据是否准备好了,1表示准备好了,0表示还没准备好
RREADY 主机发出的,表示主机是否准备好接收来自从机的数据了,1表示准备好了,0表示还没准备好。
低功耗接口信号
CSYSREQ 来自时钟控制器,系统时钟给出此信号让外设进入低功耗状态
CSYSACK 来自外设,对系统时钟要求外设进入低功耗状态的回应
CACTIVE 来自外设,表示外设是否要求时钟信号,1表示要求,0表示没要求。
上图为外设接受系统要求,进入低功耗状态并退出的时序图。其中T1时刻,系统时钟要求外设进入低功耗状态,T2时刻,外设响应要求,拉低CACTIVE信号,进入低功耗,并在T3拉低CSYSACK完成进入低功耗的步骤。T4时刻系统拉高CSYSREQ信号,要求外设退出低功耗状态,外设接受请求并在T5时刻拉高CACTIVE信号,接着在T6时刻拉高CSYSACK信号,完成握手流程,完全退出低功耗状态。
上图为外设拒绝接受系统要求,没有进入低功耗状态的时序图。其中T1时刻,系统时钟要求外设进入低功耗状态,T2时刻,外设没有响应要求并保持CACTIVE信号为高,但是还是在T2时刻,拉低了CSYSACK信号进行握手。T3时刻系统拉高CSYSREQ信号,外设在T4拉高CSYSACK信号完成握手流程。
通道握手
握手流程
所有的五个通道均使用相同的VALID/READY握手来传输数据和控制信息。VALID信号表示何时数据可以被获得,READY信号表示何时准备好接收数据或者控制信号。只有在两个都是HIGH的情况下,才会发生传输,如下图,整个过程中,首先地址和控制信号准备好后,主机会将VALID信号拉高,并一直保持到从机发出的READY信号拉高,并在两个都是高电平的那个时钟上升沿进行数据的传输。
- 在写操作地址通道中,AWVALID信号在地址和控制信号有效时需要一直保持高电平,AWREADY信号推荐默认为高电平,即使这样会接收任何有效的地址和控制信号,这样可以省时间
- 在写操作数据通道中,只有在数据有效时才会将WVALID信号拉高,并且WVALID信号需要保持高电平直到从机接收到这个数据并将WREADY信号拉高,同样WREADY信号可以默认保持为高电平。在WVALID信号保持低电平时,WSTRB信号可以是任意数据,不过推荐是都置零或者保持之前的数据
- 在写操作反馈通道中,在得到一个有效的写反馈时,BVALID信号拉高,并且需要在BREADY高之前一直有效。 BREADY可以一直默认为高。
- 在读地址通道中主机的地址和控制信息有效时会将ARVALID信号拉高,并且会在从机的AREADY信号拉高之前一直有效,AREADY信号默认为高
- 在读数据通道中,从机的RVALID信号只有在数据有效时才会拉高,并且直到主机的RREADY信号拉高,也就是得到了主机的回应。RREADY信号默认为高。
通道之间的关系
地址、读、写和写响应通道之间的关系是灵活的。 例如,写入数据可以出现在与其相关的写入地址之前的接口处。 当写地址通道包含比写数据通道更多的寄存器级时,就会发生这种情况。 写数据也可能出现在与地址相同的周期中。
当互连必须确定目标地址空间或从属空间时,它必须重新对齐地址并写入数据。 这需要确保写入数据仅向其指定的从机发送有效信号。
必须保持的两个关系是:
- 读取数据必须始终遵循与数据相关的地址
- 写响应必须始终跟在与写响应相关的写事务中的最后一个写传输之后。
各个通道握手信号之间的依赖关系
比较重要的两个关系来预防死锁情况发生,第一个AXI中一个组件的VALID信号必须不能依赖于此次传输的其他组件的READY信号。第二个是READY信号可以等待VALID信号的置位发生
其基本的依赖关系如下图所示(单箭头表示被指向的那个信号可以先断言,双箭头表示被指向的那个信号必须等到前面那个信号断言之后才能断言)
从机可以在等待ARVALID信号被置位之前就一直将AREADY信号置位
从机必须等待 ARVALID 和 ARREADY 都被置位,然后才通过置位 RVALID 开始返回主机需要读取的数据。
从机可以将AWREADY 或 WREADY在AWVALID或WVALID被主机置位之前置位
在置位 AWREADY 之前,从设备可以等待 AWVALID 或 WVALID,或两者兼而有之
在置位 WREADY 之前,从设备可以等待 AWVALID 或 WVALID,或两者兼而有之
从设备必须等待 WVALID 和 WREADY 都被置位之后再置位BVALID,也就是说BVALID拉高之前,WVALID 和 WREADY都已在传输中拉高过。
(注:以上为AXI3中定义的依赖关系,AXI4中新增加了部分依赖关系,如下图所示,也就是说BVALID必须等待AWVALID和AWREADY都被置位之后再置位,含义是从机在地址和控制信号传输完成之前不能进行响应)
额外的控制信息
Cache的支持
上图为AXI3中定义的AxCACHE各个bit所对应的含义,表明此数据是否可以buffer或者cache,以及是否被allocate,此部分涉及到cache的知识
(注: AXI4中对此信号进行了修改,如下图所示)
原子访问
独占访问
独占访问机制能够实现信号量类型的操作,而无需在操作期间将总线保持锁定到特定的主机。 独占访问的优点是信号量类型的操作不会影响关键的总线访问延迟或最大可实现的带宽。 ARLOCK[1:0] 或 AWLOCK[1:0] 信号选择独占访问,RRESP[1:0] 或 BRESP[1:0] 信号表示成功 或独占访问失败。 从机必须有额外的逻辑来支持独占访问。 AXI 协议提供了一种故障安全机制,以指示主设备何时尝试对不支持它的从设备进行独占访问。
以下为主要步骤
- 来着主机的独照读操作
- 独占写操作写入同一位置
- 接收响应
成功(响应 EXOKAY),在读写之间没有其他主机写过这个地址
失败(响应OKAY), 其他主机在读写之间对这个地址进行了写操作或者Slave不支持独占访问
锁定访问
此访问指的是此transfer被锁定,在完成之前,任何其他主机都不可访问此地址,这会限制系统的性能
(注: AXI4中已去掉了此操作)
写选通
写数据总线的每8位有一个写选通,所以WSTRB[n]对应WDATA[(8×n)+7:(8×n)]。 图 9-1 显示了 64 位数据总线上的这种关系。
窄传输
当主机产生比其数据总线窄的传输时,地址和控制信息决定传输使用哪些字节通道。 在递增或包装突发时,不同的字节通道在突发的每个节拍上传输数据。 在固定突发中,地址保持不变,可以使用的字节通道也保持不变。
字节不变
字节不变的字节序意味着到给定地址的字节传输将相同数据总线上的八位数据传递到相同的地址位置
下图是一个需要字节不变访问的数据结构示例。 标头信息(例如源和目标标识符)可能采用小端格式,但有效负载是大端字节流。
关于big endian and little endian
对于整型、长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节);而 Little endian 则相反,它认为第一个字节是最低位字节(按照从低地址到高地址的顺序存放据的低位字节到高位字节
非对齐传输
AXI 总线支持非对齐的传输,当传输位宽超过1byte,起始地址不为数据总线硬件带宽(byte单位)整数倍时,为不对齐传输。不对齐传输的时候需要配合数据选通在第一次传输时将某几个byte置为无效,使第二次突发传输的起始地址(从机自动计算)为突发尺寸的整数倍。
Quality of service signaling
在AXI4中增加了QOS信号
AWQOS 4-bit 在写地址通道上为每个写事务发送的 QoS 标识符
ARQOS 4-bit 在读地址通道上为每个读事务发送的 QoS 标识符.
此信号表示读(写)操作中哪个传输具有更高的优先级,数字越大,表示更高的优先级
时钟和复位
时钟
每个 AXI 组件使用单个时钟信号 ACLK。 所有输入信号都在 ACLK 的上升沿采样。 所有输出信号的变化都必须发生在 ACLK 的上升沿之后。
主接口和从接口上的输入和输出信号之间不得有组合路径。
复位
异步复位,同步释放
在复位期间,以下接口要求适用:
- 主接口必须驱动 ARVALID、AWVALID 和 WVALID为低电平
- 从接口必须将RVALID 和BVALID 驱动为低电平。
只有在 ARESETn 为高电平后的 ACLK 上升沿,主接口才必须开始将 ARVALID、AWVALID 或 WVALID 驱动为高电平。
AXI总线学习(AXI34)相关推荐
- AXI总线学习-------从零开始详细学-------------连载(9)读数据通中字节不变性
AXI总线学习连载(9) 鲁迅曾经说过: 学硬件,不是学哪里查哪里,有一些东西是必须系统的学的,不管是嵌入式还是FPGA,硬件学习的积累一定要是系统的. 我也曾经说过: 英文手册非常重要,这是学习硬件 ...
- AXI总线学习-------从零开始详细学-------------连载(8)读数据通中字节通路,narrow transfer
AXI总线学习连载(8) 鲁迅曾经说过: 学硬件,不是学哪里查哪里,有一些东西是必须系统的学的,不管是嵌入式还是FPGA,硬件学习的积累一定要是系统的. 我也曾经说过: 英文手册非常重要,这是学习硬件 ...
- AXI 总线学习记录
AMBAaxi的特点: 适合高带宽和低延迟的设计: 能够在不适用复杂桥的情况下确保高频操作: 满足广泛组件的接口需求: 适合于带有高初始化延迟的内存控制器: 为互联架构的实现提供灵 ...
- AXI 总线协议学习笔记(2)
引言 从本文开始,正式系统性学学习AXI总线. 如何获取官方协议标准? 第一步:登陆官网:armDeveloper 第二步:登录,无账号需要注册 第三步:点击文档 第四步: 第五步:浏览页面建议下载下 ...
- AXI 总线协议学习笔记(4)
引言 前面两篇博文从简单介绍的角度说明了 AXI协议规范. AXI 总线协议学习笔记(2) AXI 总线协议学习笔记(3) 从本篇开始,详细翻译并学习AXI协议的官方发布规范. 文档中的时序图说明: ...
- AXI 总线协议学习笔记(3)
引言 上篇文章主要介绍了 AMBA以及AXI协议的基本内容,本文接续前文,继续介绍AXI协议的 原子访问.传输行为和事务顺序等. AXI 总线协议学习笔记(2)https://blog.csdn.ne ...
- Xilinx-ZYNQ7000系列-学习笔记(10):AXI总线
Xilinx-ZYNQ7000系列-学习笔记(10):AXI总线 1.AXI总线概述 在ZYNQ中有支持三种AXI总线,拥有三种AXI接口,当然用的都是AXI协议.其中三种AXI总线分别为: AXI4 ...
- AXI_01 《AXI总线系列文章》由来
笔者从学习ZYNQ开始接触AXI总线,绝大多数学习ZYNQ的资料中都是从定义一个简单的自定义IP核开始的,设计一个通过PS端ARM,写一段C代码通过AXI总线读写自定义IP核的寄存器,来完成LED流水 ...
- AXI总线的DMA数据高速传输
硕士论文:AXI总线的DMA数据高速传输 1 基于AXI总线的DMA高速通道及驱动设计与实现[D] 1 绪论 1.1 背景 1.2 DMA意义 1.3 Zynq 7000介绍 1.3.1 Zynq开发 ...
最新文章
- QEMU — VirtIO 虚拟化
- linux基础命令学习(五)目录或文件权限
- 点击按钮出现图片_坪山电动车上牌丨部分手机点击拍摄按钮,页面没有反应,无法拍摄人脸图片或上传照片,为什么?...
- 应用程序添加到服务器,在同一应用程序中的配置服务器和eureka服务器:尝试连接到localhost:8761...
- 【Java】I/O流体系中流的分类
- RedmiK40系列首销5分钟破30万台 旗舰焊门员实至名归
- [译]利用贝叶斯推理做硬件故障率的准实时预测
- Redis-配置文件
- Python Socket传输图片
- python爬取酷狗音乐url_python-从酷狗下载爬取自己想要的音乐-可以直接拿来体验哟...
- 给测试小姐姐的第三封信 | ORACLE存储过程知识分享和测试说明
- 有感而发:总结很重要
- ps2018首选项出现要求96和8之间的整数怎么办?
- 电瓶车续航测试软件,谁续航最牛:24款电动汽车实测数据全曝光
- STM32CubeIDE移植标准库
- 大数据测试--转载自开源优测
- 完美解决KMplayer无法播放RMVB、RM电影问题
- HbuilderX恢复文件的方式
- 利用C#实现百度接口图像识别
- 复制文件或文件夹时出错(无法复制***:没有足够的可用磁盘空间
热门文章
- oppo怎么打开科学计算机,OPPOr11的计算器怎么打开
- 2011考研数学二第(20)题——积分应用:旋转体的体积
- 【hihocoder1082】然而沼跃鱼早就看穿了一切——字符串
- HEVC编码块CU递归划分
- 凭借这1080道java面试真题,成功拿到阿里,京东等八家大厂offer
- 几种重要的排序算法——交换排序
- 获取QQ音乐歌曲播放源地址
- 在计算机领域中通常用英语单词bit来表示,1在计算机领域中,通常用英文单词“byte”来表示_。...
- 关于几个图像质量评价参数的计算总结
- Android 9.0 切换系统语言