您的位置:首页 > 其它

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

2015-05-06 11:26 447 查看


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





调用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
 mul(...)
语句实例化了
mult_gen_0
类型的模块对象
mul
,并将clk、a、b、p作为参数传入。
[code]module demo(

);


reg clk = 0;

always #10 clk = ~clk;


wire [3:0] a = 7;

wire [3:0] b = 8;

wire [7:0] p;


mult_gen_0 mul (

.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

[/code]


行为仿真验证

以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






可以直接搜索需要的IP核,双击确认。



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



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





绘制电路

右击
Diagram
窗口空白处,选择
Create
 Port




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




a
A
B
都连接起来。



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



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



最终结果如图。




仿真测试

右击框图设计文件
design_1
,选择
Create
 HDL Wrapper




选择第二项并点击
OK




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





design_1_wrapper.v
文件中,添加Testbench代码即可进行行为仿真。修改代码如下,给输入信号
a
赋初值为
8
clk
连接到Testbench生成的时钟信号
c
上。
[code]wire [3:0]a = 8;

wire clk;

wire [7:0]p;


reg c = 0;

always #10 c <= ~c;

assign clk = c;

[/code]

Simulation Sources
文件夹下,设置
design_1_wrapper.v
为行为仿真的顶层文件(右击,选择
Set
 as Top
)。



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



本文由jzj1993原创,转载请注明来源:http://www.hainter.com/vivado-basic-usage-3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐