Dicas para resolver ERROS de síntese do VHDL no Quartus II

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Nesta página serão indicadas algumas dicas para resolver ERROS que são indicados pelo Quartus II durante a Análise, Síntese, Elaboração e Compilação.

VHDL Type Mismatch error ... indexed name returns a value whose type does not match "std_logic(_vector)", the type of the target expression

Verifique se não está misturando tipos std_logic e std_logic_vector.

 
 signal a: std_logic_vector(3 downto 0);

Lembre-se que a linha acima declara um objeto a do tipo std_logic_vector, então a(3) é do tipo std_logic e a(3 downto 3) é do std_logic_vector com comprimento 1. Logo:

 signal sl: std_logic;
 signal slv: std_logic_vector(0 to 0);

 ...
 slv <= a(3);           -- ERRO VHDL Type Mismatch error ... 
 -- indexed name returns a value whose type does not match "std_logic_vector", the type of the target expression
 sl <= a(3);            -- CORRETO
 slv <= a(3 downto 3);  -- CORRETO
 sl <= a(3 downto 3);   -- ERRO VHDL Type Mismatch error ... 
 -- indexed name returns a value whose type does not match "std_logic", the type of the target expression
 slv <= "1";            -- CORRETO
 sl <= '1';             -- CORRETO  
 slv <= '1';            -- ERRO VHDL error ...
 -- character ''1'' used but not declared for type "std_logic_vector"
 sl <= "1";             -- ERRO VHDL type mismatch error ... 
 -- std_logic type does not match string literal
VHDL error .... range direction of object slice must be same as range direction of object

Verifique se as direções dos indices dos objetos (vetores) é a mesma. Esse erro pode ocorrer se você estiver usando os objetos a e b abaixo:

 signal a: std_logic_vector (3 downto 0);
 alias  ar: std_logic_vector (0 to 3) is a;  -- renomeia o objeto a (downto) com os índices na direção reversa ar (to).
 signal b: std_logic_vector (0 to 3);

E acessar o objeto na direção errada. Lembre-se que na atribuição de um objeto sobre o outro só importa que os comprimentos (N=4) sejam iguais e os elementos desses objetos sejam iguais (std_logic).

 b <= a;              -- CORRETO
 b <= a(3 downto 0);  -- CORRETO
 b <= a(0 to 3)       -- ERRO VHDL error ...
 -- range direction of object slice must be same as range direction of object
 b(3 downto 0) <= a;  -- CORRETO
 b(0 to 3) <= a;      -- ERRO VHDL error ... 
 -- range direction of object slice must be same as range direction of object
 b <= ar(0 to 3);     -- CORRETO
 b <= ar(3 downto 0); -- ERRO VHDL error ...
 -- range direction of object slice must be same as range direction of object