対称丸めは、数値が誤った方向へ偏るのを防ぎ、より好ましい結果が得られる量子化方法です。たとえば、無限大への対称丸めでは、中間値 2.5 は 3.0 へ、–2.5 は –3.0 へ丸めます。
小数点の位置は、DSP58 の C ポートを使用して示します。C ポート バスの連続する 1 の数に 1 を足したものが、元の数値の小数位を表します。たとえば小数位が 4 の場合、C = 00 … 0111 です。RND は静的丸めにのみ使用しますが、C は静的丸めと動的丸めの両方に使用できます。対称丸めの方向を無限大とするか 0 とするかは、符号ビットによって異なります。無限大への丸めでは、負の中間値と正の中間値はいずれも 0 から離れた方向へ丸めが実行されます。たとえば 2.5 は 3 へ、–2.5 は –3.0 へ丸めます。CARRYINSEL で内部信号を選択すると、CARRYIN とプログラマブル ロジックを使用せずに符号ビットの補数を実装できます。0 への丸めでは、正と負の中間値はいずれも 0 に近い方向へ丸めが実行されます。たとえば 2.5 は 2 へ、–2.5 は –3 へ丸めます。次の表に、対称丸めの例を示します。
乗算器出力 | C | 符号ビット | 出力 = 乗算器出力 + C + 符号ビット |
---|---|---|---|
0010.1000 (2.5) |
0000.0111
|
0
|
0010.1111 (切り捨て後、2) |
1101.1000 (-2.5) |
0000.0111
|
1
|
1110.0000 (切り捨て後、-2) |
0011.1000 (3.5) |
0000.0111
|
0
|
0011.1111 (切り捨て後、3) |
乗算器出力 | C | 符号ビットの補数 | 出力 = 乗算器出力 + C + 符号ビットの補数 |
---|---|---|---|
0010.1000 (2.5) |
0000.0111
|
1
|
0011.1111 (切り捨て後、3) |
1101.1000 (-2.5) |
0000.0111
|
0
|
1101.1111 (切り捨て後、-3) |
0011.1000 (3.5) |
0000.0111
|
1
|
0100.0000 (切り捨て後、4) |