主要内容

AXI4-Stream接口生成模型设计

对于需要高速数据传输的设计,请使用AXI4-Stream接口。您可以使用HDL Coder™在您的模型中实现一个简化的流协议。软件在IP核中生成AXI4-Stream接口。

根据算法的操作方式,从以下三种建模风格中进行选择:

  • 纸浆包建模-当你的算法在样本流上操作时,使用这些指导原则。

  • 框架建模-当你的算法在一个完整的数据框架上操作时,使用这些指导原则。在测试设计(DUT)边界处的数据信号可以是矢量或矩阵。如果您想对Valid和Ready信号建模,请不要使用此模式。

  • 基于遗留框架的建模-当你的算法在样本流上操作,并且你想将数据信号模拟为待测设计(DUT)边界上的帧时,使用这些指导原则。

    请注意

    基于遗留框架的建模样式将在未来的版本中弃用。如果您想对Valid和Ready信号建模,请使用基于样本的建模风格。

纸浆包建模

当您希望将数据信号模拟为DUT边界上的样本流时,请使用基于样本的模式进行建模。可以将数据信号建模为标量或向量。如果您将数据信号建模为矢量,在HDL Coder Workflow Advisor中任务1.2。设置目标接口>界面选项设置包装尺寸所有.HDL Coder将矢量元素打包在一起,并将矢量作为单个样本处理。方法指定HDL Coder如何打包数据包装方式.看到包装尺寸

简化流协议

要将测试中的设计(DUT)端口映射到AXI4-Stream接口,请使用简化的AXI4-Stream协议。您不必对实际的AXI4-Stream协议建模,而是可以使用简化的协议。当你运行IP核生成工作流中,生成的HDL代码包含在简化协议和实际的AXI4-Stream协议之间转换的包装器逻辑。简化的协议需要更少的协议信号,简化有效信号和就绪信号之间的握手机制,并支持任意长度的突发。万博1manbetx

使用简化的AXI4-Stream协议进行写和读事务。当你想在你的IP核中生成一个AXI4-Stream接口,在你的DUT接口中,实现这些信号:

  • 数据

  • 有效的

可选地,当您将标量DUT端口映射到AXI4-Stream接口时,您可以对这些信号建模:

  • 准备好了

  • 其他协议信号,如:

    • TSRTB

    • TKEEP

    • TLAST

    • TID

    • 道明

    • 摘要

数据和有效信号

当数据信号有效时,将断言有效信号。该图根据简化的流协议说明了数据和有效信号的关系。当您运行IP核生成工作流时,HDL Coder在HDL IP核中添加了一个流接口模块,该模块将简化的协议转换为完整的AXI4-stream协议。在这幅图中,时钟信号是clk

模型数据和有效信号万博1manbetx

  1. 使用已启用的子系统封装处理数据信号的算法。

  2. 使用有效信号控制已启用子系统的启用端口。

例如,您可以直接将有效信号连接到使能端口。

您还可以在DUT中使用控制器,为已启用的子系统生成启用信号。

准备信号(可选)。下游组件使用反压力告诉上游组件它们还没有准备好接收数据。DUT中的AXI4-Stream接口可以选择包含Ready信号。使用准备信号:

  • 在AXI4-Stream从接口上施加背压。例如,当下游组件还没有准备好接收数据时,丢弃Ready信号。

  • 在AXI4-Stream主接口中响应背压。例如,下游组件Ready信号低时停止发送数据。

当您使用单个流通道时,默认情况下,HDL Coder会生成Ready信号和处理背压的逻辑。背压逻辑将Ready信号绑定到DUT Enable信号。当输入主Ready信号低时,DUT被禁用,输出从Ready信号被驱动低。由于HDL Coder生成背压逻辑和Ready信号,当您使用单个流通道时,Ready信号是可选的,您不必在DUT端口对该信号建模。

框图视图说明了自动生成的就绪信号和背压逻辑。

当您使用多个流通道时,HDL Coder生成一个就绪信号,而不生成背压逻辑。在有多个流媒体通道的DUT中:

  • 主通道忽略来自下游组件的就绪信号。

  • 从通道Ready信号过高,导致上游组件继续发送数据。

如果没有背压逻辑,可能会导致数据丢失。为避免数据丢失,并在设计中对从接口施加回压或响应来自主接口的回压:

  • 为每个额外的流接口建模Ready信号。

  • 将建模的Ready信号映射到附加接口的DUT端口。

当您没有对Ready信号建模时,将设置目标接口task显示一个警告,提供需要Ready端口的接口名称。如果您的设计不需要施加或响应背压,请忽略此警告。

带有就绪信号的AXI4-Stream接口

该图像根据简化的流协议说明了数据、有效和就绪信号之间的时间关系。在这个图像中时钟是clk.如果在AXI4-Stream接口中对Ready信号建模,则可以在断言Ready信号之后发送Data和Valid信号。这由数据包表示一个BCEF,G在图中。此外,您可以选择在取消断言就绪信号后再发送一个数据和有效信号。这由数据包表示D在图中。

简化的流协议时序图

例如,如果在DUT中有先进先出(FIFO)来存储一帧数据,以便对上游组件施加反压力,则根据FIFO完整信号建模Ready信号。

简单流协议就绪信号模型

下游回压处理

简化流协议的有效信号和就绪信号之间可选的一个周期延迟允许您使用经典的或第一个字通过(FWFT) FIFO来处理来自下游组件的反压力。

  • FWFT FIFO

    您可以使用FWFT FIFO存储一帧数据,并通过将Valid Out信号建模为Ready In和FIFO不为空来处理来自下游组件的背压。

    经典的FWFT先进先出Ready信号模型

    对于使用FWFT FIFO的DUT,上游和下游组件之间的就绪信号的延迟为零。此图像显示了数据、有效和就绪信号之间的时间关系。时钟信号为clk

    时序图显示FWFT FIFO的数据,有效和准备信号之间的关系

  • 经典的先进先出

    如果您的DUT使用经典的FIFO来存储一帧数据,则将Valid Out信号建模为Ready In并且FIFO不为空。

    经典的基于先进先出的DUT准备信号模型

    此图像显示了数据、有效和就绪信号之间的时间关系。时钟信号为clk

    时序图显示的关系之间的数据,有效,和准备信号为经典先进先出

如果您没有对Ready信号建模,HDL Coder将生成信号和相关的背压逻辑。当您生成IP核时,HDL Coder在HDL IP核中添加了一个流接口模块,该模块将简化的协议转换为完整的AXI4-Stream协议。

请注意

如果启用延迟平衡,编码器将在Ready信号上插入一个或多个延迟。禁用Ready信号路径的延迟均衡。

TLAST信号(可选)。DUT上的AXI4-Stream接口可以选择对TLAST信号建模,该信号用于指示一帧数据的结束。如果您不建模这个信号,HDL Coder将为您生成它。在AXI4-Stream Slave接口下,忽略传入的TLAST信号。在AXI4-Stream Master界面上,当有效采样数达到默认帧长值时,自动生成的TLAST信号将被断言。可以使用目标接口表中的AXI4-Stream接口选项设置默认帧长度值。看到AXI4-Stream数据的接口选项

当IP核有一个AXI4从接口时,默认的帧长度值存储在IP核的可编程寄存器中。您可以在运行时更改默认帧长度。当默认帧长寄存器在帧中间被改变时,TLAST计数器状态被重置为零,TLAST信号被提前断言。您可以在IP核生成报告中找到可编程TLAST寄存器的地址。

框架建模

您可以为操作数据帧的DUT生成IP核,并通过使用HDL Coder帧到样本优化将数据端口映射到流接口。然后,您可以在基于像素的硬件上转换和实现基于帧的模型。看到基于帧的HDL代码生成算法

在执行IP核生成工作流时,将DUT边界上的帧数据端口映射到AXI4-Stream接口。HDL编码器为每个端口生成有效和就绪信号。此图像显示了帧到样本优化和IP核生成的顶层概述。帧到样本转换概述和AXI4-Stream接口

建模需求

使用帧到样本优化:

通过使用基于帧到像素的建模,将向量、复杂向量、矩阵和复杂矩阵数据映射到AXI4-Stream接口。TLAST信号在生成的IP核中创建,当有效采样的数量达到数据端口的帧大小时,该信号被断言。

注意事项

  • 当映射DUT向量端口时,只支持行向量。万博1manbetx

  • 您只需要对数据信号建模。帧到样本的转换优化生成就绪和有效信号。

  • 对于IP核生成的基于框架的模型SamplesPerCycle帧到样本优化的参数必须设置为1

有关使用AXI4-Stream接口对基于帧到样本的模型建模的示例,请参见使用AXI4-Stream接口部署基于框架的模型

基于遗留框架的建模

设计您的算法来操作样本流,并将数据信号建模为向量。在HDL Coder Workflow Advisor中以此模式操作任务1.2。设置目标接口>界面选项设置包装尺寸没有一个

请注意

这种建模风格将在未来的版本中被弃用。

数据和有效信号建模要求

将矢量端口映射到AXI4-Stream接口时:

  • 连接每个DUT输入矢量数据端口到Serializer1D块。

    Serializer1Dblock必须有一个ValidOut端口,Ratio设置为向量位宽。

  • 连接每个DUT输出矢量数据端口到Deserializer1D块。

    Deserializer1Dblock必须有一个ValidIn端口,Ratio设置为向量位宽。

  • 将映射到AXI4-Lite接口的每个标量端口连接到率转换块。

    这个比例率转换块中的比例必须匹配Serializer1D而且Deserializer1D块。

  • 映射到外部端口的每个标量端口必须与流算法子系统具有相同的采样时间。

流算法子系统遵循与将标量端口映射到AXI4-Stream接口的模式相同的数据和有效信号建模模式。看到在Simulink中建模数据和有效信号万博1manbetx.使用基于帧的建模时,不能使用Data和Valid之外的协议信号。例如,不支持Ready和TLAST。万博1manbetx

例子

要将矢量端口映射到AXI4-Stream接口,请打开hdlcoder_sfir_fixed_vector.slx模型。在hdlcoder_sfir_fixed_vector.slx模型中,symmetric_fir块是流算法子系统。

具有多个流通道的模型设计

当你运行IP核生成工作流中,您可以将多个标量DUT端口映射到AXI4-Stream主通道和AXI4-Stream从通道。在基于旧框架的模式下,您最多可以使用一个AXI4-Stream主通道和一个AXI4-Stream从通道。

请注意

在基于采样的模式下,当您使用多个流通道时,HDL Coder生成就绪信号,但不生成背压逻辑。如果你想让你的设计处理背压,建模就绪信号在你的设计。

要了解更多信息,请参见使用多个AXI4- stream和AXI4主接口生成HDL IP核

当您使用基于帧的模式对DUT建模时,您可以将多个帧DUT端口映射到AXI4-Stream主通道和AXI4-Stream从通道。当您使用基于帧的模式HDL编码器为所有流端口生成就绪和有效的信号。

具有多个采样率的模型设计

当您运行IP核生成工作流程时,使用HDL Coder软件进行具有多个采样率的设计。将接口端口映射到AXI4- stream主接口或AXI4- stream从接口时,若要使用多个采样速率,请将映射到这些AXI4接口的DUT端口映射为以设计中最快的速率运行或以低于设计速率的速率运行。

HDL Coder运行映射到AXI4-Stream主接口和从接口的DUT端口的速率比模型设计速率慢:

  • 在每N个时钟周期的第一个周期中将AXI4-Stream主通道有效信号设置为高。例如,如果设计速率比慢速率DUT端口快8倍,那么每隔8个时钟周期,第一个时钟周期的有效信号就高。

  • 在AXI4-Stream从接口上断言背压,以确保输入数据以每N个时钟周期一个数据帧的速率流。例如,如果设计速率比慢速率DUT端口快8倍,则第一帧在时钟周期1上流,第二帧在时钟周期9上流,依此类推。

当您将AXI4-Stream Interface DUT端口映射到设计中最快的速率时,有效信号就会很高,确保在AXI4-Stream从接口上没有背压。

在设计具有多个采样速率的模型时,所有ax4 - stream主接口映射的DUT端口必须以相同的速率运行。所有AXI4-Stream从接口映射的DUT端口必须以相同的速率运行。

要了解更多信息,请参见多速率IP核生成

AXI4-Stream数据的接口选项

当你运行IP核生成工作流中具有矢量数据的模型,您可以指定如何将矢量数据作为样本或帧处理包装尺寸.方法将向量数据作为示例处理时,可以指定如何将向量元素打包在一起包装方式选择。

当你运行IP核生成工作流在一个没有任何信号映射到的AXI4- Stream接口的模型上TLAST时,可以指定TLAST方法来注册值DefaultFrameLength选择。

默认帧长

当不对TLAST信号建模时,请为AXI4流主接口指定默认帧长度(TLAST)值。在生成的IP核中为您创建TLAST信号,当有效采样数达到默认帧长计数器中的值时,该信号被断言。当生成的IP核具有AXI4从接口时,HDL Coder生成默认帧长度作为可编程寄存器。当默认帧长寄存器在帧中间被改变时,TLAST计数器状态被重置为零,TLAST信号被提前断言。有关更多信息,请参见TLAST信号(可选).时不选择生成默认的AXI4从接口默认帧长度生成为一个常数值,而不是一个可编程寄存器。

包装尺寸

指定向量数据是作为样本还是作为帧处理:

  • 一个也没有。此值为默认值。当指定为None时,向量被视为帧,向量元素一个接一个地流。例如,当输入是第一个时钟周期中的6乘1矢量时,第一个矢量元素将被流化,第二个矢量元素将在第二个时钟周期中流化,依此类推。要使用此模式,模型必须包含用于输入的Serializer块和用于输出的Deserializer块。的包装方式时不可用包装尺寸设置为None。

  • 所有人。当您指定All时,向量被打包在一起并在单个时钟周期中进行流处理。例如,当输入是一个6乘1的矢量时,所有矢量元素都被打包在一起,并在一个时钟周期中进行流处理。方法指定向量元素的包装方式包装方式选择。

包装方式

当你设置包装尺寸所有,可以指定HDL Coder如何打包向量元素、复杂数据和复杂向量包装方式参数位一致2的幂对齐.此设置适用于AXI4-Stream主通道和从通道。

非复杂矢量数据封装

  • 位一致.当你设置包装方式在此设置中,HDL Coder直接将矢量元素彼此相邻地打包。如果打包的位宽度小于AXI4-Stream通道宽度,则用零填充打包的数据以匹配通道宽度。

    例如,如果AXI4-Stream通道宽度为256位,有4个向量元素,向量元素长30位,则总数据宽度为120位。当包装模式设置为位一致, HDL Coder将AXI4-Stream数据打包,如图所示。

    零填充位对齐矢量数据

  • 2的幂对齐.在这种模式下,矢量元素首先用0填充,直到两个边界的最近幂。然后,填充元素被打包在一起。如果打包的向量位宽度小于AXI4-Stream通道宽度,则打包的数据将用零填充以匹配通道宽度。

    例如,如果AXI4-Stream通道宽度为256位,有4个向量元素,向量元素长30位,则总数据宽度为120位。当包装模式设置为位一致, HDL Coder将AXI4-Stream数据打包,如图所示。当包装模式设置为2的幂对齐, HDL Coder将AXI4-Stream数据打包,如图所示。

    两个对齐数据的零填充功率

    位宽为30的每个向量元素都用位宽为2的零填充,以将向量元素宽度扩展到32,即两个边界的最近幂。

复杂数据打包。当输入数据是复数时,HDL Coder将实部和虚部用零填充到两个边界的最接近幂。然后,HDL Coder将数据打包在一起,并用零填充数据以匹配通道宽度。例如,如果AXI4-Stream通道宽度为64位,而复杂数据类型为ufix7, HDL Coder将流数据打包如下图所示:

具有零填充到两个边界的最接近幂的复杂数据

HDL Coder将复杂数据填充为位宽为1的零,以将实数据包和虚数据包扩展为大小为8,然后将数据填充为宽度为48的零,以将复杂数据帧大小扩展为64,即AXI4-Stream通道宽度。

当使用生成的软件接口模型将复杂数据传输到目标板时,必须像示例图像中所示那样打包复杂数据。

复杂矢量数据封装。在DUT边界上将复杂数据信号建模为帧,遵循基于帧的建模要求。在这种情况下,HDL Coder按照复杂数据打包一节中描述的那样打包帧的复杂数据元素。

或者,如果您想将整个复杂向量作为一个样本,请遵循基于样本的建模部分中的指导方针。HDL Coder设置包装尺寸参数所有包装方式参数2的幂对齐

例如,如果AXI4-Stream通道宽度为64位,则复杂数据类型为ufix7,复向量有三个元素,HDL Coder将数据打包如下图所示:

用零填充到两个边界的最接近幂的复向量

HDL Coder垫复杂的数据:

  • 在每个实向量元素和虚向量元素后面加位宽为1的零,以将数据大小扩展到8,即两个边界的最近幂。

  • 位宽为16的零,将帧大小扩展到64,即AXI4-Stream通道的宽度。

当使用生成的软件接口模型将复杂数据传输到目标板时,必须按照示例图像所示的数据打包格式对复杂数据进行打包。

限制

将标量或矢量DUT端口映射到AXI4-Stream接口时:

  • 赛灵思公司®Zynq®-7000或英特尔®第四的®Prime必须是你的目标平台。

  • Xilinx Vivado®或英特尔Quartus Prime必须是您的合成工具。

  • 处理器/ FPGA同步一定是自由奔跑。

相关的例子

更多关于