1. 软件平台

vivado2019.1

2. 硬件平台

PYNQ_Z2

3. 具体实现流程

首先先建立一个vivado工程如下(参考https://blog.csdn.net/qq_42263796/article/details/101828046)

点击Tools,选择create and pakage new IP,再点击Next

按下图方式选择,点击Next,其他选项自行百度。

这里可选择修改名字,这里命名为myip_test,点击Next

这里按下图选择即可,Next

选择Edit IP , Finish

可以看到如下界面。

在sources一栏目,可以看到顶层文件和底层模块。打开下列所选文件。

打开后。。。。

我们需要做功能是自定义一个led的IP核,需要添加led输出端口

// Users to add ports here

// User ports ends
    // Do not modify the ports beyond this line

添加后结果如下

 // Users to add ports hereoutput wire [3:0]led,// User ports ends// Do not modify the ports beyond this line

拉到400多行左右找到下面的语句

添加如下代码

点击保存(有错误会提示)

打开top level

在17到20行左右添加输出端口,如下

在50行左右添加如下代码

点击保存,有错误会提示。

(在这里添加约束文件,我尝试了几次,没有成功,编译不通过)

然后点击source->design sources->IP-XACT,打开component.xml

点击file group,点击merge change from file groups Wizard

同样,使得左侧都打勾,

点击Review and pakage

如果不需要设置,点击Re-pakage IP

点击Yes,IP核就封装完成了。

点击 create block design

然后添加IP核,如下。

点击run block automation,再点击OK,然后手动连接CLK,结果如下。

添加刚刚生成的IP核。如果不是在这个工程下建立的,需要自行添加IP核的路径。

方式:window->IP Catalog ->右击打开的界面的空白处,选择add repository->选择IP核的路劲即可。

在这里不做详细介绍

同样,run connection automation,点击OK

然后右击添加的IP核的led[3:0]的输出端口,

点击 make External

结果如下,

单击该端口,在左边,将名字改为,led

特别提示:如果不将端口名字修改,会造成约束失败(管脚的配置)。

点击验证(validate design),结果如下,

打开source栏目,右击test_ip...文件,选择,create HDL wrapper

然后点击,constraints

右击constrs_1

选择,Add sources

选择 add 偶然create constraints

点击Next

点击create file,输入名字,点击OK

然后点击finish

结果如下,在约束文件输入以下内容

#LEDs
set_property -dict { PACKAGE_PIN R14   IOSTANDARD LVCMOS33 } [get_ports { led[0] }];#IO_L6N_T0_VREF_34 Sch=led[0]
set_property -dict { PACKAGE_PIN P14   IOSTANDARD LVCMOS33 } [get_ports { led[1] }];#IO_L6P_T0_34 Sch=led[1]
set_property -dict { PACKAGE_PIN N16   IOSTANDARD LVCMOS33 } [get_ports { led[2] }];#IO_L21N_T3_DQS_AD14N_35 Sch=led[2]
set_property -dict { PACKAGE_PIN M14   IOSTANDARD LVCMOS33 } [get_ports { led[3] }];#IO_L23P_T3_35 Sch=led[3]

点击保存

然后,在Flow navigator 栏目

点击generate Bistream,选择Yes,再点击OK,等待完成即可。

接下来主要是SDK部分(参考https://blog.csdn.net/qq_42263796/article/details/101828046)

代码如下


#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
/* Include Files */
#include "xparameters.h"
#include "xil_io.h"
#include "xstatus.h"
/* Definitions */
#define led_delay 10000000                          /* Software delay length */
#define led_channel 1                               /* GPIO port for LEDs */
#define printf xil_printf                           /* smaller, optimised printf */
unsigned int mled = 0x01;                          /* first led*/
#define  my_IP_led 0x43c00000                                       /* GPIO Device driver instance */void LEDOutputExample(void)
{volatile int delay;/* Loop forever blinking the LED. */while (1) {/* Write output to the LEDs. */Xil_Out32(my_IP_led,mled);mled = mled<<1;if(mled>0x8)mled = 1;/* Wait a small amount of time so that the LED blinking is visible. */for (delay = 0; delay < led_delay; delay++);}}
int main()
{init_platform();print("Hello World\n\r");cleanup_platform();/* Execute the LED output. */LEDOutputExample();return 0;
}

其中my_IP_led的地址可以查看vivado,Address Editor

运行结果如图所示:

PYNQ_Z2自定义IP核相关推荐

  1. qq自定义diy名片代码复制_「正点原子FPGA连载」第六章自定义IP核-呼吸灯实验

    1)摘自[正点原子]领航者 ZYNQ 之嵌入式开发指南 2)实验平台:正点原子领航者ZYNQ开发板 3)平台购买地址:https://item.taobao.com/item.htm?&id= ...

  2. 基于vivado开发xilinx系列FPGA的冷知识(1)——自定义IP核的封装与后期修改

    感慨于各大论坛里关于vivado的一些冷门功能使用技巧十分匮乏,我决定慢慢更新一些自己经历项目实战后的使用心得,仅作抛砖引玉. 第一篇来介绍下开发完毕后以IP核形式打包工程文件的一些操作. 可能很多人 ...

  3. 【Xilinx AX7103 MicroBalze学习笔记6】MicroBlaze 自定义 IP 核封装实验

    目录 实验任务 实验框图 创建自定义 IP 封装 IP IP 封装界面配置 硬件设计(Vivado部分) Block Design搭建 添加 IP 库 约束文件 软件设计(SDK部分) 往期系列博客 ...

  4. 【ZYNQ】自定义IP核的封装

    自定义IP核的封装介绍 IP核打包器的配置 IP核打包的基础知识 IP核顶层接口的命名规范 Reset接口 Clock接口 差分Clock接口 AXI接口 升级自定义IP 创建和打包IP向导 自定义I ...

  5. java sdk他edk de区别_EDK笔记——自定义IP核

    这篇笔记是我之前在调试MicroBlaze时记录下来的,当时在网上查了一些资料,发现都讲的不是特别清楚,所以自己整理了一个笔记,如有差错,希望大家指正. 在这次示例中,本文完成了一个改变流水灯的间隔时 ...

  6. 听说Zynq-手把手教你自定义ip核并调用

    概述 小编最近在研究Zynq,因为对其相对陌生,在探索过程中也遇到了不少坑,这里将如何创建IP核并调用的方法步骤总结记录,以免日后忘记. 注意 ★环境:Vivado2018.2.开发板:digilen ...

  7. vivado创建自定义IP核

    环境:vivado 18.2 一 创建IP核 1.在tool–>Create and Package New IP 选择保存路径 定义IP核信息,可以添加一些备注信息 封装IP (IP创建完成后 ...

  8. vivado自定义IP核 调用

    IP核的封装 1. 准备好要用来生成ip核的模块/工程. 2.Tools -> Create andPackage IP -> next 如果要package整个工程,此处选择 Packa ...

  9. 自定义IP核在SDK中添加驱动方法

    1.  在sdk的 xilinx tools的菜单下点击 2. 在红色框的位置点击new,把XPS工程所在的根目录添加进来.(注意,必须是工程的根目录) 3.点击菜单board support pac ...

最新文章

  1. mysql 不停机_mysql之 mysql 5.6不停机主从搭建(一主一从基于日志点复制)
  2. 走的最急的,都是最美的风景
  3. docker 部署springboot容器日志处理
  4. chrome动态ip python_用Python爬虫爬取动态网页,附带完整代码,有错误欢迎指出!...
  5. MacBook 如何通过命令终端进入 U 盘内的目录
  6. 基于公开数据的特殊人群在线活动特征挖掘
  7. docker volume mysql_docker volume的理解
  8. Hadoop中MR程序的几种提交运行模式
  9. php dom 分离html内容
  10. linux下搭建redis集群
  11. vue-app之H5打开第三方app
  12. CSP 2014-03-1 相反数(C++)
  13. 送书6本,看谁答题快
  14. python节日贺卡图片大全_简单漂亮三年级新年贺卡图片大全
  15. 示波器如何设置实现单次触发
  16. 路漫漫其修远兮,吾将上下而求索--2019OKR规划
  17. 真的!?在阅读体验感上赢过微信读书?
  18. (一)LAMP (CGI,fastcgi, PHP,基于php的LAMP架构,php连接数据库)
  19. mysql update 负数_解决并发情况下库存减为负数问题--update2016.04.24
  20. 菜市场小程序推荐服务器,极力推荐的3款生鲜微信小程序,总有一个能用上!...

热门文章

  1. laravel route
  2. Python先生,你好!(5)——使用高斯滤波器提取图像特征
  3. PCIe学习笔记之Max payload size
  4. 【Objective-C语言的SEL对象】
  5. 在敏捷开发,如何评估开发任务的工时更合理?
  6. “简单”和“勤奋”就是只围绕团队的理念和目标去工作,而不会因为其他的问题或内耗来分散团队的力量和注意力。为此,管理者要为团队创造一个积极向上、团队合作、充满激情的工作氛围。...
  7. libcurl API 常用函数
  8. 华为服务器raid卡型号,RAID卡类型 - 华为V2V3服务器 RAID控制卡 用户指南 45 - 华为...
  9. 超全面!UI设计师如何适配2018新款iPhone
  10. SIFT特征检测与特征匹配