Sur la question précise de savoir si le '|' peut être omis dans ces cas:
Si |address[15:14]
et address[15:14]
sont identiques dépend du contexte (en général, ils ne le sont pas, car les inconnus sont gérés différemment). Votre premier exemple comparé à 0
, et il est vrai que le |
peut être abandonné dans ce cas particulier, mais ce ne serait pas vrai si vous comparez à autre chose que 0
.
Votre deuxième exemple est plus compliqué. Le LRM ne semble pas spécifier comment la première expression d'un ternaire est évaluée.Je connais 2 sims qui l'évaluent comme une réduction-OU, donc le |
peut être abandonné dans ces cas. Cependant, si un sim évalue à la place de la même manière qu'un if
(c'est-à-dire if(address[15:14])
), le |
est requis.
La synthèse est plus simple, bien sûr, puisque le synthétiseur n'a pas à s'inquiéter des inconnues.
Notez que 'test? if_true: if_false' est identique à '| test? if_true: if_false' - le '|' est redudant lorsqu'il est utilisé dans un contexte booléen – Eric