当需要在设计中使用自定义IP时,可以通过为IP核的各种参数指定值来进行定制。以下是一般步骤的概述:
首先是从IP catalog中选择IP核。
然后双击这个选定的IP核,打开一个定制向导或参数设置窗口。或在工具栏或右键菜单中选择“Customize IP”命令,启动定制向导或打开相关参数设置。
对于AXI memory mapped的FIFO Generator IP核,通常包含多个配置选项卡,以便用户可以根据其应用需求进行定制。以下是一些常见的配置选项卡示例,但请注意,这些可能因Vivado的版本更新而略有变化:
1 Basic Tab
AXI Interface Option
有四种AXI接口样式是可用的:AXI4-Stream、AXI4、AXI3和AXI4-Lite。
Clocking Options
FIFO可以被配置为写操作和读操作使用独立时钟域或公共时钟域。
独立时钟(Independent Clock):允许用户在写端口和读端口上实现独特的时钟域。FIFO Generator IP核负责处理时钟域之间的同步,不需要对时钟的相位和频率有特定的要求。
公共时钟(Common Clocks):当在单个时钟域内进行数据缓冲时,可以选择公共时钟选项。这意味着写端口和读端口都使用相同的时钟信号。
使用从设备时钟使能进行写入
注意:此选项仅适用于AXI Stream接口。
从设备接口时钟使能(Slave Interface Clock Enable)允许AXI主设备以AXI从设备接口(或FIFO的写入侧)的分频速率运行。
当您希望AXI主设备以较低的频率向FIFO写入数据时,此功能非常有用。时钟使能信号允许您控制何时从AXI主设备向FIFO发送数据,从而有效地降低了数据写入速率。
使用主设备时钟使能进行读取
注意:此选项仅适用于AXI Stream接口。
主设备接口时钟使能(Master Interface Clock Enable)允许AXI从设备以AXI主设备接口(或FIFO的读取侧)的分频速率运行。
当您希望AXI从设备以较低的频率从FIFO读取数据时,此功能非常有用。时钟使能信号允许您控制何时从FIFO向AXI从设备发送数据,从而有效地降低了数据读取速率。
2 Ports Tabs
AXI FIFO的宽度是由通道中所有通道信息信号的总和来确定的。对于AXI4-Stream、AXI4、AXI3和AXI4-Lite接口,它们的通道信息信号在特定的表格(Table 4-3和Table 4-4)中列出。在配置AXI FIFO时,Vivado集成设计环境(IDE)提供了多个选项卡来进行相关配置。
2.1 AXI4/AXI3 Ports Tab
在AXI4和AXI3接口中,可以为ID、ADDR、DATA和USER信号配置宽度。
ID Width:在AXI3接口中,ID宽度应用于的所有通道。
ADDR Width:当同时选择了写通道和读通道时,相同的ADDR宽度将应用于写通道和读通道。这是因为AXI协议中的地址空间通常是共享的,因此读写操作使用相同的地址空间。
DATA Width:当同时选择了写通道和读通道时,DATA宽度也会在两个通道上保持一致。DATA宽度定义了每个数据传输中可以携带的数据位数。
USER Width:USER信号是AXI4/AXI3 FIFO中的可选信号,并且可以为每个通道独立配置。USER信号可以用于传输自定义的辅助信息。
对于所有选定的信号,AXI4/AXI3 FIFO的相应通道宽度是通过将特定通道中所有信号的宽度相加来确定的,如表4-3所示。
2.2 AXI4-Stream Ports Tab
在AXI4-Stream接口中,可以配置TDATA、TUSER、TID和TDEST信号的宽度。而TKEEP和TSTRB信号的宽度则是由配置的TDATA宽度决定的,它们内部使用公式(TDATA Width) / 8来计算。
对于所有选定的信号,AXI4-Stream FIFO的总宽度是通过将所有选定信号的宽度相加来确定的。这意味着,如果您配置了一个32位的TDATA、一个8位的TUSER、一个4位的TID和一个4位的TDEST,那么AXI4-Stream FIFO的总宽度将是48位(32位+8位+4位+4位)。同时,TKEEP和TSTRB的宽度将分别为4位(因为32位的TDATA被分为8个字节)。
4.3 AXI4-Lite Ports Tab
在AXI4-Lite接口中,当同时选择了写通道和读通道时,会对这两个通道应用相同的ADDR和DATA宽度。对于AXI4-Lite FIFO的特定通道宽度,它是通过将该通道中所有信号的宽度相加来确定的。如Table 4-4所示。
3 AW/W/B/AR/R/AXI4-Stream Configuration Tab
AXI FIFO的功能在某些方面与Native FIFO在first-word fall-through模式下的功能相似。它支持的功能集包括ECC(错误检查和纠正,通常用于块RAM)、可编程就绪生成(如满、几乎满、可编程满)和可编程有效生成(如空、几乎空、可编程空)。
3.1 配置选项
1. FIFO
这是用于实现先进先出(FIFO)缓冲器的选项。它通常用于在不同速率的数据生产者和消费者之间缓存数据,或者在两个时钟域之间传递数据。
2. Register Slice
这是一个寄存器切片选项,它可以提供数据的缓冲和同步,但不像FIFO那样具有完整的先进先出功能。它可能用于需要简单数据缓冲或延迟的场景。
3. Pass Through Wire
这是一个直通线选项,它直接传递数据而不进行任何缓冲或处理。这在不需要任何缓冲或同步的场景中可能是有用的。
3.2 FIFO Options
1.FIFO Implementation Type
FIFO Generator IP核可以根据计算出的宽度和选定的FIFO深度,以最优配置组合内存基本单元(block RAM或distributed RAM)。
2. FIFO Application Type
指定了FIFO的应用类型,例如数据FIFO、Packet FIFO或低延迟数据FIFO。每种类型都有其特定的用途和性能特点。
3. FIFO Width
AXI FIFO支持对称的写和读宽度。AXI FIFO的宽度是根据所选的接口类型(AXI4-Stream、AXI4、AXI3或AXI4-Lite)以及在该接口内选定的信号和配置的信号宽度来确定的。
3.3 ECC Options
ECC(Error Correction Code,错误检查和纠正)选项为使用块RAM(Block RAM)的FIFO宏提供了内置或通用的互联、错误注入和纠正检查功能。这个特性在公共时钟和独立时钟的块RAM FIFO中都可用。
在AXI FIFO的设计中,数据阈值参数提供了对FIFO状态进行监控和控制的重要机制。这些参数允许用户自定义何时FIFO被视为“满”或“空”,并可以生成中断以通知系统这些状态的变化。下面是您提到的数据阈值参数的详细解释:
3.4 Data Threshold Parameters
Programmable Full Type
- 功能:允许用户从下拉菜单中选择一个可编程的满阈值类型。每个阈值的有效范围将在IDE中显示,并可能根据IDE中其他选项的选择而有所不同。
- Full Threshold Assert Value:当选择带有单个阈值常量的可编程满阈值时可用。用户可以输入一个自定义的值。该阈值的有效范围将在IDE中提供。
Programmable Empty Type
- 功能:允许用户从下拉菜单中选择一个可编程的空阈值类型。与满阈值类似,每个空阈值的有效范围也将在IDE中显示,并可能根据IDE中其他选项的选择而有所不同。
- Empty Threshold Assert Value:当选择带有单个阈值常量的可编程空阈值时可用。用户可以输入一个自定义的值。该阈值的有效范围将在IDE中提供。
Provide FIFO Occupancy Data Counts
允许FIFO提供关于其内部数据占用情况的数据计数。这通常表示FIFO中当前存储的数据个数。此外,对于块RAM和分布式RAM实现,还可以选择性地提供溢出和欠流中断标志(Overflow和Underflow)。
3.5 Occupancy Data Counts
在AXI FIFO中,data_count
是一个用于跟踪FIFO中数据个数的参数。数据计数总线的宽度被设置为log2(FIFO深度) + 1
。这是因为一个N
位的计数器可以表示从0到2^N - 1
的数值,因此一个能够表示从0到FIFO深度(包括0和FIFO深度)的计数器需要log2(FIFO深度) + 1
位。
在公共时钟模式下,AXI FIFO提供单一的“Data Count”输出,这个输出反映了FIFO中当前的总数据个数。在独立时钟模式下,AXI FIFO提供两个数据计数输出:Read Data Count和Write Data Count。
关于数据阈值参数的例子,下面给出了“可编程满阈值”和“可编程空阈值”以及数据计数的具体应用场景:
可编程满阈值
假设你希望FIFO中的数小于16,可以设置可编程满阈值为16。当FIFO中的单词数量达到或超过16时,满阈值将被触发,系统可以采取相应的措施,如暂停向FIFO写入数据,以防止数据溢出。
可编程空阈值
如果设置可编程空阈值为8,当FIFO中的数降至或低于8时,空阈值将被触发,系统可以开始从FIFO中读取数据,以确保FIFO不会完全排空,从而保持数据的连续性和流畅性。
数据计数
使用数据计数来确定FIFO中的事务数量。
4 Status Flags Tab
4.1 Underflow Flag
- 功能:用于指示读操作不成功。这通常发生在尝试从FIFO中读取数据但FIFO为空时。当Underflow 条件被满足时,该标志会被设置。
- 同步性:Underflow 标志与读时钟(rd_clk)同步。这意味着当在读时钟的某个边沿检测到FIFO为空且尝试进行读操作时,Underflow 标志会被设置。
- 非破坏性:Underflow 事件不会改变FIFO的状态。
4.2 Overflow Flag
- 功能:用于指示写操作不成功。这通常发生在尝试向FIFO中写入数据但FIFO已满时。当Overflow 条件被满足时,该标志会被设置。
- 同步性:Overflow 标志与写时钟(wr_clk)同步。这意味着当在写时钟的某个边沿检测到FIFO已满且尝试进行写操作时,Overflow 标志会被设置。
- 非破坏性:Overflow 事件同样不会改变FIFO的状态。
5 Summary Tab
在AXI FIFO的Summary(摘要)标签页中,会显示用户所选的AXI FIFO选项的总结,包括接口类型、FIFO类型、FIFO尺寸以及任何额外功能的选择状态。在“Additional Features”(额外功能)部分,大部分功能会显示为“Not Selected”(未选择,如果未使用)或“Selected”(已选择,如果使用)。
关于FIFO深度的说明,它提供了所选配置的实际FIFO深度。这些深度可能与在AXI FIFO IDE的第4个屏幕上所选的深度略有不同。这通常是因为FIFO的实际深度可能是由硬件实现、性能优化或对齐要求等因素决定的,这些因素可能导致实际的FIFO深度与用户在界面上指定的不完全相同。