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.mfbz.cn/a/592792.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】文件

目录 文件文件分类文本文件的读写(ASCII文件)的读写打开文件打开文件的方式关闭文件将数据写入ASCII文件从ASCII文件读入数据 二进制存储对比ASCII和二进制存储用成员函数read和write读写二进制文件打开方式文件的读入与读出 文件 所谓文件,一般指存储在外部介质上…

【k8s】利用Kubeadm搭建k8s1.29.x版本+containerd

文章目录 前言1.准备的三台虚拟机2.安装 kubeadm 前的准备工作3.安装containerd1.解压安装包2.生成默认配置文件3.使用systemd托管containerd4.修改默认配置文件 4.安装runc5.安装 CNI plugins6.安装 kubeadm、kubelet 和 kubectl6.1 配置crictl 7.初始化集群1.打印初始化配置到…

DETR类型检测网络---思考和Tricks测试

目录 batch_size的影响辅助损失的作用学习率的影响Decoder层数增多的影响3D检测中, feats位置编码和query位置编码是否共享mpl层背景-关于query的生成方式 利用widthformer类似的方式简化注意力机制 batch_size的影响 batch8: batch20: 由实验结果可知:这里实验有问题,横坐标…

堆栈打印跟踪Activity的启动过程(基于Android10.0.0-r41),framework修改,去除第三方app的倒计时页面

文章目录 堆栈打印跟踪Activity的启动过程(基于Android10.0.0-r41),framework修改,去除第三方app的倒计时页面1.打印异常堆栈2.去除第三方app的倒计时页面3.模拟点击事件跳过首页进入主页 堆栈打印跟踪Activity的启动过程(基于Android10.0.0-r41)&#x…

C语言 | Leetcode C语言题解之第67题二进制求和

题目&#xff1a; 题解&#xff1a; void reserve(char* s) {int len strlen(s);for (int i 0; i < len / 2; i) {char t s[i];s[i] s[len - i - 1], s[len - i - 1] t;} }char* addBinary(char* a, char* b) {reserve(a);reserve(b);int len_a strlen(a), len_b st…

2024全域数字化转型评估模型研究报告

来源&#xff1a;伏羲智库&腾讯智慧零售 智慧零售逐渐成为发展趋势 随着技术突破、商业创新和监管制度的发展演进,零售业数字化转型的内涵随实践延展而不断丰富,智慧零售逐渐成为零售业数字化转型的新趋势。 在技术层面,零售业数字化转型呈现出三大变化与趋势: 一是数字技…

能将图片转为WebP格式的WebP Server Go

本文完成于 2023 年 11 月 之前老苏介绍过 webp2jpg-online&#xff0c;可以将 webp 格式的图片&#xff0c;转为 jpg 等&#xff0c;今天介绍的 WebP Server Go 是将 jpg 等转为 webp 格式 文章传送门&#xff1a;多功能图片转换器webp2jpg-online 什么是 WebP ? WebP 它是由…

多多搜索在哪里找到

拼多多推广可以使用3an推客。3an推客&#xff08;CPS模式&#xff09;给商家提供的营销工具&#xff0c;由商家自主设置佣金比例&#xff0c;激励推广者去帮助商家推广商品链接&#xff0c;按最终有效交易金额支付佣金&#xff0c;不成交不扣费。是商家破零、积累基础销量的重要…

OpenHarmony实战开发-使用通用事件、焦点事件

基本概念 焦点 指向当前应用界面上唯一的一个可交互元素&#xff0c;当用户使用键盘、电视遥控器、车机摇杆/旋钮等非指向性输入设备与应用程序进行间接交互时&#xff0c;基于焦点的导航和交互是重要的输入手段。 默认焦点 应用打开或切换页面后&#xff0c;若当前页上存在…

缤纷成长:儿童换牙顺序解析与注意事项

引言&#xff1a; 儿童的换牙过程是成长中的一个重要阶段&#xff0c;但每个孩子的换牙顺序可能会有所不同。本文将详细解析儿童换牙的顺序&#xff0c;并提供换牙期间的注意事项&#xff0c;助您更好地理解孩子的口腔健康&#xff0c;并为他们提供正确的护理与关爱。 1. 换牙顺…

【开发记录】青龙面板设置飞书机器人

接上篇文章&#xff0c;笔者在写上篇文章时对青龙面板的消息通知功能感兴趣&#xff0c;遂实验之&#xff0c;于是有了这篇文章。 首先参考这篇文章在群聊中引入一个机器人&#xff0c;此时可以获得该机器人的webhook。在青龙面板的通知设置中有larkKey一项&#xff0c;填入web…

【idea-sprongboot项目】在linux服务器上纯远程开发方式

继上一篇博客【idea-sprongboot项目】SSH连接云服务器进行远程开发-CSDN博客 目录 五、远程开发方式 2&#xff09;纯远程开发方式 步骤 五、远程开发方式 2&#xff09;纯远程开发方式 实现原理&#xff0c; 步骤 &#xff08;1&#xff09;首先&#xff0c;关闭当前正在…

Java17 --- SpringCloud之Zipkin链路追踪

目录 一、下载zipkin及运行 二、在父工程中引入pom依赖 三、在子工程8001引入相关pom依赖 3.1、修改yml配置文件 3.2、测试代码 四、在子工程80引入相关pom依赖 4.1、修改yml配置文件 4.2、测试代码 五、测试结果 一、下载zipkin及运行 运行控制台访问地址&#xff1…

Java之LinkedHashMap

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。…

「C++ STL篇 1-0」string类的使用

目录 〇、概念 一、string类的构造函数 二、赋值运算符重载 三、有关容量的操作 四、string对象的访问 五、遍历string对象的字符数组 六、string对象的修改 七、string对象的常用操作 八、字符串和数字间的转换 拓展】 练习】 源代码】 〇、概念 1. string类是什么&#xff1…

C语言之递归函数、例题详解以及注意事项

目录 前言 一、递归的概念 二、递归例题详解 例1&#xff1a;斐波那契数列 例2&#xff1a;求次方 例3&#xff1a;求各位数之和 例4&#xff1a;阶乘 例5&#xff1a;顺序打印 三、递归的注意事项 总结 前言 本文将和大家分享一些递归函数的相关知识&#xff0c;技巧…

栈和队列OJ刷题

制作不易&#xff0c;三连支持一下呗&#xff01;&#xff01;&#xff01; 文章目录 一.有效的括号二.用队列实现栈三.用栈实现队列四.设计循环队列 前言 上两篇博客介绍了栈和队列的结构与实现&#xff0c;这篇博客我们将用栈和队列的结构与思想来解决一些oj题目 一、有效的…

关于安装Tensorflow的一些操作及问题解决

关于conda和tensorflow&#xff1a; 由于在安装tensorflow遇到各种问题&#xff0c;遇坑则进&#xff0c;耗费了很多时间。由此想整理一些关于安装tensorflow的操作和方法。欢迎各位补充和指正&#xff01; 1.conda: 1&#xff09;conda list 查看安装了哪些包。 2&#xff…

【实验】根据docker部署nginx并且实现https

环境准备 systemctl stop firewalld setenforce 0 安装docker #安装依赖包 yum -y install yum-utils device-mapper-persistent-data lvm2 #设置阿里云镜像 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #安装最新版…

LabVIEW鸡蛋品质智能分级系统

LabVIEW鸡蛋品质智能分级系统 随着现代农业技术的飞速发展&#xff0c;精确、高效的农产品质量控制已成为行业的重要需求。其中&#xff0c;鸡蛋作为日常膳食中不可或缺的重要组成部分&#xff0c;其品质直接关系到消费者的健康与满意度。本文设计并实现了一套基于LabVIEW的鸡…
最新文章