在設計中,所有的算數運算符都是按照無符號數進行的。如果要完成有符號數計算,對于加、減操作通過補碼處理即可用無符號加法完成。對于乘法操作,無符號數直接采用“*”運算符,有符號數運算可通過定義輸出為 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
+關注
關注
1643文章
21954瀏覽量
613943
發布評論請先 登錄
Verilog中signed和$signed()的用法

ADS8688分別設置0 to 1.25 × VREF和±1.25 × VREF采樣范圍時,得到的16位數據是按照有符號數還是無符號數進行轉換?
原理圖符號和PCB封裝有什么不同?

afe4900在測量的PPG信號比較弱的時候,有時取到的環境光信號是負的,怎么處理?
KiCad中不同GND符號的含義及應用

將模擬音頻信號數字化的步驟
LM70 SPI/MICROWIRE 10位帶符號數字溫度傳感器數據表

什么是一種將模擬信號數字化的技術
LMH6518輸出異常的原因?
LM12454/LM12458/LM12H458 12位符號數據采集系統數據表

評論