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


當然,我們也可以直接使用*符合來進行乘法,對于無符號的乘法
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
有符號乘法可以在Verilog中使用signed來標注。
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
當然我們也要理解有符號數(shù)乘法的原理,其實就是擴位乘法,把高位都補充為符號位。
有符號數(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)于乘法輸出的位寬,我們知道,兩個8bits的無符號數(shù)乘法,結(jié)果的位寬是16bits,但對于兩個8bits有符號數(shù)的乘法,只要兩個數(shù)不同時為-128,即二進制0b1000_0000,那么輸出結(jié)果的高兩位都是符號位,我們只需要取低15bits即可。因此,如果我們可以保證兩個輸入的乘數(shù)不會同時為有符號數(shù)所能表示的負數(shù)最小值,那么乘法結(jié)果的高兩位都是符號位,只取其中一位即可。
編輯:hfy
-
dsp
+關(guān)注
關(guān)注
559文章
8186瀏覽量
362777 -
FPGA
+關(guān)注
關(guān)注
1650文章
22219瀏覽量
628078 -
乘法器
+關(guān)注
關(guān)注
9文章
220瀏覽量
38371
發(fā)布評論請先 登錄
蜂鳥E203乘法器的優(yōu)化——基8的Booth編碼+Wallace樹
Verilog實現(xiàn)使用Booth編碼和Wallace樹的定點補碼乘法器原理
關(guān)于E203內(nèi)核高性能乘法器優(yōu)化(二)
改進wallance樹乘法器優(yōu)化方法
關(guān)于E203內(nèi)核高性能乘法器優(yōu)化(一)
蜂鳥乘法器設(shè)計分享
基4-Booth單周期乘法器的具體設(shè)計
改進型乘法器結(jié)構(gòu)設(shè)計
蜂鳥E203乘法器改進
蜂鳥E203內(nèi)核乘法器的優(yōu)化
優(yōu)化boot4的乘法運算周期
優(yōu)化boot4乘法器方法
ADL5390 RF矢量乘法器技術(shù)手冊

FPGA中乘法器的原理分析
評論