在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中符號數的計算,記錄一下自己的學習過程,同時也供大家學習。
C C 中有符號數和無符號數的運算
在vc6.0和vs2010下驗證,有如下結果 多個不同符號變數的運算 加 減 乘 除 取餘 比較大小 已用vc6.0和vs2010驗證 1 1個位元組型別變數或2個位元組型別變數之間的混合運算,結果是有符號4位元組型別變數 2 包含4位元組型別及以上的變數的混合運算,則符合 1 若變數位元組數相同 ...
FPGA中的有符號數和無符號數的運算
在fpga設計中,所有的算數運算子都是按照無符號數進行的。如果要完成有符號數計算,對於加 減操作通過補碼處理即可用無符號加法完成。對於乘法操作,無符號數直接採用 運算子,有符號數運算可通過定義輸出為 signed 來處理。需要注意的是,盡量不要使有符號數與無符號數進行混合計算。因為只要有乙個無符號數...
C中有符號數與無符號數轉化之間的危險
無符號數與有符號數之間存在著很多細節問題,稍有不慎就可能導致程式出現不可預料的錯誤。如果說是在長度相同的數值型別之間相互轉化或者向長度比較短的資料轉化是沒有問題的,結果都是已定義的 多餘的位將被簡單的丟棄。但是,一旦需要向長度更長的資料型別轉化這個問題就會變得十分蹊蹺。例如編譯器在轉化char型別到...