Question

On m'a dit d'utiliser la déclaration « quand » pour faire multiplexeur mais pas utiliser « si » la déclaration qu'il fera des erreurs de synchronisation ... Je ne comprends pas ... Alors, quelle est la différence entre « si » et « quand »? et ils correspondent à la même chose que dans le matériel?

Était-ce utile?

La solution

OK, permet de discuter des points d'abord sur la différence entre si et quand des déclarations:

  • Les deux sont appelés Dataflow éléments de conception.

instruction WHEN

  • déclaration simultanée
  • pas utilisé dans le procédé, utilisé uniquement dans l'architecture comme procédé est exécution séquentielle

if

  • déclaration séquentielle
  • utilisé dans le processus tel qu'il est énoncé séquentiel, et non utilisé en dehors du processus

Et vous savez multiplexeur est un composant ne ont pas besoin bloc de processus, son comportement ne change pas avec le changement de son entrée, il sera procédé à l'extérieur, de sorte que vous devez écrire à l'aide lors de la déclaration comme il est énoncé simultané .. Et si vous l'avez écrit avec instruction if, les erreurs de synchronisation peuvent se produire. En outre toutes les références et aussi Xilinx aide (si vous utilisez Xilinx) sont en train d'écrire le bloc à l'aide Multiplexeur instruction WHEN pas instruction if

Référence: Digital Design priciples et pratiques, John F. Wakerly, 3e édition

Autres conseils

Voir ci:

Fondamentalement, if est séquentiel, et when est simultanée. Ils ne correspondent pas à la même chose que dans le matériel ... Cette page décrit, au fond, quelques-unes des considérations particulières nécessaires pour synthétiser une instruction if.

Les deux styles de codage sont tout à fait valables.

Rappelons quelques éléments. A partir de HDL, la synthèse se fait en deux étapes:

  1. premier, le VHDL est analysé afin de détecter modèles RTL (consistant en éléments RTL: bascules, des expressions arithmétiques, les multiplexeurs, la logique de commande). Nous disons que ces éléments sont « inférer » (i.e. vous devez coder en utilisant le bon modèle pour obtenir ce que vous vouliez au départ. Vous devez imaginer comment ces éléments sont connectés, avant le codage).
  2. La deuxième étape est réelle synthèse logique , qui prend un paramètre de technologie cible particulière en compte (types de portes disponibles, le calendrier, zone, puissance).

Ces deux étapes se sépare clairement les besoins fonctionnels RTL (logique de direction, calculs) de risques technologiques (synchronisation, etc.).

Revenons à la première étape (RTL):

En ce qui concerne Multiplexeurs, plusieurs styles de codage sont possibles:

  • en utilisant assignement simultané:

    y <= a1 a2 lorsque COND1 autre lorsque cond2 autre cond3;

  • en utilisant l'instruction if dans un processus:

    Procédé

    (a1, a2, a3, cond1, cond2) commencer     si (cond1) puis       y <= a1;     elsif (cond2), puis       y <= a2;     autre       y <= a3;     fin si; fin;

  • en utilisant une autre affectation concurrente forme, propice générique si les descriptions: sel est un nombre entier et muxin un ensemble de signaux, alors:

    muxout <= muxin (sel); --will déduire un MUX

Notez que les 3 styles de codage fonctionnent toujours. Notez également qu'ils sont « un peu plus » que multiplexeur simple que la force de style de codage de la présence d'un codage prioritaire (si ELSIF, quand d'autre), ce qui est le cas d'un multiplexeur à base d'équation simple, vraiment symétrique.

  • en utilisant une instruction case

    Procédé

    (a1, a2, a3, cond1, cond2)     la variable cond: std_logic (1 downto 0);     commencer       cond: = cond2 & cond1;       cas est cond            lorsque "01" => y <= a1;            lorsque "10" => y <= a2;            lorsque les autres => y <= a3;       Fin de cas;     fin;

  • en utilisant une instruction select (dans notre par exemple, deux assignements simultanées nécessaire):

    sel <= cond2 & cond1; AVEC SELECT sel     y <= a1 QUAND "01",          a2 QUAND "10",          a3 QUAND LES AUTRES;

Une dernière remarque est sur la montée de l'abstraction, même pour la conception RTL: les synthétiseurs sont vraiment mature. Jetez un oeil à des styles de codage Jiri Gaisler pour LEON2 processeur open source par exemple, ainsi que ses styles de codage ( voir ici ). Il prones une approche très différente, mais tout à fait valable, des livres classiques.

Vous devriez toujours comprendre ce que le synthétiseur RTL inférera.

Dans le cas contraire, la synthèse du comportement permet d'oublier (en partie) ce que le synthétiseur inférera. Mais c'est une autre histoire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top