2017-09-12 33 views
2

System Verilogで32ビット以上をサポートするシステム関数はありますか?実数値の量を32ビット以上の整数値に変換したい。 $ rtoi()システム関数は、32ビット以下で表現できる値に対して正確に行います。これのために内蔵されていますか、私は自分自身を書く必要がありますか?実数値の数値を32ビットより大きい整数値に変換する最善の方法は?

具体的な例については、私は次のような何かをできるようにしたいと思います:

logic [41:0] test_value; 

initial begin 
    test_value = $rtoi($pow(2.0, 39.5)); 
end 

、代わりに$ rtoi()、私は、システムの機能を求めた後、未知を使用します。正しい関数が与えられた場合、これは、ビットシーケンス42'b1011010100000100111100110011001111111001で初期化されたtest_value、または丸めがサポートされている場合は42'b1011010100000100111100110011001111111010になると予想されます。

私は自分の機能を書くことができますが、ホイールがない限り、ホイールの再発明を避けたいと思います。

答えて

3

リアルから整数への暗黙的なキャストがあなたは

test_value = 2.0**39.5; 

それとも、

typedef logic [41:0] uint42_t; 

test_value = uint42_t'(2.0**39.5); 
+0

明示的なキャストを使用することができます丸めて欲しいものを与え、あなたの答えのための@ dave_59、ありがとうございました。それらはどちらも私のために働いた。 FYI:明示的な型キャストにtypoがあります。宣言の識別子はuint42_tで、キャストにはアンダースコアuint_42_tが追加されています...修正しようとしましたが、変更しなかったため少なくとも6文字。 – hops

関連する問題