std_logic ou std_ulogic?

24

Il semble que le monde ait décidé que std_logic(et std_logic_vector) sont la façon par défaut de représenter les bits en VHDL. L'alternative serait std_ulogic, qui n'est pas résolue.

Cela me surprend car généralement, vous ne décrivez pas un bus , vous ne voulez donc pas plusieurs pilotes et vous n'avez pas besoin de résoudre un signal. L'avantage std_ulogicserait que le compilateur vous avertit très tôt si vous avez plusieurs pilotes.

Question: est-ce juste une chose culturelle / historique, ou y a-t-il encore des raisons techniques d'utiliser std_logic?

Philippe
la source
3
Le monde a tort. Les ingénieurs intelligents utilisent std_ulogic as car il a la sémantique correcte.
wjl
@wjl Je vais interpréter cela comme "c'est une chose culturelle / historique". Votre réponse ci-dessous est beaucoup plus utile que le commentaire ici.
Philippe
J'ai écrit le commentaire d'abord, puis j'ai pensé qu'il serait plus approprié de laisser une réponse avec plus de détails. Désolé, je suppose que cela semble un peu désinvolte. Mais mon commentaire est littéral dans la mesure où la plupart des gens commencent à utiliser std_logic parce qu'ils l'ont appris de cette façon, puis après un certain temps, ils commencent à se poser des questions sur std_ulogic, ils le recherchent, réalisent que c'est de la sémantique, puis se convertissent à cela. =)
wjl

Réponses:

16

Std_logic est un sous-type de std_ulogic et possède exactement une propriété supplémentaire: il est résolu s'il existe plusieurs pilotes.

Quelle que soit la pratique courante, std_ulogic est le type correct à utiliser pour les signaux non résolus qui nécessitent une logique à 9 valeurs. (Souvent, l'utilisation de "bit" est encore plus correcte - par exemple, sur certaines architectures FPGA qui n'ont pas de "X" ou de "U").

Fondamentalement, la meilleure chose à faire est d'utiliser le type correct pour le travail. Souvent, les mauvaises pratiques se propagent par des gens qui se contentent de perroqueter le style qu'ils voient que les autres utilisent, sans comprendre pourquoi.

wjl
la source
8
L'architecture peut ne pas avoir de «U», mais il est souvent utile de simuler comme si c'était le cas, car vous pouvez trouver des initialisations incorrectes. +1 pour "la meilleure chose à faire est d'utiliser le type correct pour le travail", mais nous avons tendance à apprendre au fur et à mesure ce qui est "meilleur" :)
Martin Thompson
8

Mon histoire est la suivante:

J'ai commencé (vers 1999 IIRC) à utiliser std_ulogic*tout le temps - comme c'est la bonne chose à faire, pour les raisons que vous décrivez.

Ensuite, j'ai dû m'interfacer avec un tas d'IP de fournisseurs générés par un assistant qui avaient std_logictous s sur toute l'interface. Ce qui signifiait des conversions sur les mappages de ports (pour les _vectoréléments), et je suis devenu paresseux et je suis passé à l'utilisation std_logic*.

Cependant, il semble que je fasse très peu d'erreurs de "double pilote", donc je n'ai pas raté std_ulogicautant que je l'aurais pensé. Et la driverscommande de Modelsim, il est très facile de trouver "qui conduit quoi" quand j'ai parfois besoin de ...

Martin Thompson
la source
Oui, les cœurs IP (et en particulier les trucs qui sont automatiquement traduits de Verilog) ont tendance à utiliser std_logic. Votre réponse semble suggérer que la raison est principalement «culturelle / historique».
Philippe
Vous n'avez jamais besoin de convertir entre std_logic et std_ulogic sur les ports. Voulez-vous dire que vous avez dû convertir entre std_logic_vector et std_ulogic_vector?
wjl
@wjl: désolé, oui, c'est ce que je voulais dire. Je mettrai à jour le message.
Martin Thompson
AFAIK, std_logic et std_ulogic sont compatibles avec les affectations car ils ont le même type de base. Il ne devrait donc pas être nécessaire de procéder à une conversion manuelle.
Val
@Val: c'est ce que wjl a dit (et je suis d'accord) - mais les *vectorparties du port ont encore besoin de conversions
Martin Thompson
4

L'IIRC a recommandé le célèbre manuel de méthodologie de réutilisation std_logic(_vector), alors peut-être que les groupes de méthodologie dans les entreprises, etc. Personnellement, +1 pour utilisation std_ulogiclorsque cela est possible.

cmarqu
la source