Plus loin....

TriState

VHDL vous permet de manipuler le troisième état '0', '1' et 'Z'. Même si les circuits ne supportent pas de logique Tristate, ISE se débrouille pour les simuler avec ses propres solutions. Il se débrouille pas si mal et le code produit est plus dense, plus rapide que celui que je vous ai proposé avec connecteur16. Cette modification permet en autre d'exécuter des programmes instables sans avoir à diminuer la frquénce de la clock.

Voici la procédure à suivre. Créez une nouvelle source BUFT16 de type VHDL Module en spécifiant en entrée un bus a(15:0), un fil connect et en sortie un bus b(15:0). Il vous suffit de construire son architecture en validant la sortie sur l'entrée lorsque connect = '1' et sinon la sortie est en état 'Z'.

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity bufT16 is

Port ( a : in STD_LOGIC_VECTOR (15 downto 0);

connect : in STD_LOGIC;

b : out STD_LOGIC_VECTOR (15 downto 0));

end bufT16;

architecture Behavioral of bufT16 is

begin

b <= a when connect = '1' else (others =>'Z') ;

end Behavioral;

Vous pouvez créer le symbole associé. Il vous reste ensuite à remplacer les 16 connecteur16 par ce symbole BUFT16. La cascade devient un bus partagé. L'hypothèse de la constante à x0000 disparaît avec la constante. Tous les fils de contrôle doivent bien entendu être reconnectés!