玩转Zynq连载25——[ex04] 基于Zynq PL的自定义IP核集成

2020-01-26 16:32发布

00.jpg 1 概述         本实例将zstar_ex03工程中led_controller.v模块作为一个用户自定义IP核,添加到Vivado的IP Catalog中,然后和标准IP核一样,在Vivado工程中配置添加这个IP核。 2 用户自定义IP核的创建于封装         参考文档《玩转Zynq-工具篇:用户自定义IP核的创建与封装.pdf》,创建一个闪烁频率可设置的LED控制IP核。 3 用户自定义IP核的移植         参考文档《玩转Zynq-工具篇:用户自定义IP核的移植.pdf》,将LED闪烁的IP核移植到应用工程中 4 配置、例化IP         如图所示,双击IP Catalog下的led_controller_ip后,弹出IP配置对话框。可以修改设置输入这个IP核的时钟频率(Clk Frequency)和LED闪烁频率(Led Flash Frequency),完成配置直接点击OK即可。 25-1.png 图IP核配置页面         如图所示,在Project Manager -> IP Source面板中,展开新创建的IP核,可以双击led_controller_0.veo打开例化模板,复制到我们的工程逻辑中,修改相应接口即可使用。 25-2.png 图 IP核例化模板         本实例要实现的功能和zstar_ex03实例一样,都是让3个LED工作在不同的时钟频率下,但是控制它们产生相同的LED闪烁频率,同步闪烁。和zstar_ex03实例的顶层源码不同的是,这里例化的LED闪烁子模块是我们自己创建的IP核,其输入时钟频率和LED闪烁频率的设定通过IP核的配置GUI即可完成,无需通过代码传递这些参数。         如前面led_controller_0的IP添加,我们分别添加另外2个IP核led_controller_1和led_controller_2,设置它们的LED闪烁频率(Led Flash Frequency)都是1(Hz),但输入时钟频率分别为50000(50MHz)和100000(100MHz)。然后例化到工程顶层源码中。         本实例工程源码如下。modulezstar(                            input ext_clk_25m, //外部输入25MHz时钟信号                                  output[2:0] led                   //LED指示灯接口                   );                                                                                                                                         //-------------------------------------wireclk_25m;  //PLL输出25MHz时钟wireclk_50m;  //PLL输出50MHz时钟wireclk_100m;         //PLL输出100MHz时钟wiresys_rst_n;        //PLL输出的locked信号,作为FPGA内部的复位信号,低电平复位,高电平正常工作   clk_wiz_0    uut_clk_wiz_0   (   // Clock in ports.clk_in1(ext_clk_25m),      // input clk_in1    // Clock out ports.clk_out1(clk_25m),     // output clk_out1.clk_out2(clk_50m),     // output clk_out2.clk_out3(clk_100m),     // output clk_out3    // Status and control signals.reset(1'b0),// input reset.locked(sys_rst_n));      // output locked //-------------------------------------//25MHz时钟进行分频闪烁                                                                                                                                                                                           led_controller_0uut_led_controller_clk25m (.clk(clk_25m),      // input wire clk.rst_n(sys_rst_n),  // input wire rst_n.sled(led[2])    // output wire sled);                                                                                  //-------------------------------------//50MHz时钟进行分频闪烁                                                                                                                                              led_controller_1uut_led_controller_clk50m (.clk(clk_50m),      // input wire clk.rst_n(sys_rst_n),  // input wire rst_n.sled(led[1])    // output wire sled);                                                                                                    //-------------------------------------//100MHz时钟进行分频闪烁                                                                                                                                          led_controller_2uut_led_controller_clk100m (.clk(clk_100m),      // input wire clk.rst_n(sys_rst_n),  // input wire rst_n.sled(led[0])    // output wire sled);                         endmodule 5 板级调试         参考文档《玩转Zynq-环境篇:XilinxPlatformCableUSB下载器使用指南.pdf》将“...projectzstar_ex04zstar_ex04zstar.runsimpl_1”文件夹下的zstar.bit文件下载到STAR板上。可以看到3个LED指示灯同步闪烁起来,它们的频率完全一致。
0条回答

一周热门 更多>