0
我在此代碼中得到此錯誤:ter.vhd(31):無法解析索引名稱(類型ieee.std_logic_1164.STD_ULOGIC)作爲類型std.STANDARD.BOOLEAN。 任何想法如何解決它? 我真誠地沒有得到什麼錯誤,嘗試用網絡搜索,但沒有。 在此先感謝!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'聲明爲一組布爾值將是使其工作的一種方法,但是您也必須修復其他一些東西。或者學習如何正常測試std_ulogic值。其實你已經在同一個過程中有一個例子。 –
@BrianDrummond聲明**如果一個(大小-1)THEN **是正確的?我以前沒有遇到過這樣的事情。這是否轉化爲「如果(大小-1)爲真」?另外,size變量不應該被初始化? – Arkoudinos
'if if then' are fine。所以,如果'a'是一組布爾值,那麼'如果一個(大小爲1)那麼'是正確的,它可能是,但目前不是。如果你在VHDL-2008中使用隱式轉換運算符也是正確的,我個人不喜歡它,因爲它們模糊了物理層「0」和「1」與邏輯層「真」和「假」之間的區別。 ,例如,如果你正在處理負邏輯,會產生荒謬混亂的代碼。 –