2016-12-08 66 views
-1

我收到以下錯誤: 行15:「if」附近的語法錯誤。 第4行:由於之前的錯誤而忽略了單位。VHDL:如果出現語法錯誤

這可能是一個非常愚蠢的問題,但任何人都可以幫忙嗎? :)

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;    
+0

可能重複的[VHDL語法錯誤附近如果](http://stackoverflow.com/questions/20435228/vhdl-syntaxe-error-near-if) – user1155120

+0

當它完全不同的代碼@ user1155120 – Alena

+0

我見過這個問題,它並沒有幫助我@ user1155120 – Alena

回答

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; 

希望這些差異是非常明顯的。

+0

但是裏面的過程應該是什麼? :/ – Alena

+0

我會從你的問題開始後的代碼開始。我的答案解決了你原來的問題。如果你現在遇到另一個問題,你需要創建一個新的問題,詢問這個特定的問題;這不是留言板或論壇。無論如何,當你所做的只是粘貼一些代碼和錯誤信息時,我應該如何知道你的程序要做什麼? –

+0

我有粘貼代碼和錯誤消息,這是正確的,你寫的答案,這裏是過程(...),我問什麼應該是因爲這裏比問問更容易打開新的問題... – Alena