要执行轻量级数据传输或访问控制寄存器,请使用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接口。
当在DUT接口端口上使用标量数据类型时,可以直接将接口端口映射到AXI4或AXI4- lite接口。代码生成器为您想要映射到AXI4接口的每个数据端口分配一个唯一的地址。
对于演示如何将标量端口映射到AXI4-Lite接口的示例,请打开模型hdlcoder_led_blinking.
.
open_system ('hdlcoder_led_blinking'的)
在这个模型中,子系统LED_COUNTER.
是硬件子系统。它模拟了一个计数器,使FPGA板上的led闪烁。两个输入端口,Blink_frequency
和Blink_direction
,是决定LED闪烁频率和方向的控制端口。子系统外的所有块LED_COUNTER.
是用于软件实现的。
在Si金宝appmulink.®,你可以使用滑块获得块或手动开关块调整硬件子系统的输入值。ARM处理器通过写入嵌入式软件中的AXI接口可访问寄存器来控制生成的IP核心。硬件子系统的输出端口连接到LED硬件。您可以使用输出端口Read_back
将数据读回处理器。
当你运行IP核心生成
工作流程,在设置目标界面任务中,您可以看到端口Blink_frequency
那Blink_direction
,Read_back
映射到AXI4-Lite接口。
要了解有关此示例的更多信息,请参阅:
在DUT接口端口上使用向量数据类型时,可以直接将接口端口映射到AXI4或AXI4- lite接口。代码生成器为您想要映射到AXI4接口的每个数据端口分配一个唯一的地址。
当映射矢量端口时,HDL编码器为每个端口使用额外的频闸寄存器,以保持与IP核算法逻辑的同步。对于输入端口,频闪寄存器控制一组阴影寄存器的使能信号,使IP核心算法逻辑同时看到更新的向量元素。对于输出端口,频闸寄存器确保要读取的矢量数据被同步捕获。
有关显示如何将传染媒介端口映射到Axi4-Lite接口的示例,请打开模型hdlcoder_led_vector
.
open_system (“hdlcoder_led_vector”的)
在这个模型中,子系统DUT
实现LED闪烁算法,具有矢量输出端口。当你运行IP核心生成
工作流中,您可以看到输入端口和输出端口映射到设置目标界面的任务。
在DUT接口端口使用总线数据类型时,可以直接将接口端口映射到AXI4或AXI4-Lite接口。
当您映射总线数据类型时,HDL编码器为要映射到AXI4接口的每个数据端口为每个数据端口分配唯一地址。顶级和子级总线没有寄存器偏移地址。单独的标量或矢量总线元素的地址映射不是连续的。
通过使用总线创建器块或总线元素块来创建总线端口,对总线元素进行建模。
使用总线创建器块对总线元素进行建模。
通过使用总线元素块对总线元素建模:
有关更多信息,请参见将总线数据类型映射到AXI4从接口.
当你运行IP核心生成
工作流或金宝appSimulink实时FPGA I / O.
工作流程,您可以指定映射到AXI4从寄存器的输入端口的初始值。您可以在映射到这些目标接口时指定初始值:
AXI4
AXI4-Lite
PCIE.
默认情况下,初始值为零。指定一个非零值:
在目标平台接口表中,将输入DUT端口映射到AXI4从接口时,选项按钮出现在界面选项列。
单击选项按钮,然后指定RegisterInitialValue.
设置的值保存在DUT上轮廓尺寸块作为HDL块属性ioInterfaceOptions.在目标规范标签。例如,如果将DUT输入端口映射到AXI4-Lite接口,请设置RegisterInitialValue到5.
,然后运行设置目标界面任务。,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])
当你运行IP核心生成
工作流程,您可以使用AXI4从接口读取将写入AXI4从寄存器写入的值。例如,您可以通过使用使用的读取将写入AXI4从寄存器写入的值devmem
ARM处理器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从写寄存器上启用回读设置在生成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');