我正在编译此代码后3个同样的错误 -
**错误:C:/Modeltech_pe_edu_10.4a/examples/DECODER.vhd(24):近 “然后”:(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;
有两种语法错误。
更改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;
与用于不输出初始或重置值,看来该代码将不执行任何有意义的操作。