FPGA 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


6 、结果

在这里插入图片描述

  • 2
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值