生成主机接口脚本探测和快速原型HDL IP核
当您运行SoC平台的软硬件协同设计工作流时,您为DUT算法生成一个HDL IP核,然后将该IP核集成到参考设计中。看到SoC平台软硬件协同设计工作流程.
为了在目标硬件上快速原型化和测试HDL IP核,您可以生成一个主机接口脚本。该脚本包含DUT端口和接口映射信息,HDL Coder™使用这些信息创建AXI驱动程序并访问HDL IP核。
先决条件
一个目标平台,如ZedBoard,您希望在其中部署软件接口模型。
第三方合成工具的最新版本,如Xilinx®Vivado®.看到HDL语言支持和支持的第三方工具和硬件.MATLAB中®会话,设置已安装的合成工具的路径
hdlsetuptoolpath
函数。
生成软件界面
当运行IP Core Generation工作流时,您可以从HDL workflow Advisor UI或命令行生成主机接口脚本和软件接口模型。
从UI,在嵌入式系统集成>生成软件界面任务,选择您的主机目标接口然后选择生成主机接口脚本复选框。
当您运行IP核生成工作流到生成软件界面任务,并选择生成主机接口脚本复选框,生成两个MATLAB文件:
gs_modelName_setup.m
,这是一个添加AXI4从接口和AXI4- stream接口的设置脚本。该脚本还包含DUT端口对象,这些对象具有端口名称、方向、数据类型和接口映射信息。然后脚本将DUT端口映射到相应的接口。gs_modelName_interface.m
,它创建一个目标对象,实例化设置脚本gs_modelName_setup.m
,然后连接到目标硬件。脚本然后向生成的HDL IP核发送读和写命令。
如果您的目标是独立的FPGA板,则无法生成软件接口模型。相反,您可以生成主机接口模型、主机接口脚本或两者都生成,并使用AXI Manager驱动程序测试IP核。
在设定目标参考设计任务,设置插入AXI管理器(需要HDL验证器)来
JTAG
或以太网
基于主机和FPGA板之间通信的接口。对于以太网,请使用董事会的IP地址参数。请注意
默认情况下,
以太网
选项只适用于Artix®- 735t火炮,Kintex®-7 KC705和Virtex®7 VC707董事会。如果要为其他具有以太网物理层(PHY)的Xilinx板启用此选项,需要手动添加以太网媒体访问控制器集线器IPplugin_board
文件使用addEthernetMACInterface
方法之前启动高密度脂蛋白工作流顾问工具。运行工作流到生成软件界面的任务。
在生成软件界面任务,选择生成主机接口脚本复选框并运行此任务。
在命令行中,将HDL Workflow Advisor设置导出到脚本中,然后将这些属性与Workflow Configuration对象一起使用。该脚本通过生成软件接口模型和主机接口脚本指定运行软件接口任务。如果您通过将RunTaskGenerateSoftwareInterface设置为false来跳过该任务,那么就不会生成模型和脚本。看到使用脚本配置和运行IP核生成工作流.
导出工作流配置脚本%……%%加载模型load_system (“hdlcoder_led_blinking”);模型HDL参数设置HDL模型参数%……hdlset_param (“hdlcoder_led_blinking”,“SynthesisTool”,“Xilinx Vivado”);hdlset_param (“hdlcoder_led_blinking”,“工作流程”,“IP核心代”);%……设置工作流任务运行中国。RunTaskGenerateSoftwareInterface = true;中国。GenerateSoftwareInterfaceModel = true;中国。GenerateHostInterfaceScript = true;%……%%运行工作流hdlcoder.runWorkflow (“hdlcoder_led_blinking / led_counter”、中国);
主机接口脚本
为了快速创建原型和测试HDL IP核心功能,请使用主机接口脚本。该脚本是基于参考设计和目标平台接口表设置生成的MATLAB文件。它包含命令,使您能够连接到目标硬件,并从MATLAB中写入或读取生成的IP核。对于独立的FPGA板,使用生成的主机接口脚本通过使用AXI Manager来验证HDL IP核功能。
主机接口脚本的名称与带有前缀的原始模型相同gs_
和后缀_interface
.该脚本实例化一个设置函数,该函数是在启用生成主机接口脚本时生成的。例如,这段代码显示了为模型生成的setup函数hdlcoder_sfir_fixed_stream.slx
,连同先前指定的参考设计及目标平台接口表设置。setup函数包含用于AXI4从接口和AXI4流接口的命令,HDL Coder使用这些命令来控制生成的HDL IP核中的DUT端口,这些端口映射到相应的接口。
函数gs_hdlcoder_sfir_fixed_stream_setup (hFPGA)%--------------------------------------------------------------------------主机接口脚本设置%%由MATLAB 9.12 (R2022a)在2022年10月1日14:33:46生成。此函数是为设计'hdlcoder_sfir_fixed_stream'生成的IP Core创建的。%在“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-StreamaddAXI4StreamInterface (hFPGA...“InterfaceID”,“AXI4-Stream”,...“WriteEnable”,真的,...“WriteFrameLength”, 1024,...“ReadEnable”,真的,...“ReadFrameLength”, 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”,...“方向”,“出去”,...“数据类型”20 numerictype(32岁),...“维度”[1],...“IOInterface”,“AXI4-Stream”);mapPort (hFPGA [hPort_x_in_data hPort_y_out_data]);结束
这是一个示例设置函数,用于将总线映射到AXI4从接口的模型。如脚本所示,总线元素表示为的子端口hdlcoder。DUTPort
对象。
函数gs_AXI4SlaveMultipleBus_setup (hFPGA)%--------------------------------------------------------------------------主机接口脚本设置%%由MATLAB 9.12 (R2022a)在2022年10月1日14:33:46生成。此函数是为从设计“AXI4SlaveMultipleBus”生成的IP核创建的。%在“fpga”对象上运行此函数,将其配置为与生成的IP核相同的接口。%--------------------------------------------------------------------------% % AXI4addAXI4SlaveInterface (hFPGA...“InterfaceID”,“AXI4”,...“BaseAddress”, 0 x400d0000,...“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”,“0 x110”);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
对象。
%--------------------------------------------------------------------------%主机接口脚本%%由MATLAB 9.12 (R2022a)在2022年10月1日14:33:46生成。这个脚本是为从设计'hdlcoder_sfir_fixed_stream'生成的IP核创建的。%使用此脚本访问设计中映射到兼容的IP核心接口的DUT端口。你可以写的输入端口在设计和读取从输出端口直接从MATLAB。。%要写入输入端口,使用"writePort"命令并指定端口名称和输入数据。在写入之前,输入数据将被转换为DUT端口的数据类型。%要从输出端口读取,使用"readPort"命令并指定端口名称。输出数据将以与DUT端口相同的数据类型返回。%使用“release”命令释放MATLAB对硬件资源的控制。%--------------------------------------------------------------------------%%创建fpga对象hFPGA = fpga (“Xilinx”);%%设置fpga对象该函数为“fpga”对象配置与生成的IP核相同的接口gs_hdlcoder_sfir_fixed_stream_setup (hFPGA);写/读DUT端口取消注释以下行以在生成的IP Core中写入/读取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-StreamwritePort (hFPGA“x_in_data”, 0 ([1024]));data_y_out_data = readPort (hFPGA,“y_out_data”);释放硬件资源发行版(hFPGA)
这是一个示例主机接口脚本,用于为具有映射到AXI4从接口的总线数据类型的模型读写数据。
要写入总线端口,你可以:
通过指定完整的子端口名称写入各个子端口,例如
bus1_in.scalar_in1
.通过指定顶级端口名称写入整个总线
bus1_in
.将要写入的数据作为一个结构传递,该结构的文件名与子端口名称匹配。并非所有子端口名称都需要成为结构的一部分。当写入端口时,没有相应结构字段的子端口将被跳过。
要从总线端口读取数据,你可以:
通过指定完整的子端口名来读取单个子端口,例如
bus1_out.scalar.in1
.通过指定顶级端口名称,例如
bus1_out
.
%--------------------------------------------------------------------------%主机接口脚本%%由MATLAB 9.12 (R2022a)在2022年10月1日14:33:46生成。此脚本是为从设计“AXI4SlaveMultipleBus”生成的IP核创建的。%使用此脚本访问设计中映射到兼容的IP核心接口的DUT端口。你可以写的输入端口在设计和读取从输出端口直接从MATLAB。。要写入输入端口,使用"writePort"命令并指定端口名称和输入数据。在写入之前,输入数据将被转换为DUT端口的数据类型。要从输出端口读取,使用"readPort"命令并指定端口名称。输出数据将以与DUT端口相同的数据类型返回。使用“release”命令释放MATLAB对硬件资源的控制。%--------------------------------------------------------------------------%%创建fpga对象hFPGA = fpga (“Xilinx”);%%设置fpga对象此函数为“fpga”对象配置与生成的IP核相同的接口gs_AXI4SlaveMultipleBus_setup (hFPGA);写/读DUT端口取消注释以下行以在生成的IP Core中写入/读取DUT端口。用有意义的数据更新写命令中的示例数据,以便写入DUT。% % AXI4有两种方法来编写DUT总线端口%(1).准备一个struct值并将其写入整个总线端口。writePort (hFPGA“bus1_in”、结构());%(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”, 0 ([1 - 2]));