在进行编码时,我们时常会使用到乘法器,除法器,等较复杂功能模块,为此 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 核是一个两个输入数据乘法器,两个相乘数据作为输入,所得结果作为输出。
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小鸽
推荐阅读
- 锁相环(PLL)设计核心解析——架构、权衡与应用
- 什么是芯片可测性设计(DFT)技术?
- 深入理解 DDR:DDR4 的 RASR/Bank Group 等技术
- 一篇讲透!为什么说总线协议和片上互联是芯片/FPGA设计的灵魂?
- PCIe学习(七)
更多 IC 设计干货请关注IC 设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。