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


當然,我們也可以直接使用*符合來進行乘法,對于無符號的乘法
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
當然我們也要理解有符號數乘法的原理,其實就是擴位乘法,把高位都補充為符號位。
有符號數乘法:
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
關于乘法輸出的位寬,我們知道,兩個8bits的無符號數乘法,結果的位寬是16bits,但對于兩個8bits有符號數的乘法,只要兩個數不同時為-128,即二進制0b1000_0000,那么輸出結果的高兩位都是符號位,我們只需要取低15bits即可。因此,如果我們可以保證兩個輸入的乘數不會同時為有符號數所能表示的負數最小值,那么乘法結果的高兩位都是符號位,只取其中一位即可。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
dsp
+關注
關注
561文章
8244瀏覽量
366609 -
FPGA
+關注
關注
1660文章
22408瀏覽量
636247
發布評論請先 登錄
相關推薦
熱點推薦
位操作的常見錯誤與應對策略
的,可能會導致數據溢出或丟失。
(三)數據類型位表示的理解要點
在嵌入式系統中,不同的數據類型有著不同的位表示方式,這一點在進行位操作時尤為重要。有符號數和無符號數的位表示就存
發表于 11-24 07:50
使用Xilinx 7系列FPGA的四位乘法器設計
隨著 IoT、邊緣計算等應用對低位寬、高并行、高效率算術運算的需求攀升,基礎算術電路,如 4 位乘法,如何在 FPGA 上做到“資源最小化+速度極致”便成為一道新的挑戰。來自日本信州大學
一個提升蜂鳥E203性能的方法:乘除法器優化
,同樣對于無符號乘法進行一位符號擴展后統一當作有符號數進行運算,另外,由于加減交替法迭代所得的結果存在著1比特精度的問題,因此還需要額外3個
發表于 10-27 07:16
E203V2長周期乘法器核心booth算法解讀
E203V2乘法器所在模塊為e203_exu_alu_muldiv.v,其中包含乘法和除法兩大塊,這里僅對乘法模塊進行解讀。
乘法模塊首先進行booth編碼,其目的為方便兩個
發表于 10-24 09:33
(九)浮點乘法指令設計
⊕ sb,得到結果的符號位
階碼相加減
按照定點整數的加減法運算方法對兩個浮點數的階碼進行加減運算,因為規格化數的價碼e滿足1≤e≤254,而ec有可能超出1~254范圍,所以當1≤ec≤254,相乘結果
發表于 10-24 07:11
通過內聯匯編調用乘法指令mulh\\mulhsu\\mulhu
高32位
mulhsurd, rs1,rs2
將rs1當作有符號數,rs2當作無符號數相乘,取高32位
2.由于C語言中的乘法符號,
發表于 10-24 06:52
Verilog實現使用Booth編碼和Wallace樹的定點補碼乘法器原理
對于有符號整數乘法操作,E203使用常用的Booth編碼產生部分積,然后使用迭代的方法,每個周期使用加法器對部分積進行累加,經過多個周期的迭代之后得到最終的乘積。其基本硬件原理圖如圖所
發表于 10-23 08:01
對于指令集中back2back情況的簡單介紹
(64 位中的低 32 位)就用 mul 指令。要得到高 32 位,如果操作數都是有符號數,就用 mulh 指令;如果操作數都是無符號數,就
發表于 10-23 06:52
Booth編碼的原理及選擇
Booth提出該算法的初衷是基于當時計算機中的移位運算比加法運算要快這個硬件環境,其目的是通過移位運算代替部分加法運算來提高乘法運算速度。然而,Booth算法更大的優勢在于,它對有符號數和無符
發表于 10-22 07:53
RISC-V M擴展介紹
。
3.硬件乘法器將兩個操作數進行乘法運算,并將結果存放到指定的寄存器中。
4.如果乘法結果超出了寄存器的位數,需要進行截斷以適應寄存器的大小。
需要注意的是,RISC-V
發表于 10-21 06:50
Copilot操作指南(一):使用圖片生成原理圖符號、PCB封裝
的操作方法。? ” ? 圖片生成原理圖符號(Symbol) Copilot 支持圖片生成原理圖符號功能,支持原理圖編輯器與符號編輯器兩種場景。只需在 Copilot 中? @圖片生成
FPGA有符號數乘法操作指南
評論