在設計中,所有的算數運算符都是按照無符號數進行的。如果要完成有符號數計算,對于加、減操作通過補碼處理即可用無符號加法完成。對于乘法操作,無符號數直接采用“*”運算符,有符號數運算可通過定義輸出為 signed 來處理。
通過“*”運算符完成有符號數的乘法運算。
module ceshi (out, clk, a, b);
output [15:0] out;
input clk;
//通過 signed 關鍵字定義輸入端口的數據類型為有符號數
input signed [7:0] a;
input signed [7:0] b;
//通過 signed 關鍵字定義寄存器的數據類型為有符號數
reg signed [7:0] a_reg;
reg signed [7:0] b_reg;
reg signed [15:0] out;
wire signed [15:0] mult_out;
//調用*運算符完成有符號數乘法
assign mult_out = a_reg * b_reg;
always@(posedge clk)
begin
a_reg <= a;
b_reg <= b;
out <= mult_out;
end
endmodule
上述程序在 ISE 中的綜合結果如下圖所示,從其 RTL 結構圖可以看到乘法器標注為“signed” ,為有符號數乘法器。

仿真結果圖

二進制顯示的結果

-
FPGA
+關注
關注
1660文章
22408瀏覽量
636227
發布評論請先 登錄
一文讀懂電子元件符號:新手也能輕松識別,避坑不踩雷
傳遞一個無符號的 long 型指針給函數
工控人必備的30個字母符號
位操作的常見錯誤與應對策略
一個提升蜂鳥E203性能的方法:乘除法器優化
對于指令集中back2back情況的簡單介紹
Booth編碼的原理及選擇
e203除法器算法改進(一)
RISC-V M擴展介紹
rt-thread studio怎么設置才能讓char變量是真正的有符號類型?
Copilot操作指南(一):使用圖片生成原理圖符號、PCB封裝
fpga 有符號數、無符號數
評論