2012-03-16 60 views
1

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

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

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

x = + 1の場合、出力値は13/2=6.5である必要があります。

しかし、シミュレーションするとoutput_value = 6が表示されます。

答えて

0

コードが助けになりますが、あなたのリアリティを全く分けていないと思われます。 17と2は整数なので、そのような簡単な文は整数除算を行います。あなただけの言葉の下から外れてしまったので1である

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

x場合は、あなたの第2のケースで

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

x >>> 1は0ではなく、0.5です。

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

ここでは特に何もありません。これは大多数の言語に当てはまります。

+0

ご理解いただけますようお願い申し上げます。さて、私は、x = 1でoutput_value =((x >>> 1)+ x)+ 5を計算しながら、結果を6.5としてどのように得ることができるのだろうかと思います。私はテストベンチでx = 1.0に調整しようとしました。しかし、それは私の問題を解決しませんでした。 xの入力を実数として定義する方法はありますか? –

関連する問題