1

私はザイリンクスのスチューデント ラボで作業しており、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;
4

1 に答える 1

1

54行目に関して:

VHDL 2008 の引用:

モードが inout または out で、オブジェクト クラスが明示的に指定されていない場合は、変数が想定されます。

だから試してください:

procedure add_values (
    a : in STD_LOGIC_VECTOR (3 downto 0);
    b : in STD_LOGIC_VECTOR (3 downto 0);
    operand : in STD_LOGIC;
    signal sum : out STD_LOGIC_VECTOR (3 downto 0))
is
    variable total : STD_LOGIC_VECTOR (3 downto 0);
begin
    case operand is
        ...

56行目に関して:

の型を見てくださいcout。を に割り当ててstd_logic_vector(3 downto 0)std_logicます。

于 2015-08-06T03:21:02.993 に答える