码迷,mamicode.com
首页 > 其他好文 > 详细

Xilinx Vivado的使用详细介绍(3):使用IP核

时间:2018-10-15 20:39:56      阅读:447      评论:0      收藏:0      [点我收藏+]

标签:就是   双击   function   测试   自动更新   进制   doc   变量   app   

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作为参数传入。

 

 1 module demo(
 2 );
 3 reg clk = 0;
 4 always #10 clk = ~clk;
 5 wire [3:0] a = 7;
 6 wire [3:0] b = 8;
 7 wire [7:0] p;
 8 mult_gen_0 Mymult_gen_0 (
 9   .CLK(clk),  // input wire CLK
10   .A(a),      // input wire [3 : 0] A
11   .B(b),      // input wire [3 : 0] B
12   .P(p)      // output wire [7 : 0] P
13 );
14 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上。

 1 module system_wrapper
 2    (a,
 3     clk,
 4     p);
 5   input [3:0]a=8;
 6   input clk;
 7   output [7:0]p;
 8   wire [3:0]a;
 9   wire clk;
10   wire [7:0]p;
11   reg c = 0;
12   always #10 c <= ~c;
13   assign clk = c;
14   system system_i
15        (.a(a),
16         .clk(clk),
17         .p(p));
18 endmodule

 

启动行为仿真,最终输出的波形如下。可以看到,在clk的第一个上升沿后,就有 p = a*a = 64,即实现了平方运算。

 技术分享图片

 

调用官方其它IP核,方法一致,有什么问题欢迎指导交流。

 

Xilinx Vivado的使用详细介绍(3):使用IP核

标签:就是   双击   function   测试   自动更新   进制   doc   变量   app   

原文地址:https://www.cnblogs.com/zhangxianhe/p/9792609.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!