ID do artigo: 000077812 Tipo de conteúdo: Solução de problemas Última revisão: 11/09/2012

Por que alguns sinais de três estados VHDL são inferidos incorretamente no software Quartus II versão 8.1?

Ambiente

BUILT IN - ARTICLE INTRO SECOND COMPONENT
Descrição

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';

Produtos relacionados

Este artigo aplica-se a 1 produtos

Dispositivos programáveis Intel®

1

O conteúdo desta página é uma combinação de tradução humana e por computador do conteúdo original em inglês. Este conteúdo é fornecido para sua conveniência e apenas para informação geral, e não deve ser considerado completo ou exato. Se houver alguma contradição entre a versão em inglês desta página e a tradução, a versão em inglês governará e será a controle. Exibir a versão em inglês desta página.