Quartus® II 소프트웨어 버전 8.1에는 VHDL 트리스테이트 신호가 멀티플렉서로 잘못 추론될 수 있는 문제가 있습니다. 신호가 장치 출력 핀에 연결된 경우 컴파일 결과로 인해 핀이 3중 상태 출력으로 작동하는 대신 보드로 구동될 수 있습니다.
소프트웨어 문제는 VHDL 디자인 엔터티에 기본값 'Z'
이 포함된 사용되지 않는 출력 포트가 포함된 경우에만 발생합니다(즉, 출력 포트에는 엔터티 선언에 3중 상태 할당이 'Z'
있지만 디자인의 신호에 대한 명시적 할당은 없음). 문제가 발생하면 바깥쪽 아키텍처의 동작 명령문에 의해 설명되는 모든 유추된 트리스테이트 논리가 멀티플렉서로 잘못 유추됩니다. 문제는 아키텍처의 단일 계층으로 제한되며 다른 엔터티가 다음을 포함하는 'Z'
기본값과 동일한 유형의 사용되지 않는 출력 포트를 갖지 않는 한 인스턴스화된 계층이 아닙니다. 이 문제를 설명하는 작은 디자인에 대해서는 이 솔루션의 끝에 있는 예를 참조하십시오.
영향을 받는 트리스테이트 신호가 내부 트라이스테이트 연결인 경우, Altera 디바이스에 내부 트리스테이트 로직이 없기 때문에 멀티플렉서 추론이 필요합니다. 그러나 삼중 명시된 엔티티 포트가 장치의 I/O 핀을 공급하는 경우 이 소프트웨어 동작으로 인해 사용되지 않는 출력 핀이 삼중 상태 출력으로 작동하는 대신 보드로 구동되어 시스템에서 신호 경합이 발생할 수 있습니다.
문제를 해결하고 정의된 3중 상태 동작을 유추하려면 기본 명령문에 의존하는 대신 설계에서 신호 할당을 사용하여 사용되지 않는 출력 핀을 3중 상태 값에 명시적으로 할당합니다. 예를 들어, unused_output <= 'Z';
또는 unused_output <= (others => 'Z');
Quartus II 소프트웨어 버전 8.1에서 이 문제를 해결하기 위한 패치를 사용할 수 있습니다. Windows 패치 0.34 또는 Linux 패치 0.34를 다운로드한 다음 패치를 설치하고 디자인을 다시 컴파일합니다.
이 소프트웨어 문제는 Quartus II 소프트웨어의 향후 버전에서도 해결될 예정입니다.
다음은 이 문제의 영향을 받는 예제 디자인입니다.
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;
Quartus II 소프트웨어 버전 8.1을 사용하는 위의 설계 예에서 두 출력 핀에 대한 올바른 트리스테이트 동작을 유추하려면 아키텍처에 다음 명령문을 추가합니다. unused_output <= 'Z';