Les contraintes pour les tableaux dans system verilog
Est-il valide pour utiliser initialement générés de manière aléatoire des éléments de contrainte consécutives éléments d'une étude randomisée de tableau.
Par exemple: je veux générer un ensemble de 10 addr, paires de taille pour imiter typique de l'allocation de la mémoire de routine et avoir une classe comme suit:
class abc;
rand bit[5:0] size[8];
rand bit[5:0] addr[8];
constraint mem_unique{
foreach(size[i]) begin
solve size[i] before addr[i];
size[i] inside {[6'h2:6'h10]};
if(i>0)
addr[i] > addr[i-1]+size[i-1];
end
}
endclass:abc
OriginalL'auteur venkstart | 2014-02-24
Vous devez vous connecter pour publier un commentaire.
Quelques lignes de code supplémentaires dans votre exemple, serait montré si cela a fonctionné ou pas. Voici ce que j'ai eu à travailler:
Le foreach contrainte obtient déroulé, comme il l'aurait fait par un outil de synthèse. Donc, vous êtes de gauche avec quelque chose qui ressemble à:
OriginalL'auteur dave_59
Je ne suis pas sûr si ce que vous voulez faire, c'est légal, donc j'espère que quelqu'un va venir avec une réponse directe à votre question. Cependant, je peux vous proposer une solution qui génère ce que vous voulez d'une manière légèrement différente. Vous pouvez utiliser le
post_randomize
fonction:Vous remarquerez que cette contrainte va échouer puisque vous avez dit que la valeur minimale de la taille est de 6'h10 ('d16) et que vous souhaitez 10 adresses. Donc, même si les décalages sont 0, le maximum de l'adresse 'd160 ('hA0). Vous n'avez pas assez de bits dans
addr
de tenir la valeur.OriginalL'auteur nguthrie