Le logiciel Quartus® II version 6.0 et ultérieure synthétise plus strictement les signaux directionnels VHDL. Comme il applique les règles VHDL, le logiciel Quartus II convertit des tampons bidirectionnels incorrectement codés en broches de sortie.
Par exemple, si vous implémentez une mémoire tampon bidirectionnelle comme indiqué dans le code suivant, le logiciel Quartus II synthétise une broche de sortie (à partir de la version 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;
Si mac_mdio est un signal et mii_mdio est le port bidirectionnel, la dernière affectation ci-dessus est directionnelle. Comme écrit, il est impossible que les données passent d’mii_mdio à mac_mdio. À partir de la version 6.0, le logiciel Quartus II applique la nature directionnelle de cette affectation VHDL en insérant un tampon entre mac_mdio et mii_mdio. Cette mémoire tampon apparaît dans la visionneuse RTL comme mémoire tampon directionnelle dans la série avec la mémoire tampon à trois états, et la broche bidirectionnelle prévue (mii_mdio) est synthétisée comme une sortie uniquement.
Les versions antérieures du logiciel Quartus II n’appliquent pas la nature directionnelle de ces types de affectations, synthétisant le code ci-dessus comme une broche bidirectionnelle.
Pour être conforme à la norme VHDL, supprimez la dernière assignation de signal dans l’exemple ci-dessus et écrivez le code comme suit :
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;