Есть две синтаксические ошибки.
Измените 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;
Без начального значения или значения сброса для выходов, похоже, что код не будет выполнять никаких значимых операций.