Comment une variable VHDL est-elle synthétisée par des outils de synthèse

9

Je connais deux façons dont une variable VHDL est synthétisée par un outil de synthèse:

  • Variable synthétisée en logique combinatoire
  • Variable synthétisée comme un verrou involontairement (lorsqu'une variable non initialisée est affectée à un signal ou à une autre variable)

Quelles sont les autres façons de synthétiser une variable VHDL? (Exemple: peut-il être interprété comme un FF?)

nurabha
la source

Réponses:

8

Je distinguerais trois possibilités:

  1. Une variable VHDL n'a aucune représentation matérielle. Supposons l'exemple suivant

    signal a,b,c : integer;  
    ...  
    process ( clk ) is  
    variable var : integer := 0;  
    begin  
    if ( rising_edge(clk) ) then  
    var := a + b;  
    c <= var;  
    end if;  
    end process;

    La variable varn'est pas vraiment synthétisée du tout comme logique combinatoire (en supposant que c'est ce que l'on voulait dire dans la question). C'est plutôt le côté droit de l'affectation a + bqui est synthétisé en matériel. À proprement parler, une variable n'est jamais synthétisée en logique combinatoire.

  2. Une variable contient simplement un résultat intermédiaire, qui est soit évalué dans le même cycle d'horloge -> aucun matériel synthétisé (c'est 1) à nouveau), soit évalué dans le cycle d'horloge suivant -> une bascule est synthétisée.

  3. Un de ces verrous redoutés est déduit dans les cas où il existe des branches conditionnelles dans lesquelles la variable n'est affectée ni à une nouvelle valeur (en fonction de certains signaux) ni à une valeur par défaut. Habituellement, ce cas se produit involontairement :-)

andrsmllr
la source
Le "verrou redouté" ne peut se produire qu'en dehors d'un processus cadencé et la plupart des gens (selon mon expérience) n'utilisent pas de processus non synchronisés. Ainsi , la crainte de verrouillage n'est pas plus un problème ( à mon humble avis) - il résulte des temps anciens jours où vous aviez à écrire votre logique combinatoire dans un processus séparé à votre TONGS
Martin Thompson
4

Si vous utilisez la valeur dans une variable avant de la stocker, vous obtenez la valeur qui a été stockée la dernière fois que le processus l'a stockée (dans un processus cadencé, la valeur d'un cycle d'horloge précédent). Cela est synthétisé sous forme de registre ou FF.

Bien sûr, au premier cycle d'horloge, vous obtenez des ordures, sauf si vous avez initialisé la variable dans une clause de réinitialisation.

Brian Drummond
la source