2017-04-26 11 views
0
library ieee; 
use ieee.std_logic_1164.all; 
use ieee.std_logic_unsigned.all; 
use ieee.std_logic_arith.all; 
use ieee.numeric_bit.all; 
use ieee.numeric_std.all; 
entity multiplexer is 
port (
    A,B: in std_logic_vector (7 downto 0); 
    CI: in std_logic; 
    CO: out std_logic; 
    ANS: out std_logic_vector (7 downto 0); 
    OP: in std_logic_vector(1 downto 0); 
    EN: in std_logic); 
end multiplexer; 

architecture archi of multiplexer is 
    signal tmp: std_logic_vector (8 downto 0); 
begin 
    process (EN) begin 
     if (EN = '1') Then 
      case OP is 
      when "00" => 
       tmp <= conv_std_logic_vector((conv_integer(A)+conv_integer(B)+conv_integer(CI)),9); 
       ANS<= tmp(7 downto 0); 
       CO <= tmp(8); 
      when "01" => 
       tmp <= conv_std_logic_vector((conv_integer(A)-conv_integer(B)+conv_integer(CI)),9); 
       ANS<= tmp(7 downto 0); 
       CO <= tmp(8); 
      when others => NULL; 

      end case; 
     else 
      NULL; 
     end if; 
    end process; 
end archi; 

エラーは19行目にあります。インフィックス演算子 '='の実行可能なエントリもありません。タイプエラーstix.STANDARD.BOOLEANの入力エラー式のエラーを解決します。どこが間違っていますか?確かに wave output実行する操作を選択するVHDLプログラム

+2

'std_logic_arith'、' std_logic_signed'、 'std_logic_unsigned'を使用しないでください。このパッケージは標準ではありません。あなたは 'numeric_std'で必要なこと全てを行うことができます。また、入力が機密性リストにないため、コードが機能しません。そして、実際には、時計を使って、危険を避けるために、そしてその結果が適切な時であることを確かめるためにそれを行うでしょう。しかし、必要があるかどうかはわかりません。 – Staszek

+0

std_logic_arithとstd_logic_unsignedを削除してnumeric_std.allを追加すると、多くのエラーが発生しました。それらのほとんどは関数tmpのconv_integer部分に集中していました。また、コードを調整した後、私はエラーがあったので、プログラムのコンパイルと実行に成功しましたが、ANSとCOに値はなく、UUUとして表示されました。値はtmpだけにあります。私がアップロードした波の出力を見てください。どこが間違っているのですか?助けてください。 –

+1

まあ...シンプル。これらのライブラリから来たものはすべて使用しないでください。 conv_integerを含む。 numeric_std相当のものを見つけてください。たとえば、conv_integerの代わりにto_integerを使用します。 tmpのUUUの問題については、標準ライブラリがなくてもコードを改善した別の質問をしてください。これは長い話です。 – Staszek

答えて

2

この:

EN: in std_logic 

あなたのエラーメッセージがある、'1'std_logic_vectorを比較することができます定義された"="オペレータが存在しないことを不平を言っている:

EN: in std_logic_vector 

は、このする必要がありますタイプstd_logicのリテラルです。

+0

ありがとうございました。私はそれを修正し、プログラムは正常にコンパイルされましたが、波出力はtmpに値があり、ANSまたはCOに値がないことを示していますか?それはUUUUUUUUとして表示されます –

+0

上記の私のコメントを参照してください。コードを編集し、再度投稿してください。 – Staszek

+0

00000001(A)に11111111(B)を追加すると、tmpの値が100000000を示していますが、ANSまたはCOに値がないため、Uとして表示されていますか?助けてください? –

関連する問題