Как исправить [около "then": (vcom-1576) ожидающую ошибку == или '+' или '-' или '&']? - PullRequest
0 голосов
/ 03 февраля 2019

Я получаю 3 одинаковые ошибки после компиляции этого кода -

** Ошибка: C: /Modeltech_pe_edu_10.4a/examples/DECODER.vhd (24): рядом с "then": (vcom-1576)ожидание == или '+' или '-' или '&'.

Я попытался добавить "end if;"в конце, но это дает мне вышеупомянутые ошибки и следующую ошибку -

** Ошибка: C: /Modeltech_pe_edu_10.4a/examples/DECODER.vhd (35): Компилятор VHDL выходит из

library IEEE;

use IEEE.std_logic_1164.all;

entity DECODER is
port
(
I0: in std_logic;
I1: in std_logic;
D0: out std_logic;
D1: out std_logic;
D2: out std_logic;
D3: out std_logic
);
end DECODER;

architecture bhv of DECODER is
begin
process(I0,I1) is
begin
if (I0='0' AND I1='0') then 
  D0<= (NOT I0) AND (NOT I1);

elseif (I0='0' AND I1='1') then 
  D1<= (NOT I0) AND I1;

elseif (I0='1' AND I1='0') then 
  D2<= I0 AND (NOT I1);

elseif (I0='1' AND I1='1') then 
  D3<= I0 AND I1;
end process;
end bhv;

1 Ответ

0 голосов
/ 03 февраля 2019

Есть две синтаксические ошибки.

Измените elseif на elsif.

Добавьте окончательный end if непосредственно перед end process.

Функционально ккод странный;если синтезировать, то получим защелки, так как назначенный выход зависит от входного значения, и условие для выполнения назначения в каждой ветви if совпадает с назначенным значением, таким образом, назначенное значение '1', поэтомуprocess эквивалентно:

process (I0, I1) is
begin
  if (I0 = '0' and I1 = '0') then
    D0 <= '1';
  elsif (I0 = '0' and I1 = '1') then
    D1 <= '1';
  elsif (I0 = '1' and I1 = '0') then
    D2 <= '1';
  elsif (I0 = '1' and I1 = '1') then
    D3 <= '1';
  end if;
end process;

Без начального значения или значения сброса для выходов, похоже, что код не будет выполнять никаких значимых операций.

...