主要内容

AXI4从界面生成模型设计

要执行轻量级数据传输或访问控制寄存器,请使用AXI4从接口。AXI4从接口包括AXI4和AXI4-Lite接口。使用HDL编码器™软件,您不必在模型中实现AXI4或AXI4-Lite协议。该软件在HDL IP核心中生成AXI4或AXI4-Lite接口。

绘制设计时,请指定数据端口,您要将要映射到AXI4从接口。然后,HDL编码器将数据端口映射到内存映射的寄存器,并为端口分配地址偏移量。

注意事项

当您将DUT端口映射到AXI4或AXI4- lite接口时:

  • 您可以将设计中的所有标量,向量或总线端口映射到AXI4或AXI4-Lite接口。

  • 对于相同的设计,您不能将一些DUT端口映射到AXI4接口,而将其他DUT端口映射到AXI4- lite接口。

将标量端口映射到AXI4从接口

当在DUT接口端口上使用标量数据类型时,可以直接将接口端口映射到AXI4或AXI4- lite接口。代码生成器为您想要映射到AXI4接口的每个数据端口分配一个唯一的地址。

对于演示如何将标量端口映射到AXI4-Lite接口的示例,请打开模型hdlcoder_led_blinking.

open_system ('hdlcoder_led_blinking'的)

在这个模型中,子系统LED_COUNTER.是硬件子系统。它模拟了一个计数器,使FPGA板上的led闪烁。两个输入端口,Blink_frequencyBlink_direction,是决定LED闪烁频率和方向的控制端口。子系统外的所有块LED_COUNTER.是用于软件实现的。

在Si金宝appmulink.®,你可以使用滑块获得块或手动开关块调整硬件子系统的输入值。ARM处理器通过写入嵌入式软件中的AXI接口可访问寄存器来控制生成的IP核心。硬件子系统的输出端口连接到LED硬件。您可以使用输出端口Read_back将数据读回处理器。

当你运行IP核心生成工作流程,在设置目标界面任务中,您可以看到端口Blink_frequencyBlink_direction,Read_back映射到AXI4-Lite接口。

要了解有关此示例的更多信息,请参阅:

将矢量端口映射到AXI4从接口

在DUT接口端口上使用向量数据类型时,可以直接将接口端口映射到AXI4或AXI4- lite接口。代码生成器为您想要映射到AXI4接口的每个数据端口分配一个唯一的地址。

当映射矢量端口时,HDL编码器为每个端口使用额外的频闸寄存器,以保持与IP核算法逻辑的同步。对于输入端口,频闪寄存器控制一组阴影寄存器的使能信号,使IP核心算法逻辑同时看到更新的向量元素。对于输出端口,频闸寄存器确保要读取的矢量数据被同步捕获。

有关显示如何将传染媒介端口映射到Axi4-Lite接口的示例,请打开模型hdlcoder_led_vector

open_system (“hdlcoder_led_vector”的)

在这个模型中,子系统DUT实现LED闪烁算法,具有矢量输出端口。当你运行IP核心生成工作流中,您可以看到输入端口和输出端口映射到设置目标界面的任务。

想要了解更多,请看使用MicroBlaze处理器的IP核生成工作流:Xilinx Kintex-7 KC705

将总线数据类型映射到AXI4从接口

在DUT接口端口使用总线数据类型时,可以直接将接口端口映射到AXI4或AXI4-Lite接口。

当您映射总线数据类型时,HDL编码器为要映射到AXI4接口的每个数据端口为每个数据端口分配唯一地址。顶级和子级总线没有寄存器偏移地址。单独的标量或矢量总线元素的地址映射不是连续的。

模型总线元素

通过使用总线创建器块或总线元素块来创建总线端口,对总线元素进行建模。

使用总线创建器块对总线元素进行建模。

连接到总线创建块并打开总线创建块参数窗口的不同数据类型

通过使用总线元素块对总线元素建模:不同的数据类型连接到总线元素块,总线元素块参数窗口打开

有关更多信息,请参见将总线数据类型映射到AXI4从接口

指定AXI4从寄存器的初始值

当你运行IP核心生成工作流或金宝appSimulink实时FPGA I / O.工作流程,您可以指定映射到AXI4从寄存器的输入端口的初始值。您可以在映射到这些目标接口时指定初始值:

  • AXI4

  • AXI4-Lite

  • PCIE.

默认情况下,初始值为零。指定一个非零值:

  1. 在目标平台接口表中,将输入DUT端口映射到AXI4从接口时,选项按钮出现在界面选项列。

  2. 单击选项按钮,然后指定RegisterInitialValue

设置的值保存在DUT上轮廓尺寸块作为HDL块属性ioInterfaceOptions.目标规范标签。例如,如果将DUT输入端口映射到AXI4-Lite接口,请设置RegisterInitialValue5.,然后运行设置目标界面任务。,ioInterfaceOptions.该输入端口的属性以值保存{'RegisterInitialValue','5'}

查看ioInterfaceOptions.价值,如果您的DUT端口的完整路径是hdlcoder_led_blinking / led_counter /领导, 进入:

hdlget_param ('HDLCODER_LED_BLINKING / LED_COUNTER / LED'......'ioInterfaceOptions'的)

指定标量端口的初始值。

hdlset_param ('HDLCODER_LED_BLINKING / LED_COUNTER / LED'......'ioInterfaceOptions', {“RegisterInitialValue”“5”});

要为总线设置初始值,请指定其字段名与总线元素名匹配的结构体。例如,总线数据类型初始值

您还可以使用在MATLAB中定义的变量来指定初始值®工作区。例如:

struct('scalar_in1',1,'scalar_in2',2,'scalar_in3',3,'scalar_in4',4,'vector_in',[1 3])
总线初始值变量作为总线数据类型初始值

回读AXI4从接口的值

当你运行IP核心生成工作流程,您可以使用AXI4从接口读取将写入AXI4从寄存器写入的值。例如,您可以通过使用使用的读取将写入AXI4从寄存器写入的值devmemARM处理器Linux控制台中的命令。如果安装了HDL Verifier™,则可以使用MATLAB作为AXI主IP来读取值。

使用此功能,在此处生成RTL代码和IP核心任务的IP核心生成工作流,选择在AXI4从写寄存器上启用回读复选框,然后运行生成RTL代码和IP核心任务

运行此任务时,HDL编码器会保存在模型上启用的读回设置。在DUT子系统的HDL块属性中,在IP核心参数部分目标规范选项卡时,将看到一个参数AXI4RegisterReadback设置为.如果导出HDL Workflow Advisor运行到脚本,请通过使用,查看模型上保存的此设置hdlset_param.

hdlset_param (“hdlcoder_led_vector / DUT”'axi4registerread背''在');

这些示例显示如何通过使用读取值devmem使用Putty™等程序的Linux控制台命令。

当将标量端口映射到AXI4接口时,要回读值,首先将值写入AXI4寄存器,然后回读值。您可以在IP Core Generation报告中看到AXI4寄存器的内存地址。

要在将向量端口映射到AXI4接口时读回值,首先要写入AXI4寄存器,然后写入频闪寄存器地址0 x1,然后读回值。您可以在IP Core Generation报告中看到AXI4寄存器和频闪寄存器的内存地址。

优化AXI4从站读取逻辑

当您的模型包含几个输出寄存器,并且您希望从多个AXI4从寄存器读取数据时,读回逻辑就变成了一个可以降低合成频率的长多路复用器链。如果您选择在AXI4从写寄存器上启用回读设置在生成RTL代码和IP核心任务时,HDL编码器在地址解码器逻辑中为每个AXI4寄存器添加多路复用器。随着AXI4从寄存器数量的增加,多路复用链变得更长,这进一步降低了合成频率。

您可以优化读回逻辑并实现您想要的目标频率。当你运行IP核心生成工作流程,在生成RTL代码和IP核心任务,你看到一个设置AX4从端口与管道寄存器的比率.此设置的默认值是汽车.该设置指示要为多少个AXI4从寄存器插入管道寄存器。例如,一个AX4从端口与管道寄存器的比率20.意味着每一个都要插入一个管道寄存器20.AXI SLAVE寄存器。这汽车设置意味着代码生成器根据您指定的端口数和综合工具,将一定数量的管道插入AXI4从端口。您可以禁用此设置或选择之间的号码5.50.对于这个比率。

当您运行此任务时,HDL Coder将保存您为模型上的设置指定的值。在DUT子系统的HDL块属性中,在IP核心参数部分目标规范选项卡时,将看到一个参数AX4SlavePortToPipelineRegisterRatio设置为您指定的值。如果导出HDL Workflow Advisor运行到脚本,请通过使用,查看模型上保存的此设置hdlset_param.

hdlset_param (“hdlcoder_led_vector / DUT”......“AXI4SlavePortToPipelineRegisterRatio”'20');

相关的话题