Dicas para resolver ERROS de síntese do VHDL no Quartus II
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