Dans quels cas dois-je utiliser Z comme sortie en HDL?

SharkyLV

Dans quels cas dois-je utiliser Z comme sortie en HDL?


J’ai créé un multiplexeur simple qui alimente différentes entrées en sorties en fonction de la statemachine. Maintenant, il y a des états où je n’ai pas besoin de la sortie, donc je la mets généralement à 0.

 INST <=   "01"   WHEN  fsm_state =  read_first_half OR  fsm_state =  read_second_half OR  fsm_state =  next_r ELSE 
       "10"   WHEN  fsm_state =  write_first_half OR  fsm_state =  write_second_half OR  fsm_state =  next_w ELSE    "00" ; 

Autant que je me souvienne, il y avait une troisième valeur syntaxisable «Z». Pour autant que je m’en souvienne, c’est une valeur flottante à haute impédance. Quand dois-je l’utiliser et est-il sûr à utiliser? Sera-t-il syntétisable sur tous les FPGA?

Réponses


 apalopohapa

Lorsque vous ne vous souciez pas d’une valeur de sortie étant donné un ensemble d’entrées, utilisez ‘-‘ qui signifie « ne se soucie pas ». Le synthétiseur attribuera simplement des valeurs qui optimisent les ressources / performances. Notez qu’un simulateur a cependant la possibilité de conserver «-» comme valeur réelle, et cela vous aidera en fait à vous assurer que le fait de ne pas s’en soucier n’aura pas d’impact sur les parties pertinentes de votre conception.

«Z» ou «haute impédance» dans les FPGA n’est utilisé que pour les sorties à trois états, qui de nos jours ne sont disponibles que sur les broches réelles de la puce, pas pour la logique interne. Les fabricants de FPGA modernes ne leur allouent tout simplement pas de ressources de routage interne et sont uniquement destinés à l’interfaçage avec des puces / composants externes. Pour la logique interne, la même fonctionnalité (telle que l’arbitrage de bus) peut être obtenue avec des portes logiques régulières à la place.

Ces définitions peuvent être trouvées dans la bibliothèque IEEE std_logic_1164.vhdl: http://standards.ieee.org/downloads/1076/1076.2-1996/std_logic_1164.vhdl

Matt Young

I2C est un bon exemple. Le bit ACK nécessite un état de sortie Z élevé car l’esclave enverra un retour logique haut. Voir prodigytechno.com/blog/wp-content/uploads/2011/12/… pour référence.

apalopohapa

@Martin Thompson Fixed. Merci pour le commentaire. J’ai également modifié la réponse pour inclure un lien vers la bibliothèque ieee qui définit std_logic.

Martin Thompson

@apalopohapa: Merci – il vaut également la peine de le mentionner - est une valeur à part entière, donc pour qu’il se comporte réellement comme un peu std_match() dans une comparaison, vous devez utiliser la fonction std_match()


 vermaete

Il n’y a pas vraiment de raison de mettre une sortie dans trois états (‘Z’) si l’IO n’est qu’une sortie et non une ‘inout’. De plus, avoir un «1» ou un «0» à la sortie facilite le débogage (mesure).

FarhadA

VRAIMENT? Que feriez-vous lorsque vous vous connectez au bus I2C?

W5VO ♦

@FarhadA Ensuite, je pense que cela relèverait du cas «inout» mentionné par vermaete.

vermaete

Bien sûr, mon point n’est valable que s’il s’agit d’une sortie normale au FPGA connectée quelque part à une entrée normale.

vermaete

Même pour un tampon à trois états, je préférerais avoir un ensemble d’activation d’entrée, de sortie et de sortie au niveau de l’entité du composant et insérer le tampon bidirectionnel au niveau supérieur.

FarhadA

Donc, vous faites le signal ACK de l’I2C en entrée? Eh bien, je pense que vous aurez jusqu’à une grande surprise lors du débogage de votre conception.


 FarhadA

Je peux penser à de nombreux cas où vous utiliseriez le Z sur des signaux, à la fois internes et sur les broches. Par exemple, si vous avez un bus qui est piloté à partir de plusieurs sources, vous pouvez le contrôler en mettant tous les autres signaux de pilotage sur Z. Certains FPGA prennent en charge cela en interne, mais pas tous.

En ce qui concerne les signaux de sortie, plusieurs fois, vous ne voulez pas piloter de signaux, tels que des données hors de votre FPGA, car ces signaux peuvent être partagés entre plusieurs appareils. Certains choisissent de changer la direction des signaux au lieu de mettre la sortie à Z, ce qui facilite le débogage.


 Martin Thompson

 INST <=   "01"   WHEN  fsm_state =  read_first_half OR  fsm_state =  read_second_half OR  fsm_state =  next_r ELSE 
       "10"   WHEN  fsm_state =  write_first_half OR  fsm_state =  write_second_half OR  fsm_state =  next_w ELSE    "--" ;   -- don't cares 

Le synthétiseur devrait proposer quelque chose d’optimique (mais pas nécessairement prédictible)

 

#en, cas, comme, dans, Dois-je, HDL, quels, sortie, utiliser, z

 

google

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *