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

news/2024/5/19 9:30:49

在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.mrgr.cn/p/41888236

相关文章

Deepin-Docker-Memcached

目标:基于deepin+docker安装 memchaed 1.镜像下载 docker pull memcached:latest 2.容器启动 docker run -d -p 11211:11211 --name memcached-test memcached:latest 3.启动检查4.启动Ok

多区域协作时 如何实现便捷可控的文件跨域传输?

文件跨域传输的场景在现代企业运营中非常普遍,特别是在那些具有分布式结构或需要跨地域合作的组织中。 以下是一些典型的多区域文件传输场景: 1、企业内部跨地域传输:大型企业或跨国公司在不同地区设有分支机构,需要在这些分支机构之间传输业务数据和公司文件。 2、供应链…

CNN实现卫星图像分类(tensorflow)

使用的数据集卫星图像有两类,airplane和lake,每个类别样本量各700张,大小为256*256,RGB三通道彩色卫星影像。搭建深度卷积神经网络,实现卫星影像二分类。 数据链接百度网盘地址,提取码: cq47 1、查看tenso…

Android 14 变更及适配攻略

准备工作 首先将我们项目中的 targetSdkVersion和compileSdkVersion 升至 34。 影响Android 14上所有应用 1.最低可安装的目标 API 级别 从 Android 14 开始,targetSdkVersion 低于 23 的应用无法安装。要求应用满足这些最低目标 API 级别要求有助于提高用户的安…

安全数据交换系统哪个好?该如何选型?

安全数据交换系统是用于在不同网络或组织之间安全、高效地传输和共享数据的解决方案。安全数据交换系统对于任何需要处理敏感数据、确保数据安全、并满足合规要求的组织来说都是至关重要的。 这种系统通常用于以下目的: 1)数据传输:允许用户在不同的地理位置或网络环境之间…

python雨滴数浓度计算

前面已经将3232的数据删除了不需要的列,数据变成了3221的数据 excel的粒径为了匹配txt的32行数据,我进行了重复复制,将excel变成下图: 那么采用数浓度公式:代码:# -*- coding:utf-8 -*- """ @author: SuYue @file: shunongdu.py @time: 2024/04/30 @desc:…

【智能家居入门3】(MQTT服务器、MQTT协议、微信小程序、STM32)

前面已经写了三篇博客关于智能家居的,服务器全都是使用ONENET中国移动,他最大的优点就是作为数据收发的中转站是免费的。本篇使用专门适配MQTT协议的MQTT服务器,有公用的,也可以自己搭建(应该要钱)&#xf…

开发体育赛事直播平台,研发技术选型与架构设计实现方案

本文将深入探讨“东莞梦幻网络科技”现成体育直播源码的技术实现方案,如何为用户提供流畅、互动、个性化的观赛体验。 一、技术栈选择:强强联合的基石1、后端开发:采用Java与PHP作为主要开发语言。Java以其强大的企业级应用支持,保…

aardio爬虫) 实战篇:逆向有道翻译web接口

前言 之前的文章把js引擎(aardio封装库) 微软开源的js引擎(ChakraCore))写好了,这篇文章整点js代码来测一下bug。测试网站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻译js逆向(MD5加密,AES加密)附完整源码,逆向我就不赘述了。这篇文章说一下怎…

【Mac】graphpad prism for Mac(专业医学绘图工具) v10.2.3安装教程

软件介绍 GraphPad Prism for Mac是一款专业的科学数据分析和绘图软件,广泛用于生物医学和科学研究领域。它具有强大的统计分析功能,可以进行各种数据分析,包括描述性统计、生存分析、回归分析、方差分析等。同时,它还提供了丰富…

“any”类型的参数不可分配给“never”类型的参数。ts(2345)

问题引入在进行项目开发时,用到了 el-tree 标签,就是组织树状数据渲染页面,类似菜单,然后父级菜单下会有多个子菜单。本次总共就两层。这里遇到的问题是,后端返回的数据就是一个list,属于叶子节点,父级节点是固定的,需要前端写死,但就在写死了父级节点,并将叶子节点加…

ubuntu 桥接模式无法上网解决

ubuntu安装,根据个人的选择来配置网络信息,以下是vmare配置桥接模式时ubuntu无法上网的处理方式: 1. vmare-》虚拟机-》设置, 选中桥接模式(复制物理状态可以不勾选)2. vmare-》编辑-》虚拟网络编辑器, 选中更改设置 2. 选中VMnet0网卡,该网卡选中电脑目前在用的网卡名…

【iOS】KVO

文章目录 前言一、KVO使用1.基本使用2.context使用3.移除KVO通知的必要性4.KVO观察可变数组 二、代码调试探索1.KVO对属性观察2.中间类3.中间类的方法3.dealloc中移除观察者后,isa指向是谁,以及中间类是否会销毁?总结 三、KVO本质GNUStep窥探…

用php找出字符串中连续重复次数最多的字符,你有方法吗?

找出字符串中连续重复次数最多的字符,这里总结了几种方法,不管是在开发中,还是在面试中都会遇到。 方法一<?php $arr = str_split($str); //字符串分隔到数组中$arr = array_count_values($arr); //用于统计数组中所有值出现的次数,返回一个数组//键名为原数组的键值,…

WEB安全~X-Frame-Options

X-Frame-Options 是一个HTTP响应头,用于控制网页是否可以嵌套在 <frame>, <iframe>, <embed> 或者 <applet> 中。通过设置 X-Frame-Options 头部,网站管理员可以防止网页被嵌套到其他网站的框架中,从而有效防范点击劫持等安全风险。下面是关于 X-Fr…

微服务 - 作业调度 Hangfire集成式 仪表盘 DolphinScheduler分布式 定义流程

Hangfire,Client,Storage,Server,Dashboard,一次性作业任务,延迟作业,周期性定时作业,触发型作业任务,删除作业任务,作业队列,异常重试机制,原理机制与适用场景,DolphinScheduler,自定义业务流程,流程节点类型,串行并行逻辑节点,流程节点参数,数据源,流程实…

RK3568笔记二十四:基于Flask的网页监控系统

若该文为原创文章&#xff0c;转载请注明原文出处。 此实验参考 《鲁班猫监控检测》&#xff0c;原代码有点BUG&#xff0c;已经下载不了。2. 鲁班猫监控检测 — [野火]嵌入式AI应用开发实战指南—基于LubanCat-RK系列板卡 文档 (embedfire.com) 一、简介 记录简单的摄像头监…

flutter 编译环境部署

一. 编译环境安装 1. 安装ubuntu20.04,详细的教程请看以下链接 VMware虚拟机下安装Ubuntu20.04(保姆级教程)_ubuntu 20.04 虚拟机-CSDN博客 2. 部署flutter环境,详细教程请参照以下链接 构建 flutter 应用程序 sony/flutter-elinux 维基 GitHub上 注意:在进行docker映射时…

智能决策新时代:可视化大屏是否能够超越传统白板?

前言 2015年,国务院提出了中国制造2025制造强国“三步走”规划,旨在推动中国制造业成为全球制造强国:第一个十年规划,2015-2025:中国制造业迈入制造强国行列,实现技术创新和产业升级。 第二个十年规划,2025-2035:中国制造业整体达到世界强国中等水平,推动产业智能化和…

【汇编语言】中断及外部设备操作

【汇编语言】中断及外部设备操作 文章目录 【汇编语言】中断及外部设备操作前言一、中断及其处理中断的概念8086内中断中断处理程序案例&#xff1a;系统中的0号中断中断过程 二、编制中断处理程序中断处理程序及其结构编制中断处理程序——以除法错误中断为例do0子程序应该放在…