主要内容

生成软件接口脚本探测和快速原型HDL IP核

当您运行SoC平台的软硬件协同设计工作流时,您为DUT算法生成一个HDL IP核,然后将该IP核集成到参考设计中。看到SoC平台软硬件协同设计工作流

为了在目标硬件上快速原型和测试HDL IP核,您可以生成一个软件接口脚本。该脚本包含DUT端口和接口映射信息,HDL Coder™使用这些信息来创建AXI驱动程序和访问HDL IP核。

先决条件

生成软件界面

当运行IP Core Generation工作流时,您可以从HDL workflow Advisor UI或命令行生成软件接口脚本和模型。

来自UI,在嵌入式系统集成>生成软件界面任务,选择生成MATLAB软件界面脚本复选框。

当您运行IP核心生成工作流到生成软件界面任务并选择生成MATLAB软件界面脚本复选框,生成两个MATLAB文件:

  • gs_modelName_setup.m,这是一个设置脚本,用于添加AXI4从站和AXI4流接口。该脚本还包含包含端口名称,方向,数据类型和接口映射信息的DUT端口对象。然后,脚本将DUT端口映射到相应的接口。

  • gs_modelName_interface.m,它创建一个目标对象,实例化设置脚本gs_modelName_setup.m,然后连接到目标硬件。然后脚本将读写命令发送到生成的HDL IP核。

如果您定位独立的FPGA板,则无法生成软件界面模型。相反,您可以使用MATLAB AXI主驱动程序生成软件接口脚本并测试IP内核。

  1. 在里面设置目标参考设计任务,集合插入JTAG MATLAB作为AXI Master开启。运行工作流程生成软件界面任务。

  2. 在里面生成软件界面任务,选择生成软件界面脚本复选框并运行此任务。

在命令行处,将HDL Workflow Advisor设置导出为脚本,然后使用Workflow Configuration对象使用这些属性。此脚本指定通过生成模型和脚本来运行软件界面任务。如果通过将RUNTASKGENERATESOFTWAREINTERSFACE设置为FALSE来跳过任务,则不会生成模型和脚本。看到使用脚本配置和运行IP核生成工作流

%导出工作流配置脚本%......%%加载模型load_system (“hdlcoder_led_blinking”);%%模型HDL参数%设置模型HDL参数%......hdlset_param (“hdlcoder_led_blinking”'合成池''Xilinx Vivado');hdlset_param (“hdlcoder_led_blinking”'工作流'“IP核心代”);%......%设置运行的工作流任务中国。RunTaskGenerateSoftwareInterface = true;中国。GenerateSoftwareInterfaceModel = true;中国。GenerateSoftwareInterfaceScript = true;%......%%运行工作流hdlcoder.runWorkflow (“hdlcoder_led_blinking / led_counter”、中国);

软件界面脚本

为了快速原型化和测试HDL IP核心功能,使用软件接口脚本。该脚本是基于参考设计和目标平台接口表设置而生成的MATLAB文件。它包含命令,使您能够连接到目标硬件,并从MATLAB中写入或读取生成的IP核。对于独立的FPGA板,使用生成的软件接口脚本,使用MATLAB AXI Master验证HDL IP核功能。

软件界面脚本具有与原始模型相同的名称和前缀gs_和Postfix._interface.该脚本实例化一个setup函数,该函数是在启用软件接口脚本生成时生成的。例如,这段代码显示了为模型生成的setup函数hdlcoder_sfir_fixed_stream.slx,与参考设计和目标平台接口表设置之前指定。setup函数包含针对AXI4从接口和AXI4- stream接口的命令,HDL Coder使用这些接口来控制生成的HDL IP核中的DUT端口,这些端口映射到相应的接口。

功能gs_hdlcoder_sfir_fixed_stream_setup (hFPGA)%---------------------------------------------------------------------%软件接口脚本设置% Generated with MATLAB 9.10 (R2021a) at 09:13:05 on 10/07/2020。%这个函数是为从设计'hdlcoder_sfir_fixed_stream'生成的IP核创建的。%在“FPGA”对象上运行此功能以配置它%与生成的IP核相同的接口。%---------------------------------------------------------------------% % AXI4-LiteaddAXI4SlaveInterface (hFPGA...“InterfaceID”“AXI4-Lite”...“BaseAddress”, 0 xa0000000,...“AddressRange”, 0 x10000);hPort_h_in1 = hdlcoder。DUTPort (“h_in1”...“方向”“在”...“数据类型”10) numerictype(16日,...“维度”[1],...“iointerface”“AXI4-Lite”...“IOInterfaceMapping”“0 x100”);hport_h_in2 = hdlcoder.dutport(“h_in2”...“方向”“在”...“数据类型”10) numerictype(16日,...“维度”[1],...“iointerface”“AXI4-Lite”...“IOInterfaceMapping”“0 x104”);hport_h_in3 = hdlcoder.dutport(“h_in3”...“方向”“在”...“数据类型”10) numerictype(16日,...“维度”[1],...“iointerface”“AXI4-Lite”...“IOInterfaceMapping”“0 x108”);hPort_h_in4 = hdlcoder。DUTPort (“h_in4”...“方向”“在”...“数据类型”10) numerictype(16日,...“维度”[1],...“iointerface”“AXI4-Lite”...“IOInterfaceMapping”“0 x10c”);mapPort(hFPGA, [hPort_h_in1, hPort_h_in2, hPort_h_in3, hPort_h_in4]);%% AXI4-流addAXI4StreamInterface (hFPGA...“InterfaceID”“AXI4-Stream”...“写入写”, 真的,...“WriteFrameLength”, 1024,...“可读数”, 真的,...“readflamelength”,1024);hport_x_in_data = hdlcoder.dutport(“x_in_data”...“方向”“在”...“数据类型”10) numerictype(16日,...“维度”[1],...“iointerface”“AXI4-Stream”);hPort_y_out_data = hdlcoder。DUTPort (“y_out_data”...“方向”“出去”...“数据类型”,numerictype(1,32,20),...“维度”[1],...“iointerface”“AXI4-Stream”);mapPort (hFPGA [hPort_x_in_data hPort_y_out_data]);结束

这是一个示例设置函数,用于将总线映射到AXI4从接口的模型。如脚本所示,总线元素表示为的子端口hdlcoder。DUTPort对象。

功能gs_AXI4SlaveMultipleBus_setup (hFPGA)%---------------------------------------------------------------------%软件接口脚本设置%生成MATLAB 9.10 (R2021a)在16:20:32在16/11/2020。%这个函数是为从设计'AXI4SlaveMultipleBus'生成的IP核创建的。%在"fpga"对象上运行此函数,将其配置为与生成的IP核相同的接口。%---------------------------------------------------------------------% % AXI4addAXI4SlaveInterface (hFPGA...“InterfaceID”“AXI4”...“BaseAddress”,0x400d0000,...“AddressRange”, 0 x10000);hPort_bus1_in_scalar_in1 = hdlcoder。DUTPort (“scalar_in1”...“方向”“在”...“数据类型”numerictype (“单一”),...“维度”[1],...“iointerface”“AXI4”...“IOInterfaceMapping”“0 x100”);hPort_bus1_in_scalar_in2 = hdlcoder。DUTPort (“scalar_in2”...“方向”“在”...“数据类型”numerictype (8,0),...“维度”[1],...“iointerface”“AXI4”...“IOInterfaceMapping”“0 x104”);hPort_bus1_in_scalar_in3 = hdlcoder。DUTPort (“scalar_in3”...“方向”“在”...“数据类型”,numerictype(1,32,0),...“维度”[1],...“iointerface”“AXI4”...“IOInterfaceMapping”“0 x108”);hPort_bus1_in_scalar_in4 = hdlcoder。DUTPort (“scalar_in4”...“方向”“在”...“数据类型”10) numerictype(16日,...“维度”[1],...“iointerface”“AXI4”...“IOInterfaceMapping”“0 x10c”);hPort_bus1_in_vector_in = hdlcoder。DUTPort (“vector_in”...“方向”“在”...“数据类型”numerictype(0, 32岁,0),...“维度”(1 - 2),...“iointerface”“AXI4”...“IOInterfaceMapping”“0x110”);hport_bus1_in = hdlcoder.dutport(“bus1_in”...“方向”“在”...“数据类型”“公共汽车”...“维度”[1],...“iointerface”“AXI4”...“SubPorts”, [hPort_bus1_in_scalar_in1, hPort_bus1_in_scalar_in2, hPort_bus1_in_scalar_in3, hPort_bus1_in_scalar_in4, hPort_bus1_in_vector_in]);

软件接口脚本实例化此设置功能以连接到目标并发送读取或写入命令。您可以通过使用原始模型中的DUT取消注释并发送有意义的数据。在与硬件接口后,脚本断开与与之关联的硬件资源的连接fpga目的。

%---------------------------------------------------------------------%软件界面脚本% Generated with MATLAB 9.10 (R2020b) at 09:13:10 on 10/07/2020。% This script was created for the IP Core generated from design 'hdlcoder_sfir_fixed_stream'. % This script was created for the IP Core generated from design 'hdlcoder_sfir_fixed_stream . %%使用此脚本访问设计中的DUT端口映射到兼容的IP核心接口。%您可以在设计中写入输入端口,并直接从MATLAB的输出端口读取。%写入输入端口,使用“writePort”命令,指定端口名称和输入数据。%在写入之前,输入数据将被转换为DUT端口的数据类型。%从输出端口读取,使用“readPort”命令并指定端口名称。%输出数据将以与DUT端口相同的数据类型返回。%使用“发布”命令来释放MATLAB对硬件资源的控制。%---------------------------------------------------------------------%%创建FPGA对象hFPGA = fpga (“Xilinx”);%%安装fpga对象%配置“fpga”对象与生成的IP核具有相同的接口gs_hdlcoder_sfir_fixed_stream_setup (hFPGA);%%写/读DUT端口%将以下行取消注释为生成的IP内核中的写入/读取DUT端口。%更新写命令中的示例数据,使用有意义的数据写入DUT。% % AXI4-LitewritePort (hFPGA“h_in1”, 0 ([1]));writePort (hFPGA“h_in2”, 0 ([1]));writePort (hFPGA“h_in3”, 0 ([1]));writePort (hFPGA“h_in4”, 0 ([1]));%% AXI4-流writePort (hFPGA“x_in_data”, 0 ([1024]));data_y_out_data = readPort (hFPGA,“y_out_data”);%%发布硬件资源发行版(hFPGA)

看到基于MATLAB命令的实时数据硬件原型FPGA设计

这是一个示例软件接口脚本,用于为具有映射到AXI4从接口的总线数据类型的模型读写数据。

要写入总线端口,您可以:

  • 通过指定完整的子端口名写入单个子端口,例如bus1_in.scalar_in1

  • 通过指定顶级端口名写入整个总线,例如bus1_in.将要写入的数据传递为文件名与子端口名称匹配的结构体。不是所有的子端口名都需要是结构的一部分。当写到端口时,没有相应结构字段的子端口被跳过。

要从总线端口读取,你可以:

  • 通过指定完整的子端口名读取单个子端口,例如bus1_out.scalar.in1

  • 通过指定顶部端口名读取整个总线端口,例如bus1_out

%---------------------------------------------------------------------%软件界面脚本在16:202020,Matlab 9.10(R2021A)生成的%。%这个脚本是为从设计'AXI4SlaveMultipleBus'生成的IP核创建的。%使用此脚本访问设计中映射到兼容IP核接口的DUT端口。%您可以在设计中写入输入端口,并直接从MATLAB的输出端口读取。%写入输入端口,使用“writePort”命令,指定端口名称和输入数据。在写入之前,输入数据将被强制转换为DUT端口的数据类型。%从输出端口读取,使用“readPort”命令并指定端口名称。输出数据将以与DUT端口相同的数据类型返回。%使用“发布”命令来释放MATLAB对硬件资源的控制。%---------------------------------------------------------------------%%创建FPGA对象hFPGA = fpga (“Xilinx”);%%安装fpga对象%此函数将“FPGA”对象配置为与生成的IP核心相同的接口gs_AXI4SlaveMultipleBus_setup (hFPGA);%%写/读DUT端口%将以下行取消注释为生成的IP内核中的写入/读取DUT端口。%更新写命令中的示例数据,使用有意义的数据写入DUT。% % AXI4%有两种方法可以编写DUT总线端口%(1).准备一个struct值并将其写入整个总线端口。writePort (hFPGA“bus1_in”,struct());%(2)。为每个总线的每个成员准备一个值并单独写入。writePort (hFPGA“bus1_in.scalar_in1”, 0 ([1]));writePort (hFPGA“bus1_in.scalar_in2”, 0 ([1]));writePort (hFPGA“bus1_in.scalar_in3”, 0 ([1]));writePort (hFPGA“bus1_in.scalar_in4”, 0 ([1]));writePort (hFPGA“bus1_in.vector_in”,零([1 2]));

另请参阅

对象

功能

相关话题