FPGA中乘法器是很稀缺的資源,但也是我們做算法必不可少的資源。7系列及之前的FPGA都是25x18的DSP,UltraScale中是27x18,我們可以通過調(diào)IP Core的方式或者原語的方式來進(jìn)行乘法操作。在里面可以設(shè)置有符號(hào)還是無符號(hào)數(shù)乘法。


當(dāng)然,我們也可以直接使用*符合來進(jìn)行乘法,對(duì)于無符號(hào)的乘法
reg [7:0] ubyte_a; reg [7:0] ubyte_b; (* use_dsp48="yes" *) output reg[15:0] u_res; always @ ( posedge clk ) begin if(rst) u_res <= 'b0; else u_res <= ubyte_a * ubyte_b; end
有符號(hào)乘法可以在Verilog中使用signed來標(biāo)注。
reg signed [7:0] byte_a;
reg signed [7:0] byte_b;
(* use_dsp48="yes" *)
reg signed [15:0] res;
always @ ( posedge clk ) begin
if(rst)
res <= 'b0;
else
res <= byte_a * byte_b;
end
當(dāng)然我們也要理解有符號(hào)數(shù)乘法的原理,其實(shí)就是擴(kuò)位乘法,把高位都補(bǔ)充為符號(hào)位。
有符號(hào)數(shù)乘法:
reg [7:0] ubyte_a;
reg [7:0] ubyte_b;
(* use_dsp48="yes" *)
reg [15:0] res_manul;
always @ ( posedge clk ) begin
if(rst)
res_manul <= 'b0;
else
res_manul <= {{8{byte_a[7]}},ubyte_a} * {{8{ubyte_b[7]}},ubyte_b};
end
關(guān)于乘法輸出的位寬,我們知道,兩個(gè)8bits的無符號(hào)數(shù)乘法,結(jié)果的位寬是16bits,但對(duì)于兩個(gè)8bits有符號(hào)數(shù)的乘法,只要兩個(gè)數(shù)不同時(shí)為-128,即二進(jìn)制0b1000_0000,那么輸出結(jié)果的高兩位都是符號(hào)位,我們只需要取低15bits即可。因此,如果我們可以保證兩個(gè)輸入的乘數(shù)不會(huì)同時(shí)為有符號(hào)數(shù)所能表示的負(fù)數(shù)最小值,那么乘法結(jié)果的高兩位都是符號(hào)位,只取其中一位即可。
-
dsp
+關(guān)注
關(guān)注
561文章
8277瀏覽量
368436 -
FPGA
+關(guān)注
關(guān)注
1664文章
22509瀏覽量
639529
發(fā)布評(píng)論請(qǐng)先 登錄
位操作的常見錯(cuò)誤與應(yīng)對(duì)策略
使用Xilinx 7系列FPGA的四位乘法器設(shè)計(jì)
定點(diǎn)數(shù)表示實(shí)數(shù)的方法以及定點(diǎn)數(shù)在硬件上的運(yùn)算驗(yàn)證
一個(gè)提升蜂鳥E203性能的方法:乘除法器優(yōu)化
E203V2長周期乘法器核心booth算法解讀
(九)浮點(diǎn)乘法指令設(shè)計(jì)
通過內(nèi)聯(lián)匯編調(diào)用乘法指令mulh\\mulhsu\\mulhu
Verilog實(shí)現(xiàn)使用Booth編碼和Wallace樹的定點(diǎn)補(bǔ)碼乘法器原理
對(duì)于指令集中back2back情況的簡(jiǎn)單介紹
蜂鳥乘法器設(shè)計(jì)分享
Booth編碼的原理及選擇
改進(jìn)型乘法器結(jié)構(gòu)設(shè)計(jì)
浮點(diǎn)運(yùn)算單元的設(shè)計(jì)和優(yōu)化
RISC-V M擴(kuò)展介紹
Copilot操作指南(一):使用圖片生成原理圖符號(hào)、PCB封裝
FPGA有符號(hào)數(shù)乘法操作指南
評(píng)論