当前位置:网站首页>【数字IC验证快速入门】25、SystemVerilog项目实践之AHB-SRAMC(5)(AHB 重点回顾,要点提炼)
【数字IC验证快速入门】25、SystemVerilog项目实践之AHB-SRAMC(5)(AHB 重点回顾,要点提炼)
2022-07-07 13:22:00 【luoganttcc】
导读:作者有幸在中国电子信息领域的排头兵院校“电子科技大学”攻读研究生期间,接触到前沿的数字IC验证知识,旁听到诸如华为海思、清华紫光、联发科技等业界顶尖集成电路相关企业面授课程,对数字IC验证有了一些知识积累和学习心得。为帮助想入门前端IC验证的朋友,思忱一二后,特开此专栏,以期花最短的时间,走最少的弯路,学最多的IC验证技术知识。
文章目录
一、AMBA总线介绍
1.1、AMBA发展史
- AMBA1.0: ASB协议和APB协议;
- AMBA2.0: AHB协议、ASB协议和APB协议;
- AMBA3.0: 增加了AXI协议(了解);
- AMBA4.0: ACE协议(了解)
本文主要介绍AMBA2.0 (Advanced Microcontroller Bus Architecture,先进微控制总线结构),主要定义了三种总线:
- AHB:Advanced High-performance Bus(先进高性能总线) 高速高性能总线;支持2级流水操作(优势)
- APB:Advanced Peripheral Bus(先进外围总线) 低速总线、低功耗;接口简单
- ASB:Advanced System Bus(先进系统总线)
1.2、典型的AMBA系统
AHB总线的强大之处在于它可以将微控制器(CPU)、高带宽的片上RAM、高带宽的外部存储器接口、DMA总线master、各种拥有AHB接口的控制器等等,连接起来构成一个独立的完整的SOC系统。不仅如此,还可以通过AHB-APB桥来连接APB总线系统。
AHB可以称为一个完整独立的SOC芯片的骨架。
二、AHB总线(宏观构造)
2.1、AHB总线组成
完整的AHB总线由四个部分组成:
- ① AHB主设备Master; 发起一次读/写操作; 某一时刻只允许一个主设备使用总线
- ② AHB从设备Slave; 响应一次读/写操作; 通过地址映射来选择使用哪一个从设备;
- ③ AHB仲裁器Arbiter; 允许某一个主设备控制总线;
- ④ AHB译码器Decoder; 通过地址译码来决定选择哪一个从设备;
2.2、AHB总线互连示意图
2.3、AHB操作概述
1、有需要占用总线的Master向arbiter发出请求,arbiter授权给指定的master。任一时间周期只有一个master可以接入总线,对其指定的slave进行读写操作。
2、获得总线授权的master开始AHB传输,首先发出地址和控制信号,提供地址信息、传输方向、带宽和burst类型。
- 总线统一规划slave的地址,译码器根据地址和控制信号确定哪个slave与master进行数据通信。数据传输通过数据总线完成。为避免出现三态总线,AHB将读写总线分开,写数据总线用于从master到slave的数据传输,读数据总线用于从slave到master的数据传输。每笔传输包括一个地址周期(控制信号和地址信号在同一拍),一个或多个数据周期。地址周期不能被扩展,因此slave必须在一个周期内采样地址信号。数据周期可以通过HREADY信号扩展,但HREADY为低时给传输加入一个等待状态以使slave获得额外的时间来提供或采样数据,另外slave通过响应信号HRESP反映传输状态。
3、AHB 支持Burst数据传送(用的少),可以自动递增地址。递增地址方式分为:(Incrementing Burst )持续递增(INCR或者INCRx)与(Wrapping Burst)回环传送。
4、一般情况下master完成完整的burst传输,arbiter才会授权给其他的master接入总线,然而为避免过大的判决延迟,arbiter也可能打断burst传输。在这种情况下master必须再次接入总线以进行中断的burst剩余部分的传输。
2.4、AHB基本传输阶段
AHB 的传送模式包含二个阶段。第一阶段为地址的传递,另一阶段为数据的传递。
- 地址传输阶段; ( address phase): 一个时钟周期(控制信号同地址信号在同一个周期)
- 数据传输阶段;(data phase): 一个或多个时钟周期 (以 HREADY 信号控制周期数目).
三、AHB总线传输(时序)
3.1、AHB信号描述(重要)
信号名 | 含义 | 源 | IO | 描述 |
---|---|---|---|---|
HCLK | 总线时钟 | clock source | 各module输入 | 总线时钟,上升沿采样 |
HRESETn | 复位 | reset controller | 各module输入 | 总线复位,低电平有效 |
HADDR[31:0] | 地址总线 | Master | Decoder;Mux to Slave; Arbiter | 32位系统地址总线 |
HTRANS[1:0] | 传送类型 | Master | mux to slave | 当前传输类型 00-IDLE, 01BUSY, 10-NONSEQ, 11-SEQ |
HWRITE | 传送方向 | Master | mux to slave | 1为写,0为读 |
HSIZE[2:0] | 传送带宽 | Master | mux to slave | 每一个transfer传输的数据大小,以字节为单位,最高支持1024位 |
HBURST[2:0] | 批量传送 | Master | mux to slave | burst类型,支持4、8、16 burst,incrementing/wrapping |
HPROT[3:0] | 保护控制 | Master | mux to slave | 保护控制信号,需要slave带保护功能,一般不用 |
HWDATA[31:0] | 写数据总线 | Master | mux to slave | 写数据总线,Master到Slave |
HRDATA[31:0] | 读数据总线 | Slave | mux to master | 读数据总线,Slave到Master |
HREADY | 传送完成 | Slave | mux to master;arbiter | 控制HRDATA的读出数据周期;高:Slave输出传输结束;低:Slave需延长传输周期 |
HRESP[1:0] | 传送响应 | Slave | mux to master;arbiter | Slave发给Master的总线传输状态OKAY, ERROR, RETRY, SPLIT |
HSELx | 从选择 | Decoder | slave | slave选择信号 |
说明:在实际的传输过程中,一般作为AHB总线的Slave设备都有2根hready信号,一个为input类型(hready_in),另一个为output类型(hready_out)。在AHB总线协议中,如果Master设备发起读写操作的时候,Slave设备不能及时响应的话,由Slave设备把 hready_out 信号拉低来拖延Data Phaze周期。
但是在Pipeline操作的时候,本次操作Data phaze是下一次操作的Address phaze,所以作为Slave设备在响应Master设备的时候,必须先判断一下Master设备对上一次其它Slave设备的操作是否已经完成。如果完成,则响应主设备的操作;如果没有完成,则等待完成,然后才响应操作。 hready_in 就是Slave设备用来判断Master设备是否对其它Slave设备的操作已经完成的信号。
AHB仲裁信号(了解,有印象即可)
信号名 | 含义 | 源 | IO | 描述 |
---|---|---|---|---|
HBUSREQx | Bus请求 | Master | Master to Aribiter | Master 向 Aribiter 发出的总线使用请求信号 |
HLOCKx | 锁定传送 | Master | Master to Aribiter | 如果一个master希望自己在传输期间不希望丢掉总线,则需要向仲裁器发送这个锁定信号 |
HGRANTx | Bus 同意 | arbiter | Aribiter to Master | master 授权信号,当前bus master x的优先级最高。当HREADY和HGRANTx同时为高时,master获取系统总线的权利。如:同意master1可访问返回001;同意master2可访问返回010…(注意one-hot编码方式) |
HMASTER [3:0] | 主设备号 | arbiter | Aribiter to Master | 仲裁器为每一个master分配的ID,指出哪个主设备正在进行传输。如:master3选中返回3,master5选中返回5…(二进制编码) |
HMASTLOCK | 锁定传输 | arbiter | 具有split功能的slave | 表示当前的master正在执行Locked操作。这个信号和HMASTER有相同的时序 |
HSPLITx[15:0] | 分段请求 | slave | Slave to Aribiter | 从设备用这个信号告诉仲裁器哪个主设备运行重新尝试一次split传输,每一位对应一个主设备 |
3.2、基本AHB传输(重要)
3.2.1、零等待传输(no wait state transfer)
第一个周期的上升沿(Cycle 1)
- master 驱动地址和控制信号;
第二个周期的上升沿(Cycle 2)
- slave 采样地址和控制信号,并将HREADY拉高;
- 如果是写操作,master会在第二个周期的上升沿传输要写入的数据;
- 如果是读操作,slave会在HREADY信号拉高后将读取的数据写入总线;
- slave 采样地址和控制信号,并将HREADY拉高;
第三个周期的上升沿(Cycle 3)
- 如果是写操作,master获取HREADY高信号,表明slave已成功接收数据,操作成功;
- 如果是读操作,master获取HREADY高信号,表明此时的读数据有效并且接收下来,操作成功。需要注意,HREADY信号在数据有效期间必须为高,确保master的正确采样。
3.2.2、等待传输(transfers with wait states)
传送完成时间因等待而延迟,这是由于寻址到较慢的 Slave 单元所造成。当 HREADY 被 Slave 拉低时,会发生等待状态。需要延迟传送的周期时,就会在数据期间将HREADY 拉低,此时地址与数据都必须延伸。有等待状态的 AHB 传递,下图中可看到在数据模式时,时序必须多花二个周期的延迟等待时间(HREADY 为 0),Slave 才能正常的接收到 Master 写的数据或准备好 Master 欲读取的数据。
slave可以及时处理master请求,但也可能存在slave太慢不能立即处理的情况。这时需要让master稍微等一等,需要slave插入一些等待的状态。如上图所示,HREADY信号在第二和第三周期拉低,意在告诉master,slave不能立即处理,需要master等待2个周期。在这里需要注意两点:
- 1、如果是写操作,master需要在等待期间保持写数据不变,直到本次传输完成。
- 2、如果是读操作,slave不需要一开始就给出数据,仅当HREADY拉高后才给出有效数据。
3.2.3、多重传送(multiple transfer) - 流水操作Pipeline
一次完整的数据传送会有多个传送周期,如下图下一笔地址可与上一笔数据同时在总线上,时序图的说明如下:
扩展数据周期的一个负效应是必须延长相应的下一笔传输的地址周期。A0和A2为零等待传输,A1加入了一个等待周期,因此相应的A2地址周期要进行扩展。
- 第一个周期,master发起一个操作A0,并驱动地址和控制信号;
- 第二个周期,slave收到了来自总线的请求,将HREADY信号拉高;
- 第二个周期上升沿后,master发现有操作A1需要执行,并且检查到上一周期的HREADY为高,则发起第二个操作A1;
- 第三个周期,master获取HREADY信号为高,表示操作A0已经完成;
- 第三个周期上升沿后,master发现有操作A2需要执行,并且检查到上一周期的HREADY为高,则发起第三个操作A2;
- 第三个周期上升沿后,slave由于繁忙插入了一个等待状态,将HREADY拉低;
- 第四个周期,master获取HREADY信号为低,知道slave希望等待,于是master保持和上一拍一样的信号;
- 第四个周期,slave处理完了事务,将HREADY信号拉高,表示可以继续处理;
- 第五个周期,master获取HREADY信号为高,知道slave已经可以处理A1操作;
- 第五个周期上升沿后,A1操作完成;
- 第六个周期上升沿后,A2操作完成。
需要注意几点:
- HREADY在一定程度上表示了slave的pipeline能力,在AHB中是2个pipe,也就是总线上最多存在2个未处理完的transfer。
- 故,只有当总线上未完成的transfer少于2个时,master才能发起操作。
3.3、AHB控制信号
3.3.1、传送状态 HTRANS[1:0]
在 AHB 总线上,Master 的传送状态可由 HTRANS[1:0]来表示,这两位所代表的意义如下:
- 00:IDLE
- 01:BUSY
- 10:NOSEQ
- 11:SEQ
注:在实际使用中我们将NOSEQ和SEQ不作区分,都称为有效传输状态。更多介绍可参考前面的博客。
3.3.2、批量传送 HBURST[2:0]
实际工程中这个信号其实没啥作用。只是协议中规定了这个信号:命令与命令之间访问地址空间连续,就可以第一个命令推算下一个命令地址。
- eg:
BURST 2
;0x000C -> 0x000C 0x000D 0x000E 0x000F ; 0x0010 -> 0x0010 0x0011 0x0012 0x0013;作用:我发了一个命令且地址是0x000C,并告诉这个命令是BURST 2,代表我会连续发2个32位地址空间的访问。由于AHB协议中每个命令是把地址带上的, 故做slave的时候一般不看HBURST信号。
3.3.3、传送方向 HWRITE
HWRITE:表示传送方向(依读或写的动作来决定传送信号的方向)
- HWRITE 拉高时(写),M 必须对写入动作初始化,数据会由 M 放到 HWDATA[31:0] 总线上。
- HWRITE 拉低时(读),M 会对读取动作初始化,被寻址到的S会将数据放到 HRDATA[31:0] 总线上。
3.3.4、传送大小 HSIZE[2:0]
传送数据大小由 HSIZE[2:0] 信号控制,表示每次传送的字节数目。
- 000:8bits 100:128bits
- 001:16bits 101:256bits
- 010:32bits 110:512bits
- 011:64bits 111:1024bits
3.3.5、保护控制 HPROT[3:0]
HPROT[3:0] 为总线协议保护信号,用来定义存取的型态与特性,并非所有的 Master 都会传送出 HPROT[3:0],所以除非 Slave 有需要否则不会使用到 HPROT[3:0]信号。一般来讲该信号很少用到。
3.4、AHB响应信号
master发起一笔传输后,slave可以决定这笔传输的进程,而master不能取消已经发出的传输。slave通过 HREADY信号反映传输是否完成,通过 HRESP[1:0]反映传输的状态。
3.4.1、slave可以如下方式完成一笔传输
- 立即完成一笔传输;
- 延迟一个或几个周期完成传输;
- 传输失败返回error;
- 延迟传输,释放总线。
3.4.2、传输完成标志 HREADY
- HREADY为高时传输完成,
- HREADY为低时传输需要延迟
3.4.3、传输响应标志 HRESP[1:0]
- 00: OKAY—传输完成
- 01: ERROR—传输错误
- 10: RETRY—传输未完成,请求主设备重新开始一个传输,arbiter会继续使用通常的优先级
- 11: SPLIT—传输未完成,请求主设备分离一次传输,arbiter会调整优先级方案以便其他请求总线的主设备可以访问总线
3.4.4、地址译码
地址译码器用于为总线上每个slave提供选择信号HSELx,选择信号是通过组合逻辑对地址码译码产生的。只有当前的数据传输完成后(HREADY为高),slave才会采样地址和控制信号以及HSELx。
在一定条件下可能会出现这样的情况:产生HSELx信号而HREADY为低,在当前传输后slave会改变。
每个slave最小的地址空间为1KB,所有的master的burst传输上限也是1KB,如此设计保证了不会出现地址越界问题。当一个设计不会用到所有的地址空间时,可能出现访问到一个不存在的地址的情况,这就需要增加一个附加的默认slave(default slave)来为上面的情况提供一个响应。当SEQ或NONSEQ传输访问到一个不存在的地址,默认slave应该提供ERROR响应;当IDLE或BUSY传输访问到一个不存在的地址,默认slave会响应OKAY。地址译码器会带有实现默认slave的功能。
3.4.5、仲裁
仲裁机制保证了任意时刻只有一个master可以接入总线。arbiter决定哪个发出接入请求的master可以接入总线,这通过优先级算法实现。AHB规范并没有给出优先级算法,设计者需要根据具体的系统要求定义。一般情况下arbiter不会中断一个burst传输,将总线接入权让给其他master。当然未定义长度的burst传输是可以打断的,这要看优先级算法是如何规定的。如果一笔burst被打断,master再度获得接入权限时,会传递剩余的部分。如一笔长度为INCR8的传输在传递3beat后被打断,master再次获得接入授权后,会继续传输剩余的5 beat,剩余部分可以由一个SINGLE和一个INCR4组成,或者一个INCR。
- HBUSREQx:master向arbiter发出接入请求的信号。
- HLOCKx:指示是否要进行不可中断的传输,这一信号与HBUSREQx同时由master向arbiter发出。
- HGRANTx:arbiter产生指示master获得授权,当HGRANTx信号为高同时HREADY为高时,master可以向总线传输地址信号。
- HMASTER[3:0]:arbiter产生指示哪个master获得授权,这一信号用于地址控制多路来选择哪个master接入总线。
- HMASTERLOCK:arbiter产生指示当前传输是否为锁定序列传输。
- HSPLIT:供支持SPLIT传输使用。
四、AHB 设备接口
- AHB Master
- AHB Slave
- AHB Aribiter
- AHB Decoder
4.1、AHB 主设备接口(要会画)
部分信号释义:
- 来自Arbiter grant信号
HGRANTx
,表示获得总线使用权。Master有多个,M0那么HGRANTx为0;M1那么HGRANTx为1。 - Slave返回的HREADY,不管读或者写,为高表示当前命令处理完了,可以发送下一个命令了。同时还会伴随一个HRESP回来,如果是00表示OK,01表示ERROR,10表示RETRY,11表示SPLIT(给仲裁器用的,master本身不会关注)
- 接着是时钟信号和复位信号,复位信号中的n表示negative,表示低电平有效!
- 如果是读命令的话,Slave会从HRDATA返回读数据
- Master会返回HBUSREQx和HLOCKx两个信号给Arbiter
- 对于Slave主要会发送一个地址HADDR,地址会伴随着其他的控制信号。比较重要的控制信号就是HTRANS,00表示IDLE,01表示BUSY,10表示NOSEQ,11表示SEQ。SEQ和NOSEQ对于Slave来讲,在实际使用没太大区别。只是协议上规定了如果发的是一个BURST操作,那么第一个命令需要用NOSEQ来表示,其余命令用SEQ来表示;如果发的是SEQ,每个命令跟命令之间的地址没什么关系,那你就都是NOSEQ表示!
- HWRITE信号表示读还是写
- HSIZE信号指总线32位中,多少是有效的。000 8bits;001 16bits;010 32bits
- HBURST信号指发的命令前后地址之间有没有关系,000 single:前后地址之间没有关系; 001 INCR:前后地址根据HSIZE递增(1/2/4 byte,没有3 byte)。在AHB上用的不多,但是在AXI上用多,因为AXI上引入了一种叫
outstanding
的机制。AHB只是两级流水,HBURST没起到多大作用。对于Slave来讲不关注HBURST信号,一样能根据地址(不管前后地址有无关联)一个个处理命令。 - HPORT信号是做一个保护,data来自什么地方。没啥用,不用关注,重点关注:
HWRITE、HSIZE、HTRANS
这三个信号!
每一次的数据传送可分成四种型态,M 用 HTRANS[1:0] 信号来决定此次传送数据的型态,这四种传送型态分别是 IDLE、BUSY、NONSEQ 和 SEQ。
- 第一种数据传送型态为 IDLE 时,表示 M 这时候想要拥有总线的使用权,但并不需要作数据的传送,此时的 S 必须立即作出 OKAY 的响应;
- 第二种数据传送型态为 BUSY,当 M 进行一连续笔数据传递期间,若有些数据无法实时在下一个周期作传送,此时 M 会发出 BUSY 信号来延迟此笔数据的传送,S 这时候也会响应一个和 IDLE 传送型态一样的 OKAY 信号,同时忽略这笔数据的传递;
- 第三种数据传送型态为 NONSEQ,NONSEQ 的传送型态表示此次的传送为单笔数据传送或一连续笔数据传送中的第一笔,因此这种的传送型态,数据的地址和控制信号跟前一笔数据不具有关联性;
- 第四种种数据传送型态为 SEQ,在一连续笔数据的传递中,除了第一笔数据之外,其它的数据传递型态为 SEQ (第一笔为 NONSEQ),这种数据传递的控制信号和前一笔相同,而数据的地址则为前一笔数据地址加上由 HBURST[2:0]和 HSIZE[2:0] 信号所决定出的地址累加值。
4.2、AHB从设备接口(要会画)
部分信号释义:
- HSEL是从译码器Decoder来的,因为我们的总线是共享的,所以数据肯定会到每一个Slave,但是每一次只是访问其中一个Slave。因此会通过HADDR做一次译码,根据AHB Slave的地址范围,译码到你的话,会把对应的HSELx拉高。HSELx为高,命令才是访问到我的,同时看看HTRANS是不是有效(NOSEQ 或 SEQ,代表命令是有效的)。
仲裁器在决定出哪一个 M 拥有总线使用权之后,会将这个 M 数据地址、控制信号及欲写入 S 的数据选出,并且送至每一个 S,而所选出的数据地址会再经由 AHB 译码器产生唯一的 HSELx 使能信号来启动一 S 的数据传送。M 启动一个数据传送之后,被使能的 S(即 HSELx 为 1 的 S) 会发出 HREADY 信号来决定是否要延长当前数据的传送,若 S 响应 HREADY 为 0,表示此笔数据的传递必须被延迟,若 S 送出的HREADY 为 1,则表示 S 能够完成此笔数据的传递。
由图中可发现,S 除了用 HREADY 信号来告知此笔数据是否需要额外的延迟时间之外,还会透过HRESP[1:0]信号响应当前数据传送的情形,以下将说明四种 S 的响应型态:
- (重要)第一种响应为 OKAY,当一笔数据可完成传送时,S 会响应以 HREADY 为 1,且 HRESP[1:0]为 OKAY;另外 S 也会在必须入额外延迟时(HREADY 为0),但未决定出何种响应方式时,作出 OKAY 的响应;
- 第二种种的响应方式为 ERROR,这种响应会在 M 所要求传送的数据发生错误时发生,而这种错误常常出现在 M 试图去存取一有读或写的保护机制模块,如M 试图在只读存储器来写入数据。
- 第三种响应方式为 RETRY,此种响应会在 S 无法立即完成此笔数据传送,希望 M 重新传送此笔数据(了解)
- 第四种 S 响应模式为 SPLIT,这种方式的响应跟 RETRY 相似,都是发生在数据未能完成传递时。最大的不同是仲裁器在这两种信号响应之后,选择 M时所使用的权位算法不一样。如为 SPLIT 响应,仲裁器只允许其它 M 来对 S 作存取的动作,即使要求数据传送的 M 比当前 M 的优先权位来的低,也就是说仲裁器不会选择当前的 M 来进行数据传送;如果 S 响应的是 RETRY,那么仲裁器会用一般的权位算法去找出当前发出数据传递要求权位最高的 M 来进行数据传递。(了解)
4.3、AHB Arbiter(要会画)
部分信号释义:
- 上图仅仅以1个Master来示意AHB Aribiter,并不是说只能有1个Master。AHB总线默认可以挂载16个Master,当然我们也可以通过修改位宽达到挂载更多Master的目的!
- 更多的还是关注HUBUSREQ是哪个Master过来的,然后对应给仲裁输出HGRANT。相当于HBUSREQ和HGRANT相互之间进行握手,完成仲裁的控制。
4.4、AHB Decoder(要会画)
部分信号释义:
- Decoder的作用就是输入HADDR,然后根据Slave的空间划分,进行第一级译码操作。HSELx分别对应一个Slave。
- Decoder的RTL实现就是通过
if...else
或者case
五、总结
AHB总线无论是在实际项目开发中还是在IC岗位面试中都常打照面,可以算得上是一个基础且高频的知识点了,所以拿下AHB自然义不容辞。本文意在摒弃AHB协议中的繁文缛节,化繁为简,将作者认为的AHB重点知识进行了提炼和梳理,并为AHB四大组件和基本传输时序制作了通俗易懂的图解说明。希望通过本文,可以帮助读者一举攻克AHB。
后记:因本人水平有限,不足之处在所难免,敬请各位读者朋友批评指正。关于博主的《数字IC验证快速入门》系列文章,目前在CSDN连载更新中,欢迎订阅!
边栏推荐
- [Data Mining] Visual Pattern Mining: Hog Feature + cosinus Similarity / K - means Clustering
- 【深度学习】语义分割实验:Unet网络/MSRC2数据集
- A need to review all the knowledge, H5 form is blocked by the keyboard, event agent, event delegation
- 【數據挖掘】視覺模式挖掘:Hog特征+餘弦相似度/k-means聚類
- 大表delete删数据导致数据库异常解决
- Ctfshow, information collection: web8
- Pat grade a 1103 integer factorizatio
- 什么是pv和uv? pv、uv
- [data mining] visual pattern mining: hog feature + cosine similarity /k-means clustering
- 全日制研究生和非全日制研究生的区别!
猜你喜欢
【OBS】RTMPSockBuf_Fill, remote host closed connection.
Notes HCIA
Novel Slot Detection: A Benchmark for Discovering Unknown Slot Types in the Dialogue System
Ctfshow, information collection: web8
Do you know the relationship between the most important indicators of two strong wind control and the quality of the customer base
[server data recovery] a case of RAID data recovery of a brand StorageWorks server
CTFshow,信息搜集:web13
Ctfshow, information collection: web2
[deep learning] semantic segmentation experiment: UNET network /msrc2 dataset
IDA pro逆向工具寻找socket server的IP和port
随机推荐
leetcode 241. Different Ways to Add Parentheses 为运算表达式设计优先级(中等)
Novel Slot Detection: A Benchmark for Discovering Unknown Slot Types in the Dialogue System
Jetson AGX Orin CANFD 使用
Andriod --- JetPack :LiveData setValue 和 postValue 的区别
【Markdown语法高级】让你的博客更精彩(四:设置字体样式以及颜色对照表)
什么是pv和uv? pv、uv
CTFshow,信息搜集:web1
@Introduction and three usages of controlleradvice
Niuke real problem programming - day15
15、文本编辑工具VIM使用
Win10 or win11 taskbar, automatically hidden and transparent
PAT 甲级 1103 Integer Factorizatio
写一篇万字长文《CAS自旋锁》送杰伦的新专辑登顶热榜
MySQL bit类型解析
#HPDC智能基座人才发展峰会随笔
HW初级流量监控,到底该怎么做
众昂矿业:萤石继续引领新能源市场增长
Stm32cubemx, 68 sets of components, following 10 open source protocols
Discussion on CPU and chiplet Technology
Cocoscreator resource encryption and decryption