VHDL:if附近的语法错误

时间:2016-12-08 23:53:20

标签: vhdl

我收到以下错误: 第15行:“if”附近的语法错误。 第4行:由于先前的错误而忽略了单位。

这可能是一个非常愚蠢的问题,但任何人都可以提供帮助吗? :)

library IEEE;
use IEEE.std_logic_1164.all;

entity arithmetic is
    port(   I1     :in    std_logic_vector(12-1 downto 0); -- Operand 1
            I2     :in    std_logic_vector(8-1 downto 0); -- Operand 2
            O      :out   std_logic_vector(12-1  downto 0); -- Output
            C      :out   std_logic;                       -- Carry Flag
            V      :out   std_logic;                       -- Overflow Flag
            VALID  :out   std_logic                        -- Flag to indicate if the solution is valid or not
);

begin

if ((unsigned(I1)-unsigned(I2)) > unsigned(I1)) and ((unsigned(I1)-unsigned(I2)) > unsigned(I2)) then
        C <= '1';
    else
        C <= '0';
    end if;

if I1(x)='1' and signed(std_logic_vector(unsigned(I1)-unsigned(I2)))>0 then --x ist das höchte Bit von I1
        V <= '1';
    else
        V <= '0';
    end if;

    if unsigned(I1) < unsigned(I2) then
        VALID <= '0';
    else
        VALID <= '1'; 
    end if;

und 

O <= std_logic_vector(unsigned(I1)-unsigned(I2));

end arithmetic;               

1 个答案:

答案 0 :(得分:1)

根据评论,您需要查看一些有效的VHDL代码。在示例中,将...替换为适合您设计的信号/端口名称。你有一个像这样的结构:

entity arithmetic is
port(
  -- Your port list
);

begin

  if ( ... ) then
    -- Do something
  end if;

end arithmetic;

这完全无效。正确的描述看起来更像是:

entity arithmetic is
port(
  -- Your port list
);

architecture Behavioral of arithmetic is
begin

  process ( ... )
  begin
    if ( ... ) then
      -- Do something
    end if;
  end process;

end Behavioral;

希望差异非常明显。