作者:貓叔
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即可。因此,如果我們可以保證兩個輸入的乘數不會同時為有符號數所能表示的負數最小值,那么乘法結果的高兩位都是符號位,只取其中一位即可。
編輯:hfy
-
dsp
+關注
關注
554文章
8059瀏覽量
350670 -
FPGA
+關注
關注
1630文章
21802瀏覽量
606413 -
乘法器
+關注
關注
8文章
206瀏覽量
37209
發布評論請先 登錄
相關推薦
求助,LMX2572LP參考時鐘路徑中的乘法器MULT的輸入頻率范圍問題求解
請問如何用VCA810實現模擬乘法器?
CDCF5801A具有延遲控制和相位對準的時鐘乘法器數據表
![CDCF5801A具有延遲控制和相位對準的時鐘<b class='flag-5'>乘法器</b>數據表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
CDCS503帶可選SSC的時鐘緩沖器/時鐘乘法器數據表
![CDCS503帶可選SSC的時鐘緩沖器/時鐘<b class='flag-5'>乘法器</b>數據表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
請問帶有乘法器的信號鏈噪聲帶寬如何確定?
SN5497、SN7497同步6位二進制速率乘法器數據表
![SN5497、SN7497同步6位二進制速率<b class='flag-5'>乘法器</b>數據表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
CMOSBCD速率乘法器CD4527B TYPES 數據表
![CMOSBCD速率<b class='flag-5'>乘法器</b>CD4527B TYPES 數據表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
CMOS二進制速率乘法器CD4089B TYPES 數據表
![CMOS二進制速率<b class='flag-5'>乘法器</b>CD4089B TYPES 數據表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論