2016-05-19 29 views
1

をオペレータの定義を決定することはできません。VHDLは、私は私のコードをコンパイルしようとしていた場合、それは次の部分でエラーが発生しました「+」

overflow <= input_a(15) + input_b(15); 

私は15ビットのベクトルとしてinput_aとinput_bを宣言していたし、私が使用していたライブラリは、以下のとおりです。

library ieee; 
use ieee.std_logic_1164.all; 

ので誤差がある:事前に

Error (10327): VHDL error at alu16.vhd(45): can't determine definition of operator ""+"" -- found 0 possible definitions 

おかげ

+0

あなたの最後の質問に私たちのうちのいくつかが答えました。あれ見た? –

+0

もちろんありがとうございます。しかし、私は今別の問題があります –

答えて

1

算術演算を実行する場合は、bit_vector/std_logic_vectorの代わりに符号付き/符号なし信号を宣言する必要があります。

これらの最後の型は、& /および/または...のような論理演算でのみ使用できます。信号が符号付きか符号なしかをコンパイラが認識しないためです。

符号付き/符号なし型を使用する場合は、numeric_stdライブラリを使用する必要があります。

3

input_ainput_bstd_logic_vectorである場合、input_a(15)input_b(15)std_logicであるが、VHDLはstd_logicに対して定義され+オペレータ、従ってエラーを有していません。

あなたは2つのstd_logic値に基づいて結果を生成したい場合は、標準の論理演算子を持っているだけで十分だろうandorxor、および利用可能not、など。

+0

私はここで何をしようとしている他の方法はありますか? –

+2

@ N.Pipisオーバーフローを生成するには2通りの方法があります。キャリーインへのアクセス権があり、MSBのキャリーアウトがある場合は、それらをXORすることができます。 [オーバーフローフラグの計算:方法2](http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt)を参照してください。このアイデアは、[1ビットALUを使用した16ビットALUの作成(スタックオーバーフロー)](https://stackoverflow.com/questions/37274666/making-a-)で完全な加算器でのキャリーイン/アウトを使用することを前提としています。 Matthewが示したように、またはオーバーフローフラグの計算を参照してください(別の方法では、16ビットのaluを使用して1ビットのalus)。単純にaとbのMSBを加算するだけでは不十分です。 – user1155120

関連する問題