私はザイリンクスのスチューデント ラボで作業しており、VHDL を学習しようとしていますが、エラーを修正するのに問題があります。私は今のところ、追加部分を機能させることに主に集中しています。
私が得ているエラーは次のとおりです。
[Synth 8-1560] 実際の仮合計の s は変数でなければなりません ["C:/Nexys 4 >Projects/lab4_1_1/lab4_1_1.srcs/sources_1/new/add_two_values_procedure.vhd":54]
[Synth 8-2778] a 付近の型エラー ; 予想される型 std_ulogic ["C:/Nexys 4 >Projects/lab4_1_1/lab4_1_1.srcs/sources_1/new/add_two_values_procedure.vhd":56]
[Synth 8-2778] b 付近の型エラー。予想される型 std_ulogic ["C:/Nexys 4 >Projects/lab4_1_1/lab4_1_1.srcs/sources_1/new/add_two_values_procedure.vhd":56]
最初のエラーについては、プロセスでプロシージャを使用しない場合、変数 total を割り当てるためにシグナルをプロシージャに渡す必要があることを読みました。誰かがこのエラーを修正する方法についていくつかの光を当てることができますか?
2 番目と 3 番目のエラーについては、ライブラリで std_logic_1164 を探していて、この行を見ました
FUNCTION "and" ( l, r : std_logic_vector ) RETURN std_logic_vector;
私の知る限り (この件に関しては小さいですが)、56 行目では、and 演算子/関数 (?) の両側で std_logic_vector を使用し、std_logic_vector を返す必要があります。では、なぜstd_ulogicを使用するように求めているのですか。編集: この Web サイトhttp://www.csee.umbc.edu/portal/help/VHDL/packages/std_logic_1164.vhdから見た上記の行ですが、私の本、Designer's guide to VHDL にはその行がありません。その包み。
以下は私のコードです
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
entity add_two_values_procedure is
Port ( a : in STD_LOGIC_VECTOR (3 downto 0);
b : in STD_LOGIC_VECTOR (3 downto 0);
operand : in STD_LOGIC;
sum : out STD_LOGIC_VECTOR (3 downto 0);
cout : out STD_LOGIC);
end add_two_values_procedure;
architecture Behavioral of add_two_values_procedure is
signal s : STD_LOGIC_VECTOR (3 downto 0);
procedure add_values (
a : in STD_LOGIC_VECTOR (3 downto 0);
b : in STD_LOGIC_VECTOR (3 downto 0);
operand : in STD_LOGIC;
sum : out STD_LOGIC_VECTOR (3 downto 0))
is
variable total : STD_LOGIC_VECTOR (3 downto 0);
begin
case operand is
when '1' =>
total := a + b;
when '0' =>
total := a - b;
end case;
sum := total;
end procedure add_values;
begin
add_values(a, b, operand, s); 54
sum <= s;
cout <= a and b; 56
end Behavioral;