如何生成自己的IP,并调用
1、新建ip核的工程,74x138
1. 1、新建源程序,编写源程序
module v_74x138(
input g1,
input g2a_l,
input g2b_l,
input [2:0] a,
output [7:0] y_l
);
reg [7:0] y_l=0;
always @(g1 or g2a_l or g2b_l or a)
begin
if(g1 && ~g2a_l && ~g2b_l)
case(a)
7:y_l=8'b0111_1111;
6:y_l=8'b1011_1111;
5:y_l=8'b1101_1111;
4:y_l=8'b1110_1111;
3:y_l=8'b1111_0111;
2:y_l=8'b1111_1011;
1:y_l=8'b1111_1101;
0:y_l=8'b1111_1110;
default:y_l=8'b1111_1111;
endcase
else
y_l=8'b1111_1111;
end
endmodule
1.2、新建仿真程序,编写仿真程序
module sim_74x138_1(
);
reg g1,g2a_l,g2b_l;
reg [2:0] a;
wire [7:0] y_l; //调用函数前先定义
v_74x138 uut(g1,g2a_l,g2b_l,a,y_l);//调用函数,实例名是uut
initial
begin //初始化
g1=0;
g2a_l=0;
g2b_l=0;
a=0;
#100
g1=1;//使能
g2a_l=0;
g2b_l=0;
end
always #100 a=a+1;//每间隔10ns,a的值加1
endmodule
2、生成IP核
点击tool------create and package New IP ----一直next,然后点击finish。-----------点击package ip
3、新建工程,pl_dsbjq_useip
4、将前面生成的ip添加到工程
4.1、点击setting-----找到IP的Repository-----点击+,添加第一步建立的工程pl_74x138
4.2、点击ip catalog-----双击UserIP----双击v_74x138_v1_0----OK----OK----点击生成-----现在在source那里可以看见添加的I
5、调用自己编写的IP
5.1、点击IP source-----找到.veo文件,它告诉了如何调用IP。
5.2、添加源文件v_dsbjq_useip,编写源文件
`timescale 1ns / 1ps
//多数表决器
module v_dsbjq_useip(
input a,
input b,
input c,
output f
);
wire [7:0] y_l;
assign f=~(y_l[3]&y_l[5]&y_l[6]&y_l[7]);// 两个裁判判为1,输出才为1
// 下面就是调用IP核
v_74x138_0 v_74x138_0_inst(// 对ip的调用
.g1(1), //g1表示模块端口,1 表示送入的值
.g2a_l(0),
.g2b_l(0), //由g2b_l变成 .g2b_l(0) 是为了使使能端口有效
.a({c,b,a}),
.y_l(y_l) //没有定义,所以需要定义
);
//assign f=~(y_l[3]&y_l[5]&y_l[6]&y_l[7]);// 两个裁判判为1,输出才为1
endmodule
5.3、添加仿真文件sim_dsbjq_useip,编写仿真文件
`timescale 1ns / 1ps
module sim_dsbjq_useip;
reg in_a,in_b,in_c;
wire f;
v_dsbjq_useip uut( // v_dsbjq_useip是源程序的函数名,必须保持一致 uut随便取
.a(in_a), //a表示模块端口,in_a表示送入的值
.b(in_b),
.c(in_c),
.f(f)
);
initial
begin
in_a=0;in_b=0;in_c=0;
end;
always #20 {in_a,in_b,in_c}= {in_a,in_b,in_c}+1;
endmodule