在fpga設計中,所有的算數運算符都是按照無符號數進行的。最近用FPGA做了有符號的計算,來記錄一下
1.如果要完成有符號數計算,對於加、減操作通過補碼處理即可用無符號加法完成。不過在計算的時候要考慮位數的限制,不管在做加法還是減法,結果的位數要比原來的數據多出一位,
這樣計算的時候才不會出現量程的錯誤。
example1:
module signed_yz
(
input clk,rst_n,
input signed [7:0]data,
input signed [7:0]datb,
output signed [8:0]datc
);
assign datc=data+datb;
endmodule
仿真結果圖 :
2.對於乘法操作,無符號數直接采用“*”運算符;
有符號數運算可通過定義輸出為 signed 來處理。通過“*”運算符完成有符號數的乘法運算。
example2:
module signed_yz
(
input clk,rst_n,
//unsigned data
input [7:0]udata,
input [7:0]udatb,
output [15:0]udatc,
//signed data
input signed [7:0]data,
input signed [7:0]datb,
output signed [15:0]datc
);
assign udatc=udata*udatb;
assign datc=data*datb;
endmodule
從其 RTL 結構圖可以看到乘法器標注為:
“signed” ,為有符號數乘法器。
仿真結果圖 :
以上為FPGA中符號數的計算,記錄一下自己的學習過程,同時也供大家學習。