棋子 · 1 天前

quartus 如何实现 IP 核的参数化调用

在进行编码时,我们时常会使用到乘法器,除法器,等较复杂功能模块,为此 fpga vendor 设计定制了 IP 核,用户通过调用 IP 核来实现所需功能,耗费资源少且利于时序收敛。我们在日常 verilog 编码过程期望通过参数化的方式调用 IP 核。例如 IP 的位宽,时延,部分关键特性期望可以通过参数调用的方式实现,而不是通过打开 GUI 界面通过手动选择的方式实现。其实实现方式很简单。首先通过手动打开 quartus,采用手动调用的方式选择想要使用的 IP 核,完成配置后并且产生 IP,在生产的例化代码中查看如何配置功能和参数,然后自己按照例化案例模块中的格式编写一个 verilog 模块将 IP 包一层,并且关键特性使用参数化。这样就能实现 IP 核的参数化调用了。

首先通过器件手册获取 IP 核说明,也可以通过官网查询(https://www.intel.cn/content/...

本案例中 LPM_MULT Intel FPGA IP 核是一个两个输入数据乘法器,两个相乘数据作为输入,所得结果作为输出。

image.png

1.IP 功能特性描述

LPM_MULT 核提供如下特性:

生成一个乘法器将两个输入数据值相乘

支持 1–256 位数据宽度

支持有符号和无符号数据表示格式

支持区域或速度优化

支持具有可配置输出延迟的流水线操作

为专用数字信号处理(DSP)模块电路或逻辑单元(LE)中的实现提供选项。

2.IP 参数设置

图片

图片

图片

3.接口信号

图片

4.quartus 如何调用 IP

图片

图片

图片

图片

图片

FPGA IP 描述文档路径

图片

图片

5.参数化调用 IP

参考 quartus 工具给出的 lpm_mult 调用方法,参数化调用 IP。

module  asic_lpm_mult  #(
    parameter PIPE_NUM              = 4                        ,
    parameter MULT_DATAA_WDTH       = 16                       ,
    parameter MULT_DATAB_WDTH       = 16                       ,
    parameter MULT_RESULT_WDTH      = 32                          
)(  
        input                                         i_clk        ,  
        input                  [MULT_DATAA_WDTH -1:0] dataa        , 
        input                  [MULT_DATAB_WDTH -1:0] datab        ,
 
        output                [MULT_RESULT_WDTH -1:0] result
);
 
 
    lpm_mult  u_lpm_mult (
        .clock      ( i_clk             ),
        .dataa      ( dataa             ),
        .datab      ( datab             ),
        .result     ( result            ),
        .aclr       (                   ),
        .clken      ( 1'b1              ),
        .sclr       ( 1'b0              ),
        //.sum        ( 1'b0              )
              );
 
    defparam
        u_lpm_mult.lpm_hint = "MAXIMIZE_SPEED=9",
        u_lpm_mult.lpm_pipeline = PIPE_NUM,
        u_lpm_mult.lpm_representation = "UNSIGNED",
        u_lpm_mult.lpm_type = "LPM_MULT",
        u_lpm_mult.lpm_widtha = MULT_DATAA_WDTH,
        u_lpm_mult.lpm_widthb = MULT_DATAB_WDTH,
        u_lpm_mult.lpm_widthp = MULT_RESULT_WDTH;
 
 
endmodule

END

作者:IC小鸽
文章来源:IC小鸽

推荐阅读

更多 IC 设计干货请关注IC 设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。

推荐阅读
关注数
22979
内容数
1372
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息