Há um problema no software Quartus® II versão 8.1 que pode fazer com que sinais de três estados VHDL seja inferidos incorretamente como multiplexadores. Se o sinal estiver conectado a um pino de saída do dispositivo, o resultado da compilação pode fazer com que o pino seja impulsionado para a placa em vez de agir como uma saída de três estados.
O problema de software ocorre apenas se uma entidade de design VHDL contiver uma porta de saída não usada com um valor padrão que inclua (ou seja, 'Z' a 'Z' porta de saída tem a atribuição de três estados na declaração da entidade, mas nenhuma atribuição explícita ao sinal no design). Quando o problema ocorrer, qualquer lógica de três estados inferida descrita por declarações comportamentais na arquitetura de anexo será inferida incorretamente como multiplexadores. O problema é restrito à hierarquia única na arquitetura e não a qualquer hierarquia instantânea, a menos que outras entidades 'Z'tenha o mesmo tipo de porta de saída não usada com um valor padrão que inclui . Consulte o exemplo no final desta solução para obter um pequeno design que ilustra este problema.
Se os sinais de três estados afetados são conexões internas de três estados, os multiplexadores de inferência são esperados porque não há lógica de três estados interno em Altera dispositivos. No entanto, se as portas de entidades tri-afirmadas alimentarem pinos de E/S no dispositivo, esse comportamento de software pode fazer com que o pino de saída não-utilado seja impulsionado para a placa em vez de agir como uma saída de três estados, o que pode causar a disputa de sinal no sistema.
Para resolver o problema e inferir o comportamento definido em três estados, atribua explicitamente os pinos de saída não usados a um valor de três estados usando uma atribuição de sinal no design, em vez de depender da instrução padrão. Por exemplo, use uma declaração como unused_output <= 'Z'; ou unused_output <= (others => 'Z');
Um patch está disponível para corrigir este problema no software Quartus II versão 8.1. Baixe o patch do Windows 0.34 ou o patch linux 0.34, depois instale o patch e recompile o design.
Este problema de software também será corrigido em uma versão futura do software Quartus II.
A seguir, um exemplo de design afetado por este problema:
library ieee;
use ieee.std_logic_1164.all;
entity example is
port (
en : in std_logic;
data : in std_logic;
unused_output: out std_logic := 'Z';
other_output : out std_logic);
end example;
architecture rtl of example is
begin
-- other_output should be tri-state but won't be tri-state due to this problem
other_output <= data when en = '1' else 'Z';
end rtl;
Para inferir o comportamento tri-estado correto para ambos os pinos de saída no exemplo de projeto acima com o software Quartus II versão 8.1, adicione a seguinte instrução na arquitetura: unused_output <= 'Z';