VHDL: Trouver/reporting bits largeur/longueur de integer (vs std_logic_vector)?

Dire que j'ai besoin d'un signal pour représenter les nombres de 0 à 5; évidemment, cela a besoin de 3 bits de std_logic d'être représenté (je.e si MAXVAL=5, alors bitwidth= {wcalc "floor(logtwo($MAXVAL))+1"}).

Je suis conscient que je pourrais faire:

SIGNAL myLogicVector : STD_LOGIC_VECTOR(2 downto 0) := 5; 

avec laquelle j'avais spécifier explicitement un tableau de trois std_logic bits, et de définir la valeur initiale; ensuite, j'ai pu utiliser le RAPPORT pour imprimer la longueur (dans ce cas, 3):

report("Bit width of myLogicVector is "& integer'image(myLogicVector'length));

Donc bon. Mais, disons que j'utilise un entier (nombre) type de lieu:

SIGNAL myInteger : NATURAL range 0 to 5 := 5;

Je suppose qu'ici le "compilateur" (l' "synthétiseur"), automatiquement en déduire qu'il a besoin de 3 bits de longueur de stockage, que cet entier est varié avec des valeurs entre 0 et 5. Si c'est le cas, mon question est: est-il possible de faire en quelque sorte imprimer cette bits largeur/longueur/taille dans un RAPPORT?

Le truc, c'est, bien sûr, que quelque chose comme cela:

report("Bit width of myInteger is "& integer'image(myInteger'length));

... échoue (par exemple, avec "HDLParsers:3389 - Préfixe de l'attribut 'la longueur doit être un objet de tableau"), depuis aussi loin que je me recueillir, tous ces attributs comme 'length et 'range ne sont applicables qu'à tableaux (Comprendre VHDL Attributs), tandis qu'un entier (naturel) n'est pas un tableau, c'est d'un nombre 🙂 (VHDL vecteur de conversion d'entier question)

Encore une fois, je suis conscient que je pourrais peut-être utiliser un log2 (Le calcul de la largeur d'un entier non signé de la variable valeur maximale?) - mais ce que j'aimerais c'est juste pour voir rapidement (lors de la synthèse) nombre de "bits", le "synthétiseur' alloué pour une éventuelle synthétisés de la conception, et donc environ combien serait être utilisé dans des conditions de finale de ressources FPGA (surtout si je ne l'utiliserais 'génériques' en quelque sorte à calculer une valeur maximale pour un entier).

Bien, merci d'avance pour toutes les réponses,
Cheers!

EDIT: un peu de contexte: je suis en utilisant ISE Webpack 9.2; je suis en train d'utiliser "générique" des variables/constantes en tant que paramètres, puis utiliser des équations pour calculer les valeurs maximales pour les compteurs. Ce calcul, je suppose que se produit a 'compiler' temps (et qui serait "Synthétiser" dans ISE - ne pas mettre en Œuvre la Conception"), et c'est là où je veux les messages de rapport (et en fait, j'ai les ai donc, pour std_logic_vector bon, dans la synthèse du journal - toutefois, le même rapport des messages pour moi se produire au début de la simulation comportementale de trop, ce qui est bien).

Et le but de ces messages est de s'assurer à la fois que mes équations sont OK, et que le synthétiseur de ne pas essayer d'en déduire un 32 bits compteur - même si je veux compter juste de 0 à 5 🙂

Salut Sdaau. Juste pour clarifier, voulez-vous cette information au moment de la compilation, ou post-synthèse? Si le post de synthèse, la synthèse de l'outil utilisez-vous?
Salut @George, merci pour votre commentaire! J'ai ajouté un peu de précisions pour l'OP; je suppose que ce que je veux, c'est des messages à "compiler" le temps (à l'exception, de la façon dont je le vois, pour ISE au moins: le temps de compilation = synthèse?!)
Non, vous ne pouvez pas attribuer de la valeur de nombre entier de 5 à un vecteur. Vous pouvez essayez d'attribuer les bits de la chaîne littérale "101".
Salut @Philippe, merci pour le commentaire! Je pense qu'on peut toujours utiliser une conversion comme " std_logic_vector(to_unsigned(5, x'length) " - mais alors, vous devez spécifier le nombre de bits de largeur à la main; j'ai été autrement la recherche d'un moyen pour le synthétiseur de me dire automatiquement la nécessaire bits largeur 🙂 Cheers!

OriginalL'auteur sdaau | 2011-03-04