FPGA工程师面试资料【9】—— AXI总线相关

张开发
2026/5/4 17:34:43 15 分钟阅读
FPGA工程师面试资料【9】—— AXI总线相关
FPGA工程师面试资料【9】—— AXI总线相关AXI4总线结构AXI4握手机制写传输依赖读传输依赖AXI4写入传输事务AXI4读取传输事务AXI4协议中的信号全局信号写地址通道中的信号写数据通道中的信号写响应通道中的信号读地址通道中的信号读数据通道中的信号AXI的突发类型FIXEDINCRWARPAXI的窄传输AXI的非对齐传输AXI的QosAXI和AHB的对比AXI4总线结构AXI总线共有5个通道分别是read address channel、write address channel、read data channel、write data channel、write response channel如下图所示其中每一个AXI传输通道都是单方向的。每个地址中可发生多次数据传输此类型的传输事务称为突发 (burst)。需要注意的是AXI4-Full是支持突发的而AXI4-Lite是不支持突发的或者说AXI4-Lite的突发长度为1。AXI-stream无地址项允许无限制的数据突发传输规模AXI4握手机制发送端不能等待READY信号为高电平之后才将VALID信号置为高电平它必须在数据已经准备好之后立即将VALID信号置高接收端数据接收端可以等待VALID信号变为高电平之后再将READY信号置高也可以在VALID信号变为高电平之前将READY信号置高valid可以比ready先到达ready也可以比valid先到达ready和valid可以同时到达写传输依赖图中的单箭头表示箭头两端的信号没有依赖关系谁先拉高都行图中的双箭头表示箭头起始信号拉高之后箭头指向的信号才可以拉高。主机在发起AWVALID或者WVALID之前必须不等待从机发起AWREADY和WREADY即相互之间不依赖从机在发起AWREADY/WREADY之前可以等待也可以不等待主机发起AWVALID/WVALID,即从机发起READY不依赖主机VALID从机在发起BVALID之前必须等待AWVALID/AWREADY/WVALID/WREADY/WLAST都发起了因为BRESP要在最后一个写数据收到后才能发起从机在发起BVALID之前必须不等待BREADY发起即从机发起BVALID不依赖BREADY主机在发起BREADY之前可以等待也可以不等待从机BVALID发起即相互之间不依赖;wvalid和awvalid之间的关系无明确说明但应在发送数据之前发送地址读传输依赖主机在发起ARVALID之前必须不等待从机发起ARREADY即主机发起ARVALID不依赖ARREADY从机可以等待也可以不等待主机发起ARVALID后再发起ARREADY即从机发起ARREADY不依赖主机ARVALID从机在发起RVALID之前必须等待ARVALID和ARREADY发起因为要在正确接收到读地址后才能返回数据从机在发起RVALID之前不用等待主机发起RREADY即从机发起RVALID不依赖RREADY主机可以等待也可以不等待从机发起RVALID后再发起RREADY即主机发起RREADY不依赖从机RVALID。AXI4写入传输事务AXI写入传输事务需要在写地址通道、写数据通道以及写响应通道等3条读取信道上进行多次传输。如下图所示。首先写地址通道 (Write address channel) 从主设备发送地址到从设备以便设置地址和部分控制信号。always (posedge M_AXI_ACLK) begin if (M_AXI_ARESETN 0 init_txn_pulse 1b1 ) begin//复位或DDR初始化信号上升沿时置0 axi_awvalid 1b0; end else if (~axi_awvalid start_single_burst_write) begin axi_awvalid 1b1; end else if (M_AXI_AWREADY axi_awvalid) begin //ready和valid同时拉高时将valid置0 axi_awvalid 1b0; end end然后此地址的数据通过写数据通道 (Write data channel) 从主设备发射到从设备。assign wnext M_AXI_WREADY axi_wvalid; always (posedge M_AXI_ACLK) begin if (M_AXI_ARESETN 0 || init_txn_pulse 1b1 ) begin//复位或DDR初始化信号上升沿时置0 axi_wvalid 1b0; end else if (~axi_wvalid start_single_burst_write) begin axi_wvalid 1b1; end else if (wnext axi_wlast) //ready、valid以及last同时拉高时将valid置0 axi_wvalid 1b0; end最后写入响应通过写响应通道 (Write Response Channel) 从从设备发送到主设备以指示传输是否成功always (posedge M_AXI_ACLK) begin if (M_AXI_ARESETN 0 || init_txn_pulse 1b1 ) begin//复位或DDR初始化信号上升沿时置0 axi_bready 1b0; end else if (M_AXI_BVALID ~axi_bready) begin //valid为高且ready为低时将ready置1 axi_bready 1b1; end else if (axi_bready) begin //ready为高时则置0 axi_bready 1b0; end endAXI4读取传输事务AXI读传输事务分别在读地址通道和读数据通道上发生多次传输如下图所示。首先读地址通道 (Read Address Channel) 从主设备 (Master) 发送到从设备 (Slave)以便设置地址和部分控制信号。always (posedge M_AXI_ACLK) begin if (M_AXI_ARESETN 0 || init_txn_pulse 1b1 ) begin//复位或DDR初始化信号上升沿时置0 axi_arvalid 1b0; end else if (~axi_arvalid start_single_burst_read) begin axi_arvalid 1b1; end else if (M_AXI_ARREADY axi_arvalid) begin //ready和valid同时拉高时将valid置0 axi_arvalid 1b0; end end然后此地址的数据通过读数据通道 (Read data channel) 从从设备发送到主设备。always (posedge M_AXI_ACLK) begin if(M_AXI_ARESETN 0 || init_txn_pulse 1b1 ) begin//复位或DDR初始化信号上升沿时置0 axi_rready 1b0; end else if (M_AXI_RVALID) begin if (M_AXI_RLAST axi_rready) begin axi_rready 1b0; //若valid、ready、last同时为高则ready置0 end else begin axi_rready 1b1; //若valid为高则为高 end end endAXI4协议中的信号全局信号信号源描述ACLKClock source全局时钟信号ARESETnReset source全局复位信号低电平有效写地址通道中的信号信号源描述AWID[3:0]主机写地址ID这个信号是写地址信号组的ID tag。AWADDR[31:0]主机写地址AWLEN[3:0]主机突发传输长度此长度决定突发式写所传输的数据的个数即一次突发中传输的数据数量为AWLEN 1。AWSIZE[2:0]主机突发传输宽度每周期传输的数据字节数量。即DATA_WIDTH/8 2AWSIZE。 也就是数据位宽的字节数,TDI中AWSIZE4因此其DATA_WIDTH128AWBURST[1:0]主机突发类型共FIXEDINCRWRAP三种下面详细介绍。AWLOCK[1:0]主机总线锁信号normal,exclusive,locked。AWCACHE[3:0]主机Cache类型。这信号指明事务的bufferable、cacheable、write-through、write-back、allocate attributes信息。AWVALID主机写地址有效。AWREADY从机该信号用来指明从机已经准备好接受地址和控制信息。写数据通道中的信号信号源描述WID[3:0]主机写ID tagWID的值必须与AWID的值匹配。AIX4中无该信号WDATA[31:0]主机写数据WSTRB[3:0]主机写数据有效的字节线用来表明哪8bits数据是有效的。WLAST主机突发写传输的最后一个数据WVALID主机写数据有效信号WREADY从机写就绪信号代表从机是否已经准备好接收数据了。写响应通道中的信号信号源描述BID[3:0]从机响应ID这个数值必须与AWID的数值匹配。BRESP[1:0]从机写响应。这个信号指明写事务的状态。可能有的响应OKAY(正常访问成功)、EXOKAY(专属访问成功)、SLVERR(从设备错误)、DECERR(解码器错误)。BVALID从机写响应有效BREADY主机主机接受响应就绪信号 。该信号表示主机是否能够接受响应信息。读地址通道中的信号信号源描述ARID[3:0]主机响应ID这个数值必须与AWID的数值匹配。ARADDR[31:0]主机读地址。ARLEN[3:0]主机突发传输长度此长度决定突发式写所传输的数据的个数即一次突发中传输的数据数量为AWLEN1。ARSIZE[2:0]主机突发传输宽度每周期传输的数据字节数量。即DATA_WIDTH/8 2AWSIZE。ARBURST[1:0]主机突发式读类型。共FIXEDINCRWRAP三种下面详细介绍。ARLOCK[1:0]主机总线锁信号normal,exclusive,locked。ARCACHE[3:0]主机Cache类型。这信号指明事务的bufferable、cacheable、write-through、write-back、allocate attributes信息。ARPROT[2:0]主机保护类型。ARVALID主机读地址有效。ARREADY从机从机接收读地址就绪。指明从机已经准备好接收读地址了。读数据通道中的信号信号源描述RID[3:0]从机读ID tag。RID的数值必须与ARID的数值匹配。RDATA[31:0]从机读数据。RRESP[1:0]从机读响应信号。这个信号指明读传输的状态OKAY、EXOKAY、SLVERR、DECERR。RLAST从机读事务传送的最后一个数据。RVALID从机读数据有效。RREADY主机主机接收读数据信号是否就绪。AXI的突发类型FIXEDAxBURST[1:0]2b00地址固定的突发固定式突发读写是指地址是固定的每一次传输的地址都不变。这样的突发式读写是重复的对一个相同的位置进行存取。例如FIFO。INCRAxBURST[1:0]2b01地址递增的突发增值式突发读写是指每一次读写的地址都比上一次的地址增加一个固定的值2AWSIZE。增量值取决于传输的大小。WARPAxBURST[1:0]2b10回环突发类似于增量突发突发中每个传输的地址按增量递增的。通常用于从memory中读取cache line。但是在回环突发中当达到较大的地址边界时地址会卷回到较小的地址。回环边界是突发中每个传输的大小乘以突发中总共传输的次数。回环突发需要遵循两个限制起始地址必须对齐到传输大小突发长度必须是2、4、8或16地址下界计算方式下界 I N T ( S t r a t _ A d d r N U M _ B y t e s × B u r s t _ L e n g t h ) × ( N U M _ B y t e s × B u r s t _ L e n g t h ) 下界 INT(\frac{{Strat\_Addr}}{{NUM\_Bytes \times Burst\_Length}}) \times (NUM\_Bytes \times Burst\_Length)下界INT(NUM_Bytes×Burst_LengthStrat_Addr​)×(NUM_Bytes×Burst_Length)地址上界计算方式上界 下界 ( N U M _ B y t e s × B u r s t _ L e n g t h ) 上界 下界 (NUM\_Bytes \times Burst\_Length)上界下界(NUM_Bytes×Burst_Length)若AxADDR 0x34,AxLEN 7,AxSIZE 2,AxBURST 3则其计算示例如下起始地址start_addr0x34Burst_Length8Num_Bytes4因此地址下界为INT(0x34/(4x8))x(4x8)0x20地址上界为0x20 (4 x 8)0x40Address_0 0x34Address_1 Address_0 Number_Bytes 0x34 4 0x38Address_2 Address_1 Number_Bytes 0x38 4 0x3CAddress_3 Address_2 Number_Bytes 0x3C 4 0x40 因为Address_3 0x40,达到上边界因此Address_3 0x20Address_4 Address_3 Number_Bytes 0x20 4 0x24Address_5 Address_4 Number_Bytes 0x24 4 0x28Address_6 Address_5 Number_Bytes 0x28 4 0x2CAddress_7 Address_6 Number_Bytes 0x2C 4 0x30因此地址为0x34,0x38,0x3C,0x20,0x24,0x28,0x2C,0x30AXI的窄传输窄传输中通过主机给出字节有效信号WSTRB来调整有效数据的字节位置AXI的非对齐传输首先需要理解地址的对齐传输在ARM的32bit的地址总线中其最低两位[1:0]0所以从第三位开始地址也就是4的倍数如0x000x040x08等都是对齐的。AHB总线只支持对齐传输而AXI协议支持地址的非对齐传输。在AXI传输中只需要在传输时给出首地址其后的传输地址都是由首地址和突发大小、突发类型决定的。在第一笔数据的传输时如果首地址不是对齐的那么主设备会在第一笔传输中对数据进行填充直到首次传输填充至地址对齐然后再用WSTRB信号将填充的数据标记为无效。这样之后的传输地址也就都是对齐的了。AXI的QosAWQOS发送到每个写事务的写地址通道ARQOS发送到每个读事务的读地址通道QoS信号实际上没有明确的定义但协议中推荐大家使用QoS信号来展示transaction的优先级我们在讨论AXI协议的过程中常常用Transaction ID相同顺序执行Transaction ID不同乱序执行来体现AXI协议的执行顺序增加的QoS信号可以在这句话的基础上进一步指导Transaction的执行顺序通常情况下高优先级,QOS信号数值也会大一些。QoS可以用来解决访问冲突问题当同时访问先仲裁得到优先级高的Slave可以根据QoS来reorder或者优先考虑先回应哪笔传输AXI和AHB的对比AHB具有1个地址通道1个读取数据通道1个写入数据通道AXI具有1个读地址通道1个写地址通道1个读数据通道1个写数据通道1个写响应通道它总共有5个并行通道 AHB不支持outstandingAXI支持outstandingAHB中如果时序无法满足无法在协议中打拍AXI中可以在这5个通道中的任何一个通道的路径中打拍这有助于实现更高的时钟频率AHB的master和slave之间的连线较少由于AXI有5个并行通道它有更多的连线这可能会导致后端布线拥塞AHB不支持side-bandAXI支持side-band使用AXI中AxUSER域AHB不支持QoSAXI支持QoSAHB的burst长度是固定的(1/2/4/8,除了INCR类型)只要它不跨越4K边界;AXI中的burst长度可以是1~16中的 任意值AXI4中的incr类型可以支持1~256AHB的INCR类型可以有任何长度不需要在burst传输开始时指定AXI的INCR类型的传输需要在burst传输的开始时指定AxLENAHB是保序收到响应和发起读写的顺序相同的因为在AHB协议中一次只有1个读写事务请求在执行 AXI支持多个outstanding不同AxID请求之间可能乱序但是相同AxID的请求仍然是保序的AHB相比AXI功耗较低AHB不支持Write StrobeAXI支持Write Strobe写入选通AHB支持Lock传输AXI3支持Lock传输AXI4不支持Lock传输AHB不支持Exclusive传输AXI支持Exclusive传输 ~ 本节完结 ~ 关注以下公众号了解更多

更多文章