2014-11-15 4 views
0

У меня возникли проблемы с получением этого кода для работы:Если ... еще ошибки (новичок, VHDL)

if(s="00") then 
    f3 <= x and not(y); 
elsif(s="11") then 
    f3 <= not(y) xor x; 
else 
    f3 <= x or y; 
end if; 

где:

f3 : out std_logic_vector(2 downto 0); 
x, y : in std_logic_vector(2 downto 0); 
s : in std_logic_vector(1 downto 0)  

Конечно, я не могу действительно полагаться на сообщения об ошибках компиляции, поскольку они не являются специфическими для ошибки. Заранее спасибо!

Весь код:

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 

entity cw1 is 
port(
    f0, f2 : out std_logic; 
    f3 : out std_logic_vector(2 downto 0); 
    a0, a1, a2, a3, a4 : in std_logic; 
    x, y : in std_logic_vector(2 downto 0); 
    s : in std_logic_vector(1 downto 0) 
); 
end entity; 

architecture A of cw1 is 
    signal s1 : std_logic_vector(3 downto 0); 
    signal a : std_logic_vector(2 downto 0); 
begin 
    s1 <= a0 & a1 & a2 & a3; 
    a <= a0 & a1 &a2; 

with a select 
    f2 <= not(a4) when "000", 
      a3 when "001"|"010"|"101"|"111", 
      a4 or not(a3) when "011"|"100", 
      '-' when "110", 
      'X' when others; 

if s="00" then 
    f3 <= x and not(y); 
elsif s="11" then 
    f3 <= not(y) xor x; 
else 
    f3 <= x or y; 
end if; 

end A; 
+0

Что _is_ ошибку? Что вы определяете как «работающее»? –

+0

Ошибка в том, что она не компилируется. Ошибка (10500): Синтаксическая ошибка VHDL в zA.vhd (36) рядом с текстом «if»; ожидающий «конец» или «(» или «идентификатор» («if» - зарезервированное ключевое слово) или параллельный оператор и Ошибка (10500): Синтаксическая ошибка VHDL в zA.vhd (36) рядом с текстом «then» Ожидание «<=» повторено несколько раз – Maniek

+0

Ошибка где-то впереди этого кода, и синтаксический анализатор выходит из строя. Вы можете исключить все круглые скобки. Они не нужны для условных выражений, а оператор isn ' t a. –

ответ

2

Если вы хотите использовать, если вы должны были поставить его в процессе:

process(s, x, y) 
begin 
    if(s="00") then 
    f3 <= x and not(y); 
    elsif(s="11") then 
    f3 <= not(y) xor x; 
    else 
    f3 <= x or y; 
    end if; 
end process; 
Смежные вопросы