Xilinx Vivado的使用详细介绍(3):使用IP核
2018-02-13 14:32
302 查看
IP核(IP Core)
Vivado中有很多IP核可以直接使用,例如数学运算(乘法器、除法器、浮点运算器等)、信号处理(FFT、DFT、DDS等)。IP核类似编程中的函数库(例如C语言中的printf()函数),可以直接调用,非常方便,大大加快了开发速度。
使用Verilog调用IP核
这里简单举一个乘法器的IP核使用实例,使用Verilog调用。首先新建工程,新建demo.v顶层模块。
添加IP核
点击Flow Navigator中的
IP Catalog。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_7c5ce3d4-b4a4-4818-9ef1-ef6b2deb173c.png)
选择
Math Functions下的
Multiplier,
4000
即乘法器,并双击。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_5b70cf85-e2a0-4b0b-95b5-d0df43e63b4b.png)
将弹出IP核的参数设置对话框。点击左上角的
Documentation,可以打开这个IP核的使用手册查阅。这里直接设置输入信号A和B均为4位无符号型数据,其他均为默认值,点击OK。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_c378d794-3cf9-4dde-812a-76813c5ce81d.png)
稍后弹出的窗口,点击
Generate。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_31fda48d-1aef-461d-a3c6-86df1129c928.jpg)
调用IP核
选择IP Sources,展开并选择
mult_gen_0 - Instantiation Template - mult_gen_0.veo,可以打开实例化模板文件。如图,这段代码就是使用Verilog调用这个IP核的示例代码。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_12d99bf7-a9c0-4451-961e-525ebf413a9e.png)
将示例代码复制到
demo.v文件中,并进行修改,最终如下。代码中声明了无符号型的4位变量a和b,分别赋初值7、8,作为乘数使用;无符号型的8位变量p,用于保存计算结果。clk为Testbench编写的周期20ns的时钟信号;
mult_gen_0 mul(...)语句实例化了
mult_gen_0类型的模块对象
mul,并将clk、a、b、p作为参数传入。
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
行为仿真验证
以demo为顶层模块,启动行为仿真,即可输出波形。设置a、b、p显示为无符号十进制(右击选择Radix - Unsigned Decimal)。如图,可以看到
a=7, b=8,第一个时钟上升沿后
p = a * b = 56。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_a6efbfcb-3bbe-47a2-ae66-00e22bc68adc.png)
框图(Block Design)中调用IP核
这里举一个简单的例子,通过调用乘法器IP核,产生一个能计算平方的新模块。创建框图设计文件
选择Flow Navigator中的
Create Block Design,创建一个框图设计文件。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_16ceb4dc-c33e-4e44-85d2-c6a5ee5a234f.png)
输入文件名并点击
OK。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_277a0500-89ca-4b4e-8f4a-f7c2db17d01e.jpg)
添加IP核
在框图空白处右击,选择Add IP。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_8d9841cd-fa8e-4d13-ab76-0aa085ee2392.png)
可以直接搜索需要的IP核,双击确认。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_d9ba0a38-822e-4772-8b67-65e668329cc7.png)
IP核即可被添加进来,可以用导线将其与其他器件连接。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_11ae9c3a-9836-40cd-950f-34a6365f9dca.png)
双击这个IP核符号,可以打开参数设置对话框。点击左上方的
Documentation可以查看IP核的手册。这里将输入的A、B均设置为4为无符号型,其他为默认值,点击
OK确认。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_461e8452-c02b-476e-9f49-f196a094713b.png)
绘制电路
右击Diagram窗口空白处,选择
Create Port。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_dd7325c0-5075-44fd-88ca-f1fcbc6c7d3d.png)
弹出窗口中,设置端口
a为4位输入信号,并点击
OK。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_3cae6d7f-f463-443b-bed4-48680178372a.jpg)
将
a与
A、
B都连接起来。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_400d80da-c1a7-4eb7-9827-cad4e833690a.png)
同样的方法,添加一个8位输出端口
p,与
P连接。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_2744eb45-c0f2-4f77-a1b6-5f40f1be0106.jpg)
再添加一个
clk时钟输入端口,与
CLK连接。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_b914b8b4-23ca-46a8-be2e-f5fef1d5707c.jpg)
最终结果如图。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_14dfa597-657b-4f04-ae96-afc84c89d1dc.png)
仿真测试
右击框图设计文件design_1,选择
Create HDL Wrapper。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_85428598-d836-4fb5-a537-b4b3021e2844.png)
选择第二项并点击
OK。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_a24465cf-8792-424f-814e-f2b7654be55c.jpg)
打开生成的
design_1_wrapper.v文件如图,红框中的代码用来调用前面画好的
Block Design模块。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_df1680c8-a921-490c-b95c-6dafa4591478.png)
在
design_1_wrapper.v文件中,添加Testbench代码即可进行行为仿真。修改代码如下,给输入信号
a赋初值为
8,
clk连接到Testbench生成的时钟信号
c上。
wire [3:0]a = 8;
wire clk;
wire [7:0]p;
reg c = 0;
always #10 c <= ~c;
assign clk = c;
在
Simulation Sources文件夹下,设置
design_1_wrapper.v为行为仿真的顶层文件(右击,选择
Set as Top)。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_5a9a0aaa-e8ef-4165-be1f-0cc77ae354be.png)
启动行为仿真,最终输出的波形如下。可以看到,在
clk的第一个上升沿后,就有
p = a*a = 64,即实现了平方运算。
![](http://www.paincker.com/wp-content/uploads/2015/04/wpid-5f62f8f26ab4988d81d43641fa4ac5e4_c33e6b1e-9b34-431b-ac3a-e5d553325bfa.png)
原文链接:http://blog.csdn.net/jzj1993/article/details/45533783
相关文章推荐
- Xilinx Vivado的使用详细介绍(3):使用IP核
- Xilinx Vivado的使用详细介绍:使用IP核、例化IP
- Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench
- Xilinx Vivado的使用详细介绍(2):综合、实现、管脚分配、时钟设置、烧写
- Xilinx Vivado的使用详细介绍(2):综合、实现、管脚分配、时钟设置、烧写
- Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench
- Xilinx Vivado的使用详细介绍(2):综合、实现、管脚分配、时钟设置、烧写
- Xilinx Vivado的使用详细介绍(2):综合、实现、管脚分配、时钟设置、烧写
- Xilinx Vivado的使用详细介绍(3):使用IP核
- xilinx Vivado的使用详细介绍(2):创建工程、添加文件、综合、实现、管脚约束、产生比特流文件、烧写程序、硬件验证
- Xilinx Vivado的使用详细介绍(3):使用IP核
- Xilinx Vivado的使用详细介绍(3):使用IP核
- Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench
- Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench
- PDO对象方法的使用详细介绍(一)
- PHP采集类snoopy详细介绍(snoopy使用教程)
- ArrayList详细介绍(源码解析)和使用示例
- Dubbo详细介绍与安装使用过程
- mysql安装图解(详细步骤),配置,相关图形工具介绍及使用,中文支持
- Android Fragments 详细使用详细介绍