使用IP核
Vivado中有很多IP核可以直接使用,例如数学运算(乘法器、除法器、浮点运算器等)、信号处理(FFT、DFT、DDS等)。IP核类似编程中的函数库(例如C语言中的printf()函数),可以直接调用,非常方便,大大加快了开发速度。
这里简单举一个乘法器的IP核使用实例,使用Verilog调用。首先新建工程,新建demo.v顶层模块。
添加IP核
点击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核的示例代码
新建test.v顶层模块,复制以下代码
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
);
代码中声明了无符号型的4位变量a和b,分别赋初值7、8,作为乘数使用;无符号型的8位变量p,用于保存计算结果。clk为Testbench编写的周期20ns的时钟信号;mult_gen_0 mul(…)语句实例化了mult_gen_0类型的模块对象mul,并将clk、a、b、p作为参数传入
行为仿真验证
以demo为顶层模块,启动行为仿真,即可输出波形。设置a、b、p显示为无符号十进制(右击选择Radix - Unsigned Decimal)。如图,可以看到a=7, b=8,第一个时钟上升沿后p = a * b = 56