Est il possible de le faire imbriquée générer des états en Verilog?
Je suis en train d'essayer de réduire le code à l'aide de générer des états, mais je ne peux comprendre comment le faire via la nidification, mais je ne crois pas que ce qui est autorisé.
Ce que j'ai est essentiellement une pour-boucles d'exécution (qui nécessitent un générer), et à l'intérieur je veux exécuter l'une des trois sections de code en fonction d'une valeur qui est définie lorsque le code est construit (ce qui nécessite alors une seconde à l'origine). Est-il un moyen de le faire et de rendre les outils heureux?
Ici est rapide et la saleté image de ce que je suis en train d'essayer:
//TAPS_PER_CHAN is a value defined when the code is built
genvar srcNode, dstNode, tapIdx;
generate
for (dstNode=0; dstNode<NODES; dstNode=dstNode+1)
begin: dstForLoop
generate
if(TAPS_PER_CHAN <= 4)
begin
call module one
end
else if (TAPS_PER_CHAN <= 8)
begin
call module two
end
else if (TAPS_PER_CHAN <= 16)
begin
call module three
end
endgenerate
end
endgenerate
que signifie "valeur définie lorsque le code est construit"? est-ce un paramètre? un localparam? une définition?
C'est un paramètre passé dans le module
C'est un paramètre passé dans le module
OriginalL'auteur toozie21 | 2014-03-25
Vous devez vous connecter pour publier un commentaire.
Oui, il suffit de retirer puis imbriquée
generate
/endgenerate
mots-clés.Voir La norme IEEE Std 1800-2012 § 27 Générer des constructions.
exemple ici
Nope, le module est contrôlé par
TAPS_PER_CHAN
tandis que le nombre de cas est contrôlée parNODES
. Voir l'exemple: edaplayground.com/x/2qyMerci pour l'exemple de code, c'est génial!
OriginalL'auteur Greg
Une fois est de Générer bloc, Verilog compilateur/simulateur automatique identifier variable (si-sinon, pour la boucle) Paramètre vs+gen_var(si-sinon, pour la boucle)
Donc, si vous définissez TAP_PER_CHAN comme paramètre, vous n'avez pas besoin de deuxième générer, et verilog/simulateur va générer un seul des trois modules:
Il fonctionne et d'identifier les corriger construire dans ma NC-Verilog, l'Ascension-de la Charpie, et Novas-nTrace.
paramètre TAP_PER_CHAN;
genvar srcNode, dstNode, tapIdx;
générer
pour (dstNode=0; dstNode
else if (TAPS_PER_CHAN <= 8)
commencer
appel du module de deux
fin
else if (TAPS_PER_CHAN <= 16)
commencer
appel du module de trois
fin
//endgenerate <-- supprimer cette
fin
endgenerate
OriginalL'auteur archiewu