演算の精度
表記
精度書式
{符号}{整数ビット幅}.{小数ビット幅}で表します。
符号
符号あり・なしを大文字英字1文字で示します。
記号 |
種類 |
ビット数 |
S |
符号あり |
1 |
U |
符号なし |
0 |
例 |
ビットアサイン |
符号 |
数字部 |
S7 |
[7] |
[6:0] |
U5 |
- |
[4:0] |
ビット幅
整数のみの場合はドット以降を省略、或いは「.0」とします。
例 |
ビットアサイン |
符号 |
整数部 |
小数部 |
S2.5 |
[7] |
[6:5] |
[4:0] |
U2.6 |
- |
[7:6] |
[5:0] |
U8.0 |
- |
[7:0] |
- |
概要
加算、減算
{m1}±{m2} = {max(m1,m2)+1}
{m1.n1}±{m2.n2} = {max(m1,m2)+1}.{max(n1,n2)}
例
- S7 + S7 = S8
- U8 - S8 = S9
- U1.7 + U4.1 = U5.7
- S4.4 - U4.0 = S5.4
乗算
m1 * m2 = {m1+m2}
m1.n1 * m2.n2 = {m1+m2}.{n1+n2}
例
- S7 * S7 = S14
- U8 * S8 = S16
- U1.7 * U4.1 = U5.8
- S4.4 * U4.0 = S8.4
除算
循環小数となることもあるので、LSB側の精度については検討が必要です。
m1 / m2 = {max(m1,m2)}
m1.n1 / m2.n2 = {max(m1,m2)}.{max(n1,n2)}
処理をする場合は、事前に被除数を左シフト等しておくと精度落ちに効果があります。
例
被序数U4.2、法数U1.9、解の小数精度を9とする場合:
U4.2 << 7 ⇒ U4.9
U4.9 / U1.9 = U5.18 >> 9 ⇒ U5.9 本当かなぁ
動作確認
ツール |
バージョン |
結果 |
NC-Verilog |
|
未確認 |
VCS-MX |
|
未確認 |
ModelSim |
|
未確認 |
Cver |
|
未確認 |
テストコード
(概要を記述予定)
(実行方法を記述予定)
パタン1
(パタン内容を記述予定)
initial begin
//verilogテストパタン1
end
(実行結果1)
ソースコード
ファイル1
(概要を記述予定)
ファイル2
(概要を記述予定)
最終更新:2008年12月11日 01:50