Abstract

概要と仕様

豪快書きかけ。

概要

最低限やらなくてはならないのは、IEEE 754の規格で絶対必要な部分をおさえ て、浮動小数点の四則演算と比較命令を上げることである。
そしてコンパイラが、全ての命令がいつ終るのかを読みきれるようにしておく こと。なんだかあたりまえのような気がするが、非同期やハードウェアでのダ イナミックスケジューリングはできない。そうでなければ ASCA でない。
OSCAR の場合は、0 除算を行った時点で止まってしまったそうである。ASCA もトラップは考えないことにし、浮動小数点については、何かあったら、その 旨のフラグを立てて、処理を続行することにする。これは幸いにも、NaN とい うもので簡単 ( ? ) に対処できる。
速度については、50 MHz ( 20 ns ) を目標に設計を行う。100 MHz に上げよ うという動きもあるが、せめて 100 ビット の加算が 10 ns 以下で合成でき るライブラリがないと厳しい。


仕様

浮動小数点演算ユニットの中で共通部分や大まかな部分を示す。

コントロールレジスタは 32 ビットで、フォーマットは暫定的に以下の通り
 33222222 22221111 11111100 00000000
 10987654 31209876 54321098 76543210
-------------------------------------
 oooVOZUI oooVOZUI oooVOZUI ooooooRR
-------------------------------------
 Excep.   Trap     Sticky   R-Mode

各々のビットの意味は

に関するものである。また、レジスタは 4 つのグループに分けられる。

  • Exception

    最後に終了した命令が、出力したフラグを保存しておく場所。つまり命令が終 了する度に変更され、例外が発生しなければ、全て 0 になるということか。 また、トラップがあったときは、セットすべきでないようだ。

  • Trap Enable

    対応するビットを立てた状態で、その例外が発生したときに、割り込みが発生する。

  • Sticky Bit

    命令終了毎に、Exception のフラグの or をとった結果が収納されている。 一旦フラグが立ってしまうと、明示的に消去しない限り消えない。 当然、クリアする命令を実装する必要がある。

  • Round Mode

    2 ビットで構成される。具体的には以下の通り

    丸めモードビット
    RN 00
    RZ 01
    RP 10
    RM 11



    丸めの基本動作
    丸めモード 0 以上の数に対する丸め 負の数に対する丸め
    -∞ ( RM ) 切捨て R | S
    +∞ ( RP ) R | S 切捨て
    0 ( RZ ) 切捨て 切捨て
    最近値 ( RN ) ( R & ( !S ) & L ) | ( R & S ) ( R & ( !S ) & L ) | ( R & S )
    R : 丸めビット
    S : スティッキービット
    L : 丸めの対象となっている数値のLSB

    但し、非数や∞、また、結果が 0 になるような加減算命令に関してはこの限 りではない。また、実際は、RN に関しては簡単化してあるので、もっと単純 な式になるが、意味は上記の方が汲み取りやすい。

    例外処理
    例外の種類非トラップの結果トラップの引数
    無効演算 Quiet ( ? ) NaN 入力オペランド
    0 除算適切な符号付き∞入力オペランド
    オーバーフロー後の表に従う丸めない結果
    アンダーフロー丸めた結果丸めない結果
    不正確丸めた結果丸めない結果

    参考 : IEEE 754 の例外処理 ( bit 別冊より )
    例外状態 割り込みを抑制したときの結果割り込みハンドラの引数
    あふれ ±∞ または±xmax round( x 2-a )
    下位桁あふれ 0 , ±2 Emin またはデノーマル round( x 2 a )
    0 除算±∞被演算数
    不定演算NaN被演算数
    精度 round( x ) round( x )
    x : 演算の正確な結果
    a : 192 ( 単精度 ) , 1536 ( 倍精度 )
    xmax : 1.111.....11 × 2 emax

    トラップの振舞いが規格と違うが、これはソフトでカバーさせる。ハードでは、 できるだけ情報を損ねることなく引数を渡すことにした。フォーマット等は未 定。

    別表 : オーバーフロー時の返り値
    丸めモード中間結果の符号返すべき結果
    RN +
    -
    +∞
    -∞
    RZ +
    -
    + ( 表現しうる最大値 )
    - ( 表現しうる最大値 )
    RP +
    -
    +∞
    - ( 表現しうる最大値 )
    RM +
    -
    + ( 表現しうる最大値 )
    -∞

    Signaling NaN と Quiet NaN を表現する値は仕様を変更そのものから変更し てしまうことにした。
    修士 への道 -> Verilog の修正へ

    数値指数部仮数部

    SNaN
    QNaN
    Emax + 1all 0
    all 1
    all 1 except for MSB

    一歩前へ
    僕のホームへ[Home]
    研究室のページへ[Amano Lab.]
    Takahiro Kawaguchi kawaguti@aa.cs.keio.ac.jp
    Last modified: Dec. 19, 1997