由 judyzhong 于 星期五, 09/08/2017 - 14:58 发表
概述
Vivado在设计时可以感觉到一种趋势,它鼓励用IP核的方式进行设计。“IP Integrator”提供了原理图设计的方式,只需要在其中调用设计好的IP核连线。IP核一部分来自于Xilinx官方IP;一部分来自于第三方IP,其中有的是在网络上开源的;另一部分就是自己设计的IP。有时候我们需要把自己的一个设计反复用到以后的工程中,利用Vivado的“IP Package”将其封装起来,再以后的工程中直接调用即可。
本文致力于讲述如何将自己的设计封装为IP核,以及示范一下如何在其它工程中调用自己设计好的IP核。本文采用的设计是一个简单的位宽可设置的加法器。博主使用的Vivado版本是2017.1,其它版本在一些设置的地方可能存在一些差异。
封装IP
1. 首先建立一个工程用于设计IP核,这个工程最好放在Vivado目录下或不会被删除的地方。添加一个源文件,输入一个简单的组合逻辑加法器的代码:
`timescale 1ns / 1ps
module Add_USR_IP #(parameter WIDTH = 1)(
input [WIDTH:0] a,
input [WIDTH:0] b,
output cout,
output [WIDTH:0] c
);
assign {cout, c} = a + b;
endmodule
2. 点击左边“Flow Navigator”中的“Settings”,打开“IP”下的“Packager”。设置自己的IP核的库名和目录,我将Library更改为了“godwar_liuqi”,Category更改为了“/godwar_liuqi_IPLib”。这里也可以用默认值。
3. 点击上方菜单栏中的“Tools”下的“Create and Package New IP”,跟着流程一直走最后Finish即可,将在工作区弹出如下界面,包含了IP核的一些信息,名称为“Add_USR_IP_v1_0”。
**4**. 在上述界面的“Compatibility”标签下给出了这个IP可以支持的FPGA系列,默认是支持全部系列。“File Groups”中可以看到这个IP包含的文件,可以为这个IP添加一个仿真文件来验证其功能。
**5**. 我为了实现加法位宽可调整,源程序中使用了parameter参数。打开上述界面中的“Customization Parameters”标签,将看到这个参数WIDTH:
双击WIDTH,将弹出一个参数设置框。里面可以指定这个参数在配置IP核是的格式以及是否可以被用户编辑。我们在这里将“Specify Range”勾选中,将Type更改为“Range of integers”,表示此参数可以选择的范围。将Minimum设置为0,Maximum设置为31,表示该IP核最高可设置为32位的加法器。最后再将“Default Value”指定为7,表示默认为8位加法器。
**6**. 第3步骤的“Ports and Interfaces”中将看到IP核的管脚信息,“Customization GUI”中将看到IP核的原理图图形。没有问题后切换到“Review and Package”标签,点击“Package IP”会提示成功生成IP核。
调用自己的IP核
再另外新建一个工程,我们尝试调用刚才自己制作的IP核。建立好工程后先不添加源文件。在“Flow Navigator”的“Settings”中选中“IP”下的“Repository”,点击“+”添加,路径指定到刚才封装IP核的目录。点击ok后便会弹出一个框提示找到了一个名为“Add_USR_IP_v1_0”的IP核,也就是刚才创建的加法器。
设置好后在“IP Integrator”中点击“Create Block Design”,创建一张原理图。原理图中点击“+”搜索Add_USR_IP_v1_0,即可看到自己制作的IP核,双击添加到原理图中。如果设计中还需要其它IP核,添加IP后用连线连接起整个系统即可。双击IP核图形,即可弹出配置界面,可以更改加法器的位宽。
这里我们不使用其它IP,直接在Add_USR_IP_v1_0的管脚上右键,点击“Make External”生成管脚信号。结果如下:
在“Design Sources”中我们将看到bd后缀的原理图文件。为了使用方便,保存原理图后我们在文件上点右键,点击“Create HDL Wrapper”,软件会将原理图封装为一个Verilog文件,这个Verilog文件可以供其它模块调用。结果如下所示:
设计好后可以像普通的工程一样综合、实现、生成bit流。值得一提的是,在这个工程中我们是无法查看到Add_USR_IP_v1_0这个IP核的源码的,它是一个黑盒的状态。这也是Vivado提供的IP加密技术,以保护设计者的权益。
Vivado使用技巧(二):封装自己设计的IP核的更多相关文章
-
Vivado使用技巧:封装自己设计的IP核
概述 Vivado在设计时可以感觉到一种趋势,它鼓励用IP核的方式进行设计.“IP Integrator”提供了原理图设计的方式,只需要在其中调用设计好的IP核连线.IP核一部分来自于Xilinx ...
-
vivado设计四:自定义IP核测试
在vivado设计三中:http://blog.chinaaet.com/detail/37177已经建立了vivado工程和封装好了自定义IP核. 那么接下来,我们对这个自定义IP核进行测试了:我们 ...
-
利用IP核设计高性能的计数器
利用Quartus II的LPM_counter IP核进行设计(利用IP核设计可以迅速高效的完成产品的设计) 新建工程 调用IP核 创建一个新的IP核 选择LMP_COUNTER,语言类型,输出路径 ...
-
Vivado设计二:zynq的PS访问PL中的自带IP核(基于zybo)
1.建立工程 首先和Vivado设计一中一样,先建立工程(这部分就忽略了) 2.create block design 同样,Add IP 同样,也添加配置文件,这些都和设计一是一样的,没什么区别. ...
-
SQL开发技巧(二)
本系列文章旨在收集在开发过程中遇到的一些常用的SQL语句,然后整理归档,本系列文章基于SQLServer系列,且版本为SQLServer2005及以上-- 文章系列目录 SQL开发技巧(一) SQL开 ...
-
SQL开发技巧(二) 【转】感觉他写的很好
本文转自: http://www.cnblogs.com/marvin/p/DevelopSQLSkill_2.html 本系列文章旨在收集在开发过程中遇到的一些常用的SQL语句,然后整理归档,本系列 ...
-
vivado设计三:一步一步生成自己的自定义IP核
开发环境:xp vivado2013.4 基于AXI-Lite的用户自定义IP核设计 这里以用户自定义led_ip为例: 1.建立工程 和设计一过程一样,见vivado设计一http://blog. ...
-
转:VIVADO使用技巧:设置DCI与内部参考电压
本文转自:Vivado使用技巧(12):设置DCI与内部参考电压 - 灰信网(软件开发博客聚合) (freesion.com) DCI与内部参考电压 Xilinx FPGA提供了DCI(Digital ...
-
实验一《开发环境的熟悉》&;实验二《固件设计》
20145312&20145338 实验一<开发环境的熟悉>&实验二<固件设计> 合作博客链接:http://www.cnblogs.com/yx2014531 ...
随机推荐
-
MarkdownPad 2 常用快捷键
Ctrl + I : 斜体 Ctrl + B : 粗体 Ctrl + G : 图片 Ctrl + Q : 引用 Ctrl + 1 : 标题 1 Ctrl + 2 : 标题 2 Ctrl + 3 : 标 ...
-
G面经prepare: BuyGoods
给你一部分钱和一些不同价钱的商品,如何在最多买K件商品的情况下尽可能多的花掉手里的钱. 举例:口袋里的钱数: 10; K=2 产品价格: [3, 6, 8, 7, 9] 输出 3, 7 Backtra ...
-
[转]DRY原则和Shy原则
转自:http://blog.csdn.net/hukeab/article/details/2944675 保障可维护性的主要诀窍是遵循DRY原则和Shy原则. 在一个系统的整个生命周期里,理解 ...
-
安装 Linux 与 Windows 10 双系统,你需要了解的一切
该选Windows 10还是Linux Mint?鱼与熊掌当然可以兼得,但咱们得掌握点小技巧才能顺利搞定. Windows 10绝不是唯一一款值得我们安装在自己计算机之上的免费操作系统.Linux只靠 ...
-
shell实现centos7双网卡修改网卡名eth0,eth1,并设置网络
#!/bin/bash interface1=`ls /sys/class/net|grep en|awk 'NR==1{print}'` interface2=`ls /sys/class/net| ...
-
【Java每日一题】20170221
20170220问题解析请点击今日问题下方的“[Java每日一题]20170221”查看(问题解析在公众号首发,公众号ID:weknow619) package Feb2017; public cla ...
-
Spark2.2+ES6.4.2(三十一):Spark下生成测试数据,并在Spark环境下使用BulkProcessor将测试数据入库到ES
Spark下生成2000w测试数据(每条记录150列) 使用spark生成大量数据过程中遇到问题,如果sc.parallelize(fukeData, 64);的记录数特别大比如500w,1000w时 ...
-
C语言:用指针求最大值和最小值
用指针求数组最大值和最小值(10分) 题目内容: 用指针求含有十个元素的数组最大值和最小值 主函数参考 int main() { int a[10],i,maxnum,minnum; for(i=0; ...
-
Oracle跨库复制表结构
1.首先建立远程连接 create public database link LINK_SJPSconnect to system identified by manager using '(DESC ...
-
JDK 泛型之 Type
JDK 泛型之 Type 一.Type 接口 JDK 1.5 引入 Type,主要是为了泛型,没有泛型的之前,只有所谓的原始类型.此时,所有的原始类型都通过字节码文件类 Class 类进行抽象.Cla ...