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プログラム
'std_logic_arith'、' std_logic_signed'、 'std_logic_unsigned'を使用しないでください。このパッケージは標準ではありません。あなたは 'numeric_std'で必要なこと全てを行うことができます。また、入力が機密性リストにないため、コードが機能しません。そして、実際には、時計を使って、危険を避けるために、そしてその結果が適切な時であることを確かめるためにそれを行うでしょう。しかし、必要があるかどうかはわかりません。 – Staszek
std_logic_arithとstd_logic_unsignedを削除してnumeric_std.allを追加すると、多くのエラーが発生しました。それらのほとんどは関数tmpのconv_integer部分に集中していました。また、コードを調整した後、私はエラーがあったので、プログラムのコンパイルと実行に成功しましたが、ANSとCOに値はなく、UUUとして表示されました。値はtmpだけにあります。私がアップロードした波の出力を見てください。どこが間違っているのですか?助けてください。 –
まあ...シンプル。これらのライブラリから来たものはすべて使用しないでください。 conv_integerを含む。 numeric_std相当のものを見つけてください。たとえば、conv_integerの代わりにto_integerを使用します。 tmpのUUUの問題については、標準ライブラリがなくてもコードを改善した別の質問をしてください。これは長い話です。 – Staszek