Quartus® II 소프트웨어 버전 6.0 이상은 VHDL 방향 신호를 보다 엄격하게 합성합니다. VHDL 규칙을 적용하기 때문에 Quartus II 소프트웨어는 잘못 코딩된 양방향 버퍼를 출력 핀으로 변환합니다.
예를 들어, 다음 코드와 같이 양방향 버퍼를 구현하는 경우 Quartus II 소프트웨어는 출력 핀(버전 6.0부터 시작)을 합성합니다.
process(mdio_out,mdio_oe)
begin
if (mdio_oe = '1') then
mac_mdio <= mdio_out;
else
mac_mdio <= 'Z';
end if
end process;
mdio_oe <= NOT(mdio_oe_n);
test_out <= mac_mdio and test;
mii_mdio <= mac_mdio;
mac_mdio이 신호이고 mii_mdio가 양방향 포트인 경우 위의 마지막 할당은 방향성입니다. 기록된 대로 데이터가 mii_mdio에서 mac_mdio로 흐르는 것은 불가능합니다. 버전 6.0부터 Quartus II 소프트웨어는 mac_mdio와 mii_mdio 사이에 버퍼를 삽입하여 이 VHDL 할당의 방향성을 적용합니다. 이 버퍼는 RTL 뷰어에 3중 상태 버퍼와 직렬로 방향성 버퍼로 표시되며 의도한 mii_mdio(양방향 핀)은 출력으로만 합성됩니다.
이전 버전의 Quartus II 소프트웨어는 이러한 유형의 할당에 방향성을 적용하지 않고 위의 코드를 양방향 핀으로 합성합니다.
VHDL 표준을 준수하려면 위의 예에서 마지막 신호 할당 문을 제거하고 다음과 같이 코드를 작성하십시오.
process(mdio_out,mdio_oe)
begin
if (mdio_oe = '1') then
mii_mdio <= mdio_out;
else
mii_mdio <= 'Z';
end if;
end process;
mdio_oe <= NOT(mdio_oe_n);
test_out <= mii_mdio and test;