IC學習筆記(一)——Verilog加減法及四捨五入
1、加減法計算
①兩個位寬相同,定標相同的數相加時,首先將兩個數各擴充套件1個符號位再加,以保證不溢位;
wire [15:0] a;//Q(16,1)
wire [15:0] b;//Q(16,1)
wire [16:0] c;
wire [15:0] d;
assign c = {a[15],a} + {b[15],b};//各擴充套件1個符號位再加,保證不溢位
assign d = 飽和(c);//Q(16,1)
②兩個位寬不一致的數相加時,先整數部分和小數部分都要對齊,再擴充套件符號位加;
wire [9:0] a;//Q(10,1)
wire [15:0] b;//Q(16,7)
wire [16:0] c;
wire [15:0] d;
assign c = {{7{a[9]}},a} + {b[15],b};//先對齊,再擴充套件符號位加
assign d = 飽和(c);// Q(16,7)
2、四捨五入
在進行資料截位時,如果一個M bit的數A要四捨五入成N bit的數B,M>N,有偏估計和無偏估計兩種方法:
① 有偏
Negative numbers to the closest representable number in the direction of negative infinity.
wire [N:0] C;
wire [N-1:0] D;
assign C = A[M-1:M-N-1] + 1’b1;
assign D = C[N:1];
即assign D= A[M-1:M-N-2] + A[M-N-1];
②無偏估計
由上圖可以看出,有偏估計四捨五入的值向絕對值大的方向偏,無偏估計四捨五入的值收斂。
a=!A[M-1] & (&A[M-2:M-N]);//判斷高N位是不是正最大值
b=!(|A[M-N-2:0]) & (&A[M-N:M-N-1]);
c=|A[M-N-2:0] & A[M-N-1];
assign B=((b|c)&(!a))?(A[M-1:M-N]+1'b1):A[M-1:M-N];
①兩個位寬相同,定標相同的數相加時,首先將兩個數各擴充套件1個符號位再加,以保證不溢位;
wire [15:0] a;//Q(16,1)
wire [15:0] b;//Q(16,1)
wire [16:0] c;
wire [15:0] d;
assign c = {a[15],a} + {b[15],b};//各擴充套件1個符號位再加,保證不溢位
assign d = 飽和(c);//Q(16,1)
②兩個位寬不一致的數相加時,先整數部分和小數部分都要對齊,再擴充套件符號位加;
wire [9:0] a;//Q(10,1)
wire [15:0] b;//Q(16,7)
wire [16:0] c;
wire [15:0] d;
assign c = {{7{a[9]}},a} + {b[15],b};//先對齊,再擴充套件符號位加
assign d = 飽和(c);// Q(16,7)
2、四捨五入
在進行資料截位時,如果一個M bit的數A要四捨五入成N bit的數B,M>N,有偏估計和無偏估計兩種方法:
① 有偏
有偏估計採用MATLAB中的round演算法:
Positive numbers to the closest representable number in the direction of positive infinity.Negative numbers to the closest representable number in the direction of negative infinity.
wire [N:0] C;
wire [N-1:0] D;
assign C = A[M-1:M-N-1] + 1’b1;
assign D = C[N:1];
即assign D= A[M-1:M-N-2] + A[M-N-1];
②無偏估計
無偏估計採用MATLAB中convergent演算法:當一個數小數部分大於0.5時,四捨五入結果為整數部分加1;如果小數部分等於0.5時,四捨五入結果為離它最近的偶數;如果小數部分小於0.5,四捨五入結果為這個數的整數部分。
首先判斷高N位是否表示正最大值,若不是正最大值,如果A[M-N-2:0]不全為0,當A[M-N-1]=1時,四捨五入結果為A[M-1:M-N]+1'b1;如果A[M-N-2:0]全為0,且A[M-1:M-N]為奇數,當A[M-N-1]=1時,四捨五入結果為A[M-1:M-N]+1'b1;其餘情況下,四捨五入結果為A[M-1:M-N]。由上圖可以看出,有偏估計四捨五入的值向絕對值大的方向偏,無偏估計四捨五入的值收斂。
a=!A[M-1] & (&A[M-2:M-N]);//判斷高N位是不是正最大值
b=!(|A[M-N-2:0]) & (&A[M-N:M-N-1]);
c=|A[M-N-2:0] & A[M-N-1];
assign B=((b|c)&(!a))?(A[M-1:M-N]+1'b1):A[M-1:M-N];
相關文章
- C++ 四捨五入與不四捨五入C++
- 一個四捨五入函式 (轉)函式
- java中的四捨五入-銀行家舍入法Java
- JavaScript數字四捨五入JavaScript
- oracle中round()四捨五入Oracle
- php中四捨五入的數學函式PHP函式
- JavaScript四捨五入的改進JavaScript
- JavaScript toFixed() 四捨五入規則JavaScript
- JavaScript四捨五入的那些坑JavaScript
- iOS小數四捨五入總結iOS
- js四捨五入程式碼例項JS
- JavaScript 賭運氣的四捨五入JavaScript
- DELPHI四捨五入問題解決
- JS四則運算與四捨五入精度問題及解決方案JS
- 【轉載】Verilog對資料進行四捨五入(round)與飽和(saturation)截位
- 那些關於JS四捨五入的事JS
- 四捨五入之銀行家演算法演算法
- sql 保留兩位小數+四捨五入SQL
- Spring學習筆記五: AOP入門Spring筆記
- Html 語法學習筆記一HTML筆記
- JVM 學習筆記(五)JVM筆記
- cmake學習筆記(五)筆記
- Javascript 學習 筆記五JavaScript筆記
- js實現的數字四捨五入效果JS
- javascript數字四捨五入程式碼例項JavaScript
- MySQL 之 ROUND 函式四捨五入的陷阱MySql函式
- PHP實現四捨五入的3種方法PHP
- C語言中四捨五入問題總結C語言
- Verilog實現加減乘除運算
- goLang學習筆記(四)Golang筆記
- Javascript 學習 筆記四JavaScript筆記
- TS學習筆記(四)筆記
- kettle學習筆記(四)——kettle輸入步驟筆記
- 學習筆記 AS入門(四) 元件篇之Activity筆記元件
- JavaScript入門-學習筆記(一)JavaScript筆記
- Dubbo學習筆記(一) 入門筆記
- golang入門學習筆記(一)Golang筆記
- Java中數字的四捨五入和取整Java