?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;
(* *)
output reg[15:0] u_res;
always @ ( posedge clk ) begin
if(rst)
u_res else
u_res end
?有符號(hào)乘法可以在Verilog中使用signed來標(biāo)注。
reg signed [7:0] byte_a;
reg signed [7:0] byte_b;
(* *)
reg signed [15:0] res;
always @ ( posedge clk ) begin
if(rst)
res else
res end
當(dāng)然我們也要理解有符號(hào)數(shù)乘法的原理,其實(shí)就是擴(kuò)位乘法,把高位都補(bǔ)充為符號(hào)位。
有符號(hào)數(shù)乘法:
reg [7:0] ubyte_a;
reg [7:0] ubyte_b;
(* *)
reg [15:0] res_manul;
always @ ( posedge clk ) begin
if(rst)
res_manul else
res_manul 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)位,只取其中一位即可。
審核編輯:符乾江
-
FPGA
+關(guān)注
關(guān)注
1652文章
22228瀏覽量
628466 -
乘法器
+關(guān)注
關(guān)注
9文章
220瀏覽量
38392
發(fā)布評(píng)論請(qǐng)先 登錄
定點(diǎn)數(shù)表示實(shí)數(shù)的方法以及定點(diǎn)數(shù)在硬件上的運(yùn)算驗(yàn)證
一個(gè)提升蜂鳥E203性能的方法:乘除法器優(yōu)化
通過內(nèi)聯(lián)匯編調(diào)用乘法指令mulh\\mulhsu\\mulhu
e203乘除法模塊(e203_exu_alu_muldiv.v)中的back2back和special case信號(hào)的含義
Verilog實(shí)現(xiàn)使用Booth編碼和Wallace樹的定點(diǎn)補(bǔ)碼乘法器原理
對(duì)于指令集中back2back情況的簡單介紹
蜂鳥乘法器設(shè)計(jì)分享
Booth編碼的原理及選擇
改進(jìn)型乘法器結(jié)構(gòu)設(shè)計(jì)
蜂鳥E203內(nèi)核乘法器的優(yōu)化
RISC-V M擴(kuò)展介紹
Verilog中signed和$signed()的用法
請(qǐng)問AFE5801 AD轉(zhuǎn)換后數(shù)字信號(hào)是用有符號(hào)數(shù)還是無符號(hào)數(shù)表示的?
ADS8688分別設(shè)置0 to 1.25 × VREF和±1.25 × VREF采樣范圍時(shí),得到的16位數(shù)據(jù)是按照有符號(hào)數(shù)還是無符號(hào)數(shù)進(jìn)行轉(zhuǎn)換?
KiCad中不同GND符號(hào)的含義及應(yīng)用

FPGA中的有符號(hào)數(shù)乘法說明
評(píng)論