主要内容

模型设计AXI4奴隶接口的一代

执行轻量级数据传输或访问控制寄存器,使用AXI4奴隶接口。AXI4奴隶接口包括AXI4和AXI4-Lite接口。与高密度脂蛋白编码器™软件,你不需要实现AXI4或AXI4-Lite协议在您的模型中。高密度脂蛋白的软件生成AXI4或AXI4-Lite接口IP核。

当你模型设计、指定数据端口,要映射到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是硬件子系统。模型一个计数器,闪烁的led FPGA板。两个输入端口,Blink_frequencyBlink_direction、控制港口确定LED闪烁频率和方向。所有的块之外的子系统led_counter软件实现。

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

当您运行这个IP核心代工作流程,设置目标接口任务,你看到那个港口Blink_frequency,Blink_direction,Read_back映射到AXI4-Lite接口。

更多地了解这个例子中,看到的:

地图矢量港口AXI4奴隶接口

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

地图矢量港口时,高密度脂蛋白编码器使用额外的闪光灯寄存器为每个端口与IP核心算法逻辑保持同步。输入端口,闪光灯寄存器控制使信号的影子寄存器,使IP核心算法逻辑同时看到更新后的向量元素。输出端口,闪光灯要读取寄存器确保矢量数据同步捕获。

为例,展示了如何将向量映射端口AXI4-Lite接口,打开模型hdlcoder_led_vector

open_system (“hdlcoder_led_vector”)

在这个模型中,子系统DUT实现了LED闪烁算法和向量输出端口。当您运行这个IP核心代工作流,你会看到输入端口和输出端口映射到AXI4-Lite接口的设置目标接口的任务。

欲了解更多,请看IP核心代工作流MicroBlaze处理器:Xilinx Kintex-7 KC705

双数据类型和数据映射大于32位AXI4-Slave接口

当你DUT港口有双数据类型或数据类型宽度大于32位,HDL编码:

  • 将数据分为个人32位字匹配寄存器的宽度AXI4或AXI4-Lite接口。

  • 分配每个32位字一个单独的地址。你可以找到的开始和结束地址寄存器地址映射下的IP核生成报告部分。

  • 创建一个额外的闪光灯在DUT寄存器同步数据边界。闪光灯的逻辑行为一样的选通注册向量港口。关于向量港口处理的更多信息,见地图矢量港口AXI4奴隶接口

学习HDL编码器分裂和地图数据与单个比特宽度大于32位地址。在这个例子中模型有三个输入端口和输出端口:

  • 输入和输出端口:标量uint64数据类型。

  • 输入和输出端口二:标量ufix45_En10数据类型。

  • 输入和输出端口三:向量的三个元素与64位数据类型。

这张图片显示了示例DUT与相应数据类型的输入和输出端口上。每个端口映射到AXI4接口。

例子DUT宽度大于32位数据映射到DUT港口

HDL编码处理DUT的时候将数据转换为32位字和每一个32位字映射到一个特定的地址。这张图片显示了目标接口配置和注册地址映射生成的IP核心的部分报告。寄存器地址映射部分提到的起始地址,32位字和最后一个数据寄存器地址位宽度大于32位。

目标平台接口表和寄存器地址映射的部分IP核生成报告

输入端口一个64位的数据分成两个32位的字。这两个词被映射到地址0 x1000 x104。位0到31映射到0 x100并通过63被映射到32位0 x104。输出端口是跨越地址0 x1480 x14c

两个输入端口的45位数据分成两个32位的字。这两个词被映射到地址0 x1100 x114。位0到31映射到0 x110并通过63被映射到32位0 x114。输出端口2是跨越地址0 x1580 x15c

输入三个港口,每个向量元素分为两个32位的字。这导致共有六个32位字为整个向量。六个字映射到地址0 x120, 0 x124 0 x128 0 x12c, x134 0 x130, 0

  • 位0到31日第一个向量元素的映射0 x120

  • 位32到63年第一个向量元素的映射0 x124

  • 位0到31日第二个向量元素的映射0 x128

  • 位32到63年的第二个向量元素映射到0 x12c

  • 位0到31日第三个向量元素的映射0 x130

  • 位32到63年的第三个向量元素映射到0 x134

输出端口三分为6个32位字。六个字映射到地址0 x180, 0 x184 0 x188 0 x18c, x194 0 x190, 0

限制

高密度脂蛋白编码器不支持映射:金宝app

  • 宽度大于128位AXI4-Slave港口

  • 复数数据AXI4-Slave港口

  • 移位寄存器的数据AXI4-Slave港口

总线数据类型映射到AXI4奴隶接口

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

地图总线数据类型时,高密度脂蛋白编码器为每个数据端口分配一个唯一的地址要映射到AXI4接口。顶层和子巴士没有偏移地址注册。单独的标量或矢量总线的地址映射元素并不是连续的。

模型汽车元素

模型一辆公共汽车元素通过总线创造者块或总线块创建一个总线端口。

模型车元素通过总线创造者块。

不同的数据类型与总线连接到总线的创造者块创造者块参数窗口打开

模型一辆公共汽车元素通过总线模块:不同的数据类型连接到总线与总线块元素块参数winddow开放

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

指定AXI4奴隶寄存器的初始值

当您运行这个IP核心代工作流或金宝app仿真软件实时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 /领导”,“IOInterfaceOptions”)

为标量端口指定初始值。

hdlset_param (“hdlcoder_led_blinking / led_counter /领导”,“IOInterfaceOptions”,{“RegisterInitialValue”,“5”});

为总线设置初始值,指定一个struct元素名称字段名称匹配的公共汽车。例如,总线数据类型初始值

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

bus1_initialvalue =结构(“scalar_in1”1“scalar_in2”, 2, scalar_in3, 3,‘scalar_in4’, 4, vector_in, 1 [3])
总线初始值变量作为总线数据类型初始值

读AXI4奴隶接口的返回值

当您运行这个IP核心代工作流,你可以读取的值写入AXI4奴隶寄存器使用AXI4奴隶接口。例如,您可以读取的值写入AXI4奴隶注册使用devmemLinux的命令®ARM处理器的控制台。如果你有HDL校验™安装,您可以使用MATLAB作为AXI主IP读值。

要使用这个能力,生成RTL代码和IP核心的任务IP核心代工作流,选择让读回到AXI4奴隶写寄存器复选框,然后运行生成RTL代码和IP核心任务

当您运行这个任务,HDL编码保存读回设置上启用模型。在高密度脂蛋白块属性DUT的子系统,在IP核心参数部分的目标规范选项卡中,可以看到一个参数AXI4RegisterReadback设置为。如果你出口HDL工作流顾问运行一个脚本,你看到这个设置保存在模型通过使用hdlset_param

hdlset_param (“hdlcoder_led_vector / DUT”,“AXI4RegisterReadback”,“上”);

这些例子展示了如何通过使用读回值devmem命令在Linux控制台程序如腻子™。

回读值映射标量港口AXI4接口时,首先将值写入AXI4寄存器,然后读取的值。你可以看到AXI4寄存器的内存地址的IP核心生成报告。

回读值向量映射端口AXI4接口时,你第一次写AXI4寄存器,然后写选通脉冲寄存器地址0 x1回,然后读值。你可以看到AXI4寄存器的内存地址和IP核的闪光灯寄存器生成报告。

优化AXI4奴隶读逻辑

当你的模型包含几个寄存器和输出你想读回数据从多个AXI4奴隶寄存器,读回逻辑成为长mux链可以减少合成频率。如果您选择了上启用回读AXI4奴隶写寄存器设置在生成RTL代码和IP核心任务,HDL编码增加了为每个AXI4 mux寄存器地址译码器的逻辑。随着AXI4奴隶寄存器的数量增加,mux链变得更长,这进一步降低了合成频率。

你可以回读逻辑优化,达到你想要的目标频率。当您运行这个IP核心代工作流程,生成RTL代码和IP核心任务时,您会看到一个设置大举裁员流水线寄存器比奴隶港口。此设置的默认值汽车。此设置指示多少AXI4奴隶寄存器流水线寄存器插入。例如,一个大举裁员流水线寄存器比奴隶港口20.意味着一个流水线寄存器插入每20.AXI奴隶寄存器。的汽车设置意味着代码生成器插入一定数量的管道AXI4奴隶端口数量取决于您指定的港口和合成工具。你可以禁用这一设置或指定一个有效的值,“掉”,“10”、“20”,“35”,“50”

运行这个任务时,HDL编码保存指定的值的设置模式。在高密度脂蛋白块属性DUT的子系统,在IP核心参数部分的目标规范选项卡中,可以看到一个参数AX4SlavePortToPipelineRegisterRatio设置为指定的值。如果你出口HDL工作流顾问运行一个脚本,你看到这个设置保存在模型通过使用hdlset_param

hdlset_param (“hdlcoder_led_vector / DUT”,“AXI4SlavePortToPipelineRegisterRatio”,“20”);

相关的话题