Apprendre Verilog : Une brève série de didacticiels sur la conception électronique numérique FPGA et Verilog HDL (16 / 21 étapes)

Étape 16 : VM 3.3 : instanciation questions avancées

(Image initialement créé par Digilent Inc., modifié par moi, pour cela, ce tutoriel)

Le module précédent introduit et j’espère que conduit la maison, le concept de l’instanciation en Verilog. Maintenant, nous prendrons un regard sur quelques sujets avancés (second thème seront ajoutées prochainement) en ce qui concerne l’instanciation de module.

Contrer l’instanciation contrôlée :

Que se passe-t-il si nous avions besoin générer un tas (prendre 50 à titre d’exemple) de DFFs qui étaient tous reliés entre eux dans un circuit diviseur d’horloge... Nous savons déjà comment faire un module général de DFF, alors maintenant que nous devons instancier 50 fois et la broche horloge de chacun d’eux à la sortie de facto qui précède dans l’ordre, connecter remis à un reset global et le D en pin à l’inverse de la sortie du DFF (Q). Utilisez le diagramme ci-joint pour référence.

Ce serait beaucoup d’instanciations pour vous écrire (50 instanciations fois 6 lignes par instanciation est 300 lignes!) à la main. Mais en Verilog, nous pouvons utiliser un contrôleur de compteur de boucle, plus précisément, une boucle « for », pour instancier (générer) tous ces modules (à l’exception de la première) pour nous en très peu de lignes de code. Mais il y a une mise en garde ; Nous devons planifier soigneusement notre conception afin que nous puissions utiliser un « générer une boucle » correctement.

Notez que la façon dont nous connectons chaque forces de facto à l’autre est uniforme et prévisible. Bien sûr, horloge la première DFF sera l’horloge d’entrée de notre module de haut niveau et la sortie de facto dernier ira quelque part dans le module de haut niveau, mais nous pouvons traiter ceux individuellement ; au cours de la génération, chaque fil interne dans la conception, à l’exception de la première horloge qui nous désignera manuellement et le dernier fil de sortie explicitement donnera une source et un drain. Le logiciel sait que les deux fils restants ont besoin d’une source (première horloge) ou drain (dernières données) et c’est la responsabilité de l’ingénieur d’en fournir une.

Comme mentionné précédemment, vous devez configurer la conception adéquatement afin d’utiliser une boucle de générer. En quoi cela consiste ? Eh bien, il est logique que puisque chaque DFF va avoir une horloge en dépendant sur le précédent (non compris le premierà!) que nous pouvons regrouper ces signaux semblables dans un bus ! Cela nous permet de faire référence à des groupes de signal comme un tableau en C/C++ et appel des fils individuels par index à l’aide de l’opérateur [].

La broche de remise à zéro pour chaque DFF viendra une réinitialisation commune, puisque chaque DFF doit être en mesure de réinitialiser en même temps.

Sans connaître les spécificités d’une boucle de générer encore, nous pouvons toujours faire notre bus qui seront utilisés lors de la conception. Quel type de bus va nous faire ? Puisque ceux-ci transportent uniquement un signal provenant d’une source à une vidange, nous allons faire des fils.

fil des bus large [49:0] //50 bit pour DFF d’entrée/sortie

Nous pouvons également instancier notre premier DFF. En utilisant le module de facto de tutoriel Module 3.2, en supposant que notre diviseur d’horloge possède une entrée clk (un NIP de l’horloge), une entrée rst (une broche de remise à zéro) et une sortie out (disons il conduira une diode, créant un effet de clignotement).

(DFF) dff0
.CLK(CLK),
.RST(RST),
. D(~out[0]),
. Q(out[0])
);

Maintenant, la boucle de générer. Il est semblable à une boucle en C/C++, mais a ses propres nuances. Tout d’abord nous devons créer une variable de compteur. En Verilog, le type de variable est appelé « genvar » et il est utilisé pour déclarer une variable, appelez-le « y », comme suit :

genvar y ;

La boucle de générer commence avec le mot clé « générer » et se termine par « endgenerate ».
Remarque : Vous devez déclarer toutes les variables genvar hors de la portée de la boucle de générer.

Nous avons maintenant :

genvar y ;
générer des

endgenerate

Immédiatement après le mot-clé « générer » est la véritable boucle. Sa déclaration ressemble à une boucle en C/C++, mais en Verilog, nous n’avons pas le luxe de gauche et droite bouclés entre accolades ({et}) mais nous n’avons pas l’équivalent de Verilog : commencent et se terminent. En outre, Verilog ne supporte pas des opérations de postfix, donc on ne peut pas déclarer « y ++ » et doit indiquer à la place "y = y + 1". Lors de la construction la boucle for, gardez à l’esprit que nous avons déjà créé le DFF première (DFF0) donc on va générer de 1 à 49 (inférieur à 50).

genvar y ;
générer des
pour (y = 1; y < 50; y = y + 1) //spaces peut être omise
commencer

fin
endgenerate

Avec une boucle de générer, nous allons à « commencer » une boucle de l’instanciation et doit donner à ce processus un nom. On n’utilisera pas ce nom à d’autres fins et ne fera pas référence à elle plus tard dans notre conception (il est utilisé en interne dans le synthétiseur). Nous faisons cela en ajoutant une instruction qui suit le format ":" et le placer sur la même ligne que le « début » pour le bon style. Appelons cette « dff_generation » :

genvar y ;
générer des
pour (y = 1; y < 50; y = y + 1) //spaces peut être omise
commencer : dff_generation

fin
endgenerate

Voici la partie cruciale et la plus difficile : création du modèle d’instanciation. Cela ressemblera à l’instar de n’importe quel autre instanciation sauf que les fils que vous passez le module sont autorisés à utiliser le genvar comme une valeur ou une modification de la valeur. Rappelons que la valeur de la genvar changera en un dans ce cas après chaque instanciation.

Plutôt que de parcourir chaque ligne de l’instanciation, je vais vous donner l’ensemble du bloc de code et souligner les choses que vous ne pouvez pas reconnaître. N’oubliez pas de se référer à l’image fournie pour voir comment ce circuit est mis en œuvre.

genvar y ;
générer des
pour (y = 1; y < 50; y = y + 1) //spaces peut être omise
commencer : dff_generation
les dessous d’instance nom n’est pas grave
(DFF) dff_insts
.CLK(out[y-1]), //clk dans des forces de facto « y » est de "y-1"
.RST(RST), //each DFF obtient la même remise à zéro
. D(~out[y]), le //input est alimenté la sortie inversée
. Q(out[y]) //output
);
fin
endgenerate

Je vous encourage à main trace quelques itérations de la boucle pour voir comment la génération processus fonctionne. Le synthétiseur donnera chaque instance il crée un nom unique indexé comme "dff_insts1" et "dff_insts2".

Articles Liés

Une astuce simple pour ajouter un thermomètre à votre multimètre numérique

Une astuce simple pour ajouter un thermomètre à votre multimètre numérique

vous pouvez obtenir un multimètre numérique pour enlever la saleté bon marché ces jours-ci. Aujourd'hui, je vais parler de l'ajout d'une fonction de thermomètre à ces multimètres peu coûteuses en utilisant le minimum de composants externes et sans af
Conception de la logique séquentielle pour une horloge numérique d’apprentissage

Conception de la logique séquentielle pour une horloge numérique d’apprentissage

Cette instructable est pour deux raisons 1) à comprendre et apprendre que les fondements de la logique séquentielle 2) utilisent ces connaissances pour créer une horloge numérique.Pendules à lecture digitale ont été construits par des amateurs d'élec
8 bits série numérique-convertisseur analogique (gamme 5v) pour les microcontrôleurs (quand TTL et des résistances est tout vous avez)

8 bits série numérique-convertisseur analogique (gamme 5v) pour les microcontrôleurs (quand TTL et des résistances est tout vous avez)

donc j'avais besoin d'un DAC (convertisseur numérique-analogique) à utiliser avec mon pic12F675, et pour ceux d'entre vous qui n'avez jamais entendu parler de ce petit copain, c'est un microcontrôleur 8 broches de Microchip qui a seulement 6 broches
Comment faire pour prendre des clichés numériques limpides à travers une lentille microscope...

Comment faire pour prendre des clichés numériques limpides à travers une lentille microscope...

Mal à avoir trouver une façon de partager vos trouvailles incroyables à travers un microscope ? Tout le monde a vue différente, donc ce que vous voyez peut être totalement différent de ce que l'ami à côté de vous verriez. Pourquoi ne pas prendre une
Une tourelle de changement rapide de AXA taille de montage sur le tour de commande numérique par ordinateur de C6 Syil

Une tourelle de changement rapide de AXA taille de montage sur le tour de commande numérique par ordinateur de C6 Syil

il y a environ 1 an, j'ai acheté un tour CNC C6 Syil utilisé. Après la construction un banc en acier robuste sur lequel monter le tour, j'ai mis sur la configuration d'elle et de se familiariser avec elle.La C6 vient des actions avec un poste d'outil
Comment adapter une visionneuse de porte « objectif Fish-Eye » sur un appareil photo de grande taille

Comment adapter une visionneuse de porte « objectif Fish-Eye » sur un appareil photo de grande taille

nous avons vu des tutoriels sur ce site qui vous montrent comment une visionneuse de porte peu coûteux peut être utilisée comme un objectif Fish-Eye sur un point simple et shoot appareil photo numérique, mais que se passe-t-il si vous voulez essayer
Impressionnez vos amis, apprendre à conduire à une transmission manuelle

Impressionnez vos amis, apprendre à conduire à une transmission manuelle

tout d'abord quand j'apprenais à conduire mes parents ne me laisserait pas faire à moins que je conduisais une transmission manuelle, ou un levier de vitesse véhicule. Bien qu'il peut être frustrant à tout d'abord il peut très facilement devenir une
Projets d’Arduino sur une maquette (aucune série com)

Projets d’Arduino sur une maquette (aucune série com)

Intro :Si vous avez un Arduino Uno et que vous souhaitez démarrer la duplication des projets sans avoir à acheter un Uno chaque fois... Préparez-vous à vivre !  Cette instructable vous montrera comment déplacer vos projets (qui ne nécessitent pas de
Cours de peinture numérique 2: Une plume

Cours de peinture numérique 2: Une plume

ordinateurs ont apporté des changements aux quatre coins de la société moderne. Un de ces angles est art. L'internet regorge de concept art, fonds d'écran et beaucoup d'autres types d'image qui ont été dessinées par certains utilisateurs à un ordinat
Série de Mechanica céleste : conception de boîte de vitesses et de la construction

Série de Mechanica céleste : conception de boîte de vitesses et de la construction

Mechanica céleste est une sculpture en acier cinétique haute 16 pieds de notre système solaire qui représente la danse majestueuse des corps célestes. Il a été créé par une équipe dirigée par Jessika Welz pour Burning Man 2014.(Page facebook du proje
Cours de peinture numérique 1: Les bases d’utiliser une tablette graphique

Cours de peinture numérique 1: Les bases d’utiliser une tablette graphique

ordinateurs ont apporté des changements aux quatre coins de la société moderne. Un de ces angles est art. L'internet regorge de concept art, fonds d'écran et beaucoup d'autres types d'image qui ont été dessinées par certains utilisateurs à un ordinat
Numérisation 3D, rendu 3D des sculptures d’argile en inox par l’intermédiaire de rendus numériques pour une proposition d’art

Numérisation 3D, rendu 3D des sculptures d’argile en inox par l’intermédiaire de rendus numériques pour une proposition d’art

Je suis un artiste possédant une formation en peinture traditionnelle et de la sculpture, après avoir terminé l'école des Arts visuels avec un BFA en peinture.Après avoir travaillé dans un studio de Jeff Koons pour plus de deux ans, je me suis intére
Linkit une utilisation Mobile WIFI hotspot contrôler toutes les broches numériques

Linkit une utilisation Mobile WIFI hotspot contrôler toutes les broches numériques

Son très amusant à contrôler quoi que ce soit avec la radio. Avec linkit Mediatek un son font très facile de contrôler tous les accessoires électriques et électroniques à l'aide de WIFI. Avec le WIFI seul point chaud dans votre téléphone portable en
Testeur de logique numérique de la série 74LS

Testeur de logique numérique de la série 74LS

* Update * présenté sur www.freetronics.com (http://www.freetronics.com/blogs/news/11619617-build-a-74ls-series-digital-logic-tester-with-arduino#.UtgAf9JDumE)!Par la suite instructable, je démontrerai comment concevoir un circuit et écrire un progra