Considérez une expression comme:
assign x = func(A) ^ func(B);
où la sortie de la fonction a une largeur de 32 bits et x est un fil de 16 bits. Je veux affecter uniquement les 16 bits les plus bas du xor résultant.
Je sais que le code ci-dessus le fait déjà, mais il génère également un avertissement. L'approche "évidente" ne fonctionne pas:
assign x = (func(A) ^ func(B))[15:0]; // error: '[' is unexpected
Dans votre exemple, vous tronquez implicitement des bits.
Rendre la troncature explicite peut souvent supprimer les avertissements de simulation / peluches / synthèse.
Une façon de le faire en ligne consiste à utiliser un opérateur de transtypage, par exemple:
Cette approche peut avoir du sens s'il est évident d'après le contexte que tous les bits supprimés sont des 0.
Si certains bits peuvent être différents de zéro, je suggérerais toujours d'utiliser un réseau intermédiaire comme @dwikle suggéré dans une réponse précédente , car il est plus clair que vous jetez des bits. Le voici à nouveau pour référence.
la source
Je pense que cela pourrait aider à réduire le nombre de lignes.
Je ne sais pas si cela est valable avec les assignés.
la source