ET创芯网论坛(EETOP)

找回密码

  登录   注册  

搜索
汽车电子资料大全(下载奖励300信元)
查看: 32|回复: 0

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

[复制链接]
发表于 2019-9-20 11:37:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
玩转Zynq连载25——[ex04] 基于Zynq PL的自定义IP核集成
更多资料共享
腾讯微云链接:https://share.weiyun.com/5s6bA0s
百度网盘链接:https://pan.baidu.com/s/1XTQtP5LZAedkCwQtllAEyw
提取码:ld9c
1.jpg
腾讯微云链接:https://share.weiyun.com/5s6bA0s
百度网盘链接:https://pan.baidu.com/s/1XTQtP5LZAedkCwQtllAEyw
提取码:ld9c
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即可。
2.jpg
图IP核配置页面
    如图所示,在Project Managerà IP Source面板中,展开新创建的IP核,可以双击led_controller_0.veo打开例化模板,复制到我们的工程逻辑中,修改相应接口即可使用。
3.jpg
图 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)。然后例化到工程顶层源码中。
    本实例工程源码如下。
module zstar(
            inputext_clk_25m, //外部输入25MHz时钟信号      
            output[2:0] led    //LED指示灯接口
        );         
                                               
//-------------------------------------
wire clk_25m;   //PLL输出25MHz时钟
wire clk_50m;   //PLL输出50MHz时钟
wire clk_100m;  //PLL输出100MHz时钟
wire sys_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 controlsignals
.reset(1'b0), // input reset
.locked(sys_rst_n));     // output locked
//-------------------------------------
//25MHz时钟进行分频闪烁                                                      
                           
led_controller_0 uut_led_controller_clk25m (
.clk(clk_25m),      //input wire clk
.rst_n(sys_rst_n),  //input wire rst_n
.sled(led[2])    // outputwire sled
);                        
        
//-------------------------------------
//50MHz时钟进行分频闪烁                                                              
led_controller_1 uut_led_controller_clk50m (
.clk(clk_50m),      //input wire clk
.rst_n(sys_rst_n),  //input wire rst_n
.sled(led[1])    // outputwire sled
);                                 
        
//-------------------------------------
//100MHz时钟进行分频闪烁           
                                               
led_controller_2 uut_led_controller_clk100m (
.clk(clk_100m),      //input wire clk
.rst_n(sys_rst_n),  //input wire rst_n
.sled(led[0])    // outputwire sled
);         
endmodule
5板级调试
    参考文档《玩转Zynq-环境篇:XilinxPlatformCableUSB下载器使用指南.pdf》将“...\project\zstar_ex04\zstar_ex04\zstar.runs\impl_1”文件夹下的zstar.bit文件下载到STAR板上。可以看到3个LED指示灯同步闪烁起来,它们的频率完全一致。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|联系我们|ET创芯网 ( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2019-10-18 06:56 , Processed in 0.061711 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表