FIFO Generate IP核使用——AXI接口信号详解

在AXI协议中,提到的s_axis_treadys_axi_awreadys_axi_wreadym_axi_breadys_axi_arreadym_axi_rready是AXI接口中用于指示通道就绪状态的信号。这些信号的值通常表示主设备(Master)或从设备(Slave)是否准备好进行特定的数据传输。

当这些信号在复位窗口之外被设置为1时,表示相应的通道已准备好进行数据传输。在复位窗口内,这些信号的状态通常是不确定的,因为它们可能会受到复位操作的影响。为了避免意外行为,建议在复位窗口期间不要进行任何数据传输或事务处理。

复位窗口是一个特定的时间段,用于将AXI接口和相关硬件组件重置到初始状态。在这个时间段内,AXI接口的状态可能会发生变化,并且可能无法正确响应外部请求。因此,在复位窗口期间进行数据传输可能会导致数据丢失、错误或不可预测的行为。

1 AXI FIFO全局接口信号

s_aresetn信号在AXI协议中是一个重要的全局复位信号,用于触发整个核心逻辑的复位操作。这个信号是低电平有效的异步输入,在核心内部使用之前会进行同步处理。

表1 AXI FIFO的通用接口信号
名称方向描述
映射到FIFO时钟和复位输入上的全局时钟和复位信号
m_aclkInputMaster接口的全局时钟:AXI FIFO的Master接口上的所有信号都同步到该m_aclk
s_aclkInputSlave接口的全局时钟:所有信号都在该时钟的上升沿被采样
s_aresetn
Input全局复位,低电平有效
时钟使能与FIFO的写使能(wr_en)和读使能(rd_en)输入信号相配合,用于控制FIFO的读写操作是否在当前时钟周期内有效
s_aclk_en
Inputwr_en为高电平时,Slave的时钟使能信号被激活,从而允许FIFO在当前时钟周期内执行写入操作。
m_aclk_en
Inputrd_en信号为高电平时,它表示FIFO当前可以进行读取操作。

2 AXI4-Stream FIFO 接口信号

表2 AXI4-Stream FIFO接口信号
名称方向描述
AXI4-Stream接口:FIFO写接口的握手信号
s_axis_tvalid
Input

TVALID:由主设备(通常是数据的发送方)驱动,用于指示Stream上的数据是否有效。当主设备想要发送数据时,它会将TVALID置为高电平,当TVALID和TREADY信号均为高电平时,表示Stream上有有效的数据需要传输。

s_axis_tready
Output

TREADY:由从设备(通常是数据的接收方)驱动,用于指示从设备是否准备好接收数据。当从设备准备好接收数据时,它会将TREADY信号置为高电平。

AXI4-Stream接口:被映射到FIFO的输入数据输入上的信息信号
s_axis_tdata[m-1:0]
InputTDATA:是AXI4-Stream接口的主要负载,用于将数据从源传输到目标。TDATA的宽度(即数据负载的宽度)是一个整数个字节数。
s_axis_tstrb[m/8-1:0]
Input

TSTRB是AXI4-Stream接口中的字节修饰符,用于描述TDATA中相关字节的内容是作为数据字节还是位置字节被处理。对于64位的数据,TSTRB的每个位与TDATA中的每个字节相对应。具体来说,TSTRB的第0位(TSTRB[0])对应于DATA的最低有效字节(DATA[7:0]),而TSTRB的第7位(TSTRB[7])对应于DATA的最高有效字节(DATA[63:56])。

s_axis_tlast
InputTLAST在AXI4-Stream接口中确实用于指示数据包(packet)的边界。当TLAST信号为高时,它表示当前传输的TDATA数据是数据包中的最后一个数据。
s_axis_tid[m:0]
InputTID(Transmission ID或DataStream ID)是AXI4-Stream接口中的一个信号,用于指示不同的数据流。当通过AXI4-Stream接口传输数据时,可能会涉及到多个数据流的同时传输。每个数据流都可能有自己的源、目的、传输特性和数据处理要求。在这种情况下,使用TID信号可以为每个数据流分配一个唯一的标识符,以便在接收端能够正确地区分和处理不同的数据流。
s_axis_tdest[m:0]
Input

TDEST(Transmission Destination)为数据流提供了路由信息,用于指示数据流的目标地址或目的地。

s_axis_tuser[m:0]
Input

TUSER信号为用户提供了一个额外的通道,用于在数据传输过程中传递一些额外的、非主要的数据或信息。这些信息可能包括数据的元数据、控制信号、状态信息或其他任何用户自定义的内容。通过使用TUSER信号,用户可以在不干扰主要数据流的情况下,传输这些额外的信息。

AXI4-Stream接口:FIFO读接口的握手信号
m_axis_tvalid
OutputTVALID:由主设备(通常是数据的发送方)驱动,用于指示Stream上的数据是否有效。当主设备想要发送数据时,它会将TVALID置为高电平,当TVALID和TREADY信号均为高电平时,表示Stream上有有效的数据需要传输。
m_axis_tready
InputTREADY:由从设备(通常是数据的接收方)驱动,用于指示从设备是否准备好接收数据。当从设备准备好接收数据时,它会将TREADY信号置为高电平。
AXI4-Stream接口:来自FIFO输出数据总线的信息信号
m_axis_tdata[m-1:0]
OutputTDATA:是AXI4-Stream接口的主要负载,用于将数据从源传输到目标。TDATA的宽度(即数据负载的宽度)是一个整数个字节数。
m_axis_tstrb[m/8-1:0]
OutputTSTRB是AXI4-Stream接口中的字节修饰符,用于描述TDATA中相关字节的内容是作为数据字节还是位置字节被处理。对于64位的数据,TSTRB的每个位与TDATA中的每个字节相对应。具体来说,TSTRB的第0位(TSTRB[0])对应于DATA的最低有效字节(DATA[7:0]),而TSTRB的第7位(TSTRB[7])对应于DATA的最高有效字节(DATA[63:56])。
m_axis_tkeep[m/8-1:0]
Output

TKEEP: 通常用于数据流中,作为字节有效性指示符,是一个与TDATA相关联的信号,用于指示TDATA中的哪些字节是有效的,哪些字节是无效的(或可忽略的)。对于一个64位的TDATA来说,TKEEP是一个8位的信号,其中每一位对应于TDATA中的一个字节。如果TKEEP的某一位是1,那么TDATA中对应的字节就是有效的;如果某一位是0,那么对应的字节就是无效的(或称为“空字节”),可以在数据处理过程中被忽略或移除。

  • KEEP[0] = 1b:这表示DATA[7:0](即TDATA的最低有效字节)是有效的,不是空字节。
  • KEEP[7] = 0b:这表示DATA[63:56](即TDATA的最高有效字节)是无效的,是空字节。在接收端,这个字节可以被忽略或替换为一个默认值(取决于具体的协议或应用)。
m_axis_tlast
OutputTLAST在AXI4-Stream接口中确实用于指示数据包(packet)的边界。当TLAST信号为高时,它表示当前传输的TDATA数据是数据包中的最后一个数据。
m_axis_tid[m:0]
OutputTID(Transmission ID或DataStream ID)是AXI4-Stream接口中的一个信号,用于指示不同的数据流。具体来说,当通过AXI4-Stream接口传输数据时,可能会涉及到多个数据流的同时传输。每个数据流都可能有自己的源、目的、传输特性和数据处理要求。在这种情况下,使用TID信号可以为每个数据流分配一个唯一的标识符,以便在接收端能够正确地区分和处理不同的数据流。
m_axis_tdest[m:0]
OutputTDEST(Transmission Destination)为数据流提供了路由信息,用于指示数据流的目标地址或目的地。
m_axis_tuser[m:0]
OutputTUSER信号为用户提供了一个额外的通道,用于在数据传输过程中传递一些额外的、非主要的数据或信息。这些信息可能包括数据的元数据、控制信号、状态信息或其他任何用户自定义的内容。通过使用TUSER信号,用户可以在不干扰主要数据流的情况下,传输这些额外的信息。
AXI4-Stream FIFO:可选的边带信号
axis_prog_full_thresh[ d :0]
Input用于输入可编程满(PROG_FULL)标志的断言和去断言的阈值。这个阈值可以在复位期间在电路中动态设置。      d = log2(FIFO depth)-1 
axis_prog_empty_thresh[ d :0]
Input

用于输入可编程空(prog_empty)标志的断言(assertion)和去断言(de-assertion)的阈值。这个阈值允许你在FIFO几乎为空但还未完全为空时提前得知这一状态,从而可以采取相应的措施,如启动数据填充过程或避免从FIFO中读取无效数据。

d = log2(FIFO depth) - 1

axis_injectsbiterr
Input该功能用于模拟单个位错误的情况,以验证ECC纠正错误的能力。
axis_injectdbiterr
Input该功能用于模拟一个双位错误(即数据中的两个位同时出错)的情况,以验证ECC模块在面临这种错误时的响应。
axis_sbiterr
Output表示ECC(Error Correcting Code,错误纠正码)解码器检测到了一个单个位错误,并成功地将它修复了。
axis_dbiterr
Output表示ECC解码器检测到了一个双位错误,这意味着FIFO IP核中的数据已经损坏。
axis_overflow
Output

表示在前一个时钟周期内的一个写请求被拒绝,因为FIFO已满。当FIFO达到其最大容量时,任何尝试向其中写入更多数据的操作都将被阻止,并且会产生一个Overflow信号来指示这一事件。

另外,FIFO中已有的数据并不会因为溢出而丢失或损坏。

axis_wr_data_count[ d :0]
Output

用于指示已经写入FIFO中的字的数量。这个计数值保证永远不会低估FIFO中的字数量,以确保您永远不会溢出FIFO。然而,有一个例外情况需要注意。

当在写时钟的上升沿发生写操作时,该写操作只有在下一个时钟上升沿时才会反映在wr_data_count上。这是因为FIFO和wr_data_count的更新可能是异步的,或者FIFO需要一些时间来稳定内部状态。

D = log2(FIFO depth) + 1 

axis_underflow
Output

表示在前一个时钟周期内的一个读请求被拒绝,因为FIFO是空的。当FIFO中没有数据时,任何尝试从中读取数据的操作都将被阻止,并且会产生一个Underflow信号来指示这一事件。另外,虽然读操作被拒绝了,但FIFO本身并不会因为尝试从空FIFO中读取数据而损坏或进入错误状态。

axis_rd_data_count[ d :0]
Output

是FIFO的一个状态或标志,用于指示当前FIFO中可用于读取的数据字的数量,这个计数保证永远不会超过FIFO中实际可读取的数据字数量。这意味着,如果你根据这个计数来读取数据,你永远不会尝试从FIFO中读取超过其实际包含的数据,从而避免了“下溢”(underflow)的风险。下溢是指试图从一个空的FIFO中读取数据。

从FIFO中读取数据时,Read Data Count会立即减少以反映这一变化。但有一个例外情况:当读操作发生在读时钟的上升沿时,该读操作的影响不会立即反映在rd_data_count上。相反,它会在下一个读时钟上升沿时反映在rd_data_count中。

D = log 2 (FIFO depth)+1
axis_data_count[ d :0]
Output

用于指示当前FIFO中存储的数据字的数量。这个值通常随着数据被写入FIFO而增加,随着数据从FIFO中被读取而减少。

D = log 2 (FIFO depth)+1
axis_prog_full
Output允许用户设置一个可编程的阈值。当FIFO中存储的数据字数量达到或超过这个阈值时,Programmable Full 信号会被断言(assert),通常表示为高电平或逻辑真(true)。当FIFO中的数据字数量少于这个阈值时,Programmable Full 信号会被去断言(deassert),通常表示为低电平或逻辑假(false)。:
axis_prog_empty
Output

允许用户设置一个可编程的阈值,当FIFO中存储的数据字数量达到或低于可编程阈值时,Programmable Empty 信号会被断言(assert),通常表示为高电平或逻辑真(true)。当FIFO中的数据字数量超过这个可编程阈值时,Programmable Empty 信号会被去断言(deassert),通常表示为低电平或逻辑假(false)。

3 AXI3/AXI4 FIFO接口信号

在AXI4和AXI3接口中,FIFO通常不是直接作为接口的一部分来定义的,因为AXI协议本身并不直接指定FIFO的实现细节。然而,AXI协议定义了写地址通道(Write Address Channel)和其他通道(如写数据通道、写响应通道、读地址通道和读数据通道)的信号。

下表3详细描述了AXI4/AXI3写地址通道(Write Address Channel)中包含的一些信号。请注意,这些信号的具体实现可能因AXI的版本、IP核的实现以及硬件平台的差异而有所不同。

表3  AXI4/AXI3写地址通道FIFO接口信号
名称方向描述
AXI4/AXI3接口写地址通道:被映射到FIFO输入数据总线的信息信号
s_axi_awid[m:0]
Input
用于标识一组写地址信号的一个识别标签。AWID的主要作用是允许主设备同时启动多个写事务,并且每个事务都有一个唯一的标识符。这样,从设备就可以使用AWID来跟踪和响应每个独立的写事务。当从设备完成一个写事务后,它会通过写响应通道发送一个包含相应AWID的响应,以告知主设备该事务已完成。
s_axi_awaddr[m:0]
Input

在写突发(Burst)传输事务中提供了第一个传输的地址。这个地址是突发传输的起始点,而与之相关的控制信号则用于确定突发中剩余传输的地址。

s_axi_awlen[7:0]
Input

突发长度(Burst Length)指定了一个突发传输中确切的传输次数。这个信息用于确定与给定地址相关联的数据传输数量。

突发长度可以是固定值,也可以是动态确定的。在某些情况下,主设备可能知道它需要发送的确切数据量,并可以在发起突发时指定一个固定的突发长度。在其他情况下,主设备可能只知道一个大致的数据量范围,并可以设置一个较大的突发长度,让从设备(如内存控制器)在实际传输过程中动态地调整突发长度。

s_axi_awsize[2:0]
Input

Burst Size(突发大小)指的是突发传输中每次数据传输的字节数。这个参数用于描述每个传输操作中所处理的数据量。

Byte lane strobes(字节通道选通)用于指示在突发传输中应该更新哪些字节通道。这些选通信号可以确保在数据传输过程中只更新需要的字节通道,从而提高数据传输的效率和准确性。

s_axi_awburst[1:0]
Input

Burst Type(突发类型)与突发大小一起,详细说明了在突发传输中每个传输的地址是如何计算的。

s_axi_awlock[1:0]
Input

Lock Type提供了关于传输原子特性的额外信息,用于指示当前传输的锁定类型。锁定类型决定了当前传输的原子性,即该传输是否被视为一个不可分割的单元。

s_axi_awcache[3:0]
Input

Cache Type用于指示事务的缓冲性、可缓存性、写直达、写回和分配等属性。

s_axi_awprot[2:0]
Input

Protection Type用于指示事务的正常、特权或安全保护级别,以及事务是数据访问还是指令访问。

s_axi_awqos[3:0]
Input

Quality of Service (QoS)信息是在每个写事务的写地址通道上发送的。

QoS在计算机网络中通常用于评估服务方满足客户服务需求的能力,而在AXI协议中,它可能具有特定的含义和用途。在写事务中,QoS信息可能被用来指示该事务的优先级、重要性或其他与服务质量相关的属性。这些信息对于从设备(如内存控制器)来说可能是有用的,因为它可以根据QoS信息来优化或调整其处理该事务的方式。

s_axi_awregion[3:0]
Input

Region Identifier(区域标识符)是在每个写事务的写地址通道上发送的。

Region Identifier用于标识或分类写事务的目标内存区域或资源。这种标识符允许从设备(如内存控制器或其他硬件组件)根据事务的目标区域来应用特定的策略或处理逻辑。

s_axi_awuser[m:0]
InputWrite Address Channel User 是写地址通道中的一个可选字段,它提供了关于写事务的用户定义或特定应用信息。这个字段允许主设备(通常是处理器或DMA控制器)向从设备(如内存控制器或其他硬件加速器)传递额外的信息,这些信息可能对于从设备如何处理写事务是有用的。
AXI4/AXI3接口写地址通道:FIFO写接口的握手信号
s_axi_awvalid
Input

用于指示当前通道上的写地址和控制信息是否有效。当这个信号为1时,表示地址和控制信息是可用的;当这个信号为0时,表示地址和控制信息不可用。

在AXI协议中,每个独立的通道(包括读地址通道、读数据通道、写地址通道、写数据通道和写响应通道)都由一组信息信号、VALID信号和READY信号组成,用于提供双向的握手机制。

在Write Address Valid信号为1的期间,地址和控制信息必须保持稳定,直到从设备通过其READY信号(awready)进行确认,即awready信号变为高电平。这个握手过程确保了地址和控制信息的正确传输和同步。

s_axi_awready
Output

用于指示从设备(Slave)是否准备好接收主设备(Master)发送的写地址和相关的控制信号。

  • 当Write Address Ready信号为1时,表示从设备已经准备好并可以接收写地址和控制信号。此时,主设备可以安全地将地址和控制信息发送到从设备。
  • 当Write Address Ready信号为0时,表示从设备尚未准备好接收写地址和控制信号。主设备需要等待该信号变为1后再进行发送。
AXI4/AXI3接口写地址通道:从FIFO输出数据总线派生的信息信号
m_axi_awid[m:0]
Output

Write Address ID是用于标识写地址信号组的识别标签。Write Address ID信号在写地址通道中使用,用于标识与该写地址相关的传输任务。当存在多个并发的写事务时,每个事务都会被分配一个唯一的ID(包括写地址ID、写数据ID、读地址ID和读数据ID),以确保从设备能够正确地将响应与请求进行匹配。

m_axi_awaddr[m:0]
Output

Write Address用于提供写突发事务中第一个数据传输的地址。与写地址总线相关的控制信号则用于确定突发中剩余传输的地址。

m_axi_awlen[7:0]
Output

Burst Length指定了一个突发传输中确切的传输次数。这个信息用于确定与给定地址相关联的数据传输数量。

m_axi_awsize[2:0]
Output

Burst Size指的是突发传输中每次数据传输的字节数。这个参数用于描述每个传输操作中所处理的数据量。

Byte lane strobes用于指示在突发传输中应该更新哪些字节通道。这些选通信号可以确保在数据传输过程中只更新需要的字节通道,从而提高数据传输的效率和准确性。

m_axi_awburst[1:0]
OutputBurst Type(突发类型)与突发大小一起,详细说明了在突发传输中每个传输的地址是如何计算的。
m_axi_awlock[1:0]
OutputLock Type提供了关于传输原子特性的额外信息,用于指示当前传输的锁定类型。锁定类型决定了当前传输的原子性,即该传输是否被视为一个不可分割的单元。
m_axi_awcache[3:0]
OutputCache Type用于指示事务的缓冲性、可缓存性、写直达、写回和分配等属性。
m_axi_awprot[2:0]
OutputProtection Type用于指示事务的正常、特权或安全保护级别,以及事务是数据访问还是指令访问。
m_axi_awqos[3:0]
Output

Quality of Service (QoS)信息是在每个写事务的写地址通道上发送的。

QoS在计算机网络中通常用于评估服务方满足客户服务需求的能力,而在AXI协议中,它可能具有特定的含义和用途。在写事务中,QoS信息可能被用来指示该事务的优先级、重要性或其他与服务质量相关的属性。这些信息对于从设备(如内存控制器)来说可能是有用的,因为它可以根据QoS信息来优化或调整其处理该事务的方式。

m_axi_awregion[3:0]
Output

Region Identifier(区域标识符)是在每个写事务的写地址通道上发送的。

Region Identifier用于标识或分类写事务的目标内存区域或资源。这种标识符允许从设备(如内存控制器或其他硬件组件)根据事务的目标区域来应用特定的策略或处理逻辑。

m_axi_awuser[m:0]
OutputWrite Address Channel User 是写地址通道中的一个可选字段,它提供了关于写事务的用户定义或特定应用信息。这个字段允许主设备(通常是处理器或DMA控制器)向从设备(如内存控制器或其他硬件加速器)传递额外的信息,这些信息可能对于从设备如何处理写事务是有用的。
AXI4/AXI3 接口写地址通道:FIFO读接口的握手信号
m_axi_awvalid
Output

用于指示当前通道上的写地址和控制信息是否有效。当这个信号为1时,表示地址和控制信息是可用的;当这个信号为0时,表示地址和控制信息不可用。

在AXI协议中,每个独立的通道(包括读地址通道、读数据通道、写地址通道、写数据通道和写响应通道)都由一组信息信号、VALID信号和READY信号组成,用于提供双向的握手机制。

在Write Address Valid信号为1的期间,地址和控制信息必须保持稳定,直到从设备通过其READY信号(awready)进行确认,即awready信号变为高电平。这个握手过程确保了地址和控制信息的正确传输和同步。

m_axi_awready
Input

用于指示从设备(Slave)是否准备好接收主设备(Master)发送的写地址和相关的控制信号。

  • 当Write Address Ready信号为1时,表示从设备已经准备好并可以接收写地址和控制信号。此时,主设备可以安全地将地址和控制信息发送到从设备。
  • 当Write Address Ready信号为0时,表示从设备尚未准备好接收写地址和控制信号。主设备需要等待该信号变为1后再进行发送。
AXI4/AXI3 FIFO写地址通道:可选的边带信号
axi_aw_prog_full_thresh[ d :0]
Input
Programmable Full Threshold用于输入可编程满(PROG_FULL)标志的断言(assertion)和去断言(de-assertion)的阈值。这个阈值可以在复位期间在电路中动态设置。                    d = log2(FIFO depth)-1 
axi_w_prog_empty_thresh[ d :0]
Input

Programmable Empty Threshold用于输入可编程空标志的断言和去断言的阈值。这个阈值允许你在FIFO几乎为空但还未完全为空时提前得知这一状态,从而可以采取相应的措施,如启动数据填充过程或避免从FIFO中读取无效数据。

d = log2(FIFO depth) - 1

axi_w_injectsbiterr
Input该功能用于模拟单个位错误的情况,以验证ECC纠正错误的能力。
axi_w_injectdbiterr
Input该功能用于模拟一个双位错误(即数据中的两个位同时出错)的情况,以验证ECC模块在面临这种错误时的响应。
axi_w_sbiterr
Output表示ECC(Error Correcting Code,错误纠正码)解码器检测到了一个单个位错误,并成功地将它修复了。
axi_w_dbiterr
Output表示ECC解码器检测到了一个双位错误,这意味着FIFO IP核中的数据已经损坏。
axi_w_overflow
Output

表示在前一个时钟周期内的一个写请求被拒绝,因为FIFO已满。当FIFO达到其最大容量时,任何尝试向其中写入更多数据的操作都将被阻止,并且会产生一个Overflow信号来指示这一事件。

另外,FIFO中已有的数据并不会因为溢出而丢失或损坏。

axi_w_wr_data_count[ d :0]
Output

用于指示已经写入FIFO中的字的数量。这个计数值保证永远不会低估FIFO中的字数量,以确保您永远不会溢出FIFO。然而,有一个例外情况需要注意。

当在写时钟的上升沿发生写操作时,该写操作只有在下一个时钟上升沿时才会反映在wr_data_count上。这是因为FIFO和wr_data_count的更新可能是异步的,或者FIFO需要一些时间来稳定内部状态。D = log2(FIFO depth) + 1 

axi_w_underflow

Output表示在前一个时钟周期内的一个读请求被拒绝,因为FIFO是空的。当FIFO中没有数据时,任何尝试从中读取数据的操作都将被阻止,并且会产生一个Underflow信号来指示这一事件。另外,虽然读操作被拒绝了,但FIFO本身并不会因为尝试从空FIFO中读取数据而损坏或进入错误状态。
axi_w_rd_data_count[ d :0]
Output是FIFO的一个状态或标志,用于指示当前FIFO中可用于读取的数据字的数量,这个计数保证永远不会超过FIFO中实际可读取的数据字数量。这意味着,如果你根据这个计数来读取数据,你永远不会尝试从FIFO中读取超过其实际包含的数据,从而避免了“下溢”(underflow)的风险。下溢是指试图从一个空的FIFO中读取数据。

从FIFO中读取数据时,Read Data Count会立即减少以反映这一变化。但有一个例外情况:当读操作发生在读时钟的上升沿时,该读操作的影响不会立即反映在rd_data_count上。相反,它会在下一个读时钟上升沿时反映在rd_data_count中。

D = log 2 (FIFO depth)+1
axi_w_data_count[ d :0]
Output

用于指示当前FIFO中存储的数据字的数量。这个值通常随着数据被写入FIFO而增加,随着数据从FIFO中被读取而减少。

D = log 2 (FIFO depth)+1
axi_w_prog_full
Output允许用户设置一个可编程的阈值。当FIFO中存储的数据字数量达到或超过这个阈值时,Programmable Full 信号会被断言,通常表示为高电平或逻辑真(true)。当FIFO中的数据字数量少于这个阈值时,Programmable Full 信号会被去断言,通常表示为低电平或逻辑假(false)。
axi_w_prog_empty
Output允许用户设置一个可编程的阈值,当FIFO中存储的数据字数量达到或低于可编程阈值时,Programmable Empty 信号会被断言,通常表示为高电平或逻辑真(true)。当FIFO中的数据字数量超过这个可编程阈值时,Programmable Empty 信号会被去断言(,通常表示为低电平或逻辑假(false)。

4  AXI3/AXI4 的写响应通道接口信号

表4详细描述了AXI4/AXI3 的写响应通道(Write Response Channel)的接口信号,主要用于从设备(Slave)向主设备(Master)发送写事务的完成状态或错误信息。

表4  AXI4/AXI3写响应通道FIFO接口信号
名称方向描述
AXI4/AXI3接口写响应通道:被映射到FIFO输出数据总线的信息信号
s_axi_bid[m:0]
Output

写响应的标识标签。在AXI的写响应通道中,从设备(Slave)使用BID(Bus ID)信号来响应主设备(Master)的写请求,以表示特定写事务的完成状态或错误信息。

为了确保主设备能够正确地将响应与请求进行匹配,BID值必须与写事务的AWID值相匹配。AWID是写地址组的ID标签,由主设备在写地址通道中发送,以标识特定的写事务。

s_axi_bresp[1:0]
Output

用于指示写事务的状态。有以下几种可能的响应状态:OKAY,

EXOKAY, SLVERR, and DECERR.
s_axi_buser[m:0]
OutputWrite Response Channel的用户主要是那些需要执行写操作并关心其完成状态或错误信息的设备或系统组件,这些设备或系统组件会通过AXI接口与从设备进行通信,利用写响应通道来接收写事务的完成状态或错误信息,从而进行相应的处理或决策。
AXI4/AXI3接口写响应通道:FIFO读接口的握手信号
s_axi_bvalid
Output

用于指示写响应通道上是否有一个有效的写响应可供接收。这个信号是一个简单的二进制标志,具有两种状态:

  • 1(或高电平):表示写响应通道上有一个有效的写响应可供接收。当从设备完成写事务并准备好发送写响应时,它会将Write Response Valid信号置为1,以通知主设备可以读取写响应数据。
  • 0(或低电平):表示写响应通道上没有有效的写响应可供接收。这通常意味着从设备还在处理写事务,或者还没有准备好发送写响应。
s_axi_bready
Input

用于指示主设备是否准备好接收从设备发送的响应信息。

Response Ready信号的两种状态及其含义如下:

  • 1(或高电平):表示主设备已经准备好接收响应信息。当主设备的内部逻辑或缓存准备好接收新的响应数据时,它会将Response Ready信号置为1。此时,从设备可以安全地将响应信息发送到写响应通道上,因为主设备会及时读取并处理这些信息。
  • 0(或低电平):表示主设备当前没有准备好接收响应信息。这可能是由于主设备正在处理其他事务、内部缓存已满或其他原因导致的。在从设备检测到Response Ready信号为0时,它应该暂停发送响应信息,以避免数据冲突或丢失。
AXI4/AXI3接口写响应通道:来自FIFO输入数据总线的信息信号
m_axi_bid[m:0]
Input

写响应的标识标签。在AXI的写响应通道中,从设备(Slave)使用BID(Bus ID)信号来响应主设备(Master)的写请求,以表示特定写事务的完成状态或错误信息。

为了确保主设备能够正确地将响应与请求进行匹配,BID值必须与写事务的AWID值相匹配。AWID是写地址组的ID标签,由主设备在写地址通道中发送,以标识特定的写事务。

m_axi_bresp[1:0]
Input

用于指示写事务的状态。有以下几种可能的响应状态:OKAY,

EXOKAY, SLVERR, and DECERR.
m_axi_buser[m:0]
InputWrite Response Channel的用户主要是那些需要执行写操作并关心其完成状态或错误信息的设备或系统组件,这些设备或系统组件会通过AXI接口与从设备进行通信,利用写响应通道来接收写事务的完成状态或错误信息,从而进行相应的处理或决策。
AXI4/AXI3接口写响应通道:FIFO写接口的握手信号
m_axi_bvalid
Input

用于指示写响应通道上是否有一个有效的写响应可供接收。这个信号是一个简单的二进制标志,具有两种状态:

  • 1(或高电平):表示写响应通道上有一个有效的写响应可供接收。当从设备完成写事务并准备好发送写响应时,它会将Write Response Valid信号置为1,以通知主设备可以读取写响应数据。
  • 0(或低电平):表示写响应通道上没有有效的写响应可供接收。这通常意味着从设备还在处理写事务,或者还没有准备好发送写响应。
m_axi_bready
Output

用于指示主设备是否准备好接收从设备发送的响应信息。

Response Ready信号的两种状态及其含义如下:

  • 1(或高电平):表示主设备已经准备好接收响应信息。当主设备的内部逻辑或缓存准备好接收新的响应数据时,它会将Response Ready信号置为1。此时,从设备可以安全地将响应信息发送到写响应通道上,因为主设备会及时读取并处理这些信息。
  • 0(或低电平):表示主设备当前没有准备好接收响应信息。这可能是由于主设备正在处理其他事务、内部缓存已满或其他原因导致的。在从设备检测到Response Ready信号为0时,它应该暂停发送响应信息,以避免数据冲突或丢失。
AXI4/AXI3 FIFO写响应通道:可选的边带信号
axi_b_prog_full_thresh[ d :0]
Input用于输入可编程满(PROG_FULL)标志的断言和去断言的阈值。这个阈值可以在复位期间在电路中动态设置。        d = log2(FIFO depth)-1 
axi_b_prog_empty_thresh[ d :0]
Input

用于输入可编程空标志的断言和去断言的阈值。这个阈值允许你在FIFO几乎为空但还未完全为空时提前得知这一状态,从而可以采取相应的措施,如启动数据填充过程或避免从FIFO中读取无效数据。

d = log2(FIFO depth) - 1

axi_b_injectsbiterr

Input该功能用于模拟单个位错误的情况,以验证ECC纠正错误的能力。
axi_b_injectdbiterr
Input该功能用于模拟一个双位错误(即数据中的两个位同时出错)的情况,以验证ECC模块在面临这种错误时的响应。
axi_b_sbiterr
Output表示ECC解码器检测到了一个单个位错误,并成功地将它修复了。
axi_b_dbiterr
Output表示ECC解码器检测到了一个双位错误,这意味着FIFO IP核中的数据已经损坏。
axi_b_overflow
Output

表示在前一个时钟周期内的一个写请求被拒绝,因为FIFO已满。当FIFO达到其最大容量时,任何尝试向其中写入更多数据的操作都将被阻止,并且会产生一个Overflow信号来指示这一事件。

另外,FIFO中已有的数据并不会因为溢出而丢失或损坏。

axi_b_wr_data_count[ d :0]
Output

用于指示已经写入FIFO中的字的数量。这个计数值保证永远不会低估FIFO中的字数量,以确保您永远不会溢出FIFO。然而,有一个例外情况需要注意。

当在写时钟的上升沿发生写操作时,该写操作只有在下一个时钟上升沿时才会反映在wr_data_count上。这是因为FIFO和wr_data_count的更新可能是异步的,或者FIFO需要一些时间来稳定内部状态。D = log2(FIFO depth) + 1 

axi_b_underflow
Output表示在前一个时钟周期内的一个读请求被拒绝,因为FIFO是空的。当FIFO中没有数据时,任何尝试从中读取数据的操作都将被阻止,并且会产生一个Underflow信号来指示这一事件。另外,虽然读操作被拒绝了,但FIFO本身并不会因为尝试从空FIFO中读取数据而损坏或进入错误状态。
axi_b_rd_data_count[ d :0]
Output是FIFO的一个状态或标志,用于指示当前FIFO中可用于读取的数据字的数量,这个计数保证永远不会超过FIFO中实际可读取的数据字数量。这意味着,如果你根据这个计数来读取数据,你永远不会尝试从FIFO中读取超过其实际包含的数据,从而避免了“下溢”(underflow)的风险。下溢是指试图从一个空的FIFO中读取数据。

从FIFO中读取数据时,Read Data Count会立即减少以反映这一变化。但有一个例外情况:当读操作发生在读时钟的上升沿时,该读操作的影响不会立即反映在rd_data_count上。相反,它会在下一个读时钟上升沿时反映在rd_data_count中。

D = log 2 (FIFO depth)+1
axi_b_data_count[ d :0]
Output

用于指示当前FIFO中存储的数据字的数量。这个值通常随着数据被写入FIFO而增加,随着数据从FIFO中被读取而减少。

D = log 2 (FIFO depth)+1
axi_b_prog_full
Output允许用户设置一个可编程的阈值。当FIFO中存储的数据字数量达到或超过这个阈值时,Programmable Full 信号会被断言,通常表示为高电平或逻辑真(true)。当FIFO中的数据字数量少于这个阈值时,Programmable Full 信号会被去断言,通常表示为低电平或逻辑假(false)。
axi_b_prog_empty
Output允许用户设置一个可编程的阈值,当FIFO中存储的数据字数量达到或低于可编程阈值时,Programmable Empty 信号会被断言,通常表示为高电平或逻辑真(true)。当FIFO中的数据字数量超过这个可编程阈值时,Programmable Empty 信号会被去断言(,通常表示为低电平或逻辑假(false)。

5 AXI3/AXI4 其他类型接口信号

与以上名字相似的信号功能基本相同,使用时可参考以上信号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/831879.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

笔记85:如何计算递归算法的“时间复杂度”和空间复杂度?

先上公式: 递归算法的时间复杂度 递归次数 x 每次递归消耗的时间颗粒数递归算法的空间复杂度 递归深度 x 每次递归消耗的内存空间大小 注意: 时间复杂度指的是在执行这一段程序的时候,所花费的全部的时间,即时间的总和而空间复…

以太网基础-IP、ICMP、ARP协议

一、IP协议 参考:rfc791.txt.pdf (rfc-editor.org) IP协议(Internet Protocol)是TCP/IP协议族中最核心的协议,提供不可靠的、无连接的、尽力而为的数据报传输服务。 IP报文数据头如下 Version:4bit,4表示…

网络模型与调试

网络模型 网络的体系结构 ● 网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。 ● 每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供…

Elasticsearch:如何使用 Java 对索引进行 ES|QL 的查询

在我之前的文章 “Elasticsearch:对 Java 对象的 ES|QL 查询”,我详细介绍了如何使用 Java 来对 ES|QL 进行查询。对于不是很熟悉 Elasticsearch 的开发者来说,那篇文章里的例子还是不能单独来进行运行。在今天的这篇文章中,我来详…

MySQL CRUD进阶

前言👀~ 上一章我们介绍了CRUD的一些基础操作,关于如何在表里进行增加记录、查询记录、修改记录以及删除记录的一些基础操作,今天我们学习CRUD(增删改查)进阶操作 如果各位对文章的内容感兴趣的话,请点点小…

【网络编程下】五种网络IO模型

目录 前言 一.I/O基本概念 1.同步和异步 2.阻塞和非阻塞 二.五种网络I/O模型 1.阻塞I/O模型 2.非阻塞式I/O模型 ​编辑 3.多路复用 4.信号驱动式I/O模型 5. 异步I/O模型 三.五种I/O模型比较​编辑 六.I/O代码示例 1. 阻塞IO 2.非阻塞I/O 3.多路复用 (1)select …

Electron 对 SQLite 进行加密

上一篇讲了如何在 Electron使用 SQLite,如果 SQLite 中存有敏感数据,客户端采用明文存储风险很高,为了保护客户数据,就需要对数据进行加密,由于 electron 对代码并不加密,所以这里排除通过逆向工程进行数据…

想要快速接收的看过来:Cell旗下毕业神刊,中科院二区、平均审稿周期1个月,冲!

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 就是它了,Cell旗下全OA期刊iScience。影响因子5.8分,中科院二区,年发文量逐年上涨,2023年发文近3000篇,2024年第一季…

一周学会Django5 Python Web开发 - Django5 ModelForm表单定义与使用

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计51条视频,包括:2024版 Django5 Python we…

一种算法分类方式及其应用

在计算机科学领域,算法是解决问题的有效方法,而对算法进行分类有助于理解它们的特性、优劣以及在不同场景下的应用。常见的算法分类方法,包括按设计思想、问题类型、数据结构和应用领域等,每一类算法会对应有其典型和实际应用。 算…

spring boot3多模块项目工程搭建-上(团队开发模板)

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 目录 写在前面 多模块结构优缺点 模块介绍 Common 模块: API 模块: Web 模块: Service 模块: DAO 模块: 搭建步骤 1.创建 父…

深入理解分布式事务⑨ ---->MySQL 事务的实现原理 之 MySQL 中的XA 事务(基本原理、流程分析、事务语法、简单例子演示)详解

目录 MySQL 事务的实现原理 之 MySQL 中的XA 事务(基本原理、流程分析、事务语法、简单例子演示)详解MySQL 中的 XA 事务1、XA 事务的基本原理1-1:XA 事务模型图:1-2:XA 事务模型的两阶段提交操作:Prepare …

Stable Diffusion webUI 最全且简单配置指南

Stable Diffusion webUI 配置指南 本博客主要介绍部署Stable Diffusion到本地,生成想要的风格图片。 文章目录 Stable Diffusion webUI 配置指南1、配置环境(1)pip环境[可选](2)conda环境[可选] 2、配置Stable Diffu…

Jenkins docker部署springboot项目

1、创建jenkins容器 1,首先,我们需要创建一个 Jenkins 数据卷,用于存储 Jenkins 的配置信息。可以通过以下命令创建一个数据卷: docker volume create jenkins_data启动 Jenkins 容器并挂载数据卷: docker run -dit…

Leetcode—422. 有效的单词方块【简单】Plus

2024每日刷题&#xff08;126&#xff09; Leetcode—422. 有效的单词方块 实现代码 class Solution { public:bool validWordSquare(vector<string>& words) {int row words.size();for(int i 0; i < row; i) {// 当前这一行的列数int col words[i].length(…

Java高阶私房菜:JVM性能优化案例及讲解

目录 核心思想 优化思考方向 压测环境准备 堆大小配置调优 调优前 调优后 分析结论 垃圾收集器配置调优 调优前 调优后 分析结论 JVM性能优化是一项复杂且耗时的工作&#xff0c;该环节没办法一蹴而就&#xff0c;它需要耐心雕琢&#xff0c;逐步优化至理想状态。“…

驾校考试宝典vip一点通驾考精简500题科目一四速记口诀c1答题技巧

下载地址&#xff1a;驾校考试宝典vip一点通驾考精简500题科目一四速记口诀c1答题技巧.zip 这份速记口诀考点总结 评分标准 和答题技巧&#xff0c;很详细&#xff0c;全科目速记口诀秘笈.pdf

QT中的容器

Qt中的容器 关于Qt中的容器类&#xff0c;下面我们来进行一个总结&#xff1a; Qt的容器类比标准模板库&#xff08;STL&#xff09;中的容器类更轻巧、安全和易于使用。这些容器类是隐式共享和可重入的&#xff0c;而且他们进行了速度和存储的优化&#xff0c;因此可以减少可…

mysql 指定根目录 迁移根目录

mysql 指定根目录 迁移根目录 1、问题描述2、问题分析3、解决方法3.1、初始化mysql前就手动指定mysql根目录为一个大的分区(支持动态扩容)&#xff0c;事前就根本上解决mysql根目录空间不够问题3.1.0、方法思路3.1.1、卸载mariadb3.1.2、下载Mysql安装包3.1.3、安装Mysql 8.353…

TouchGFX 总结

文章目录 使用中文字体多屏幕间交换数据UI to MCUMCU to UI API文档参考横竖屏切换 使用中文字体 添加一个textArea&#xff0c;默认的英文文本可见&#xff0c;输入中文字体后就看不见了&#xff0c;是因为这个默认的字体不支持中文&#xff0c;改一下字体就可以了&#xff1…