提取IP核
quartus II软件中提供了大量的IP核,我们可以根据需要提取IP核。在本实验中,假如我们提取了IP核:LPM_COUNTER。其接口如下:
module counter (
cin,
clock,
cout,
q);
input cin;
input clock;
output cout;
output [3:0] q;
功能:在每个clk的上升沿到来时,如果cin为1,则q进行自加,如果q满了,则cout产生进位输出。
验证IP核
`timescale 1ns/1ps
module counter_tb;
reg cin;
reg clk;
wire cout;
wire[3:0] q;
counter counter0(
.cin(cin),
.clock(clk),
.cout(cout),
.q(q)
);
initial clk = 1;
always #1 clk = ~clk;
initial begin
repeat(20)begin
cin = 0;
#5;
cin = 1;
#2;
cin = 0;
end
#20;
$stop;
end
endmodule
IP核的验证就是写一个testbench。在这里,我们添加了一个repeat语句,循环了20次,并且在每次循环中,cin都维持了一个时钟周期,故每次循环内部都会加1。
仿真波形
总结
调用IP核其实和我们自己写的rtl一样,只是相比我们写的rtl,IP核内部的逻辑结构我们可能是看不懂的。所以有时候我们可能会心虚,没信心。其实完全没必要,我们只需要明白这个IP核的功能以及每个输入输出口的作用即可,其调用方式和我们自己写的rtl调用方式一样。