2

Verilogが実数の結果を整数の結果に丸めていることに気づきました。たとえば、シミュレーターを見ると、17/2の結果が9と表示されます。どうすればよいですか?とにかく:のようなものを定義することはありますoutput real reg [11:0] output_valueか?それとも、シミュレーターの設定でやらなければならないことですか?

シミュレーションのみ(合成なし)。例:
xは符号付き入力として定義され、output_valueは出力regとして定義されます。

output_value = ((x >>> 1) + x) + 5; 

x = + 1の場合、出力値は次のようになります13/2=6.5

ただし、シミュレートすると、が表示されますoutput_value = 6

4

1 に答える 1

1

コードは役に立ちますが、実数をまったく分割していないのではないかと思います。17と2は整数なので、そのような単純なステートメントは整数除算を行います。

17   / 2   = 8 (not 9, always rounds towards 0)
17.0 / 2.0 = 8.5

2番目のケースでは

output_value = ((x >>> 1) + x) + 5

xが1の場合、x >>> 1は0であり、単語の最後から外れたため、0.5ではありません。

output_value = ((1 >>> 1) + 1) + 5 = 0 + 1 + 5 = 6

ここでは、Verilogについて特別なことは何もありません。これはほとんどの言語に当てはまります。

于 2012-03-17T11:30:45.283 に答える