このコードではこのエラーが発生します。ter.vhd(31):インデックス付きの名前(タイプieee.std_logic_1164.STD_ULOGIC)をタイプstd.STANDARD.BOOLEANとして解決できません。 これを修正する方法はありますか? 私はsincerly何が間違っている取得しないで、Web検索で試したが、何も。ありがとうございます。 VHDLによるインデックス名の問題
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY inverter IS
GENERIC(size: integer);
PORT (
a : IN std_ulogic_vector(size-1 DOWNTO 0);
b : OUT std_ulogic_vector(size-1 DOWNTO 0);
carry : OUT std_ulogic;
mode : IN std_ulogic
);
END ENTITY inverter;
ARCHITECTURE behavioral OF inverter IS
COMPONENT alu IS
GENERIC(size: integer);
Port (X : in std_ulogic_VECTOR (size-1 downto 0);
Y : in std_ulogic_VECTOR (size-1 downto 0);
SUM : out std_ulogic_VECTOR (size-1 downto 0);
CARRY : out std_ulogic);
end COMPONENT;
SIGNAL z, c : std_ulogic_VECTOR(size-1 downto 0);
BEGIN
start: process(a,mode)
begin
z <= (others => '0');
IF a(size-1) THEN
c <= not a;
z(0) <= '1';
ELSIF (mode = '1') THEN
c <= not a;
z(0) <= '1';
ELSE
c <= a;
END IF;
end process;
alu1: alu
generic map(size)
PORT MAP(x => c, y => z, sum => b, carry => carry);
END ARCHITECTURE behavioral;
ブール値の配列として 'a'を宣言すると、それを動作させる1つの方法になりますが、他のものも修正する必要があります。あるいは、std_ulogicの値がどのように正常にテストされているかを知ることができます。実際には、すでに同じプロセスでその例があります。 –
@BrianDrummond ** IF IF(size-1)THEN **の文は正しいですか?私は前にこのようなことに遭遇していません。これは "(size-1)がTRUEの場合"に変換されますか?また、サイズ変数を初期化してはいけませんか? – Arkoudinos
'if then'が問題ありません。したがって、 'a(size-1)THEN'が正しい場合は、' a'がブール値の配列である可能性がありますが、現在はそうではありません。 VHDL-2008で暗黙の変換演算子を使用している場合は、物理的なレベルが「0」と「1」、論理レベルが「真」と「偽」の区別がぼやけているので個人的に嫌いですあなたが負の論理を扱っているなら、ばかげて混乱するコードを生成します。 –