Xilinx Vivado的使用详细介绍(3):使用IP核
ilinx Vivado的使用详细介绍(3):使用IP核
Author:zhangxianhe
IP核(IP Core)
Vivado中有很多IP核可以直接使用,例如数学运算(乘法器、除法器、浮点运算器等)、信号处理(FFT、DFT、DDS等)。IP核类似编程中的函数库(例如C语言中的printf()函数),可以直接调用,非常方便,大大加快了开发速度。
方式一:使用Verilog调用IP核
这里简单举一个乘法器的IP核使用实例,使用Verilog调用。首先新建工程,新建demo.v顶层模块。(过程参考上篇文档)
添加IP核
点击Flow Navigator中的IP Catalog。

选择Math Functions下的Multiplier,即乘法器,并双击。

将弹出IP核的参数设置对话框。点击左上角的Documentation,可以打开这个IP核的使用手册查阅。这里直接设置输入信号A和B均为4位无符号型数据,其他均为默认值,点击OK。

稍后弹出的窗口,点击Generate。生成的对话框直接点Ok。

综合选项中的Global表示只生成RTL代码,然后与整个工程一起参与综合,Out of context per IP表示生成后立即综合。
调用IP核
选择IP Sources,展开并选择mult_gen_0 - Instantiation Template - mult_gen_0.veo,可以打开实例化模板文件。如图,这段代码就是使用Verilog调用这个IP核的示例代码。

将示例代码复制到demo.v文件中,并进行修改,最终如下。代码中声明了无符号型的4位变量a和b,分别赋初值7、8,作为乘数使用;无符号型的8位变量p,用于保存计算结果。clk为Testbench编写的周期20ns的时钟信号;mult_gen_0 Mymult_gen_0 (...)语句实例化了mult_gen_0类型的模块对象Mymult_gen_0,并将clk、a、b、p作为参数传入。
module demo(
);
reg clk = ;
always # clk = ~clk;
wire [:] a = ;
wire [:] b = ;
wire [:] p;
mult_gen_0 Mymult_gen_0 (
.CLK(clk), // input wire CLK
.A(a), // input wire [3 : 0] A
.B(b), // input wire [3 : 0] B
.P(p) // output wire [7 : 0] P
);
endmodule
行为仿真验证
以demo为顶层模块,启动行为仿真,即可输出波形。设置a、b、p显示为无符号十进制(右击选择Radix - Unsigned Decimal)。如图,可以看到a=7, b=8,第一个时钟上升沿后p = a * b = 56。

方式二:框图(Block Design)中调用IP核
这里举一个简单的例子,通过调用乘法器IP核,产生一个能计算平方的新模块。
创建框图设计文件
选择Flow Navigator中的Create Block Design,创建一个框图设计文件。

输入文件名并点击OK。

添加IP核
通过启动Add IP
向导来完成,或者可以在程序框图空白处右击选择Add IP..,IP目录窗口将会出现,显示在这个设计中添加所有可能的IP。

IP核即可被添加进来,可以用导线将其与其他器件连接。

双击这个IP核符号,可以打开参数设置对话框。点击左上方的Documentation可以查看IP核的手册。这里将输入的A、B均设置为4为无符号型,其他为默认值,点击OK确认。

绘制电路
右击Diagram窗口空白处,选择Create Port。

弹出窗口中,设置端口a为4位输入信号,并点击OK。

将a与A、B都连接起来。

同样的方法,添加一个8位输出端口p,与P连接。

再添加一个clk时钟输入端口,与CLK连接。

最终结果如图。

单击Tools,选择单击Validate Design,检查程序框图是否有误,结果直接点击Ok。
仿真测试
在源窗格中,选择系统框图“system.bd”,右击并选择Generate Output Products,默认设置,直接点generate,运行结束后,点击OK。


在源窗格中,选择系统框图“system.bd”,右击并选择Create HDL Wrapper,选择第二项 Let Vivado manage Wrapper and auto-update,选择第一项和第二项的区别是选择第一项表示生成的wrapper允许使用者编辑,选择第二项表示让Vivado管理wrapper,并自动更新,使用者对wrapper的修改会在重新创建的HDL Wrapper覆盖。根据自己设计的情况选择,如果生成的wrapper需要修改则选择第一项。点击OK。


打开生成的system_1_wrapper.v文件如图,红框中的代码用来调用前面画好的Block Design模块。

在system_1_wrapper.v文件中,添加Testbench代码即可进行行为仿真。修改代码如下,给输入信号a赋初值为8,clk连接到Testbench生成的时钟信号c上。
module system_wrapper
(a,
clk,
p);
input [:]a=;
input clk;
output [:]p;
wire [:]a;
wire clk;
wire [:]p;
reg c = ;
always # c <= ~c;
assign clk = c;
system system_i
(.a(a),
.clk(clk),
.p(p));
endmodule
启动行为仿真,最终输出的波形如下。可以看到,在clk的第一个上升沿后,就有 p = a*a = 64,即实现了平方运算。

调用官方其它IP核,方法一致,有什么问题欢迎指导交流。
Xilinx Vivado的使用详细介绍(3):使用IP核的更多相关文章
- xilinx Vivado的使用详细介绍(2):创建工程、添加文件、综合、实现、管脚约束、产生比特流文件、烧写程序、硬件验证
xilinx Vivado的使用详细介绍(2):创建工程.添加文件.综合.实现.管脚约束.产生比特流文件.烧写程序.硬件验证 Author:zhangxianhe 新建工程 打开Vivado软件,直接 ...
- Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真
Xilinx Vivado的使用详细介绍(1):创建工程.编写代码.行为仿真 Author:zhangxianhe 新建工程 打开Vivado软件,直接在欢迎界面点击Create New Projec ...
- Xilinx Vivado的使用详细介绍(5):调用用户自定义封装的IP核
Zedboard OLED Display Controller IP v1 介绍 Author:zhangxianhe 本文档提供了快速添加,连接和使用ZedboardOLED v1.0 IP内核的 ...
- Xilinx Vivado的使用详细介绍(4):Zedboard+vivado之流水灯(加SDK)
Vivado+zedboard之初学流水灯 Author:zhangxianhe 环境:vivado 2016.3(已验证适用于2015.4) 开发板:Zedboard version xc7z020 ...
- Xilinx Vivado的使用详细介绍(2):综合、实现、管脚分配、时钟设置、烧写
前面一篇介绍了从新建工程一直到编写代码进行行为仿真,这篇继续进行介绍. 修改器件型号 新建工程时选择过器件型号,如果新建好工程后需要修改型号,可以选择菜单Tools - Project Setting ...
- vivado设计四:自定义IP核测试
在vivado设计三中:http://blog.chinaaet.com/detail/37177已经建立了vivado工程和封装好了自定义IP核. 那么接下来,我们对这个自定义IP核进行测试了:我们 ...
- 72.xilinx vivado zynq vdma仿真及应用详解(一)
很多人用zynq平台做视频图像开发,但是对vdma了解比较少,上手起来稍微有些困难,我针对这一现象,做了一个基于vivado和modelsim的仿真和应用测试工程,并写篇文章做些介绍,希望能对大家有帮 ...
- 每天进步一点点------Modelsim添加Xilinx仿真库的详细步骤
Modelsim,可以选型SE和XE两个版本.Modelsim XE可以直接被ISE调用,而Modelsim SE需要手动添加仿真库.但SE版和OEM版在功能和性能方面有较大差别,比如对于大家都关心的 ...
- [No0000A7]批处理经常用到的变量及批处理>NUL详细介绍
绝对路径是指调用绝对的程序位置的路径,例如: start C:\Windows\test.exe 相对路径是文件改变路径以后还会按照变量的路径所在位置去调用,例如: start %WINDIR%\te ...
随机推荐
- JS33个概念
JavaScript开发者应懂的33个概念 简介 这个项目是为了帮助开发者掌握 JavaScript 概念而创立的.它不是必备,但在未来学习(JavaScript)中,可以作为一篇指南. 本篇 ...
- qt 画多边形(实现鼠标拖动节点)
---恢复内容开始--- 2018-01-06 这个小例子实现了移动鼠标,鼠标的坐标信息跟随鼠标移动,多边形的实现,鼠标点击可以拖动多边形点的位置,(其中有个问题?我在QMainWindow下,用mo ...
- json对象组按某个字段排序
JS排序 键值对 var sortBy=function (filed,rev,primer){ rev = (rev) ? -1 : 1; return function (a, b) { a = ...
- Eclipse及Eclipse为基础的App报错“Failed to create the Java Virtual Machine”的解决办法
由于OracleJDK马上就要收费了,公司要求更换OpenJDK,结果安装后Eclipse及Eclipse为基础的App启动报错:“Failed to create the Java Virtual ...
- spring源码解析2--容器的基本实现
spring的主要特性是IOC,实现IOC的关键是bean,而更关键的是如何bean的管理容器,也就是BeanFactory,本文的目标是弄清楚BeanFactory具体是怎么样的存在. 先看下最简单 ...
- 【转】LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
用VS2010编译C++项目时出现这样的错误: LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 方案一:(这个方法比较好,在用qt运行时出现问题也能解决) 复制 C:\Windows\ ...
- linux 网络设置
centos7 ifcfg-ens33静态ip地址配置 vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=EthernetPROXY_METHO ...
- Mysql+jsp连接记录
1.下载tomacat 2.jsp项目的创建 3.tomacat和jsp挂钩起来 4.mysql下载 5.mysql可视化 6.随便写下sql语句 7.下载jdbc驱动 8.在jsp里面写 over!
- 4.产生10个1-100的随机数,并放到一个数组中 (1)把数组中大于等于10的数字放到一个list集合中,并打印到控制台。 (2)把数组中的数字放到当前文件夹的numArr.txt文件中
package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayLis ...
- JS运算符、NaN
一.关系运算符 (< <= > >= == === != !==) 判断符号左右的两个数据的大小之间的关系,运算结果是一个布尔类型的值 == 只判断值 ===即判断值并且 ...