2010-11-02 34 views
1

J'essaye d'écrire un module VHDL mais j'ai un problème avec l'instruction if. Très probablement, c'est une erreur stupide, mais depuis que je suis très nouveau à VHDL, je ne pouvais pas comprendre le problème. Voici mon code:Erreur TICK inattendue

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use ieee.std_logic_arith.all; 
use ieee.std_logic_unsigned.all; 


entity binary_add is 
    port(n1 : in std_logic_vector(3 downto 0); 
    n2 : in std_logic_vector(3 downto 0); 
    segments : out std_logic_vector(7 downto 0); 
    bool : out bit; 
    o : out std_logic_vector(3 downto 0); 
    DNout : out std_logic_vector(3 downto 0)); 

end binary_add; 

architecture Behavioral of binary_add is 
begin 

process(n1, n2) 
begin 

o <= n1 + n2; 

if(o = '1010') then 
bool <= '1'; 
else 
bool <= '0'; 
end if; 

end process; 

end Behavioral; 

Et je reçois la réponse suivante à partir de la première ligne de l'instruction if:

ERROR:HDLParsers:## - "C:/Xilinx/12.3/ISE_DS/ISE/.../binary_add.vhd" Line ##. parse error, unexpected TICK 

Qu'est-ce que je fais mal?

+0

Hi. Si une réponse vous a aidé, veuillez upvote. Acceptez le plus utile! – Marty

Répondre

2

Le '1010' devrait être "1010" (guillemets doubles). Un guillemet simple est utilisé pour un littéral de caractère (un seul caractère).

+0

Ensuite, je reçois cette erreur; Le paramètre o de mode out ne peut pas être associé à un paramètre formel de mode. – makyol

+0

Serait-ce parce que je n'ai pas utilisé le paramètre o dans process()? Aussi, puis-je mettre o à l'intérieur du processus, puisque c'est une sortie? – makyol

2

Vous avez donc corrigé la première erreur selon la réponse de Mark.

La deuxième erreur est que vous ne pouvez pas utiliser la valeur d'une sortie.

if output = "0101"; -- illegal 

some_signal <= output; -- illegal 

Pour résoudre ce problème, vous devez créer un signal interne (par exemple somme). Vous utilisez ensuite le signal interne et l'assignez au signal externe.

architecture Behavioral of binary_add is 

signal sum : std_logic_vector(3 downto 0); 

begin 

process(n1, n2, sum) 
begin 

sum <= n1 + n2; 

if(sum = '1010') then 
bool <= '1'; 
else 
bool <= '0'; 
end if; 

end process; 

o <= sum; 

end Behavioral;