quartus 如何實(shí)現(xiàn)IP核的參數(shù)化調(diào)用
時(shí)間:2025-12-07 20:11:51
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
? ? 在進(jìn)行編碼時(shí),我們時(shí)常會(huì)使用到乘法器,除法器,等較復(fù)雜功能模塊,為此fpga vendor設(shè)計(jì)定制了IP核,用戶通過調(diào)用IP核來實(shí)現(xiàn)所需功能,耗費(fèi)資源少且利于時(shí)序收斂。我們?cè)谌粘erilog編碼過程期望通過參數(shù)化的方式調(diào)用IP核。例如IP的位寬,時(shí)延,部分關(guān)鍵特性期望可以通過參數(shù)調(diào)用的方式實(shí)現(xiàn),而不是通過打開GUI界面通過手動(dòng)選擇的方式實(shí)現(xiàn)。其實(shí)實(shí)現(xiàn)方式很簡單。首先通過手動(dòng)打開quartus,采用手動(dòng)調(diào)用的方式選擇想要使用的IP核,完成配置后并且產(chǎn)生IP,在生產(chǎn)的例化代碼中查看如何配置功能和參數(shù),然后自己按照例化案例模塊中的格式編寫一個(gè)verilog模塊將IP包一層,并且關(guān)鍵特性使用參數(shù)化。這樣就能實(shí)現(xiàn)IP核的參數(shù)化調(diào)用了。
首先通過器件手冊(cè)獲取IP核說明,也可以通過官網(wǎng)查詢(https://www.intel.cn/content/www/cn/zh/docs/programmable/683037/23-1/core-references-91023.html)
本案例中LPM_MULT Intel FPGA IP 核是一個(gè)兩個(gè)輸入數(shù)據(jù)乘法器,兩個(gè)相乘數(shù)據(jù)作為輸入,所得結(jié)果作為輸出。

1.IP功能特性描述
LPM_MULT 核提供如下特性:
生成一個(gè)乘法器將兩個(gè)輸入數(shù)據(jù)值相乘
支持1–256位數(shù)據(jù)寬度
支持有符號(hào)和無符號(hào)數(shù)據(jù)表示格式
支持區(qū)域或速度優(yōu)化
支持具有可配置輸出延遲的流水線操作
為專用數(shù)字信號(hào)處理(DSP)模塊電路或邏輯單元(LE)中的實(shí)現(xiàn)提供選項(xiàng)。
2.IP參數(shù)設(shè)置



3.接口信號(hào)

4.quartus如何調(diào)用IP





FPGA IP描述文檔路徑


5.參數(shù)化調(diào)用IP
參考quartus工具給出的lpm_mult調(diào)用方法,參數(shù)化調(diào)用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





